机器学习公开课笔记(5):神经网络(Neural Network)——学习
来源:互联网 发布:淘宝下单流程图 编辑:程序博客网 时间:2024/05/29 03:14
http://www.cnblogs.com/python27/p/MachineLearningWeek05.html
这一章可能是Andrew Ng讲得最不清楚的一章,为什么这么说呢?这一章主要讲后向传播(Backpropagration, BP)算法,Ng花了一大半的时间在讲如何计算误差项
简单神经网络的后向传播(Backpropagration, BP)算法
1. 回顾之前的前向传播(ForwardPropagration, FP)算法
FP算法还是很简单的,说白了就是根据前一层神经元的值,先加权然后取sigmoid函数得到后一层神经元的值,写成数学的形式就是:
2. 回顾神经网络的代价函数(不含regularization项)
3. 一个简单神经网络的BP推导过程
BP算法解决了什么问题?我们已经有了代价函数
下面我们从一个简单的例子入手考虑如何从数学上计算代价函数的梯度,考虑如下简单的神经网络(为方便起见,途中已经给出了前向传播(FP)的计算过程),该神经网络有三层神经元,对应的有两个权重矩阵
首先我们先计算第2个权重矩阵的偏导数,即
按照求导的链式法则,我们可以先求
由
接下来仅需要计算
至此我们已经得到
接下来我们需要求
根据链式求导法则有
我们分别计算等式右边的三项可得:
带入后得
令
把上面的结果放在一起,我们得到
观察上面的四个等式,我们发现
- 偏导数可以由当前层神经元向量
a(l) 与下一层的误差向量δ(l+1) 相乘得到 - 当前层的误差向量
δ(l) 可以由下一层的误差向量δ(l+1) 与权重矩阵Δl 的乘积得到
所以可以从后往前逐层计算误差向量(这就是后向传播的来源),然后通过简单的乘法运算得到代价函数对每一层权重矩阵的偏导数。到这里算是终于明白为什么要计算误差向量,以及为什么误差向量之间有递归关系了。尽管这里的神经网络十分简单,推导过程也不是十分严谨,但是通过这个简单的例子,基本能够理解后向传播算法的工作原理了。
严谨的后向传播算法(计算梯度)
假设我们有
初始化:设置
For i = 1 : m
- 设置
a(1)=X - 通过前向传播算法(FP)计算对各层的预测值
a(l) ,其中l=2,3,4,…,L - 计算最后一层的误差向量
δ(L)=a(L)−y ,利用后向传播算法(BP)从后至前逐层计算误差向量δ(L−1),δ(L−1),…,δ(2) , 计算公式为δ(l)=(Θ(l))Tδ(l+1).∗g′(z(l)) - 更新
Δ(l)=Δ(l)+δ(l+1)(a(l))T
end // for
计算梯度:
BP实际运用中的技巧
1. 将参数展开成向量
对于四层三个权重矩阵参数
thetaVec = [Theta1(:); Theta2(:); Theta3(:)];
2. 梯度检查
为了保证梯度计算的正确性,可以用数值解进行检查,根据导数的定义
Matlab Code 如下
for
i
= 1 : n
thetaPlus = theta;
thetaPlus(
i
) = thetaPlus(
i
) + EPS;
thetaMinus = theta;
thetaMinus(
i
) = thetaMinus(
i
) - EPS;
gradApprox(
i
) = (J(thetaPlus) - J(thetaMinus)) / (2 * EPS);
end
最后检查 gradApprox 是否约等于之前计算的梯度值即可。需要注意的是:因为近似的梯度计算代价很大,在梯度检查后记得关闭梯度检查的代码。
3. 随机初始化
初始权重矩阵的初始化应该打破对称性 (symmetry breaking),避免使用全零矩阵进行初始化。可以采用随机数进行初始化,即
如何训练一个神经网络
- 随机初始化权重矩阵
- 利用前向传播算法(FP)计算模型预测值
hθ(x) - 计算代价函数
J(Θ) - 利用后向传播算法(BP)计算代价函数的梯度
∂J(Θ)∂Θ(l) - 利用数值算法进行梯度检查(gradient checking),确保正确后关闭梯度检查
- 利用梯度下降(或者其他优化算法)求得最优参数
Θ
附:一个简短的后向传播教学视频
参考文献
[1] Andrew Ng Coursera 公开课第五周
[2] Derivation of Backpropagation. http://web.cs.swarthmore.edu/~meeden/cs81/s10/BackPropDeriv.pdf
[3] Wikipedia: Backpropagation. https://en.wikipedia.org/wiki/Backpropagation
[4] How the backpropagation algorithm works. http://neuralnetworksanddeeplearning.com/chap2.html
[5] 神经网络和反向传播算法推导. http://www.mamicode.com/info-detail-671452.html
- 机器学习公开课笔记(5):神经网络(Neural Network)——学习
- 机器学习公开课笔记(4):神经网络(Neural Network)——表示
- 台湾大学机器学习笔记——Neural Network 神经网络
- 机器学习笔记——Neural Network
- Coursera公开课笔记: 斯坦福大学机器学习第九课“神经网络的学习(Neural Networks: Learning)”
- 深度学习笔记(1)——神经网络(neural network)
- 机器学习笔记-Neural Network
- coursera机器学习技法笔记(12)——Neural Network
- [机器学习入门] 李宏毅机器学习笔记-11(Convolutional Neural Network;卷积神经网络)
- Standford机器学习 神经网络的学习(Neural Network Learning)
- Standford机器学习 神经网络的学习(Neural Network Learning)
- 斯坦福机器学习公开课笔记(六)--神经网络的学习
- 斯坦福机器学习公开课笔记--神经网络的学习
- Standford机器学习 神经网络(Neural Network)的表示
- Standford NG机器学习 神经网络(Neural Network)的表示
- Standford机器学习 神经网络(Neural Network)的表示
- 深度学习笔记(2)——卷积神经网络(Convolutional Neural Network)
- 斯坦福机器学习公开课笔记(五)--神经网络的表示
- Android WebView简单使用
- iOS——给UIView的CALayer层添加渐变效果
- Union-find
- (⊙o⊙)…
- ArcGis9.3在Layout View中如何将地图横过来
- 机器学习公开课笔记(5):神经网络(Neural Network)——学习
- Java中@ 的作用
- 神一般的C语言指针,你看懂多少?
- 【splay】BZOJ 3223 文艺平衡树
- 源码角度深入理解Activity
- Hdu 2073解题报告
- android源码分析(一) - 语言切换机制
- (类型转换)运算符重载
- iOS——API及各种字符串的连接关系