概念
反向传播(Back Propagation, BP)算法是使用梯度下降法相关的算法来优化一个神经网络时计算每一层梯度的方法,主要使用了多元函数的链式法则:
已知多元函数
u=g(y1,y2,...,ym)
,且
yi=fi(x)
,所有函数都可微,则
∂u∂x=∑i=1m∂u∂yi∂yi∂x
公式推导
1、模型
不失一般性,我们考虑以下4层结构的神经网络(全连接):
2、符号说明
符号 |
含义 |
nl
|
网络层数 |
yj
|
输出层第
j
类标签 |
Sl
|
第
l
层神经元个数(不包括偏置) |
g(x)
|
激活函数 |
w(l)ij
|
第
l
层第
j
个单元与第
l+1
层第
i
个单元之间的链接参数 |
b(l)i
|
第
l
层的偏置与第
l+1
层第
i
个单元之间的链接参数 |
z(l)i
|
第
l
层第
i
个单元的输入(加权和,包括偏置) |
a(l)i
|
第
l
层第
i
个单元的输出(激活函数的值) |
δ(l)i
|
第
l
层第
i
个单元的输入的偏导(或称为灵敏度、残差) |
J(θ)
|
代价函数 |
3、符号定义
z(l)ia(l)iJ(θ)δ(l)i=b(l−1)i+∑j=1Sl−1w(l−1)ija(l−1)j=g(z(l)i)=12∑j=1Sl(yj−a(l)j)2=∂J(θ)∂z(l)i
4、推导过程
δ(nl)iδ(l)i∂J(θ)∂w(l)ij∂J(θ)∂b(l)i=∂J(θ)∂z(nl)i=12∂∂z(nl)i∑j=1Snl(yj−a(nl)j)2=12∂∂z(nl)i∑j=1Snl(yj−g(z(nl)j))2=12∂∂z(nl)i(yj−g(z(nl)i))2=−(yi−a(nl)i)g′(z(nl)i)=∂J(θ)∂z(l)i=∑j=1Sl+1∂J(θ)∂z(l+1)j∂z(l+1)j∂z(l)i=∑j=1Sl+1δ(l+1)j∂z(l+1)j∂z(l)i=∑j=1Sl+1δ(l+1)j∂∂z(l)i(b(l)j+∑k=1Slw(l)jka(l)k)=∑j=1Sl+1δ(l+1)j∂∂z(l)i(b(l)j+∑k=1Slw(l)jkg(z(l)k))=∑j=1Sl+1δ(l+1)j∂∂z(l)i(w(l)jig(z(l)i))=∑j=1Sl+1δ(l+1)jw(l)jig′(z(l)i)=g′(z(l)i)∑j=1Sl+1δ(l+1)jw(l)ji=∂J(θ)∂z(l+1)i∂z(l+1)i∂w(l)ij=δ(l+1)i∂z(l+1)i∂w(l)ij=δ(l+1)i∂∂w(l)ij(b(l)i+∑k=1Slw(l)ika(l)k)=δ(l+1)ia(l)j=δ(l+1)i∂∂b(l)i(b(l)i+∑k=1Slw(l)ika(l)k)=δ(l+1)i
向量形式的公式
δ(l)∂J(θ)∂W(l)∂J(θ)∂b(l)=(W(l))Tδ(l+1)∘g′(z(l))=δ(l+1)(a(l))T=δ(l+1)
其中,
∘
表示每个元素相乘,粗体的小写符号表示列向量,粗体的大写符号表示矩阵。
参考
([1] 中的公式推导有错误,本文已纠正)
[1] https://www.cnblogs.com/nowgood/p/backprop.html
[2] Bouvrie J. Notes on convolutional neural networks[J]. 2006.