Standford机器学习 神经网络的学习(Neural Network Learning)
来源:互联网 发布:机票出票软件 编辑:程序博客网 时间:2024/06/10 03:07
上一讲讲了神经网络的表示,神经网络中,从前一层映射到后一层的需要有个一个权重矩阵Theta和激活函数,映射后可以得到该层神经元的activation。如何来学习Theta是本讲要解决的内容。
首先,对于一个分类问题,如果是两类问题,输出层只需要有一个神经元,输出1为正类,输出0为负类。而对于多类的问题,需要有多个神经元。定义一个神经网络,如下:
它的输出是一个向量,如图,假设要分成4类,向量的对应类别下标为1,输出可以表示成
根据上一讲神经网络的表示,和逻辑回归的估价函数类似(神经网络就是把每个神经元的估价函数相加得到的),可以得出如下的估价函数
估价函数的优化—反向传播算法(BackpropagationAlgorithm)
对于上面的估价函数,常用的方法是利用梯度下降法来计算。在利用梯度下降法的时候,主要的两步计算是求J和在当前点的梯度。神经网络中用到了一个求梯度的非常高效的算法,即反向传播算法(BackpropagationAlgorithm)。
对于上面这个四层网络,我们可以用前向传播得到每一层每一个神经元的activation,所谓前向传播就是利用之前定义的方法,按顺序计算每层神经网络的activation,如下:
接下来定义每一层error的概念,用符号表示是这样
对于输出层的每一个神经元可以计算出它的误差
因为a已经从前向传播算法中得到了,而yi就是每个样本已知的实际类别。然后计算倒数第二层的误差,当计算前面层的误差时就需要用到反向传播算法了。反向传播算法定义如下:
g(z)的倒数为g(z)(1-g(z)),自己推导下,代入这个式子中。从这个式子可以看出,后一层的误差是由前一层的误差推导而来,Theta转置之后刚好和前向传播反向,这也是可以理解的。
这样就能通过误差,计算出每一层的delta值,而梯度就是通过该delta值来计算的。
然后就得到了梯度
梯度校验(Gradient Checking)
在实际神经网络的学习中,由于学习过程过于复杂,我们会不确定自己写的程序梯度计算对了没有,梯度校验就是一种来近似估计当前点的梯度的方法。
根据导数的定义,如果elpsiton趋向于无穷小,那么约等于号右边的值正是改点的导数,于是我们就区一个非常小的elpsiton,比如elpsiton为0.001,来估计该点的梯度值。这样计算出来的梯度和实际的梯度会非常的接近。对于某一点,如果你程序计算的梯度和这样估计出来的梯度有很大的差别,那么或许是你的程序写错了。
对于每个theta就可以通过下式来求得:
另外,之所以不用梯度校验来求梯度,是因为梯度校验比反向传播算法更加复杂,计算需要消耗更多的时间,你的程序会很慢。
随机初始化(Random Initialization)
如果和前面讲到的逻辑回归中的初始化一样,把全部的theta初始化为0,会出现什么问题呢?如果把所有的theta初始化一样的话,每层神经网络得到的activation也全是一样的,这样一直优化下去会得到theta值全部一样的结果,这明显对我们的模型是不利的。
解决方法就是随机初始化,先设定一个较小的值init_elpsiton,然后初始化如下
这样的theta值就是在-init_elpsiton和init_elpsiton之间的随机初始值了,就可以解决上面那个问题。
另外,神经网络学习的话可以看下下面这篇文章,可以让你对神经网络由一个更好的了解。
点击打开链接
- Standford机器学习 神经网络的学习(Neural Network Learning)
- Standford机器学习 神经网络的学习(Neural Network Learning)
- Standford机器学习 神经网络(Neural Network)的表示
- Standford NG机器学习 神经网络(Neural Network)的表示
- Standford机器学习 神经网络(Neural Network)的表示
- Stanford机器学习---神经网络的学习 Neural Networks learning
- 斯坦福大学机器学习“神经网络的学习(Neural Networks: Learning)”
- 机器学习笔记(五)----神经网络的学习(Neural Networks: Learning)
- Andrew NG 机器学习 笔记-week5-神经网络的学习(Neural Networks:Learning)
- 神经网络的机器学习(Neural Networks for Machine Learning)(1)
- 神经网络的机器学习(Neural Networks for Machine Learning)(2)
- 神经网络的机器学习(Neural Networks for Machine Learning)(3)
- 神经网络的机器学习(Neural Networks for Machine Learning)(4)
- 神经网络的机器学习(Neural Networks for Machine Learning)(5)
- 神经网络的机器学习(Neural Networks for Machine Learning)(6)
- 神经网络的机器学习(Neural Networks for Machine Learning)(7)
- Standford 机器学习—第四讲 神经网络的表示
- [机器学习入门] 李宏毅机器学习笔记-11(Convolutional Neural Network;卷积神经网络)
- poj1149 PIGS
- IDC<全球智能终端市场季度跟踪>
- form 中Enctype=multipart/form-data 的作用
- shared pool原理,有AWR报告,主要是library 方面
- 文本分类
- Standford机器学习 神经网络的学习(Neural Network Learning)
- Tomcat无法访问manager页面
- 文本溢出显示省略标记'...'的bug
- 如何保证只有一个进程实例
- 如何学好iphone游戏开发
- erlang学习笔记本【不断更新】
- 第8章 熵编码
- linux下cat命令详解
- 流行趋势:25个最佳的扁平化网页设计案例