1、背景
由于多层网络的学习能力比单层感知机要强很多,想要训练多层网络的话,感知机的学习规则显然不使用,需要更强大的学习算法来进行训练。「误差逆传播」算法就是最杰出、最成功的神经网络学习算法之一。
现实世界的业务大多数以来使用该算法进行训练。
2、作用
不仅可以用于「多层前馈神经网络」,还适用于其它类型的神经网络,例如「训练递归神经网络」。
3、概念
误差逆传播(error BackPropagation,简称BP)算法,通常说的「BP网络」,一般是指用BP算法训练的「多层前馈神经网络」
4、推理
对于前文所述的西瓜案例来说,首先需要将离散属性处理,如果属性值之间存在序列关系,则可进行连续化,例如高、矮。否则通常转化为k维向量,k为属性值数。
给定训练集
其中输入示例x拥有d个属性描述(d个输入神经元)。输入层神经元的集合表示为:
输出维向量(个输出神经元)。输出层神经元的集合表示为:
假设该算法为「单隐层前馈神经网络」,其隐层的神经元为个。隐含层神经元集合表示为:
设「输入层>>隐含层」的权重用表示,「隐含层>>输出层」的权重用表示。其网络图表示如下:
根据上图我们可以求出「隐含层」中第h个神经元的输入为:
还可以求出「输出层」中第j个神经元的输入为:
假设「隐含层」和「输出层」神经元都使用Sigmoid激活函数:
也就是「对率函数」
对于训练样例,假定神经网络模型的输出集合为:
,则:
则该神经网络在上的均方误差为:
(这里的是为了后续求导的便利)
上面的神经网络图中,有以下权重和阈值需要确定:
①输入层>>>隐层
权重个数=,用「」表示
阈值个数=,用「」表示
②隐层>>>输出层
权重个数=,用「」表示
阈值个数=,用「」表示
综合①②,上述神经网络中,需要确定的参数个数有:
BP是一个迭代学习算法,在迭代的每一轮中,采用光仪的感知机学习规则对参数进行更新估计。
任意参数(、、、的集合)的更新估计为:
所以我们需要求出更新梯度:、、、,才可以估计以下参数:
输出层-权重:
输出层-阈值:
隐藏层-权重:
隐藏层-阈值:
4.1.求解「输出层-权重」更新公式 |
下面我们以上图神经网络中「隐含层>>输出层」的连接权为例来进行推倒,本次推到采用「梯度下降(gradient descent)」策略,以目标的负梯度方向对参数进行调整。
梯度下降法是一种优化算法,广泛用于机器学习和深度学习中,特别是用于求解最小化损失函数的问题,比如线性回归和神经网络训练。其基本思想是通过沿着目标函数(通常是对数似然损失或其他成本函数)梯度的反方向迭代更新模型参数,使得损失函数值逐渐减小。
以下是梯度下降的基本步骤:
- 初始化:随机选择一组初始参数值。
- 计算梯度:对于当前参数,计算目标函数关于这些参数的梯度,梯度表示了函数值上升最快的方向。
- 更新参数:将当前参数减去一个小的学习率乘以梯度,这个学习率决定了每次迭代移动的步长,防止跳过全局最优。
- 重复迭代:不断重复上述过程,直到达到预设的停止条件(如达到最大迭代次数、梯度接近于零或验证误差不再降低等)。
梯度下降有多种变体,包括批量梯度下降(Batch GD)、随机梯度下降(SGD)、小批量梯度下降(Mini-batch GD),以及动量梯度下降(Momentum)、自适应学习率算法(如Adam)等,它们旨在提高收敛速度、稳定性和效率。
对在上的均方误差,给定学习率,通常被设置为最小正数,例如0.1。有:
这就是「链式法则」
链式法则:
也称为链规则(Chain Rule),是微积分中用于求复合函数导数的一种基本方法。当有一个复合函数是由两个或更多简单函数相乘、相除或者逐层应用的函数构成时,我们可以通过对每个简单函数求导,并将结果连接起来来计算整个复合函数的导数。这个过程类似于数学链条,每一环(即每个简单函数的导数)影响下一环。
在计算链式法则之前,我们先回顾一下复合函数(function composition)的求导法则。所谓的复合函数,在本质上