深度学习笔记:稀疏自编码器(2)——反向传导

版权声明:原创文章的转载请注明博客出处,谢谢! https://blog.csdn.net/wanz2/article/details/52989310

  本文是深度学习笔记的第二篇,上一篇文章《神经元与神经网络》中讲到了前向传播算法,本文中将介绍如何进行参数的优化,即用反向传导。

0.本文中所使用的符号和一些约定

本文中所使用的样本集:{(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))}
其他符号:

符号 描述
(x(j),y(j)) j个样本
m 样本总数
(x,y) 单个样本
xi i个输入值
f() 神经元激活函数,本文中为sigmoid函数,即f(z)=11+e(z)
W(l)ij 神经网络中第l层第j个神经元和第l+1层第i个神经元连线上的权值
b(l)i l+1层第i个神经元输入的偏置项
nl 神经网络的总层数
Ll l层,则输入层为L1,输出层为Lnl
sl l层的节点数(不包括偏置单元)
ali l层第i单元的激活值(输出值),当l=1时,a(1)i=xi
z(l)i l层第i单元输入加权和(包括偏置单元),有a(l)i=f(z(l)i)
hW,b(x) 输入值为x,神经网络中权值和偏置项分别为W,b的情况下的输出值

约定 本文中将函数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)而得出其中的参数Wb的值。
  对于单个样例(x,y)下,代价函数为:
J(W,b;x,y)=12hw,b(x)y2
  对于一个包含m个样例的数据集,整体代价函数为:
J(W,b)=[1mmi=1J(W,b;x(i),y(i))]+λ2nl1l=1sli=1sl+1j=1(W(l)ji)2
     =[1mmi=1(12hw,b(x(i))y(i)2)]+λ2nl1l=1sli=1sl+1j=1(W(l)ji)2
其中第二项是一个规则化项(也叫权重衰减项),其目的是减小权重的幅度,防止过拟合,而λ则用来控制第一项和第二项的相对重要性

2.梯度下降

  为了优化代价函数,要进行以下几步:
1. 初始化每一个参数W(l)ijb(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)=[1mmi=1W(l)ijJ(W,b;x(i),y(i))]+λW(l)ij   (1)
b(l)iJ(W,b)=1mmi=1b(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)izl+1iWlij   (3)
b(l)iJ(W,b;x,y)=J(W,b;x,y)z(l+1)iz(l+1)ib(l)i   (4)
因此要先求J(W,b;x,y)z(l)i,在UFLDL中,将之称为“残差”,用δ(l)i表示,该残差表示第l层的第i个结点对最终输出值的残差产生了多少影响。
  计算J(W,b;x,y)z(l)i可得:
δ(nl)i=(yia(nl)i)f(z(nl)i)
δ(l)i=(sl+1j=1W(l)jiδ(l+1)j)f(z(l)i)
通过以上第一式可以求出第nl层结点的残差,而第二式则表达了第l层结点残差与第l+1层结点残差的关系,通过将两式回代进式(3)和式(4),则可以得到:
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)就能够求出整体的偏导数了。

展开阅读全文

没有更多推荐了,返回首页