线性神经元权值学习
本节介绍线性神经元的学习算法,与感知器不同:
- 感知器学习是使权值更接近好的权值集;
- 线性神经元的学习是使输出更接近目标输出。
通过权值不断接近可行的权值集合,感知器算法收敛。该方法不能确保在更复杂的网络有效,两个好的解的均值可能是一个糟糕的解。因此,感知器学习算法不会用于多层神经网络的学习。多层网络的学习,通过实际输出逼近目标输出实现。即使对非凸函数,这也同样有效。非凸函数的两个好的解并不能确定另一个好的解。
线性神经元也称为线性滤波器,实际输出是输入的加权和。学习算法的目标是最小化所有训练数据的误差和。此处不采用解析方法求解的原因在于:
- 期望采用一种真实神经元使用的方法;
- 所用方法能推广到多层非线性神经元。
解析方法适用于线性形式,并且采用平方误差度量。迭代方法通常效率较低,但更易于推广。
定义训练集所有数据的残差平方和为
\[ E = {1\over 2}\sum_{n\in\text{training}}\left(t^n - y ^ n\right)^2 \]
其中$t$为真实值,$y$为神经元的输出。对误差求偏导
\[ {\partial E\over\partial w_i}={1\over 2}\sum_{n}{\partial y^n\over \partial w_i}{\partial E^n\over \partial y^n}=-\sum_n x_i^n\left(t^n - y ^ n\right)。 \]
权值的修正可用误差的偏导数确定
\[ \Delta w_i = -\varepsilon{\partial E\over\partial w_i}=\sum_n \varepsilon x_i^n\left(t^n - y ^ n\right), \]
其中$\varepsilon$称为学习率。可能不存在最佳解,但让学习率足够小可以非常接近最佳解。若两个输入维度高度相关,权值收敛非常缓慢。
在感知器学习算法中,通过输入向量修正权值;此处用经误差和学习率修正过的输入修正权值。
线性神经元的误差面
对于平方误差度量的线性神经元,误差面的垂直和水平剖面如上图所示。
在线学习每次用一个训练数据更新,批量学习每次用全部训练数据更新。批量学习是最速梯度下降法(下降方向垂直于等高线),如上图左所示;在线学习是围绕最速梯度方向的zig-zag梯度下降,如上图右所示。
当权值的剖面等高线椭圆非常细长时,若最速梯度下降的方向几乎正交于通向最小值的方向,学习算法就会很慢。
学习 logistic 输出神经元的权值
将学习算法拓展到非线性神经元的多层网络,对于 logistic 神经元
\[ y = {1\over 1 + e^{-z}}, \]
其中$z=b + \mathbf{w}^\mathsf{T}\mathbf{x}$,那么有
\[ {\mathrm{d}y\over\mathrm{d}z}=y(1-y),\;{\mathrm{d}z\over\mathrm{d}w_i}=x_i,\;{\mathrm{d}z\over\mathrm{d}x_i}=w_i。 \]
根据链式法则有
\[ {\partial E\over\partial w_i}={1\over 2}\sum_{n}{\partial y^n\over \partial w_i}{\partial E^n\over \partial y^n}={1\over 2}\sum_{n}{\partial z^n\over \partial w_i}{\partial y^n\over \partial z^n}{\partial E^n\over \partial y^n}=-\sum_nx_i^ny^n\left(1-y^n\right)\left(t^n-y^n\right)。 \]
BP 算法
没有隐层的神经网络建模能力受限。加入手工编码的特征让神经网络变得强大,但是难处在于设计好的特征。
直观的方法是先随机扰动权值,再验证性能是否提升,若性能提升,则保存这些改变。这是强化学习的一种形式,但是效率非常低。通常权值大的扰动会让结果变得更糟。可以通过并行扰动所有权值(加噪声),将性能提升和权值改变关联起来。这也不会更好,因为每个训练数据需要许多实验判断当一个权值改变而其它权值施加噪声时的性能。另一个好点的想法:随机扰动隐层单元的激活性。一旦知道如何控制激活性,就能计算如何改变权值。
我们不清楚隐层单元的行为,但是我们知道当但改变隐层单元的活性时,误差变换有多快。并非采用激活性训练隐层单元,而是采用误差关于应层的导数。我们能够同时高效的计算所有隐藏单元误差的导数。
BP(backpropagation)算法概述:
首先,将每个输出于目标值的差异转换成误差导数的形式
\[ {\partial E\over\partial y_j}=-\left(t_j-y_j\right) \]
其中$E={1\over 2}\sum_{j\in\text{output}}\left(t_j-y_j\right)^2$。
然后:
利用 BP 算法的导数
利用误差导数的价值在于:
- 从优化的角度:如何利用每个数据的误差的导数发现好的权值;
- 从泛化的角度:如果用训练好的权值在训练阶段为见过的数据上取得好的效果。
更新权值的频率:
- Online
- Full batch
- Mini-batch
更新权值的强度:
- 固定的学习率;
- 调整全局学习率;
- 根据每个连接调整学习率;
- 不使用最速下降;
- ……
过拟合——强大模型的负面效应。训练数据包含了从输入到出映射规则的信息,同时也包含了两类噪声:
- 目标输出值可能不可靠(通常可能性较小);
- 抽样误差:选取了特殊的不恰当样本。
在进行模型拟合时,若模型够强大,也能对噪声“建模”,这就是过拟合。消除过拟合的方法:
- Weight-decay:权值取值很小或为0,简化模型;
- Weight-sharing:许多权值取值相同,简化模型;
- Early stopping:构造一个假的测试集,一旦性能在假测试集上劣化时停止迭代;
- Model averaging:多个神经网络组合平均;
- Bayesian fitting of neural nets:model averaging 的 fancy form;
- Dropout:训练时随机丢弃隐层神经元;
- Generative pre-training:……