Deep Learning 学习笔记(三):神经网络反向传播算法推导

来源:互联网 发布:邮件客户端 知乎 编辑:程序博客网 时间:2024/06/03 19:01

0. 前言

茫然中不知道该做什么,更看不到希望。
偶然看到coursera上有Andrew Ng教授的机器学习课程以及他UFLDL上的深度学习课程,于是静下心来,视频一个个的看,作业一个一个的做,程序一个一个的写。N多数学的不懂、Matlab不熟悉,开始的时候学习进度慢如蜗牛,坚持了几个月,终于也学完了。为了避免遗忘,在这里记下一些内容。由于水平有限,Python也不是太熟悉,英语也不够好,有错误或不当的地方,请不吝赐教。

神经网络有非常丰富的资料,在这里只是记录自己学习的过程、内容和心得。


1. 神经网络的表示

首先用一张图来表示多层神经网络的结构,如图1。
多层神经网络结构
图1 神经网络结构图

1.1 符号说明

  • 输入向量x=[x1,x2,,xn0]T是一个列向量。
  • 标签(label)y未在图中表示,它和x有相同维度。
  • nl为第L层的神经节点个数。
  • W(l)Rnl×nl1为第L层的权重矩阵。截距b(l)Rnl×1未在图上表示。
  • Z(l)表示第L层的活动水平向量,
    • Z(l+1)i=Σnlj=1(W(l+1)ij×a(l)j+b(l+1)i)a(0)即为输入向量x
    • Z(l+1)=W(l+1)×a(l)+b(l+1),矢量化表示。
  • f()为激活函数,可以是sigmoid、tanh等。
  • a(l)=f(Z(l))为第L层的激活向量,即输出向量。
  • l层为输出层,定义假设函数hW,b(x)=a(l)

1.2 反向传播算法

神经网络的反向传播算法是建立在最速梯度下降基础上的,希望误差的能量函数最小。对于输入向量x和标签y,定义平方误差能量函数如下:

J(W,b;x,y)=12hW,b(x)y2=12i=1nl(a(l)iyi)2

我们要找到一个合适的W和b,使J(W,b;x,y)最小,即
minimizeW,bJ(W,b;x,y)(1)

使用梯度下降法:
W=WαW(2)

b=bαb(3)

α为学习率。
下面通过推导求W,b
JW(l)ij=JZ(l)iZ(l)iW(l)ij=Ja(l)ia(l)iZ(l)ia(l1)j=Ja(l)if(Z(l)i)a(l1)j(4)

Jb(l)i=JZ(l)iZ(l)ib(l)i=Ja(l)ia(l)iZ(l)i=Ja(l)if(Z(l)i)(5)

令误差项(大部分教材中,都把误差项分配到l+1层,但从个人编程的角度理解,把它归入到l层更方便)
δ(l)i=Ja(l)if(Z(l)i)(6)
,代入(4)(5)式,有:
JW(l)ij=δ(l)ia(l1)j(7)

Jb(l)i=δ(l)i(8)

或矢量化形式:
W(l)=JW(l)=δ(l)(a(l1))T(9)

b(l)=Jb(l)=δ(l)(10)

其中:
δ(l)=[δ(l)1,,δ(l)nl]T,a(l1)Rnl1×1,W(l)Rnl×nl1,b(l)Rnl×1

l层为输出层,则:
Ja(l)i=(nlk=112a(l)kyk2a(l)i=a(l)iyi(11)

则:
δ(l)i=Ja(l)if(Z(l)i)=(a(l)iyi)f(Z(l)i)(12)


δ(l)=(a(l)y)f(Z(l))(13)

(12)式中的“”是向量和矩阵中元素相乘运算符。
l层是隐藏层,我们还需要对Ja(l)i做进一步的处理。函数J是向量Z(l+1)的函数,而它的每个元素又是a(l)i的函数。根据复合函数求导公式,对J求a(l)i的偏导数有:
Ja(l)i=j=1nl+1JZ(l+1)jZ(l+1)ja(l)i=j=1nl+1Ja(l+1)ja(l+1)jZ(l+1)jZ(l+1)ja(l)i
=j=1nl+1Ja(l+1)jf(Z(l+1)j)W(l+1)ji=jnl+1δ(l+1)jW(l+1)ji=(W(l+1)(,i))Tδ(l+1)(14)

代入(6)式,有
δ(l)i=(W(l+1)(,i))Tδ(l+1)f(Z(l)i)(15)

矢量化后有
δ(l)=((W(l+1))Tδ(l+1))f(Z(l))(16)

至此推导完成。

1.3 批量学习的函数形式

在上一节中x是一个向量,如果有m个向量,定义输入矩阵X和标签y:

X=[x(1),,x(i),,x(m)]y=[y(1),,y(i),,y(m)]T

其中x(i)为具有n个特征的列向量,y(i)为表示类别的标量。
代价函数:
J(W,b)=1mi=1mJ(W,b;x(i),y(i))=1mi=1m12hW,b(x(i))y(i)2

a(0)=X,Z(l)=W(l)×X,a(l)=f(Z(l)),l=1nl

对于梯度
W(l)=1mδ(l)(a(l1))T

b(l)=1mi=1mδ(i)

和误差项
δ(l)=(W(l))T×δ(l+1)f(Z(l))

1.4 规范化

为了防止过拟合(overfiting),需要对误差函数和W梯度添加L2范式惩罚项。假定网络有L层,

J(W,b)=1mi=1m12hW,b(x(i))y(i)2+λ2l=1Li=1nlj=1nl1(W(l)ij)2

W(l)=1mδ(l)(a(l1))T+λW(l)

2. 算法描述

重复直到收敛{
- 执行前向传播,得到各层的激活值
- 计算最后一层的δ
- 反向传播计算各层δ
- 计算各层W和b的梯度
- 使用梯度下降更新W和b
}

0 0