机器学习笔记:BP推导

BP推导

首先进行网络变量和参数的定义,规定JJJ是损失函数,每层的激活值使用aaa表示,ggg是激活函数,al=g(zl),zl=Wlal−1+bla^{l}=g(z^{l}),z^{l}=W^{l}a^{l-1}+b^lal=g(zl)zl=Wlal1+bl ,其中lll表示层索引,aila_i^lailiii表示层内的神经元索引,∣l∣|l|l表示第lll层的神经元数目。推导的目标是求得
∂J∂Wl \frac{\partial J}{\partial W^l} WlJ

1.向量化形式

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

  1. 定义误差变量δ\deltaδ,这里向量化之后
    δil=∂J∂zilδl=∂J∂zl \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之间的关系
    zl+1=Wl+1g(zl)+bl+1 z^{l+1}=W^{l+1}g(z^{l})+b^{l+1} zl+1=Wl+1g(zl)+bl+1

    δl=∂J∂zl=∂J∂zl+1∂zl+1∂zl=δl+1∂zl+1∂zl下面求 \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

    下面求
    ∂zl+1∂zl=∂zl+1∂g(zl)∂g(zl)∂zl=Wl+1diag(g′(z1l),g′(z2l),…,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+1Wl+1diag(g′(z1),g′(z2),…,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,权值Wl:∣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∂Wl=∂J∂zl∂zl∂Wl=δ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???
    显然上式中的∂zl∂Wl\frac{\partial z^{l}}{\partial W^l}Wlzl问题属于vector-by-matrix的微分问题,超出知识范围,我们利用下节中的第一部分的结论,使用归纳法
    ∂J∂Wijl=∂J∂zil∂zil∂Wijl=δilajl−1→分子范式:∣l−1∣×∣l∣∂J∂Wl=((δl)T(al−1)T)T=al−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
    再具体的向量更新中,如下
    Wl(t+1)=Wl(t)+η(al−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. 定义误差变量,这里zil=∑j=1∣l−1∣Wijlajl−1+bilz_i^l=\sum ^{|l-1|}_{j=1}W^l_{ij}a_j^{l-1}+b_i^lzil=j=1l1Wijlajl1+bil,向量化形式为zl=Wlal−1+blz^l=W^la^{l-1}+b^lzl=Wlal1+bl
    ∂J∂Wijl=∂J∂zil∂zil∂Wijl=δilajl−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. 求层间误差变量的关系
    δil=∂J∂zil=∑j=1∣l+1∣δjl+1∂zjl+1∂zil=∑j=1∣l+1∣δjl+1Wjil+1g′(zil) \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′(zil)g'(z_i^l)g(zil)中的索引为iii与求和的索引无关,因此,我们将其分离出来,先把求和部分向量化。向量化最重要的是维度正确,可以在纸上画出它们相乘的部分。注意这里的δl\delta^lδl我们设为列向量,而不是上节中的横向量。
    ∑j=1∣l+1∣δjl+1Wj−l+1=(Wl+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′(zil)g'(z_i^l)g(zil)中的索引为iii与求和的索引无关,只与最终的δil\delta_i^lδil中的iii相关,那么直接将这一项化为逐元素相乘形式,
    δl=(Wl+1)Tδl+1∘g′(zl) \delta^l=(W^{l+1})^T\delta^{l+1}\circ g'(z^l) δl=(Wl+1)Tδl+1g(zl)
    写成对角阵的形式
    δl=diag(g′(z1),g′(z2),…,g′(z∣l∣)(Wl+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∂Wl=δl(al−1)T \frac{\partial J}{\partial W^l}=\delta^l(a^{l-1})^T WlJ=δl(al1)T

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值