前向传播结构图
在推导反向传播之前,首先我们需要了解深度神经网络的模型图,我简单的画个模型图:
这是模型的最后两层,L代表输出层,假设有两个输出
,
,拼成一个输出列向量
L-1层有三个节点,有三个输出
,
,
,拼成一个输出列向量
,这个输出也相当于是对第L层的输入,第L-1层和第L层满足如下矩阵关系:
如果把权重向量拼成一个矩阵
,
的第i行的权重乘以上一层的输出然后传给下一层的第i个节点,
表示第L-1层的第j个神经元对第L层第i个神经元的权重连接,
和
是第L层未激活的输出,也可以将他们拼成一个向量
,
和
是偏置量,所以一般的关系是:
定义一个损失函数
当输入通过一层层的神经网络前向传播到输出层,也就是第L层,得到
,我们训练样本的有个标签
,我们为了后面讨论方便,假设定义一个均方损失函数:
=
=
用前篇笔记所讲的标量对矩阵链式求导公式来推导BP算法
公式为: z =
(
y), y = X a+ b
链式关系:
,
,
就是我们通常说的反向传播误差项,由于L是输出层,知道损失函数,输出层误差项可以求出来,令
=
,
,符合函数出现
的标量对向量的链式关系。
,
(雅克比矩阵)
同理可求得
(雅克比矩阵为单位阵)
矩阵相乘得到哈达玛乘积
综上述可求出
,
我们知道了损失函数对L层参数的梯度,可以用梯度下降更新L层的参数
和
,但还需要计算L-1层的梯度,L-2层以及更上层的梯度。对于第
层,损失函数对
层的
和
的梯度与误差项
有关,有链式关系:
,根据标量对多个向量的链式求导法则:
更一般的情况是假设第
层的误差项
已知,用数学归纳法可以
[1]推出前一层的误差项
,而且
(这个对角的雅克比矩阵前面算过一次)
进一步可得损失函数对
和
的梯度:
反向传播总结
基于随机梯度下降的反向传播算法
输入:训练集
,验证集
,学习率
,正则化系数
,网络层数
,每一层神经元数量
1、随机初始化
;
repeat
对训练集
的样本随机重排序;
2、for
从训练集取出样本
,将输入层的输入设置为
,
代表正在参与迭代计算的样本
(2.1)、 for
进行前向传播计算,计算每一层的未激活的输出
和激活值
(2.2)、通过损失函数计算输出层的
for
计算误差项的反向传播
for
(2.3) 、更新第
层的参数
和
end
until 神经网络模型在验证集
上的错误率不在下降;
输出:
参考
- ^参考以下博客