BP推导
首先进行网络变量和参数的定义,规定J是损失函数,每层的激活值使用a表示,g是激活函数,al=g(zl),zl=Wlal−1+bl ,其中l表示层索引,ail中i表示层内的神经元索引,∣l∣表示第l层的神经元数目。推导的目标是求得
∂Wl∂J
1.向量化形式
这里我们统一使用分子范式,在具体的权值更新中再相应的作转置。分几步进行:
定义误差变量δ,这里向量化之后
δil=∂zil∂Jδl=∂zl∂J假定最后一层的误差变量δL已求出,现在求δl+1和δl之间的关系
zl+1=Wl+1g(zl)+bl+1δl=∂zl∂J=∂zl+1∂J∂zl∂zl+1=δl+1∂zl∂zl+1下面求
下面求
∂zl∂zl+1=∂g(zl)∂zl+1∂zl∂g(zl)=Wl+1diag(g′(z1l),g′(z2l),…,g′(z∣l∣l))
合并可得
δl=δl+1Wl+1diag(g′(z1),g′(z2),…,g′(z∣l∣))
验证:采用的是分子范式,因而δl+1:1×∣l+1∣,权值Wl:∣l+1∣×∣l∣,那么δl:1×∣l∣,简洁明了
- 利用每层的误差变量来求对权值的偏导
∂Wl∂J=∂zl∂J∂Wl∂zl=δl???
显然上式中的∂Wl∂zl问题属于vector-by-matrix的微分问题,超出知识范围,我们利用下节中的第一部分的结论,使用归纳法
∂Wijl∂J=∂zil∂J∂Wijl∂zil=δilajl−1→分子范式:∣l−1∣×∣l∣∂Wl∂J=((δl)T(al−1)T)T=al−1δl
再具体的向量更新中,如下
Wl(t+1)=Wl(t)+η(al−1δl)T
2.非向量化形式
定义误差变量,这里zil=∑j=1∣l−1∣Wijlajl−1+bil,向量化形式为zl=Wlal−1+bl。
∂Wijl∂J=∂zil∂J∂Wijl∂zil=δilajl−1求层间误差变量的关系
δil=∂zil∂J=j=1∑∣l+1∣δjl+1∂zil∂zjl+1=j=1∑∣l+1∣δjl+1Wjil+1g′(zil)
如何将上面的结果向量化,可以看出g′(zil)中的索引为i与求和的索引无关,因此,我们将其分离出来,先把求和部分向量化。向量化最重要的是维度正确,可以在纸上画出它们相乘的部分。注意这里的δl我们设为列向量,而不是上节中的横向量。
j=1∑∣l+1∣δjl+1Wj−l+1=(Wl+1)Tδl+1
上面说了,可以看出g′(zil)中的索引为i与求和的索引无关,只与最终的δil中的i相关,那么直接将这一项化为逐元素相乘形式,
δl=(Wl+1)Tδl+1∘g′(zl)
写成对角阵的形式
δl=diag(g′(z1),g′(z2),…,g′(z∣l∣)(Wl+1)Tδl+1
结果为
∂Wl∂J=δl(al−1)T