Deep Learning 学习笔记(三):神经网络反向传播算法推导
2015-02-08 20:04
711 查看
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×nl−1为第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)=12∥∥hW,b(x)−y∥∥2=12∑i=1nl(a(l)i−yi)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。
∂J∂W(l)ij=∂J∂Z(l)i∂Z(l)i∂W(l)ij=∂J∂a(l)i∂a(l)i∂Z(l)ia(l−1)j=∂J∂a(l)if′(Z(l)i)a(l−1)j(4)
∂J∂b(l)i=∂J∂Z(l)i∂Z(l)i∂b(l)i=∂J∂a(l)i∂a(l)i∂Z(l)i=∂J∂a(l)if′(Z(l)i)(5)
令误差项(大部分教材中,都把误差项分配到l+1层,但从个人编程的角度理解,把它归入到l层更方便)δ(l)i=∂J∂a(l)if′(Z(l)i)(6),代入(4)(5)式,有:
∂J∂W(l)ij=δ(l)ia(l−1)j(7)
∂J∂b(l)i=δ(l)i(8)
或矢量化形式:
∇W(l)=∂J∂W(l)=δ(l)(a(l−1))T(9)
∇b(l)=∂J∂b(l)=δ(l)(10)
其中:
δ(l)=[δ(l)1,…,δ(l)nl]T,a(l−1)∈Rnl−1×1,∇W(l)∈Rnl×nl−1,∇b(l)∈Rnl×1
若l层为输出层,则:
∂J∂a(l)i=∂(∑nlk=112(a(l)k−yk)2)∂a(l)i=a(l)i−yi(11)
则:δ(l)i=∂J∂a(l)if′(Z(l)i)=(a(l)i−yi)f′(Z(l)i)(12)
或
δ(l)=(a(l)−y)∙f′(Z(l))(13)
(12)式中的“∙”是向量和矩阵中元素相乘运算符。
若l层是隐藏层,我们还需要对∂J∂a(l)i做进一步的处理。函数J是向量Z(l+1)的函数,而它的每个元素又是a(l)i的函数。根据复合函数求导公式,对J求a(l)i的偏导数有:
∂J∂a(l)i=∑j=1nl+1∂J∂Z(l+1)j∂Z(l+1)j∂a(l)i=∑j=1nl+1∂J∂a(l+1)j∂a(l+1)j∂Z(l+1)j∂Z(l+1)j∂a(l)i=∑j=1nl+1∂J∂a(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)=1m∑i=1mJ(W,b;x(i),y(i))=1m∑i=1m12∥∥hW,b(x(i))−y(i)∥∥2
a(0)=X,Z(l)=W(l)×X,a(l)=f(Z(l)),l=1…nl
对于梯度
∇W(l)=1mδ(l)(a(l−1))T
∇b(l)=1m∑i=1mδ(i)
和误差项δ(l)=(W(l))T×δ(l+1)∙f′(Z(l))
1.4 规范化
为了防止过拟合(overfiting),需要对误差函数和W梯度添加L2范式惩罚项。假定网络有L层,J(W,b)=1m∑i=1m12∥∥hW,b(x(i))−y(i)∥∥2+λ2∑l=1L∑i=1nl∑j=1nl−1(W(l)ij)2
∇W(l)=1mδ(l)(a(l−1))T+λW(l)
2. 算法描述
重复直到收敛{- 执行前向传播,得到各层的激活值
- 计算最后一层的δ
- 反向传播计算各层δ
- 计算各层W和b的梯度
- 使用梯度下降更新W和b
}
相关文章推荐
- Deep Learning 学习笔记(7):神经网络的求解 与 反向传播算法(Back Propagation)
- 深度学习:神经网络中的前向传播和反向传播算法推导
- 吴恩达老师深度学习视频课笔记:多隐含层神经网络公式推导(二分类)
- Coursera deeplearning.ai 深度学习笔记1-3-Shallow Neural Networks-浅层神经网络原理推导与代码实现
- Deep Learning(深度学习)之(五)神经网络训练中的高效BP(反向传播算法)
- Deep Learning 学习笔记(6):神经网络( Neural Network )
- July深度学习笔记之神经网络与反向传播算法
- 吴恩达老师深度学习视频课笔记:单隐含层神经网络公式推导及C++实现(二分类)
- Coursera deeplearning.ai 深度学习笔记1-4-Deep Neural Networks-深度神经网络原理推导与代码实现
- 深度学习:神经网络中的前向传播和反向传播算法推导
- 神经网络与深度学习笔记——第2章 反向传播算法
- 学习笔记:Deep Learning(二)深度神经网络以及正则化
- Deep Learning 学习笔记(二):神经网络Python实现
- 学习笔记:Deep Learning(四)循环神经网络
- 【神经网络学习笔记】语音识别-matlab语音信号预处理
- Deep Learning论文笔记之(三)单层非监督学习网络分析
- 斯坦福机器学习-week4 学习笔记——初识神经网络
- 【神经网络学习笔记】遗传算法初探
- [神经网络]学习笔记
- UFLDL 教程学习笔记(一)神经网络