前向传播结构图

在推导反向传播之前,首先我们需要了解深度神经网络的模型图,我简单的画个模型图:

c4618a4dfd57110ca02a59d1e18df5f7.png

这是模型的最后两层,L代表输出层,假设有两个输出

,拼成一个输出列向量
L-1层有三个节点,有三个输出
,拼成一个输出列向量
,这个输出也相当于是对第L层的输入,第L-1层和第L层满足如下矩阵关系:

0d34afabb11b83029bbd628ba42eefba.png

如果把权重向量拼成一个矩阵

的第i行的权重乘以上一层的输出然后传给下一层的第i个节点,
表示第L-1层的第j个神经元对第L层第i个神经元的权重连接,
是第L层未激活的输出,也可以将他们拼成一个向量
是偏置量,所以一般的关系是:

定义一个损失函数

当输入通过一层层的神经网络前向传播到输出层,也就是第L层,得到

,我们训练样本的有个标签
,我们为了后面讨论方便,假设定义一个均方损失函数:

=

=

用前篇笔记所讲的标量对矩阵链式求导公式来推导BP算法

公式为: z =

(
y), y = X a+ b

链式关系:

就是我们通常说的反向传播误差项,由于L是输出层,知道损失函数,输出层误差项可以求出来,令
=
,符合函数出现
的标量对向量的链式关系。

(雅克比矩阵)

c6b2348241bd6c98e9d0b011447b0aff.png

同理可求得

(雅克比矩阵为单位阵)

矩阵相乘得到哈达玛乘积

综上述可求出

我们知道了损失函数对L层参数的梯度,可以用梯度下降更新L层的参数

,但还需要计算L-1层的梯度,L-2层以及更上层的梯度。对于第
层,损失函数对
层的
的梯度与误差项
有关,有链式关系:
,根据标量对多个向量的链式求导法则:

更一般的情况是假设第

层的误差项
已知,用数学归纳法可以
[1]推出前一层的误差项
,而且

(这个对角的雅克比矩阵前面算过一次)

进一步可得损失函数对

的梯度:

反向传播总结

基于随机梯度下降的反向传播算法

输入:训练集

,验证集
,学习率
,正则化系数
,网络层数
,每一层神经元数量

1、随机初始化

repeat

对训练集

的样本随机重排序;

2、for n=1,2,3......N

从训练集取出样本

,将输入层的输入设置为
,
代表正在参与迭代计算的样本

(2.1)、 for

进行前向传播计算,计算每一层的未激活的输出

和激活值

(2.2)、通过损失函数计算输出层的

for

计算误差项的反向传播

for

(2.3) 、更新第

层的参数

end

until 神经网络模型在验证集

上的错误率不在下降;

输出:

参考

  1. ^参考以下博客 https://www.cnblogs.com/pinard/p/6422831.html
点击阅读全文
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐