在本课程中,你将了解机器学习并自己实现机器学习和编码。
我们可以对机器进行编程来完成一些基本的事情,例如如何找到从a到b的最短路径,就像在你的GPS中一样。但在大多数情况下,我们不知道如何编写显式程序来做许多更有趣的事情,例如网络搜索、识别人类语言、识别图像或实现自动驾驶汽车。我们知道做这些事的唯一方法就是让机器学会自己做。
使计算机无需明确编程即可学习的研究领域。 亚瑟 塞缪尔(1959)
监督学习(在现实世界中使用最多的机器学习类型)
无监督学习
强化学习
监督学习是指学习从输入x到输出y的映射的算法。
关键特征是你给模型学习的数据中包括了正确的答案,即对于给定的输入x,有正确的输出y,模型通过学习正确的(x,y),对于其他没有给定输出结果的输入(它以前从未见过的)给出合理的预测。
回归:从无限多个可能的数字中预测一个数字。
分类:从有限的可能的输出类别中预测一个类别(不一定是数字)。
无监督学习是指在没有标签的数据中,找到某种结构或模式的算法。
关键特征是你给模型学习的数据中不带有任何标签,我们的工作是找到某种结构或某种模式,或者只是找到一些有趣的东西,而不是试图监督算法对于每个输入给出正确的答案。
聚类算法:将未标记的数据放置在不同的集群中。
异常检测:检测异常事件。
降维:压缩一个大的数据集,丢失尽可能少的信息。
线性回归意味着将一条直线拟合到你的数据中。
这是监督学习的一个实例,因为我们是首先给出具有正确答案的数据,然后去预测新房屋的价格。
这是回归模型的一个实例,因为它以价格(具有无限种可能的输出)作为预测输出。
训练集:用于训练模型的数据集,用 Training Set 表示。
输入变量/特征/输入特征:给定的作为模型输入的变量,用 x 表示。
输出变量/目标变量:作为模型预测输出的变量,用 y 表示。
训练样本总数:用 m 表示。
单个训练样例:用 (x,y) 表示。
第i个训练样例:用 (x(i),y(i)) 表示。
fw,b(x) = wx+b
一个变量的线性回归也叫单变量线性回归。
代价函数会告诉我们模型拟合数据拟合的有多好以便于我们可以尝试将它做的更好。
对于模型:fw,b(x) = wx + b
w 与 b 被称为模型的参数,是你在训练过程中可以调整的变量以改进模型,又被称为系数或权重。
我们在视觉上觉得这条线适合数据时,意味着这条线大致经过或接近所有训练样例。
对于给定的 x(i),图像上的十字所对应的y轴坐标为 y(i),即真实值;直线上对应的y轴坐标为 y(i)-hat,即估计值,我们现在要做的事情就是找到 w 和 b ,以便对于所有样例,估计值都能接近真实值,这就是代价函数的作用。
即所有样例的估计值减去真实值的平方再求平均。
除以2是为了后面求导的过程中会把2约掉,使公式看起来更简洁,但无论除不除以2,都不会产生任何影响。
为了简化计算,将参数 b 设为 0。
左侧图像是固定参数 w,绘制 x-y 图像,右侧图像是绘制 w-J 图像,因此左侧一条直线对应于右侧一个点。
因此如何选择参数 w 的值决定了直线拟合图像拟合的有多好。
J 是衡量平方误差有多大的代价函数,所以选择最小化平方误差的 w,会给我们一个很好的模型。
因此,线性回归的目标是选择合适的参数以最小化代价函数。
3D表面图
为了更仔细的观察特定的点,使用等高线图来绘制函数 J。
左上是函数 f 的二维图像;右上是函数 J 的等高线图;下面是函数 J 的3D表面图。
等高线图上的每个椭圆对应的是3D表面图上处于完全相同高度的点,也就是具有相同的J的点。4
要获得等高线图,首先获取3D表面图,然后将其水平切片,每个切片上的所有点对应于一个椭圆。
这些同心椭圆的圆心对应代价函数最小的点。
梯度下降所做的事情是:选择参数 w 和 b 的初始值;每次更改 w 和 b 的值以减小代价函数的值;直至代价函数达到或接近最小值。
注意:使用梯度下降只能得到局部最小值,对于某些非凸函数(简单理解:不是碗形或吊床形的函数),不能得到全局最小值。
站在初始点,自转一周,找到最陡的下降方向,迈出一小步,重复这个过程,直至到达山谷。
当改变初始点位置时,重复上述过程,到达另一山谷。
α 被称为学习率,通常是介于 0 和 1 之间一个小的正数,控制下坡迈出多大一步,即如果 α 很大,对应着一个快速的梯度下降过程,反之,对应一个缓慢的梯度下降过程。
导数项代表下坡的方向。
重复上述两个公式直至算法收敛,收敛代表达到局部最小值。
注意的细节:同时更新 w 和 b。
更新 b 的时候公式里面的 w 要使用更新前的 w。
为了简化计算,便于理解,将参数 b 的值置为 0。
则梯度下降要做的事情就是改变参数 w 的值,以最小化代价函数 J。
图像上一点处的导数值即为该点切线的斜率,切线是朝向右上方时,斜率大于0,朝向右下方时,斜率小于0。
当在最小值右侧选值时,更新后的 w 值会减小;当在最小值左侧选值时,更新后的 w 会增大。由此看来,梯度下降在做正确的事。
如果学习率太小,梯度下降仍然会起作用,但会很慢。
如果学习率太大,可能永远不会达到最小值,不收敛甚至发散。
为什么采用固定的学习率会达到局部最小值?
当接近最小值时,导数值会越来越小趋近于0,更新的步长也会越来越小趋近于0,所以会到达最小值点。
平方误差代价函数是凸函数,只有一个局部最小值即全局最小值,所以只要选择适当的学习率,算法就会收敛。
随着使用梯度下降法进行参数更新,代价函数逐渐减小,直线也拟合得越来越好。
这种梯度下降也被称为批量梯度下降,指的是梯度下降的每一步中我们都使用了所有的训练数据,还有其他种类的梯度下降,每一步更新只使用训练数据的一个子集。