介绍
什么是机器学习?
有两种定义。Arthur Samuel如此描述机器学习:一个领域的研究,旨在研究,在不进行编程的情况下,让计算机具有学习能力。
Tom Mitchell给出了一个更为现代的定义:一个计算机程序从经验E以及评判标准P中学习如何完成任务T,随着E的累积,P得到提升。
例如,下棋游戏中:
- E:在很多盘棋局中的经验
- T:下棋任务
- P:程序赢得下一盘棋的可能性
总体来说,任何机器学习问题可以分为监督学习(supervised learning)
和无监督学习(unsupervised learning)
监督学习
在监督学习中,给定一个数据集,并且我们已经知道输出看起来是什么样子的,知道数据和输出之间是存在联系的。
监督学习可分为“回归(regression)”
和“分类(classification)”
两种类型的问题。在回归问题中,我们试图预测连续的结果,换句话说,我们试图将输入变量映射到某种连续函数。在分类问题中,却试图预测离散结果,换句话说,我们试图将输入变量映射进离散的类别中。
例子1:
给定一组关于房子大小的数据,预估出价格。从大小推算价格的函数的输出是连续的,所以这是个回归问题。
如果换一种问法:“预估房价与指定价格的大小关系”。这个问题就转化为分类问题了,因为我们试图将房价分为两种离散的类别中(大于或小于)。
例子2:
a) 回归:给定一张男性或女性的照片,推算年龄。
b) 分类:给定一张男性或女性的照片,估计他/她是高中生还是大学生。另一个分类的例子:银行需要根据跟人信用历史,判断是否要给其贷款。
无监督学习
无监督学习是指在几乎对结果一无所知的情况下,趋近结果。在对输入数据的变量缺少必要的认识的情况下,从中获取一些结构。通过将数据中变量的关联,将数据进行聚类,从而获取这些结构。无监督学习对于预测结果是没有反馈的。
例如:
聚类:从1,000,000个不同的基因中,找到某种方式,能够自动将具有某种相似性或关联的基因进行分组,这些变量可能是寿命,位置,功能等。
非聚类:“鸡尾酒算法”,能否从嘈杂环境中识别不同的声音。(例如,在鸡尾酒会上,从混合的声音中区分人声或音乐声)
模型和代价函数
模型表示
这里以监督学习中的房子大小预测房价问题为例。使用$ x^{(i)} $指代输入变量(这里是房屋面积),$ y^{(i)} $指代输出或者我们需要预测的结果(这里是房屋价格)。元组($ x^{(i)}, y^{(i)} $)是训练用例数据集,m
个训练用例$ (x^{(i)},y^{(i)});i=1,...,m $称为训练数据集。注意,上标(i)
,并没有幂运算的功能。我们也会使用X
,表征输入数据集,Y
表征输出数据集。
稍微正规的解释一下监督学习是什么。监督学习的目标是,给定一个训练数据集,尝试学习一个函数h: X → Y
,使得h(x)
成为好的预测y的函数。由于历史原因,这个h函数称为假设函数(hypothesis)
,下图说明了这个流程:
如果我们要预测的目标值是一个连续值时,例如房价预测问题,我们称这种机器学习问题为回归(regression)问题
;如果y值只在少数的离散值中取值(例如,假设给定面积,预测这是个house还是apartment),我们称为分类(classification)问题
。
代价函数
我们可以使用代价函数(cost function)
来衡量假设函数(hypothesis function)
的精准性。代价函数实际上计算的就是每一个经由假设函数计算而来的y,与实际的y的差值的平均值。当这个差值最小时,假设函数最优。
如果hypothesis function
如下:
$$ h(x)=θ_0+θ_1x $$
这是一个线性函数,对于房价预测问题,我们的最终目的是通过算法,得到一组最优的$ (θ_0,θ_1) $使得对所有的训练集合X(房屋面积)
,通过h(x)
计算得到的Y(房屋价格)
与实际的Y
偏差最小,即拟合度
最高。为了衡量h(x)
的拟合度,使用代价函数$ J(θ_0,θ_1) $如下:
$$ J(θ_0,θ_1) = {1 \over 2m} {\sum_{i=1}^m(h_θ(x_i)-y_i)^2} $$
通过观察,不难发现,该公式实际计算的是,y的方差的均值。并且这个均值越小,说明拟合度越高。所以算法推导$ (θ_0,θ_1) $的过程,就是求$ J(θ_0,θ_1) $最小值的过程。
直观的看,我们可以把训练数据集看成散落在一个x-y的二维坐标系中的点,试图找到一条直线(由$ h_θ(x) $定义),穿过这些点。最终的目的是,找到一条这样的一条直线,使得这些点离这条直线的垂直距离最近。理想状态下,这条直线能够穿过所有的点,这时$ J(θ_0,θ_1) $为0。
这个代价函数也称为平法误差代价函数(Squared error function)
或均方误差(Mean squared error)
。将均方除以2,是为了梯度下降算法的计算。下图总结了代价函数
:
为了更直观的观察代价函数,我们假设,需要预测的变量只有一个$ θ_1 $,那么h(x)
如下:
$$ h(x)=θ_1x $$
这将是一条经过原点的直线。那么容易想到,随着斜率$ θ_1 $的变化,$ J(θ_1) $将呈现出一个如下类似抛物线的造型:
总能找到一个$ θ_1 $使得$ J(θ_1) $最小。
如果有两个变量$ J(θ_0,θ_1) $:
$$ h(x)=θ_0+θ_1x $$
那么$ J(θ_0,θ_1) $将同时受到两个变量的影响,这将是一个三维的图形:
因此,我们总能找到一组$ (θ_0,θ_1) $,使得$ J(θ_0,θ_1) $最小。用三维图观察并不直观,现在我们引入一种叫contour plot
的图。观察上面的三维图,我们用一个平行于底面的平面穿过曲面,与曲面相交,形成一个类似椭圆的闭环,随着这个平面高度的变化,将产生无数的类似椭圆的闭环,如果将这些椭圆闭环投影到底面,将形成一个类似靶环的图形,就跟下图的右图一样,这称为contour plot
:
在同一个环上的点,对应不同的$ (θ_0,θ_1) $取值,但是他们的$ J(θ_0,θ_1) $是相同的。而靶环
的中心点,就是能够使得$ J(θ_0,θ_1) $最小的$ (θ_0,θ_1) $取值:
梯度下降
现在我们有了hypothesis function
和用于衡量hypothesis function
中参数$ (θ_0,θ_1) $取值拟合度的cost function
。现在将介绍第一个算法,称为Gradient Descent(梯度下降)
。算法的目的是找到一组变量$ (θ_0,θ_1) $,使得他们的代价函数$ J(θ_0,θ_1) $最小。我们把代价函数假想成如下的三维图,好似有一座座的山头,如果我们从某个山头的某处出发,往下走,走到最低点,每一步往哪个方向取决于当前往哪个方向走最优,我们可能会走到A点。如果换一个点出发,我们可能走到B点:
在决定下一步往哪里走的时候,我们采取的方式是,找到当前这个点的切线方向(切线即导数),切线方向告诉我们应该往哪个方向走;另一个影响因素是,每一步大小α
,这个参数我们称为learning rate学习速率
。单次梯度下降迭代得到的往往是局部最优解
,即上图的A,B两点是对于不同的起始点来说的最优解。
梯度下降算法描述如下:
重复如下步骤,直到收敛:
$$ θ_j := θ_j - α{∂ \over ∂θ_j}J(θ_0,θ_1), j=0,1 $$
上述公式中的:=
表示赋值,而不是数学意义上的判等。上式的迭代过程就是,从初始的$ (θ_0,θ_1) $开始,对于每组$ (θ_0,θ_1) $计算$ J(θ_0,θ_1) $的导数,然后得到新的$ (θ_0,θ_1) $,重复计算,直到$ (θ_0,θ_1) $不再变化,即收敛。
为了更直观的展示算法,我们任然假设h(x)
只有一个参数$ θ_1 $:
$$ h(x)=θ_1x $$
那么此时的算法可以描述为,重复如下过程直到收敛:
$$ θ_1 := θ_1 - α{∂ \over ∂θ_j}J(θ_1) $$
由于$ J(θ_1) $是关于$ θ_1 $的二次函数,所以$ ∂ \over ∂θ_j $ 表示$ θ_1 $所在点的切线斜率。从下图可以看出,当$ θ_1 $在上升沿时,斜率为正数,这会使得$ θ_1 $在迭代过程中逐渐减小;当$ θ_1 $在下降沿时,斜率为负数,这会使得$ θ_1 $在迭代过程中逐渐减增大,总之都是趋近于最低点的$ θ_1 $。
所以可以看到,算法巧妙的使用导数,让迭代过程自动趋向于正确的方向。
在算法中,$ α $是一个可调参数,当$ α $太小时,每次迭代,$ θ_1 $的变化很小,这样会算法的效率;而当$ α $太大时,每次迭代,$ θ_1 $的变化很大,这有可能会产生震荡,甚至无法收敛:
理想情况下,$ ∂ \over ∂θ_j $会在最低点,使得斜率为0,此时:
$$ θ_1 := θ_1 − α ∗ 0 $$
这样得到的新的$ θ_1 $不变,这就是收敛。
再考虑有两个变量$ (θ_0,θ_1) $的情况:
$$ h(x)=θ_0+θ_1x $$
前面我们将原本三维的代价函数,绘制成了contour plot
,不难想象,在梯度下降算法的迭代过程中,$ (θ_0,θ_1) $总是从远离靶心
的位置开始,向靠近靶心
的位置移动,最终收敛在靶心
:
有了直观的认知后,我们给出Gradient Descent(梯度下降)
的推导式,这样能够方便计算机进行计算:
重复如下过程,直到收敛:
$$ θ_0 := θ_0 - α{1 \over m} {\sum_{i=1}^m(h_θ(x_i)-y_i)} $$
$$ θ_1 := θ_1 - α{1 \over m} {\sum_{i=1}^m((h_θ(x_i)-y_i)x_i)} $$
具体的推导过程省略。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。