一、机器学习基本概念
1.机器学习的概念
机器学习,顾名思义,机器具备有学习的能力。具体来讲,机器学习就是让机器具备找一个函数的能力。
2.机器学习的分类
随着要找的函数不同,机器学习有不同的类别。
- **回归(regression):**要找的函数的输出是一个数值,一个标量(scalar)
例子:假设机器要预测未来某一个时间的 PM2.5 的数值。机器要找一个函数 f,其输入是 可能是种种跟预测 PM2.5 有关的指数,包括今天的 PM2.5 的数值、平均温度、平均的 臭氧浓度等等,输出是明天中午的 PM2.5的数值,找这个函数的任务称为回归。
- 分类(classification):让机器做选择题。人类先准备好一些选项,这些选项称为类别(class),现在要找的函数的输出就是从设定好的选项里面选择一个当作输出。
例子1:每个人都有邮箱账户,邮箱账户里面有一个函数,该函数可以检测一封邮件是否 为垃圾邮件。分类不一定只有两个选项,也可以有多个选项。
例子2:AlphaGo 也是一个分类的问题,如果让机器下围棋,做一个 AlphaGo,给出的选项 与棋盘的位置有关。机器找一个函数,该函数的输入是棋盘上黑子跟白子的位置,输出就 是从可以落子的位置里面,选出下一步应该要落子的位置。
- **结构化学习(structured learning):**机器不只是要做选择题或输出一个数字,而是产生一个有结构的物体,比如让机器画一张图,写一篇文章。
二、案例学习
接下来以视频的点击次数预测为例介绍下机器学习的运作过程。根据一个频道过往所有的信息可以预测明天的观看次数。找一个函数,该函数的输入是后台的信息,输出是隔天这个频道会有的总观看的次数。
机器学习找函数的过程,分成 3 个步骤。
1.写出一个带有未知参数的函数 f,预测未来观看次数
比如将函数写成
其中,y 是准备要预测的东西,要预测的是今天这个频道总共观看的人,y 就假设是今天总共的观看次数。x1 是这个频道,前一天总共的观看次数,y 跟 x1 都是数值,b 跟 w 是未知的参数,它是准备要通过数据去找出来的,w 跟 b 是未知的,只是隐约地猜测。猜测往往来自于对这个问题本质上的了解,即领域知识(domain knowledge)。
带有未知的参数(parameter) 的函数称为模型(model) 。模型在机器学习里面,就是一个带有未知的参数的函数,特征(feature) x1 是这个函数里面已知的,它是来自于后台的信息,而 w 跟 b 是未知的参数。w 称为权重(weight) ,b 称为偏置(bias)。
2.定义损失(loss),损失也是一个函数,估测预测值与实际值的差距。
损失函数输出的值代表,现在如果把这一组未知的参数,设定某一个数值的时候,这笔数值好还是不好。
举一个具体的例子,假设未知的参数的设定是 b = 500,w = 1,预测未来的观看次数的函数就变成 y = 500 + x1。x1 代入 4800,预测隔天的观看次数结果为 yˆ = 5300,而已知的真正的结果是 4900,真实的值称为标签(label),它高估了这个频道可能的点击次数。同时可以把每一天的误差,通通加起来取得平均,计算某一段时间内每天的误差。
估测的值跟实际的值之间的差距,其实有不同的计算方法,如:
- 平均绝对误差(Mean Absolute Error,MAE)
e = |yˆ − y|
- 均方误差(Mean SquaredError,MSE)
e = (yˆ − y)2
有一些任务中 y 和 yˆ 都是概率分布,这个时候可能会选择交叉熵(cross entropy)。
可以调整不同的 w 和不同的 b,求取各种w 和各种 b,组合起来以后,我们可以为不同的 w 跟 b 的组合,都去计算它的损失,就可以画出所示的等高线图。
在这个等高线图上面,越偏红色系,代表计算出来的损失越大,就代表这一组 w 跟 b 越差。如果越偏蓝色系,就代表损失越小,就代表这一组 w 跟 b 越好,拿这一组 w 跟 b,放到函数里面,预测会越精准。画出来的等高线图称为误差表面(error surface)。
3.优化
找一个 w 跟 b,可以让损失 L 的值最小。**梯度下降(gradient descent)**是经常用到的方法。
简化问题,假设未知参数只有w,首先要随机选取一个初始的点,然后计算参数 w 对损失L的微分,斜率为负右移,为正左移。
移动的步伐取决于两点
- 第一件事情是这个地方的斜率,斜率大步伐就跨大一点,斜率小步伐就跨小一点。
- 第二就是学习率(learning rate) η 也会影响步伐大小。学习率是自己设定的,如果 η 设大一点,每次参数更新就会量大,学习可能就比较快。如果 η 设小一点,参数更新就很慢,每次只会改变一点点参数的数值。这种在做机器学习,需要自己设定,不是机器自己找出来的,称为超参数(hyperparameter)。
损失函数是自己定义的,所以损失可以为任何值,即有可能是负值。
梯度下降的时候有两种情况会停下来:
- 自己设定,在设置参数的时候,设定最多计算几次。
- 当不断调整参数,微分为0时
梯度下降有一个很大的问题,没有找到真正最好的解,可能会停留在局部最小值(local minima) ,而不是全局最小值(global minima)。
当有多个参数时,与以上单个参数的步骤类似,改为计算多个参数对损失的微分。