机器学习笔记:BP推导

BP推导

首先进行网络变量和参数的定义,规定 J J J是损失函数,每层的激活值使用 a a a表示, g 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 al=g(zl)zl=Wlal1+bl ,其中 l l l表示层索引, a i l a_i^l ail i i i表示层内的神经元索引, ∣ l ∣ |l| l表示第 l l l层的神经元数目。推导的目标是求得
∂ J ∂ W l \frac{\partial J}{\partial W^l} WlJ

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} δil=zilJδl=zlJ

  2. 假定最后一层的误差变量 δ L \delta^L δL已求出,现在求 δ l + 1 \delta^{l+1} δl+1 δ l \delta^l δ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} zl+1=Wl+1g(zl)+bl+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}下面求 δl=zlJ=zl+1Jzlzl+1=δl+1zlzl+1

    下面求
    ∂ 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|})) zlzl+1=g(zl)zl+1zlg(zl)=Wl+1diag(g(z1l),g(z2l),,g(zll))
    合并可得
    δ 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=δl+1Wl+1diag(g(z1),g(z2),,g(zl))

验证:采用的是分子范式,因而 δ l + 1 : 1 × ∣ l + 1 ∣ \delta^{l+1}:1\times|l+1| δl+1:1×l+1,权值 W l : ∣ l + 1 ∣ × ∣ l ∣ W^l:|l+1|\times|l| Wl:l+1×l,那么 δ l : 1 × ∣ l ∣ \delta^l:1\times |l| δl:1×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}??? WlJ=zlJWlzl=δl???
    显然上式中的 ∂ z l ∂ W l \frac{\partial z^{l}}{\partial W^l} Wlzl问题属于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\\ WijlJ=zilJWijlzil=δilajl1分子范式:l1×lWlJ=((δl)T(al1)T)T=al1δ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 Wl(t+1)=Wl(t)+η(al1δ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 zil=j=1l1Wijlajl1+bil,向量化形式为 z l = W l a l − 1 + b l z^l=W^la^{l-1}+b^l zl=Wlal1+bl
    ∂ 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 WijlJ=zilJWijlzil=δilajl1

  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) δil=zilJ=j=1l+1δjl+1zilzjl+1=j=1l+1δjl+1Wjil+1g(zil)
    如何将上面的结果向量化,可以看出 g ′ ( z i l ) g'(z_i^l) g(zil)中的索引为 i i i与求和的索引无关,因此,我们将其分离出来,先把求和部分向量化。向量化最重要的是维度正确,可以在纸上画出它们相乘的部分。注意这里的 δ l \delta^l δ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} j=1l+1δjl+1Wjl+1=(Wl+1)Tδl+1
    上面说了,可以看出 g ′ ( z i l ) g'(z_i^l) g(zil)中的索引为 i i i与求和的索引无关,只与最终的 δ i l \delta_i^l δil中的 i 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=(Wl+1)Tδl+1g(zl)
    写成对角阵的形式
    δ 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} δl=diag(g(z1),g(z2),,g(zl)(Wl+1)Tδl+1
    结果为
    ∂ J ∂ W l = δ l ( a l − 1 ) T \frac{\partial J}{\partial W^l}=\delta^l(a^{l-1})^T WlJ=δl(al1)T

你可能感兴趣的:(机器学习,西瓜书,反传算法)