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