1.机器学习是什么
机器学习(Machine Learning,ML),顾名思义就是让机器学会做一件事情,比如语音识别,机器听一段声音,产生这段声音对应的文字。或是识别图片中有几个人,几辆车。这些复杂的功能,归结起来就是:**让机器具备找一个函数的能力。**这个函数显然非常复杂,人类难以把它写出来,因此想通过机器的力量把这个函数自动找出来。AlphaGo 也可以看作是一个函数,该函数的输入是棋盘上黑子跟白子的位置,输出是机器下一步应该落子的位置。
随着要找的函数不同,机器学习有不同的类别。假设要找的函数的输出是一个数值,一个标量(scalar),这种机器学习的任务称为回归。比如输入房子的面积,楼层,地段来预测房价;或是输入上一周的气温预测今天的气温等。这类任务输出是连续空间中的一个值。
除了回归以外,另一个常见的任务是分类(classification)。分类任务要让机器做选择题。人类先准备好一些选项,这些选项称为类别(class),现在要找的函数的输出就是从设定好的选项里面选择一个当作输出,该任务称为分类。举个例子,每个人都有邮箱账户,邮箱账户里面有一个函数,该函数可以检测一封邮件是否为垃圾邮件。分类不一定只有两个选项,也可以有多个选项。这类任务输出是离散空间中的一个值。
2.机器学习做什么
以视频的点击次数预测为例介绍下机器学习的运作过程。假设后台可以看到很多相关的信息,比如:每天点赞的人数、订阅人数、观看次数。根据一个频道过往所有的信息可以预测明天的观看次数。找一个函数,该函数的输入是后台的信息,输出是隔天这个频道会有的总观看的次数。
1.定义函数
数学上的函数不胜枚举,如果让机器自己找会十分费力,我们可以简化一下过程:人类给出一系列函数,让机器自己找到其中最适合当前任务的一个 。比如人类告诉机器某天的播放量y与前一天的播放量x有如下关系: ,其中w和b是未知的参数,故而上述公式中包含了一组函数 。如y = 1.5x + 2, y = -0.4x都在里面。让机器自己去找到最适合预测观看次数的w和b的值,从而确定唯一的函数。如y = 0.9x + 1。
带有未知的参数 (parameter)的函数称为模型 (model)。模型在机器学习里面,就是一个带有未知的参数的函数,特征 (feature) x是这个函数里面已知的,它是来自于后台的信息,前一日点击的总次数是已知的,而 w 跟 b 是未知的参数。w 称为权重 (weight),b 称为偏置(bias)。
2.定义损失
那么如何让机器找到最合适的函数呢?比如机器怎么知道y = 1.5x + 2, y = -0.4x 和 y = 0.9x + 1 哪个更好呢?这就需要定义损失 (loss)。损失也是一个函数。这个函数的输入是模型里面的参数,
模型是 y = b + wx,而 b 跟 w 是未知的,损失是函数 L(b, w),其输入是模型参数 b 跟w。损失函数输出的值代表当前的b和w确定的模型好还是不好。
计算损失的方法有:平均绝对误差,均方误差,交叉熵等。在回归问题中,损失越小,代表回归模型对样本的拟合越好;在分类问题中,损失越小,代表分类模型对样本的分类越准确。
3.优化模型
到这里你可能想问:机器怎么找到损失最低的模型呢?让机器一个一个蒙?先蒙一个y = 1.5x + 2,再试y = -0.4x,再试y = 0.9x + 1,从这3个中选一个损失最低的。如果3次不够,就试100次,1000次,反正有的是时间。这样做的问题就是:运气的成分太大了。机器学习的任务是从无穷多的模型中找到一个效果较好的,有限次的采样必然不能找到最好的;另外这种方法有一个问题:小张训练1000次得到的模型和小李训练1000次的模型效果差异很大,小张运气好采到了最优解,而小李运气差些没有采到最优解,这种结果肯定不是我们想要的。
我们再想一下:我们要找到最好的模型,就是找到使损失函数值最小的模型参数。回顾损失函数公式:L(b, w),欸,模型参数是损失函数的自变量。你可能也想到了,这就是数学中的最优化问题。 解决最优化问题的方法很多:求导找驻点,拉格朗日乘子法等。在计算机求解中常用迭代 的方法,机器学习中用的是梯度下降法(gradient descent)。
讲解梯度下降法的文章很多,这里简略说明,梯度下降法就是逐渐沿着函数向低处走。
由于损失函数是我们定义的,所以我们可以告诉计算机它的偏导数公式,对于较复杂的损失函数,我们很难对其微分的话,在计算机中有自动微分 ,符号微分 和数值微分等办法。
损失函数L(b, w)的图像也叫误差表面。
L(b, w)是关于b和w的二元连续函数,其Z轴难以画出故而用颜色深浅代替函数值。
梯度下降法每次按照一下公式更新参数:
其中η为超参数 ,不能由机器自己学习到,需要我们定义,这里η叫学习率,通常很小,如0.1,它决定每次沿着损失表面走多少距离。
上述公式也可以写为:
这样写更直观的反映了"梯度下降"的本质,同时当模型中不止有2个参数,而是有很多个参数时,这种写法更方便。
梯度下降的过程如下图:
这样机器就会自动沿着误差表面一步步地"学习",知道找到损失最小的,也就是最优的模型。