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

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
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值