前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >反向传播算法大揭秘

反向传播算法大揭秘

作者头像
卡尔曼和玻尔兹曼谁曼
修改2019-02-06 07:21:34
8120
修改2019-02-06 07:21:34
举报

反向传播算法大揭秘

注: 该篇博文是我阅读《How the backpropagation algorithm works》一文的笔记,该博文详细介绍了反向传播算法,并给出了反向传播算法四个基本公式中的前两个证明,我顺着作者的思路证明了后面两个,并记录了证明过程,希望能帮助到需要了解反向传播算法数学原理的童鞋。

符号说明

  • w^l_{jk}表示l-1层的第k个神经元到l层的第j个神经元连接的权重.
  • b^l_j表示l层的第j个神经元的偏置,a^l_j表示l层的第j个神经元作用于激活函数以后的取值.
  • 对于a^l_j的计算,我们可以使用如下公式计算:a^l_j=\sigma (\sum_\limits{k}w^l_{jk}a^{l-1}_k + b^l_j),其中,\sigma表示的是激活函数,求和符号表示的是第l-1层的所有神经元与l层第j个神经元连接的加权和.
  • 上式使用矩阵表示则有:a^l = \sigma (w^la^{l-1} + b^l),其中,w^l表示l层的权重矩阵,矩阵的第j行第k列的元素为w^l_{jk},类似的,b^la^l用列向量表示第j层神经元的偏置和激活值.
  • 对于z^l = w^la^{l-1} + b^l我们称之为l层的加权输出.
  • 设推导反向传播过程中的代价函数为C.
  • 我们使用\odot表示两个矩阵对应元素的乘积,即(s\odot t)_{i,j} = s_{i,j} \cdot t_{i,j},称之为Hadamard乘积.

反向传播的四个基本公式

反向传播过程中的四个基本公式:

\delta^L = \nabla_aC\odot \sigma'(z^L) \tag{BP1}

\delta^l = ((w^{l+1})^\mathrm{T}\delta^{l+1})\odot\sigma'(z^l) \tag{BP2}

\frac{\partial C}{\partial b^l_j} = \delta^l_j \tag{BP3}

\frac{\partial C}{\partial w^l_{jk}} = a^{l-1}_k\delta^l_j \tag{BP4}

反向传播算法

  1. 输入x:输入层的激活值a^1可以假定就是其输入x
  2. 前向传播:对于l=2,3,\cdots,L,依次通过z^l = w^la^{l-1} + b^la^l = \sigma(z^l)公式进行计算激活值
  3. 计算最终输出误差\delta^L:通过公式计BP1算误差向量
  4. 反向误差传播:对于l=L-1, L-2, \cdots, 2,使用公式分BP2别计算每层神经元对应的误差
  5. 更新权重和增益:根据代价函数的梯度更新权重和增益,如公式BP3和BP4所示

推导过程

下面我们来进行公式的推导

对于公式BP1的推导

设最后一层L的第j个神经元的误差是

\delta^L_j = \frac{\partial C}{\partial z^L_j} \tag{1}

通过链式法则,我们可以得到

\delta^L_j = \frac{\partial C}{\partial a^L_j}\frac{\partial a^L_j}{\partial z^L_j} \tag{2}

a^l_j=\sigma(z^L_j)带入可得

\delta^L_j = \frac{\partial C}{\partial a^L_j}\sigma'(z^L_j) \tag{3}

公式BP1即是上式的矩阵形式

对于公式BP2的推导

对于l层的第j个神经元,我们使用链式法则有:

\delta^l_j = \frac{\partial C}{\partial z^l_j} = \sum\limits_k\frac{\partial C}{\partial z^{l+1}_k}\frac{\partial z^{l+1}_k}{\partial z^l_j} = \sum\limits_k\frac{\partial z^{l+1}_k}{\partial z^l_j}\delta^{l+1}_k \tag{4}

此外,我们有

z^{l+1}_k = \sum\limits_jw^{l+1}_{kj}a^l_j + b^{l+1}_k = \sum\limits_jw^{l+1}_{kj}\sigma(z^l_j) + b^{l+1}_k \tag{5}

对上式微分,得

\frac{\partial z^{l+1}_k}{\partial z^l_j} = w^{l+1}_{kj}\sigma'(z^l_j) \tag{6}

带入公式4,可得

\delta^l_j = \sum\limits_kw^{l+1}_{kj}\delta^{l+1}_k\sigma'(z^l_j) \tag{7}

对于公式BP3的推导

对于$l$层的第$j$个神经元,我们使用链式法则有:

\frac{\partial C}{\partial b^L_j} = \frac{\partial C}{\partial z^l_j}\frac{\partial z^l_j}{\partial b^l_j} \tag{8}

由于\frac{\partial z^l_k}{\partial b^l_j}恒等于1,所以有

\frac{\partial C}{\partial b^L_j} = \frac{\partial C}{\partial z^l_j} = \delta^l_j \tag{9}

对于公式BP4的推导

因为z^{l}_j = \sum\limits_kw^{l}_{jk}a^{l-1}_k + b^{l+1}_j,取导数有

\frac{\partial z^l_j}{\partial w^{l}_{jk}} = a^{l-1}_k \tag{10}

对于l层的第j个神经元,我们使用链式法则有:

\frac{\partial C}{\partial w^l_{jk}} = \frac{\partial C}{\partial z^l_{j}} \frac{\partial z^l_{j}}{\partial w^l_{jk}} \tag{11}

\delta^l_j = \frac{\partial C}{\partial z^l_j}$和$\frac{\partial z^l_{jk}}{\partial w^l_{jk}} = a^{l-1}_k带入公式11,得

\frac{\partial C}{\partial w^l_{jk}} = \delta^l_ja^{l-1}_k \tag{12}

终于,推导完毕!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年09月08日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 反向传播算法大揭秘
    • 符号说明
      • 反向传播的四个基本公式
        • 反向传播算法
          • 推导过程
            • 对于公式BP1的推导
            • 对于公式BP2的推导
            • 对于公式BP3的推导
            • 对于公式BP4的推导
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档