在AlphaGO血虐人类 和 最强大脑小度精彩表现的刺激下, 后知后觉的对人工智能产生了浓厚的兴趣。
看了一些相关的介绍和论文, 感觉还是要从基础学起。
出于对大名鼎鼎的Andrew老师的膜拜,开始学习他讲的机器学习课程。
根据自己的理解和老师的讲义整理一些笔记,方便自己巩固和学习。
文中会有很多不准确或不通顺的理解, 后期会慢慢整理通顺,也希望大神来拍砖指点。
视频地址:https://class.coursera.org/ml/class/index
讲义地址:http://cs229.stanford.edu/materials.html
机器学习包括很多内容,如监督学习,非监督学习,强化学习等等。
关于这些名词的概念 可以网络搜索一下,看看知乎,很容易理解。
本文主要集中对课程内容进行总结,从监督学习开始。
监督学习(Supervised learning)
首先,抛出一个简单的问题。
我们手上有一些数据, 是房屋的面积和价格, 下图左侧是数据表,右侧是散点图(横轴是面积,纵轴是价格)。
根据上面的数据, 我们如何预测该地区其他房屋的价格呢?
我们希望通过房屋面积 推算出 房屋价格, 这里明确一些概念:
房屋的面积即为输入 特征(Input)
想要估算的房屋价格 即为 输出的目标(target)
现有的每一组(面积,价格)数据,是训练样本(training example)
我们现有的所有面积,价格数据,是训练集(training set)
这样,可以将前面的由房屋面积推算价格的问题,“升级”为:
通过学习训练集, 找到一个函数h,能够很好的根据特征x 估计出目标y。如下图:
下面再给出两个定义:
如果目标变量y是连续变化的,如上文中提到的房价,这类问题称为回归问题(regression problem);
如果目标变量y仅有几个可选的值(如:根据房屋信息判断房屋是别墅还是公寓,则y只有两个值,别墅或公寓),则称之为分类问题(classification problem)。
线性回归(Linear Regression)
为了让问题更有趣,将上文抛出的房价问题搞的复杂一点, 加入卧室数量,如下图:
这时输入变量有两个,面积x1 和 卧室数量x2。
我们先选择一个关于x的线性方程来描述这个问题,如下:
再引入一个 x0=1, 这样h就可以表示成:
这里参数和x均可看成是向量(以后提到
的话,都不是一个值,而是一组参数哦!),
n是特征数量(没算x0),刚刚提到的面积和卧室数量共两个特征,所以n=2。
此时,根据样本集找到合适的参数,就能够得到我们想要的函数h了(不要问我得到h后能干什么哦~~)。
这里还要引入一个代价函数(cost function) 的概念。
引入代价函数是为了找到合适的参数, 代价函数是一个关于
的函数,
这个函数的值越小,说明h(x)与真实结果y约接近。对房价问题定义如下的代价函数:
我们的目标就是找到,使代价函数J值最小,从而得到想要的函数h。
下面会介绍一些寻找这样的的算法。
梯度下降(gradient descent)
梯度下降简单来说就是逐步寻找代价函数的最小值。
具体方法是:首先对各个纬度的参数设定初始值,
然后逐步调整该值最终找到代价函数的局部最小值。调整公式如下:
对J求导如下:
因此调整公式可以写成:
这是对于单个样本的公式,而一般来说实际情况一定是有多个样本。
对于多个样本我们有两种处理方式:批梯度下降和随机梯度下降。
批梯度下降(batch gradient descent)
批梯度下降是每次调整参数都结合所有样本进行运算, 公式如下:
其中叫学习率(learning rate),即每次调整的幅度,这个参数的选取对梯度下降也有很大影响,后续会讲到。
批梯度下降的好处是一定能找到局部最小值, 缺点是当样本数量巨大的时候,运算量大,导致收敛速度慢。
随机梯度下降(stochastic gradient descent)
随机梯度下降算法是每次使用一个样本进行运算,公式如下:
随机梯度下降好处是收敛迅速,但有可能会在局部最小值附近徘徊,无法找到最小值(但一般来说结果已经很接近最小值,是可以接受的)。
除了梯度下降, 还有一种无需循环遍历的寻找最小值的方法,叫正规方程(normal equations)。
正规方程(normal equations)
定义如下:
另外把所有样本均看成向量,可得:
综上可得(其中用到了一些线性代数的公式,就不证明了,参考讲义cs229-Notes1第11页):
这样,为了让J取得最小值,
整理得:
下面链接也能帮助理解normal equations:
https://zhuanlan.zhihu.com/p/22757336
下面手写了点便于理解的思路,字丑请忽略。