第1章 机器学习基础
机器学习介绍
机器学习,顾名思义,机器具备有学习的能力。具体来讲,机器学习就是让机器具备找一个函数的能力。 随着要找的函数不同,机器学习有不同的类别。
假设要找的函数的输出是一个数值,一个标量(scalar),这种机器学习的任务称为回归。比如,使用算法预测明天气温(摄氏度/华氏度)。
另一个常见的任务是分类(classification)。人类先准备好一些选项,这些选项称为类别(class),现在要找的函数的输出就是从设定好的选项里面选择一个当作输出,该任务称为分类。比如,检测一封邮件是否为垃圾邮件。分类不一定只有两个选项,也可以有多个选项。
在机器学习领域里面,除回归跟分类外,还有结构化学习(structured learning)。机器不只是要做选择题或输出一个数字,而是产生一个有结构的物体,比如让机器画一张图,写一篇文章。这种叫机器产生有结构的东西的问题称为结构化学习。
1.1 案例学习
机器学习的运作过程
以视频的点击次数预测为例介绍下机器学习的运作过程。假设后台可以看到很多相关的信息,比如:每天点赞的人数、订阅人数、观看次数。根据一个频道过往所有的信息可以预测明天的观看次数。找一个函数,该函数的输入是后台的信息,输出是隔天这个频道会有的总观看的次数。 机器学习找函数的过程,分成 3 个步骤。
第1步,确定模型。
写出一个带有未知参数的函数 ,其能预测未来观看次数。比如将函数写成
其中, 是准备要预测的东西,就假设是今天(2 月 26 日)总共的观看次数。 是前一天(2 月 25 日)总共的观看次数, 跟 都是数值, 跟 是未知参数,需通过数据求出。
带有未知的参数(parameter)的函数称为模型(model),在机器学习里就是一个带有未知的参数的函数,特征(feature) 是已知的, 称为权重(weight), 称为偏置(bias)。
第2步,定义损失(loss)函数。
这个函数的输入是模型里面的未知参数,定义损失为函数 ,其输入是模型参数 跟。 输出的值越大,代表现在这一组参数越不好;越小,代表现在这一组参数越好。
估测的值跟实际的值之间的差距,其实有不同的计算方法,计算 与 之间绝对值的差距,如式所示,称为平均绝对误差(Mean Absolute Error,MAE)。
如果算 与 之间平方的差距,则称为均方误差(Mean SquaredError,MSE)。
通过实际数据可得到不同的 跟 的组合,就可以画出如图所示的等高线图。
等高线上,越偏红色系,代表计算出来的损失越大,就代表这一组 跟 越差。如果越偏蓝色系,就代表损失越小,就代表这一组 跟 越好,拿这一组 跟 ,放到函数里面,预测会越精准。
第3步,解一个最优化问题。
梯度下降(gradient descent)是经常会使用优化的方法,优化过程如图所示。
(1)随机选取一个初始的点 。
(2)计算微分 。 计算在 处误差表面的切线斜率,也就是这一条蓝色的虚线。
如果这一条虚线的斜率是负的,如果左边比较高右边比较低的话,就把 的值变大,就可以让损失变小。如果算出来的斜率是正的,代表左边低右边高,就把 变小, 往左边移,可以让损失的值变小。这个时候就应该把 的值变小。
然后,把 往右移一步,新的位置为 ,这一步的步伐是 乘上微分的结果,即:
(3)反复进行刚才的操作,计算一下 微分的结果,再决定现在要把 移动多少,再移动到 ,再继续反复做同样的操作,不断地移动 的位置,最后会停下来。
梯度下降的问题
梯度下降有一个很大的问题,没有找到真正最好的解,没有找到可以让损失最小的 。
如图所示,把 设定在最右侧红点附近这个地方可以让损失最小。但如果在梯度下降中, 是随机初始的位置,也很有可能走到 这里,训练就停住了,无法再移动 的位置。
右侧红点这个位置是真的可以让损失最小的地方,称为全局最小值(global minima),而 这个地方称为局部最小值(local minima)。
对于,梯度下降方法会有局部最小值的问题,事实上这是一个假问题,原因在于:
高维空间:
在低维度的情况下,局部最小确实可能是一个问题,但在高维空间中(例如深度学习模型的权重空间),局部最小往往是平坦的区域,这些区域在实际应用中可能表现得与全局最小差不多好。
平坦最小值:
在许多深度学习任务中,权重空间中存在大量的平坦最小值,这意味着即使没有找到全局最小值,找到的一个相对平坦的局部最小值也能使模型表现得很好。
泛化能力:
实践中发现,位于非常平坦区域的局部最小值往往具有更好的泛化能力,这意味着它们在未见过的数据上表现更好。
如何解决局部最小问题?
动量方法:
动量方法可以帮助优化器更快通过平坦区域,并且有助于摆脱一些较浅的局部最小值。
自适应学习率:
如Adam、RMSprop等,这些方法可以自动调整学习率,帮助优化过程更好地处理不同尺度的变化。
批量归一化:
批量归一化可以在一定程度上减少内部协变量偏移,从而使得优化更加稳定。
正则化:
如L1或L2可以帮助防止过拟合,并且可能会引导模型远离不良的局部最小值。
真正的难题是什么?
鞍点:
在高维优化问题中,鞍点比局部最小更常见也更难处理。鞍点是多维空间中的一种特殊点,在某些方向上看起来像是最小值,而在其他方向上则是最大值。现代优化算法需要专门的技术来避免陷入鞍点。
非凸性:
在很多优化问题中,目标函数是非凸的,这就意味着可能存在多个局部最小值,而找到全局最小值非常困难。
有两个参数的情况下使用梯度下降,其实跟刚才一个参数没有什么不同。如果一个参数没有问题的话,可以很快的推广到两个参数,具体过程可参考书本第13-14页。梯度下降优化的过程如图所示:
未完待续...