深度机器学习三要素之数据、模型、算法分析

机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

机器学习的三个要素包括数据、模型和算法。简单地说,这三个要素之间的关系可以用下图来表示:

图片

enter image description here

总结成一句话:算法通过数据上的操作产生模型。

先分别看三个要素。

数据

事实上,我们以前给出过数据的例子。

源数据

在最后一篇文章中,图1老鼠和其他动物以及图2小马宝莉的六个女主角是现实中的两个样本集。如果我们想训练老鼠分类器或做小马种族聚类 分析,它们是原始数据(Raw Data)。

然而,正如我们之前所说,计算机可以处理数值,而不是图片或文本。

向量空间模型和无标记数据

因此,我们需要构建一个向量空间模型(Vector Space Model,VSM)。VSM 负责将格式(文字、图片、音频、视频)转化为向量。

然后开发人员将这些转换成向量输入到机器学习程序中,以处理数据。

例如,图2中的6位小马宝莉是女主角。我们想为他们做聚类,我们已经知道我们应该用他们的两个特征来做聚类。这两个特征是:独角和翅膀。

然后我们可以定义二维向量 A=[a_1,a_2]。a_1 表示是否有独角, a_1 = 1, 否则 a_1 = 0。而 a_2 表示是否有翅膀。

然后,按照这个定义,我们的六匹小马最终会转化为以下六个向量:

这样,计算机就可以对数据 X_1,……,X_6 已经处理好了。这六个向量也被称为这个数据的特征向量(Feature Vector)。

这是无标记数据。

有标注数据

与无标记对应的是有标记。

简单来说,数据标记就是给训练样本贴上标签。这个标签是根据我们的具体需要贴样本的。

例如,我们必须标记一系列图标,所有图片分为两类:猫或不是猫。然后可以标记为下图:

图片

enter image description here

我们使用变量 y 表示,一般情况下,y 都是离散的标量值。

当然,标注数据也应该提取特征向量 X。每一个标注样本既有无标注样本拥有的 X,同时比无标注样本多了一个 y。 例如:

我们用三维特征向量 X 表示老鼠分类器的源数据,每个维度对应于耳朵是圆的、细长的尾巴和尖鼻子。同时,使用整形值 y 表示是否是老鼠,是的, y=1,否则 y=0。

图1老鼠和其他动物对应的数据如下:

数据转换为 VSM 之后,机器学习程序要做的就是把它交给算法,通过运算获得模型。

正如你所看到的,我们之所以能够将一系列特定的童话人物转化为2D或3D向量,是因为我们已经确定了对某些人物的特征。

这里其实有两步:

确定用什么特征来表示数据;

确定用什么方式表达这些特征。

这两步所做的就是特色工程。有了特色工程,就会有下一步 VSM 转换。

特征工程在机器学习中非常重要。我们将在以后的章节中单独讨论。

模型

模型是什么

图片

enter image description here

该模型是机器学习的结果,称为训练(Train)。

训练好的模型可以理解为函数:y=f(x)。

我们将数据(对应 x)输入并获得输出结果(对应于 y)。

输出结果可能是一个值(回归)或一个标签(分类),它会告诉我们一些事情。

例如,我们用老鼠和非老鼠数据训练了老鼠分类器。这个分类器是一个分类模型,它实际上是一个函数(具体的函数与我们选择的模型类型有关,我们将在下面讨论)。

当确定这个分类函数时,就会出现另一个新数据,例如:

图片

enter image description here

此时,预测程序(将训练好的模型应用到数据上的过程称为预测) 首先将喜羊羊转化为 VSM,变成 X = [0,0,0],然后输入模型,得到结果 y’= f(X)。

如果 y’=0,这表明我们对喜羊羊的分类模型的判断是:不是老鼠。y’= 1,老鼠分类器把喜羊羊当老鼠。

当然,我们都喜欢把喜羊羊分成不是老鼠的分类器,而不是相反。它涉及模型性能(Performance)我们稍后将单独讨论测量问题。

让我们先——

模型是如何获得的?

图片

enter image description here

模型是基于数据,通过训练获得的。

训练怎么了?

模型是函数:y=f(x),x 是自变量,y 是因为变量。

从 x 计算出 y 要看 f(x) 的具体形式是什么,它有什么参数,这些参数的值是什么。

在训练开始时,我们有一些样本数据。如果标记数据,样本本身就有自变量 x(特征)也有变量 y(预期结果)x。

对应于 y=f(x) 中的 x 和 y 取值实例。

此时,我们已经知道 ,因为我们已经选择了模型类型f(x) 形状,如线性模型 y=f(x)=ax2 bx c,但我不知道里面的参数 a、b、c 的值。

训练是:根据已指定的 f(x) 的具体形式-模型类型,结合训练数据,计算每个参数的具体值。

训练过程需要按照一定的章法来操作。这个章法就是算法。

算法

监督和无监督学习的算法差别很大。因为我们在日常生活中主要使用的是监督学习模型,所以我们首先关注它并解释它。

监督学习的目标是让所有的训练数据 x 经过 f(x) 计算后,获得的 y  与它们原本对应的 y 的差别尽量小。

我们需要用一个函数来描述 y’ 与 y 之间的差异称为损失函数(Loss Function)L(y, y’)= L(y, f(x))。

Loss 函数针对一个训练数据,对于所有的训练数据,我们使用成本函数(Cost Function)描述整体损失。

一般写成本函数:J(theta)——注意,成本函数的自变量不再是 y 和 f(x),但变成了 theta,theta 表示 f(x) 所有待定参数(theta 也可以是一个向量,每个维度都表示一个特定的参数)!

到目前为止,我们终于得到了一个关于我们真正要求的变量(theta)函数。同时,既然 J(theta) 被称为成本函数,顾名思义,它的价值代表了整个模型的成本,成本越小越好。

因此,我们也有学习的目标(也称为目标函数):argmin J(theta)—— 最小化J(theta)。

能够让 J(theta) 达到最小 theta,是最好的 theta。找到最好的 theta 之后,我们把它带到原 f(x),使得 f(x) 成为一个完整的 x 函数,即最终模型函数。

怎样才能找到让 J(theta) 最小的 theta 呢?这需要优化算法。

有许多具体的优化算法,如梯度下降法(Gradient Descent)、共轭梯度法(Conjugate Gradient)、牛顿法和牛顿法,模拟退火法(Simulated Annealing) 等等。

梯度下降法是最常用的一种,下一章将专门解释梯度下降法。

一般来说,算法是机器学习和深度学习中最具技术含量的部分。企业中的“算法工程师”,要求最高,待遇也最好。那些动辄年薪百万的职位,一般都会标明:做算法。

这些算法工程师的职责包括:开发新算法;构建目标函数,选择和优化算法解决实际问题;将他人研究的最新算法应用于自己的业务问题。

这里需要强调的是,算法对于获得高质量的模型非常重要,但数据往往更重要(尤其是在应用经典模型时)。

监督学习需要标记数据。因此,在进入培训阶段之前,必须经过一步:人工标记。标记过程繁琐,工作量大,但不可避免。

人工标记的过程看似简单,但实际上,标记策略和质量直接影响到最终生成模型的质量。

不是高深算法和精密模型,而是高质量算法和精度模型,而是高质量的标记数据。