BP反向传播算法推导

1、符号设定

  • a_{i-1}为第i层输入向量
  • x_{i}为第i层输出向量
  • W_{i}为第i层到下一层的权重矩阵
  • \sigma 为每一层的sigmod激活函数
  • o为最后一层的下标,y为最后一层的真实值,h为预测值
  • L 为一个样本的损失函数,其中L=\frac{1}{2}(y-h)^2
    根据设定,我们有以下等式
    x_{i}=\sigma(a_{i-1}) a_{i}=W_{i}x_{i} h=\sigma(a_{o})=\sigma(W_{o}x_{o})

2、对于输出层

\frac{\partial L}{\partial W_o}=\frac{\partial L}{\partial h}\frac{\partial h}{\partial a_o}\frac{\partial a_o}{\partial W_o}=(h-y)h(1-h)x_o
令误差\delta_o=\frac{\partial L}{\partial a_o}=(h-y)h(1-h),则\frac{\partial L}{\partial W_o}=\delta_ox_o
对于W_o梯度更新公式为:W_o=W_o-\eta\delta_ox_o

3、对于上一个隐藏层k

由于a_o=W_ox_o=W_o\sigma(a_k)a_k=W_kx_k,则有
\frac{\partial L}{\partial W_k}=\frac{\partial L}{\partial h}\frac{\partial h}{\partial a_o}\frac{\partial a_o}{\partial a_k}\frac{\partial a_k}{\partial W_k}=(h-y)h(1-h)W_oa_o(1-a_o)x_k
令隐藏层k的误差
\delta_k=\frac{\partial L}{\partial a_k}=\delta_oW_oa_o(1-a_o)则有\frac{\partial L}{\partial W_k}=\delta_kx_k
对于W_k梯度更新公式为:W_k=W_k-\eta\delta_kx_k

若存在隐藏层k-1,同理可得隐藏层k-1的误差\delta_{k-1}=\frac{\partial L}{\partial a_{k-1}}=\delta_kW_ka_k(1-a_k)则有\frac{\partial L}{\partial W_{k-1}}=\delta_{k-1}x_{k-1}对于W_{k-1}梯度更新公式为:W_{k-1}=W_{k-1}-\eta\delta_{k-1}x_{k-1}

4、计算顺序

根据2、3可知,当要更新网络中神经元的所有权重时,需从输出层开始并逐步后向计算各隐藏层的输入值和输出值和误差项

参考

https://www.zybuluo.com/hanbingtao/note/476663

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容