初学者对于反向传播学习总结,有错误的地方还请大佬指正,非常感谢。
对于每个训练样例,反向传播算法执行以下操作:先将输入示例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果;然后计算输出层的误差,再将误差逆向传播至隐藏层神经元;最后根据隐藏层神经元的误差来对连接权重和阈值进行调整。该迭代过程循环进行,直到达到某些停止条件为止,例如训练误差已经 到了一个很小的值。反向传播算法的目标是要最小化训练集上的累计误差。
前向传播过程
如上图1所示:
每层的+1是偏置项。
表示权重,代表第 t 层的第 j 个神经元与下一层的第 i 个神经元连接的权重,如表示第一层的第0个神经元(偏置项)与第二层的第一个神经元相连接的权重,表示的是第一层的第二个神经元与第二层的第一个神经元连接的权重。
表示的是第 t 层第 i 个神经元接收到的输入值。
表示的是第 t 层第 i 个神经元的激活值,也就是输出值。
(方程1)
激活函数为sigmoid函数:(方程2)
,,
,,
损失函数为 (方程3)
表示训练集中真实输出值,是神经网络产生的实际输出值。
反向传播过程
如上图2 所示
如上图红色部分所示,为反向传播过程。使用梯度下降利用链式求导法则进行权重的更新。
(其中y为真实标签值,根据方程3)
(根据方程2求偏导)
(根据方程1求偏导)
下边计算每个神经元的误差值(如上图红色所示),其中表示的是第t层第 i 个神经元的误差:
对于最后一层:, 对于中间层:(其中,m是第t+1层神经元的个数)
如上图2所示: (y为真实标签值)
,;,;
上图二中的和是不需要的(画图时画顺手了,不好意思),因为不需要对输入层求误差
求出每个神经元的误差值后,再进行调整权重操作,,其中为学习率。根据方程2 ,。
,
,
,
,
,
到此为止,前向传播与反向传播的过程已经完成。