第 1 章 机器学习基础
首先简单介绍一下机器学习(Machine Learning,ML)和深度学习(Deep Learning, DL)的基本概念。机器学习, 顾名思义,机器具备有学习的能力。具体来讲, 机器学习就是让 机器具备找一个函数的能力。机器具备找函数的能力以后,它可以做很多事。比如语音识别, 机器听一段声音,产生这段声音对应的文字。我们需要的是一个函数,该函数的输入是声音 信号,输出是这段声音信号的内容。这个函数显然非常复杂, 人类难以把它写出来,因此想通 过机器的力量把这个函数自动找出来。还有好多的任务需要找一个很复杂的函数,以图像识 别为例,图像识别函数的输入是一张图片,输出是这个图片里面的内容。AlphaGo 也可以看 作是一个函数,机器下围棋需要的就是一个函数,该函数的输入是棋盘上黑子跟白子的位置, 输出是机器下一步应该落子的位置。
随着要找的函数不同,机器学习有不同的类别。假设要找的函数的输出是一个数值,一个 标量(scalar),这种机器学习的任务称为回归。举个回归的例子, 假设机器要预测未来某一个 时间的 PM2.5 的数值。机器要找一个函数 f ,其输入是可能是种种跟预测 PM2.5 有关的指 数,包括今天的 PM2.5 的数值、平均温度、平均的臭氧浓度等等, 输出是明天中午的 PM2.5 的数值,找这个函数的任务称为回归(regression)。
除了回归以外,另一个常见的任务是分类(classification ,)。分类任务要让机器做选择 题。人类先准备好一些选项,这些选项称为类别(class),现在要找的函数的输出就是从设定 好的选项里面选择一个当作输出,该任务称为分类。举个例子, 每个人都有邮箱账户,邮箱账 户里面有一个函数,该函数可以检测一封邮件是否为垃圾邮件。分类不一定只有两个选项,也 可以有多个选项。
AlphaGo 也是一个分类的问题,如果让机器下围棋,做一个 AlphaGo,给出的选项与棋 盘的位置有关。棋盘上有 19 × 19 个位置,机器下围棋其实是一个有 19 × 19 个选项的选择题。 机器找一个函数,该函数的输入是棋盘上黑子跟白子的位置,输出就是从 19 × 19 个选项里面, 选出一个正确的选项,从 19 × 19 个可以落子的位置里面,选出下一步应该要落子的位置。
在机器学习领域里面,除了回归跟分类以外,还有结构化学习(structured learning)。机 器不只是要做选择题或输出一个数字,而是产生一个有结构的物体,比如让机器画一张图,写 一篇文章。这种叫机器产生有结构的东西的问题称为结构化学习。
以视频的点击次数预测为例介绍下机器学习的运作过程。假设有人想要通过视频平台赚 钱,他会在意频道有没有流量,这样他才会知道他的获利。假设后台可以看到很多相关的信 息,比如:每天点赞的人数、订阅人数、观看次数。根据一个频道过往所有的信息可以预测明 天的观看次数。找一个函数,该函数的输入是后台的信息,输出是隔天这个频道会有的总观看 的次数.
机器学习找函数的过程,分成 3 个步骤。第一个步骤是写出一个带有未知参数的函数 f, 其能预测未来观看次数。比如将函数写成
y = b + wx1 (1.1)
其中,y 是准备要预测的东西,要预测的是今天(2 月 26 日)这个频道总共观看的人,y 就假 设是今天总共的观看次数。x1 是这个频道,前一天(2 月 25 日)总共的观看次数,y 跟 x1 都
是数值,b 跟 w 是未知的参数,它是准备要通过数据去找出来的,w 跟 b 是未知的,只是隐 约地猜测。猜测往往来自于对这个问题本质上的了解, 即领域知识(domain knowledge)。机 器学习就需要一些领域知识。这是一个猜测,也许今天的观看次数,总是会跟昨天的观看次 数有点关联, 所以把昨天的观看次数,乘上一个数值,但是总是不会一模一样,所以再加上一 个 b 做修正,当作是对于 2 月 26 日,观看次数的预测,这是一个猜测,它不一定是对的,等 一下回头会再来修正这个猜测。总之, y = b + w * x1 ,而 b 跟 w 是未知的。带有未知的参数 (parameter)的函数称为模型(model)。模型在机器学习里面,就是一个带有未知的参数 的函数, 特征(feature) x1 是这个函数里面已知的,它是来自于后台的信息,2 月 25 日点 击的总次数是已知的, 而 w 跟 b 是未知的参数。w 称为权重(weight),b 称为偏置(bias)。 这个是第一个步骤。
第 2 个步骤是定义损失(loss),损失也是一个函数。这个函数的输入是模型里面的参数, 模型是 y = b + w * x1 ,而 b 跟 w 是未知的,损失是函数 L(b, w),其输入是模型参数 b 跟 w。损失函数输出的值代表, 现在如果把这一组未知的参数,设定某一个数值的时候,这笔数 值好还是不好。举一个具体的例子,假设未知的参数的设定是 b = 500 ,w = 1 ,预测未来的 观看次数的函数就变成 y = 500 + x1。要从训练数据来进行计算损失, 在这个问题里面,训练 数据是这一个频道过去的观看次数。举个例子, 从 2017 年 1 月 1 日到 2020 年 12 月 31 日的 观看次数(此处的数字是随意生成的)如图 1.1 所示,接下来就可以计算损失。
图 1.1 2017 年 1 月 1 日到 2020 年 12 月 31 日的观看次数
把 2017 年 1 月 1 日的观看次数,代入这一个函数里面
ˆ(y) = 500 + 1x1 (1.2)
可以判断 b = 500 ,w = 1 的时候,这个函数有多棒。x1 代入 4800,预测隔天实际上的观看
次数结果为 ˆ(y) = 5300,真正的结果是 4900 ,真实的值称为标签(label),它高估了这个频道
可能的点击次数,可以计算一下估测的值 ˆ(y) 跟真实值 y 的差距 e。计算差距其实不只一种方
式,比如取绝对值:
e1 = |y − ˆ(y)| = 400 (1.3)
我们不是只能用 1 月 1 日,来预测 1 月 2 日的值,可以用 1 月 2 日的值,来预测 1 月 3 日的值。根据 1 月 2 日的观看次数,预测的 1 月 3 日的观看次数的,值是 5400。接下来计算 5400 跟跟标签(7500)之间的差距,低估了这个频道。在 1 月 3 日的时候的观看次数,才可 以算出:
e2 = |y − ˆ(y)| = 2100 (1.4)
我们可以算过这 3 年来,每一天的预测的误差,这 3 年来每一天的误差,通通都可以算 出来,每一天的误差都可以得到 e。接下来把每一天的误差,通通加起来取得平均,得到损失 L
(1.5)
其中,N 代表训验数据的个数,即 3 年来的训练数据,就 365 乘以 3,计算出一个 L,, L 是每一笔训练数据的误差 e 相加以后的结果。L 越大,代表现在这一组参数越不好,L 越 小,代表现在这一组参数越好。
估测的值跟实际的值之间的差距,其实有不同的计算方法,计算 y 与 ˆ(y)之间绝对值的差
距,如式 (1.6) 所示,称为平均绝对误差(Mean Absolute Error,MAE)。
e = | ˆ(y) − y| (1.6)
如果算 y