基础
神经网络的表示
在基于梯度的优化方法中, 我们提到一个具有
nl+1
层的神经网络可以一般表示为
y′=f(W,b,X)=fnl(Wnl,bnl,fnl−1(Wnl−1,bnl−1,...f1(W1,b1,X)...))
,神经网络的训练就是调整
W,b
使得
L(y,f(W,X,b))
最小。
需要注意的是,当神经网络从第0层,即输入层为第0层与输入层为第1层开始的表述可能由稍许不同。本博文以输入层为第1层,输入层与下一层之间的权值与偏置值记为
W1,b1
。
链式法则
链式法则(chain rule)是求复合函数导数的一个法则。假设 f,g 为两个关于x的可导函数,则复合函数 y=f(g(x)) 的导数为 dydx=dfdgdgdx=f′(g(x))g′(x) 。
求解 L(y,f(W,X,b)) 的最优值
首先损失函数
L
是关于
如此我们可以迭代更新每次的 Wi,bi 。
神经网络的前馈算法
我们知道在神经网络中上一层的输出时下一层的输入,假设第
j
层输出为
1. 令
j=1
,
aj=a1=X
2. 计算
zj+1=Wjaj+bj
3. 计算
aj+1=fj(zj+1)
4. 重复步骤2-3,直到输出层
y′=anl+1=fnl(znl+1)=fnl(Wnlanl+bnl)
BP算法
第 nl 层网络的更新
我们知道
nl+1
层的输出为
y′=anl+1=fnl(znl+1),znl+1=Wnlanl+bnl
,则损失函数为
L(y,fnl(Wnlanl+bnl))
。则
对
Wnl
更新
对 bnl 更新
第 nl−1 层网络的更新
此时
L=L(y,fnl(Wnlfnl−1(Wnl−1anl−1+bnl−1)+bnl))
,则对
nl−1
层更新为:
对
Wnl−1
更新
对 bnl−1 更新
综合
明显第
j(j≠nl)
层来说,更新与第
n−1
层类似。观察上述等式,我们知道每层对权值的导数十分相似,都是一个项乘以上一层的输出,即当前层的输入,我们将该项称为“error term”
δj
。
则第
nl
层:
第 j(j≠nl) 层:
伪代码
- 计算第 nl 层的 error term: δnl=∂L∂fnl
- 计算第 j(j=nl−1,nl−2,…,1) 层 error term: δj=δj+1Wj+1
- 更新第
j+1
层的权值与偏置值:
Wj+1i+1=Wj+1i−ϵδj+1aj+1
bj+1i+1=bj+1i−ϵδj+1 - 重复步骤2-3,知道 $j=1,同理更新第1层权值与偏置值