本文是深度学习笔记的第二篇,上一篇文章《神经元与神经网络》中讲到了前向传播算法,本文中将介绍如何进行参数的优化,即用反向传导。
0.本文中所使用的符号和一些约定
本文中所使用的样本集:
{(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))}
其他符号:
符号 | 描述 |
---|---|
(x(j),y(j)) | 第 j 个样本 |
样本总数 | |
(x,y) | 单个样本 |
xi | 第 i 个输入值 |
神经元激活函数,本文中为sigmoid函数,即 f(z)=11+e(−z) | |
W(l)ij | 神经网络中第
l
层第 |
第 l+1 层第 i 个神经元输入的偏置项 | |
神经网络的总层数 | |
Ll | 第
l
层,则输入层为 |
sl | 第 l 层的节点数(不包括偏置单元) |
第
l
层第 | |
z(l)i | 第
l
层第 |
hW,b(x) | 输入值为
x
,神经网络中权值和偏置项分别为 |
约定 本文中将函数
f()
以及偏导数
f′()
进行了针对向量参数的扩展,即:
f([z1,z2,z3])=[f(z1),f(z2),f(z3)]
f′([z1,z2,z3])=[f′(z1),f′(z2),f′(z3)]
1.代价函数
要求解神经网络,就要通过最优化神经网络的代价函数(cost function)而得出其中的参数
W
和
对于单个样例
(x,y)
下,代价函数为:
J(W,b;x,y)=12∥hw,b(x)−y∥2
对于一个包含
m
个样例的数据集,整体代价函数为:
=[1m∑mi=1(12∥hw,b(x(i))−y(i)∥2)]+λ2∑nl−1l=1∑sli=1∑sl+1j=1(W(l)ji)2
其中第二项是一个规则化项(也叫权重衰减项),其目的是减小权重的幅度,防止过拟合,而
λ
则用来控制第一项和第二项的相对重要性
2.梯度下降
为了优化代价函数,要进行以下几步:
1. 初始化每一个参数
W(l)ij
和
b(l)i
为很小的接近零的随机值
2. 使用最优化算法,诸如批量梯度下降法,梯度下降公式如下:
W(l)ij=W(l)ij−α∂∂W(l)ijJ(W,b)
b(l)i=b(l)i−α∂∂b(l)iJ(W,b)
其中
α
是学习速率。
计算梯度下降的关键步骤是计算偏导数,此时反向传导算法就要登场了。其实反向传导算法的思想和高数里复合函数求导的思想是一样的。
3.反向传导
我们将求偏导的项单独拿出来看:
∂∂W(l)ijJ(W,b)=[1m∑mi=1∂∂W(l)ijJ(W,b;x(i),y(i))]+λW(l)ij
(1)
∂∂b(l)iJ(W,b)
=
1m∑mi=1∂∂b(l)iJ(W,b;x(i),y(i))
(2)
显然,求出
∂∂W(l)ijJ(W,b;x,y)
和
∂∂b(l)iJ(W,b;x,y)
即可求出
∂∂W(l)ijJ(W,b)
和
∂∂b(l)iJ(W,b)
。
由于:
∂∂W(l)ijJ(W,b;x,y)=∂J(W,b;x,y)∂z(l+1)i∂zl+1i∂Wlij
(3)
∂∂b(l)iJ(W,b;x,y)=∂J(W,b;x,y)∂z(l+1)i∂z(l+1)i∂b(l)i
(4)
因此要先求
∂J(W,b;x,y)∂z(l)i
,在UFLDL中,将之称为“残差”,用
δ(l)i
表示,该残差表示第
l
层的第
计算
∂J(W,b;x,y)∂z(l)i
可得:
δ(nl)i=−(yi−a(nl)i)f′(z(nl)i)
δ(l)i=(∑sl+1j=1W(l)jiδ(l+1)j)f′(z(l)i)
通过以上第一式可以求出第
nl
层结点的残差,而第二式则表达了第
l
层结点残差与第
∂∂W(l)ijJ(W,b;x,y)=δ(l+1)ia(l)j
(5)
∂∂b(l)iJ(W,b;x,y)=δ(l+1)i
(6)
再将上面两式代入(1)和(2)就能够求出整体的偏导数了。