4.3.3 BP算法

4.3.3 BP算法

下面介绍最常用的反向传播算法。反向传播是一种基本但强大的神经网络训练方法。在一批训练数据上,随机初始化权重矩阵后,按以下步骤进行:

(1)使用前馈传播计算损耗;

(2)使用反向传播产生损失梯度;

(3)使用梯度下降更新神经网络权重。

BP(back propagation)神经网络,即误差反向传播算法的学习过程,由信息的正向传播和误差的反向传播两个过程组成。输入层各神经元负责接收来自外界的输入信息,并传递给中间层各神经元;中间层是内部信息处理层,负责信息变换,根据信息变化的需求,中间层可以设计为单隐藏层或者多隐藏层结构;最后一个隐藏层传递到输出层各神经元的信息,经进一步处理后,完成一次学习的正向传播处理过程,由输出层向外界输出信息处理结果。当实际输出与期望输出不符时,进入误差的反向传播阶段。误差通过输出层,按误差梯度下降(求取偏导数)的方式修正各层权值,向隐藏层、输入层逐层反传。周而复始的信息正向传播和误差反向传播过程,是各层权值不断调整的过程,也是神经网络学习训练的过程,此过程一直进行到网络输出的误差减少到可以接受的程度,或者预先设定的学习次数为止。

误差可以由损失函数来表达,损失函数被表示为一个模型的预测有多不正确,一个完美的模型损失为零,更多的预测误差意味着更大的损失。机器学习方法通常以最小化损失函数为目标。

对于层数I和单元j(在每一层内),神经网络中用于生成权重的标准符号如下。设z为输出,w为权重,b为偏差。这里,我们定义每个单元的原始输出函数:

图示

正向传播过程从神经网络的左边到右边,如图4-3所示。根据上述等式计算每个单元的原始输出值,解释为输入单元的值的加权和。然后,通常应用激活函数来非线性变换原始输出值(在除输入层之外的所有层中),这可以被认为是单元的阈值化,使得图示的变换在某个级别被“激活”。常见的激活函数包括sigmoid图示、tanh()和ReLU(g(z)=max(0,z))。我们定义激活单元的最后输出图示

在每层经过前向传播之后,我们有了激活a,它作为我们的预测输出图示,在时间迭代t的最终输出ht(x)作为神经网络的一般输出y。有许多不同的损失函数可供选择,比如对于回归问题,通常使用均方损失,均方误差损失函数(MSE)在N个样本上定义为图示我们的目标是使用梯度下降来最小化这种损失。

图示(https://www.daowen.com)

图4-3 多层神经网络示意图

在接下来的反向传播中,按照图4-3从右到左向后计算图层上的梯度,进行以前的损失计算。使用如下链式法则计算权重w的各导数:

图示

最后,使用学习速率α的梯度下降来更新神经网络权重w,其定义如下:

图示

我们重复并更新权重,直到收敛。现在有许多研究对反向传播进行改进,例如,可以使用丢弃技术(dropout),通过预定义的概率丢弃单元来改善过拟合数据。学习速率α可以通过Adam、Adagrad等方法固定或迭代改变。可以使用Xavier或He初始化来代替权重的随机初始化。此外,L2正则化可用于梯度下降的更新步骤。

BP算法存在以下问题:

(1)收敛速度慢,梯度越来越稀疏,从顶层越往下,误差校正信号越来越小。

(2)收敛到局部最小值,可能导致训练失败,尤其是从远离最优区域开始的时候(随机值初始化会导致这种情况的发生)。

(3)一般只能用有标签的数据来训练,但大部分的数据是没标签的,而大脑可以从没有标签的数据中学习。

在实际应用中,BP神经网络通常是只含有一个隐藏层的浅层模型。浅层学习是机器学习的第一次浪潮。