前言
近些年来机器学习、神经网络、深度学习越来越火热,从去年的AlphaGo的大放异彩到这几天和最顶尖人类棋手连战豪取60连胜的神秘棋手Master(现已经被证实为AlphGo的升级版),这些技术让我们这些普通人也真正感受到了人工智能的强大。一直以来我都式作为旁观的身份来仰望着这些神奇有趣技术,虽然它们无时无刻不吸引着我,但是我总是觉得自己能力够而不敢去触碰。
最近在看《科学的极致——漫谈人工智能》这本科普书,书中介绍了很多人工智能邻域有趣的问题和技术,终于在认识到了人工智能领域众多技术之后,我开始尝试学习当前深度学习学术界最著名的学者之一的Andrew Ng教授在斯坦福大学的《机器学习》公开课。
《机器学习》课程设计到很多知识点,但是我这里不会讲课程上的知识一一全部记录,因为在网上一搜,发现又网友的都在期blog上分享了学习笔记,而且都做得相当不错,而在斯坦福大学的网站上也能找到该课程的讲义资料,所以会记录下网友中整理的比较好的笔记文章的链接,而我自己的笔记讲主要集中在自己对这些知识的理解上。
监督学习
《机器学习》第二课知识点笔记:http://blog.csdn.net/xiaocainiaodeboke/article/details/50371986
《机器学习》课程的第一个大的部分是 监督学习。其实一直来我都有听说过“监督学习”、“非监督学习”这些名词,但是完全搞不懂是什么意思。听过《机器学习》的第二课之后,终于有了一点认识。现在我的理解是:对与要解决的问题,所提供的输入的数据都是知道其实际的真实结果的,而监督学习的方式是让计算机找出的解决问题的方法与实际的结果尽量吻合。而“非监督学习”则是对于输入的数据不知道其实际结果,而需要计算机自己发现和挖掘规律,来形成解决方法。它们的差异主要是输入的数据实际结果是否已知。
这样解释是有点抽象,具体一点,监督学习可以分为两类问题:回归问题和分类问题。回归问题是在已知的数据和结果平面上做拟合曲线,而分类问题则是用曲线划分结果不同的数据区域,而这些都是在已知数据对应的真正的结果后才能做的。
在监督学习中,通常的方法是:假设一个结果的拟合曲线表达式,用输入的数据去验证,得到计算结果和实际结果之间的差值;然后通过上一次的结果改进方法,再次验证,一直到计算的结果和实际结果接近;
那么怎么判断计算的结果已经是最优呢?这里一般会累加输入数据的计算结果和真实结果的方差和来判断。所以当求得方差和的最小值时,其对应的表达式就是最优的。
梯度下降算法
为了求得方差和最小,一个最简单最古老的算法就是—— 梯度下降法。其原理是:计算方差和表达式变化率最大的负方向,沿着这个方向前进就能走到平面最低点,而最低点对应方差和的最小值。
特殊的以线性拟合为例,如果只研究输入数据的一个属性和结果的关系,那么我们需要得到的式一个一元一次方程y=ax+b,未知量为系数a和b。那么其方差和表达式就可以看成一个关于a、b的二元二次方程,用三维图像可以画出其对应的就是空间里的一个曲面,沿着两个2维度找到负梯度最大的方向,当梯度为0时,就是这个平面的最小值。
使用梯度下降算法的步骤是:先设定一个初值(如上例子中的a和b都为0),找到这个初值点的最大负梯度方向,然后向这个方向上移动,得到一个新的点,同样求取这一点的最大负梯度方向,依次迭代,直到最大负梯度为0,这时候的结果(a和b)就是最优的。
梯度下降算法的特点:
- 每次迭代都需要把所有的数据都重新遍历一遍,当数据量很大时,计算比较费的时。
- 每次迭代的步进度是变化的,当接近最小点时步进需要很小,否则就会走过。
- 初值选取对结果有很大影响,应为其找的时局部最优解。
随机梯度下降法
如上所说,如果数据量很大时,使用全部的数据的梯度下降来求最优解是计较耗时的,着方法被称之为批梯度下降算法。为了简化这个算法,人们有在其基础上改进得到了随机梯度下降算法。
随机梯度下降算法,每次只使用一个数据,同样确定一个初始点,计算它的样本中任意一个数据的方差表达式的最大负梯度,然后向最大负梯度的方向移动,然后在在样本中任取另外一个点,做同样的操作,依次迭代。通常在数据量很大的情况下,只用迭代一小部分数据就可以求得一个相对较优得解。
正规方程
在课程中Andrew Ng还讲解了求取最优解得另一种方式——正规方程,使用矩阵的形式推导,而不用像梯度下降那样每次都需要去迭代了,直接使用矩阵推导的最优解的表达式不一步到位。可惜矩阵相关的知识都已经忘记的差不多了,所以推导的过程完全听不懂。
显然,对于样本数据量大、每一个数据的属性变量多时,用正规方程去求解更有优势。关于梯度下降算法和正规表达式的比较,有网友总计:http://blog.csdn.net/sd9110110/article/details/53558821