机器学习笔记:BP推导

BP推导

首先进行网络变量和参数的定义,规定 J J 是损失函数,每层的激活值使用 a a 表示, g g 是激活函数, a l = g ( z l ) z l = W l a l 1 + b l a^{l}=g(z^{l}),z^{l}=W^{l}a^{l-1}+b^l ,其中 l l 表示层索引, a i l a_i^l i i 表示层内的神经元索引, l |l| 表示第 l l 层的神经元数目。推导的目标是求得
J W l \frac{\partial J}{\partial W^l}

1.向量化形式

这里我们统一使用分子范式,在具体的权值更新中再相应的作转置。分几步进行:

  1. 定义误差变量 δ \delta ,这里向量化之后
    δ i l = J z i l δ l = J z l \delta_i^l=\frac{\partial J}{\partial z^l_i}\\ \delta^l=\frac{\partial J}{\partial z^l}

  2. 假定最后一层的误差变量 δ L \delta^L 已求出,现在求 δ l + 1 \delta^{l+1} δ l \delta^l 之间的关系
    z l + 1 = W l + 1 g ( z l ) + b l + 1 z^{l+1}=W^{l+1}g(z^{l})+b^{l+1}

    δ l = J z l = J z l + 1 z l + 1 z l = δ l + 1 z l + 1 z l \delta^l=\frac{\partial J}{\partial z^l}=\frac{\partial J}{\partial z^{l+1}}\frac{\partial z^{l+1}}{\partial z^l}=\delta^{l+1}\frac{\partial z^{l+1}}{\partial z^l}下面求

    下面求
    z l + 1 z l = z l + 1 g ( z l ) g ( z l ) z l = W l + 1 diag ( g ( z 1 l ) , g ( z 2 l ) , , g ( z l l ) ) \frac{\partial z^{l+1}}{\partial z^l}=\frac{\partial z^{l+1}}{\partial g(z^l)}\frac{\partial g(z^{l})}{\partial z^l}=W^{l+1}\text{diag}(g'(z_1^l),g'(z_2^l),\dots,g'(z^l_{|l|}))
    合并可得
    δ l = δ l + 1 W l + 1 diag ( g ( z 1 ) , g ( z 2 ) , , g ( z l ) ) \delta^l=\delta^{l+1}W^{l+1}\text{diag}(g'(z_1),g'(z_2),\dots,g'(z_{|l|}))

验证:采用的是分子范式,因而 δ l + 1 : 1 × l + 1 \delta^{l+1}:1\times|l+1| ,权值 W l : l + 1 × l W^l:|l+1|\times|l| ,那么 δ l : 1 × l \delta^l:1\times |l| ,简洁明了

  1. 利用每层的误差变量来求对权值的偏导
    J W l = J z l z l W l = δ l ? ? ? \frac{\partial J}{\partial W^l}=\frac{\partial J}{\partial z^{l}}\frac{\partial z^{l}}{\partial W^l}=\delta^{l}???
    显然上式中的 z l W l \frac{\partial z^{l}}{\partial W^l} 问题属于vector-by-matrix的微分问题,超出知识范围,我们利用下节中的第一部分的结论,使用归纳法
    J W i j l = J z i l z i l W i j l = δ i l a j l 1 分子范式: l 1 × l J W l = ( ( δ l ) T ( a l 1 ) T ) T = a l 1 δ l \frac{\partial J}{\partial W^l_{ij}}=\frac{\partial J}{\partial z^l_i}\frac{\partial z^{l}_i}{\partial W^l_{ij}}=\delta^l_i a^{l-1}_j\\ \rightarrow \text{分子范式:}|l-1|\times |l|\quad\frac{\partial J}{\partial W^l}=((\delta^l)^T (a^{l-1})^T)^T=a^{l-1}\delta^l\\
    再具体的向量更新中,如下
    W l ( t + 1 ) = W l ( t ) + η ( a l 1 δ l ) T W^l(t+1)=W^l(t)+\eta (a^{l-1}\delta^l)^T

2.非向量化形式

  1. 定义误差变量,这里 z i l = j = 1 l 1 W i j l a j l 1 + b i l z_i^l=\sum ^{|l-1|}_{j=1}W^l_{ij}a_j^{l-1}+b_i^l ,向量化形式为 z l = W l a l 1 + b l z^l=W^la^{l-1}+b^l
    J W i j l = J z i l z i l W i j l = δ i l a j l 1 \frac{\partial J}{\partial W^l_{ij}}=\frac{\partial J}{\partial z^l_i}\frac{\partial z^{l}_i}{\partial W^l_{ij}}=\delta^l_i a^{l-1}_j

  2. 求层间误差变量的关系
    δ i l = J z i l = j = 1 l + 1 δ j l + 1 z j l + 1 z i l = j = 1 l + 1 δ j l + 1 W j i l + 1 g ( z i l ) \delta_i^l=\frac{\partial J}{\partial z^l_i}=\sum\limits^{|l+1|}_{j=1}\delta^{l+1}_j \frac{\partial z^{l+1}_j}{\partial z^l_i}=\sum\limits^{|l+1|}_{j=1}\delta^{l+1}_jW_{ji}^{l+1}g'(z^l_i)
    如何将上面的结果向量化,可以看出 g ( z i l ) g'(z_i^l) 中的索引为 i i 与求和的索引无关,因此,我们将其分离出来,先把求和部分向量化。向量化最重要的是维度正确,可以在纸上画出它们相乘的部分。注意这里的 δ l \delta^l 我们设为列向量,而不是上节中的横向量。
    j = 1 l + 1 δ j l + 1 W j l + 1 = ( W l + 1 ) T δ l + 1 \sum\limits^{|l+1|}_{j=1}\delta^{l+1}_jW_{j-}^{l+1}=(W^{l+1})^T\delta^{l+1}
    上面说了,可以看出 g ( z i l ) g'(z_i^l) 中的索引为 i i 与求和的索引无关,只与最终的 δ i l \delta_i^l 中的 i i 相关,那么直接将这一项化为逐元素相乘形式,
    δ l = ( W l + 1 ) T δ l + 1 g ( z l ) \delta^l=(W^{l+1})^T\delta^{l+1}\circ g'(z^l)
    写成对角阵的形式
    δ l = diag ( g ( z 1 ) , g ( z 2 ) , , g ( z l ) ( W l + 1 ) T δ l + 1 \delta^l=\text{diag}(g'(z_1),g'(z_2),\dots,g'(z_{|l|}) (W^{l+1})^T\delta^{l+1}
    结果为
    J W l = δ l ( a l 1 ) T \frac{\partial J}{\partial W^l}=\delta^l(a^{l-1})^T

猜你喜欢

转载自blog.csdn.net/weixin_37621790/article/details/87867846