1.神经网络模型
神经网络由一个输入层、输出层以及一个或多个隐藏层组成,模型图如下所示。
图1
其中,Layer1为输入层,Layer2为隐藏层,Layer3为输出层。
2.预测:前向传播算法
如果把输入层设为第1层,则第1层隐藏层为第2层,以此类推至输出层。层与层之间的连线具有权重值,设第i层到第i+1层的权重值向量为θ(i),a(i)为代表第i层各个单元值的向量,取z(i)= θ(i)*a(i),则a(i+1)=g(z(i)),其中a0(i)=1,我们称之“bias 变量”;g(z)是sigmoid function, 其公式为g(z)=1/(1+exp(−z))。最后可以根据模型对输入数据做预测。以图1所示模型为例,计算公式如下:
3.训练:后向传播算法
取损失函数如下:
其中y(i)是数据集中第i个样本的类别向量,例如数据集共有3个类别,则y(i)=[1, 0, 0]T或[0, 1, 0]T或[0, 0, 1]T ,分别表示对应样本的类别为第1、2、3类。
取δj(l)=第l层第j个单元的错误值,则对于每一层的错误值计算方法如下(以含2个隐藏层的神经网络模型为例):
对于输出层
δ(4)=a(4)-y
对于隐藏层
δ(3)=(θ(3))Tδ(4).*g’(z(3))
δ(2)=(θ(2))Tδ(3).*g’(z(2))
输入层没有所谓“错误值”,所以不需要计算δ(1)。其中,g’(z(i))=a(3).*(1-
a(3))。计算出δ后,按以下步骤可以求出。
① 设Δij(l)=0(对所有l,i,j)
② 对i=1到m(m为训练样本数):
设a(1)=x(i)
使用前向传播算法对l=2,3,…,L求a(l)
③ 用前面介绍的方法计算各层的错误值
④ 取Δij(l)=Δij(l)+aj(l)δi(l+1)
⑤ Dij(l)=(1/m)*Δij(l)+λθij(l) if j ≠ 0
Dij(l)=(1/m)*Δij(l) if j = 0
⑥ 取
最后,我们取θij(l)=θij(l)
– α*∑i=1m∑j=1m,重复上述前向传播、后向传播过程直至损失函数满足终止条件,这样我们就完成了神经网络模型的训练过程。
4.梯度检查
为了保证正确计算了,我们可以使用以下方法对其进行检验:
取极小量ε,用(J(θij(l)+ε)-J(θij(l)-ε))
/ (2*ε)作为的近似量,比较训练过程求得的
与近似量是否真的近似,如果相差太大说明训练过程有误,如果近似则记得训练时使用训练过程所得值,而不是近似量,原因之一是近似量的计算效率不如前者高。
注1:初始化θ时,应该随机初始化,从而保证θ(l)不由同一个值构成,因为可以证明的是由同一个值构成的θ(l)会导致第l层的单元之间(除了“bias单元”)是一致的。