小标
2018-10-18
来源 :
阅读 1762
评论 0
摘要:本文主要向大家介绍了机器学习入门之Stanford机器学习---第五讲. 神经网络的学习 Neural Networks learning,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助。
本文主要向大家介绍了机器学习入门之Stanford机器学习---第五讲. 神经网络的学习 Neural Networks learning,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助。
第五讲——Neural Networks 神经网络的表示
===============================
(一)、Cost function
(二)、Backpropagation algorithm
(三)、Backpropagation intuition
(四)、Implementation note: Unrolling parameters
(五)、Gradient checking
(六)、Random initialization
(七)、Putting it together
===============================
(一)、Cost function
如果神经网络的训练样本有m个。每一个包括一组输入x和一组输出信号y,L表示神经网络层数。Sl表示每层的neuron个数(SL表示输出层神经元个数)。
将神经网络的分类定义为两种情况:二类分类和多类分类。
卐二类分类:SL=1, y=0 or 1表示哪一类;
卐K类分类:SL=K, yi = 1表示分到第i类;(K>2)
我们在前几章中已经知道,Logistic hypothesis的Cost Function例如以下定义:
当中。前半部分表示hypothesis与真实值之间的距离。后半部分为对參数进行regularization的bias项,神经网络的cost function同理:
hypothesis与真实值之间的距离为 每一个样本-每一个类输出 的加和,对參数进行regularization的bias项处理全部參数的平方和
===============================
(二)、Backpropagation algorithm
前面我们已经讲了cost function的形式,以下我们须要的就是最小化J(Θ)
想要依据gradient descent的方法进行參数optimization,首先须要得到cost function和一些參数的表示。依据forward propagation,我们首先进行training dataset 在神经网络上的各层输出值:
我们定义神经网络的总误差为:
希望通过调整权重參数W(也就是theta)来最小化E。
因为
所以每一层按例如以下方式进行更新:
依据backpropagation算法进行梯度的计算。这里引入了error变量δ,该残差表明了该节点对终于输出值的残差产生了多少影响。
对于最后一层,我们能够直接算出网络产生的输出与实际值之间的差距,我们将这个差距定义为。对于隐藏单元我们怎样处理呢?我们将通过计算各层节点残差的加权平均值计算hidden
layer的残差。读者能够自己验证下。事实上就是E对b求导的结果。
在最后一层中。
对于前面的每一层,都有
由此得到第l层第i个节点的残差计算方法:
因为我们的真实目的是计算,且
所以我们能够得到神经网络中权重的update方程:
不断迭代直到落入local optima,就是backpropagation的算法过程。
数值梯度下降会比bp慢,
合理默认:一个隐含层,或者假设有超过一个隐含层,通常每一个隐含层有同样的隐含单元(通常这样效果最好)
训练一个神经网络:
1、随机初始化权重 (通常非常小接近于0)2、应用前向反馈得到一个相应不论什么x的如果y
3、计算代价函数 4、应用后向计算偏导
============================================================
Example of logistical cost:
以下我们针对logistical cost给出计算的样例:
而对于每一层。其误差能够定义为:
分别代入即得
由此得来\theta_{k}的update方程:
假设将误差对激励函数(activation function)的导数记做δ,则有:
对于前面一层 ,更新同理,,仅仅是上一层\Theta梯度的第一个分量E对a_k求导有所变化,
可是始终是不变的。
下图就是上面推导得出的结果:
由上图我们得到了error变量δ的计算,以下我们来看backpropagation算法的伪代码:
ps:最后一步之所以写+=而非直接赋值是把Δ看做了一个矩阵,每次在对应位置上做改动。
从后向前此计算每层依的δ,用Δ表示全局误差,每一层都相应一个Δ(l)。再引入D作为cost
function对參数的求导结果。下图左边j是否等于0影响的是是否有最后的bias regularization项。左边是定义,右边可证明(比較繁琐)。
===============================
(三)、Backpropagation intuition
上面讲了backpropagation算法的步骤以及一些公式,在这一小节中我们讲一下最简单的back-propagation模型是如何learning的。
首先依据forward propagation方法从前往后计算z(j),a(j) ;
然后将原cost function 进行简化,去掉下图中后面那项regularization项,
那么对于输入的第i个样本(xi,yi),有
Cost(i)=y(i)log(hθ(x(i)))+(1- y(i))log(1- hθ(x(i)))
由上文可知,
当中J就是cost。那么将其进行简化,临时不考虑g‘(zk) = ak(1-ak)的部分,就有:
经过求导计算可得,对于上图有
换句话说, 对于每一层来说,δ分量都等于后面一层全部的δ加权和,当中权值就是參数Θ。
===============================
(四)、Implementation note: Unrolling parameters
这一节讲述matlab中怎样实现unrolling parameter。
前几章中已经讲过在matlab中利用梯度下降方法进行更新的根本,两个方程:
function [jVal, gradient] = costFunction(theta)
optTheta = fminunc(@costFunction, initialTheta, options)
与linear regression和logistic regression不同,在神经网络中。參数许多,每一层j有一个參数向量Θj和Derivative向量Dj。那么我们首先将各层向量连起来。组成大vectorΘ和D,传入function,再在计算中进行下图中的reshape。分别取出进行计算。
计算时。方法例如以下:
===============================
(五)、Gradient checking
神经网络中计算起来数字千变万化难以掌握,那我们怎么知道它里头工作的对不正确呢?不怕,我们有法宝,就是gradient checking,通过check梯度推断我们的code有没有问题,ok?怎么做呢,看下边:
对于以下这个【Θ-J(Θ)】图,取Θ点左右各一点(Θ+ε),(Θ-ε),则有点Θ的导数(梯度)近似等于(J(Θ+ε)-J(Θ-ε))/(2ε)。
对于每一个參数的求导公式例如以下图所看到的:
因为在back-propagation算法中我们一直能得到J(Θ)的导数D(derivative)。那么就能够将这个近似值与D进行比較。假设这两个结果相近就说明code正确,否则错误,例如以下图所看到的:
Summary: 有下面几点须要注意
-在back propagation中计算出J(θ)对θ的导数D,并组成vector(Dvec)
-用numerical gradient check方法计算大概的梯度gradApprox=(J(Θ+ε)-J(Θ-ε))/(2ε)
-看是否得到同样(or相近)的结果
-(这一点很重要)停止check,仅仅用back propagation 来进行神经网络学习(否则会很慢,相当慢)
===============================
(六)、Random Initialization
对于參数θ的initialization问题。我们之前採用所有赋0的方法。比方:
this means all of your hidden units are computing all of the exact same function of the input. So this is a highly redundant representation. 由于一层内的全部计算都能够归结为1个。而这使得一些interesting的东西被ignore了。
所以我们应该打破这样的symmetry。randomly选取每个parameter,在[-ε,ε]范围内:
===============================
(七)、Putting it together
1. 选择神经网络结构
我们有非常多choices of network :
那么怎么选择呢?
No. of input units: Dimension of features
No. output units: Number of classes
Reasonable default: 1 hidden layer, or if >1 hidden layer, have same no. of hidden units in every layer (usually the more the better)
2. 神经网络的训练
① Randomly initialize weights
② Implement forward propagation to get hθ(x(i)) for anyx(i)
③ Implement code to compute cost function J(θ)
④ Implement backprop to compute partial derivatives
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标人工智能机器学习频道!
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号