机器学习
通常,即使我们不知道怎样明确地告诉计算机如何从输入映射到输出,大脑仍然能够自己执行认知功能。换句话说,即使我们不知道如何编写计算机程序来识别“Alexa”这个词,大脑自己也能够识别它。有了这一能力,我们就可以收集一个包含大量音频样本的数据集(dataset),并对包含和不包含唤醒词的样本进行标记。
利用机器学习算法,我们不需要设计一个“明确地”识别唤醒词的系统。相反,我们只需要定义一个灵活的程序算法,其输出由许多参数(parameter)决定,然后使用数据集来确定当下的“最佳参数集”,这些参数通过某种性能度量方式来达到完成任务的最佳性能。
1.机器学习
1.1 什么是参数
参数可以被看作旋钮,旋钮的转动可以调整程序的行为。任一调整参数后的程序被称为模型(model)。通过操作参数而生成的所有不同程序(输入‐输出映射)的集合称为“模型族”。使用数据集来选择参数的元程序被称为学习算法(learning algorithm)。
1.2 学习前准备
在开始用机器学习算法解决问题之前,我们必须精确地定义问题,确定输入(input)和输出(output)的性质,并选择合适的模型族。在本例中,模型接收一段音频作为输入,然后在是或否中生成一个选择作为输出。如果一切顺利,经过一番训练,模型对于“片段是否包含唤醒词”的预测通常是正确的。
1.3 机器学习过程
在机器学习中,学习(learning)是一个训练模型的过程。过这个过程,我们可以发现正确的参数集,从而使模型强制执行所需的行为。
- 训练过程通常包含如下步骤:
- 从一个随机初始化参数的模型开始,这个模型基本没有“智能”;
- 获取一些数据样本(例如,音频片段以及对应的是或否标签);
- 调整参数,使模型在这些样本中表现得更好;
- 重复第(2)步和第(3)步,直到模型在任务中的表现令人满意。

这种“通过用数据集来确定程序行为”的方法可以被看作用数据编程(programming with data)
2.机器学习中的关键组件
2.1 数据
每个数据集由一个个样本(example, sample)组成,大多时候,它们遵循独立同分布(independently and identically distributed, i.i.d.)。样本有时也叫做数据点(data point)或者数据实例(data instance),通常每个样本由一组称为特征(features,或协变量(covariates))的属性组成。
机器学习模型会根据这些属性进行预测。在上面的监督学习问题中,要预测的是一个特殊的属性,它被称为标签(label,或目标(target))。
当每个样本的特征类别数量都是相同的时候,其特征向量是固定长度的,这个长度被称为数据的维数(di‐mensionality)。固定长度的特征向量是一个方便的属性,它可以用来量化学习大量样本。
然而,并不是所有的数据都可以用“固定长度”的向量表示。
以图像数据为例,如果它们全部来自标准显微镜设备,那么“固定长度”是可取的;但是如果图像数据来自互联网,它们很难具有相同的分辨率或形状。这时,将图像裁剪成标准尺寸是一种方法,但这种办法很局限,有丢失信息的风险。此外,文本数据更不符合“固定长度”的要求。比如,对于亚马逊等电子商务网站上的客户评论,有些文本数据很简短(比如“好极了”),有些则长篇大论。
与传统机器学习方法相比,深度学习的一个主要优势是可以处理不同长度的数据。
一般来说,拥有越多数据的时候,工作就越容易。更多的数据可以被用来训练出更强大的模型,从而减少对预先设想假设的依赖。数据集的由小变大为现代深度学习的成功奠定基础。
请注意,仅仅拥有海量的数据是不够的,我们还需要正确的数据。如果数据中充满了错误,或者如果数据的特征不能预测任务目标,那么模型很可能无效。有一句古语很好地反映了这个现象:“输入的是垃圾,输出的也是垃圾。”(“Garbage in, garbage out.”)此外,糟糕的预测性能甚至会加倍放大事态的严重性。
2.2 模型
大多数机器学习会涉及到数据的转换。
深度学习与经典方法的区别主要在于:前者关注的功能强大的模型,这些模型由神经网络错综复杂的交织在一起,包含层层数据转换,因此被称为深度学习(deep learning)。
2.3 目标函数
在机器学习中,我们需要定义模型的优劣程度的度量,这个度量在大多数情况是“可优化”的,这被称之为目标函数(objective function)。我们通常定义一个目标函数,并希望优化它到最低点。因为越低越好,所以这些函数有时被称为损失函数(loss function,或cost function)。
当任务在试图预测数值时,最常见的损失函数是平方误差(squared error),即预测值与实际值之差的平方。当试图解决分类问题时,最常见的目标函数是最小化错误率,即预测与实际情况不符的样本比例。有些目标函数(如平方误差)很容易被优化,有些目标(如错误率)由于不可微性或其他复杂性难以直接优化。在这些情况下,通常会优化替代目标。
可用数据集通常可以分成两部分:训练数据集用于拟合模型参数,测试数据集用于评估拟合的模型。然后我们观察模型在这两部分数据集的性能。“一个模型在训练数据集上的性能”可以被想象成“一个学生在模拟考试中的分数”。这个分数用来为一些真正的期末考试做参考,即使成绩令人鼓舞,也不能保证期末考试成功。换言之,测试性能可能会显著偏离训练性能。当一个模型在训练集上表现良好,但不能推广到测试集时,这个模型被称为过拟合(overfitting)的。就像在现实生活中,尽管模拟考试考得很好,真正的考试不一定百发百中。
2.4 优化算法
优化算法能够搜索出最佳参数,以最小化损失函数。深度学习中,大多流行的优化算法通常基于一种基本方法–梯度下降(gradientdescent)。
3.监督学习
监督学习(supervised learning)擅长在“给定输入特征”的情况下预测标签。每个“特征‐标签”对都称为一个样本(example)。有时,即使标签是未知的,样本也可以指代输入特征。我们的目标是生成一个模型,能够将任何输入特征映射到标签(即预测)。
- 监督学习的学习过程一般可以分为三大步骤:
- 从已知大量数据样本中随机选取一个子集,为每个样本获取真实标签。有时,这些样本已有标签(例如,患者是否在下一年内康复?);有时,这些样本可能需要被人工标记(例如,图像分类)。这些输入和相应的标签一起构成了训练数据集;
- 选择有监督的学习算法,它将训练数据集作为输入,并输出一个“已完成学习的模型”;
- 将之前没有见过的样本特征放到这个“已完成学习的模型”中,使用模型的输出作为相应标签的预测。

3.1 回归
回归(regression)是最简单的监督学习任务之一。
当人们在市场上寻找新房子时,可能需要估计一栋房子的公平市场价值。为什么这个任务可以归类为回归问题呢?本质上是输出决定的。销售价格(即标签)是一个数值。当标签取任意数值时,我们称之为回归问题,此时的目标是生成一个模型,使它的预测非常接近实际标签值。
生活中的许多问题都可归类为回归问题。
比如,预测用户对一部电影的评分可以被归类为一个回归问题。再比如,预测病人在医院的住院时间也是一个回归问题。
总而言之,判断回归问题的一个很好的经验法则是,任何有关“有多少”的问题很可能就是回归问题。
3.2 分类
虽然回归模型可以很好地解决“有多少”的问题,但是很多问题并非如此。
例如,一家银行希望在其移动应用程序中添加支票扫描功能。具体地说,这款应用程序能够自动理解从图像中看到的文本,并将手写字符映射到对应的已知字符之上。
这种“哪一个”的问题叫做分类(classification)问题。分类问题希望模型能够预测样本属于哪个类别(category,正式称为类(class))。
最简单的分类问题是只有两类,这被称之为二项分类(binomial classification)。当有两个以上的类别时,我们把这个问题称为多项分类(multiclass classification)问题。常见的例子包括手写字符识别 {0, 1, 2, ...9, a, b, c, ...}。与解决回归问题不同,分类问题的常见损失函数被称为交叉熵(cross‐entropy)。
回归是训练一个回归函数来输出一个数值;分类是训练一个分类器来输出预测的类别。
分类可能变得比二项分类、多项分类复杂得多。
例如,有一些分类任务的变体可以用于寻找层次结构,层次结构假定在许多类之间存在某种关系。因此,并不是所有的错误都是均等的。人们宁愿错误地分入一个相关的类别,也不愿错误地分入一个遥远的类别,这通常被称为层次分类(hierarchical classification)。
3.3 标记问题
学习预测不相互排斥的类别的问题称为多标签分类(multi‐label classification)。
举个例子,人们在技术博客上贴的标签,比如“机器学习”“技术”“小工具”“编程语言”“Linux”“云计算”“AWS”。一篇典型的文章可能会用5~10个标签,因为这些概念是相互关联的。关于“云计算”的帖子可能会提到“AWS”,而关于“机器学习”的帖子也可能涉及“编程语言”。
3.4 搜索
有时,我们不仅仅希望输出一个类别或一个实值。在信息检索领域,我们希望对一组项目进行排序。以网络搜索为例,目标不是简单的“查询(query)‐网页(page)”分类,而是在海量搜索结果中找到用户最需要的那部分。
该问题的一种可能的解决方案:首先为集合中的每个元素分配相应的相关性分数,然后检索评级最高的元素。
3.5 推荐系统
与搜索和排名相关的问题是推荐系统(recommender system),它的目标是向特定用户进行“个性化”推荐。
例如,亚马逊上的产品评级和评论。在其他一些情况下,客户会提供隐性反馈。例如,某用户跳过播放列表中的某些歌曲,这可能说明这些歌曲对此用户不大合适。
总的来说,推荐系统会为“给定用户和物品”的匹配性打分,这个“分数”可能是估计的评级或购买的概率。由此,对于任何给定的用户,推荐系统都可以检索得分最高的对象集,然后将其推荐给用户。
3.6 序列学习
以上大多数问题都具有固定大小的输入和产生固定大小的输出。模型只会将输入作为生成输出的“原料”,而不会“记住”输入的具体内容。
如果输入是连续的,模型可能就需要拥有“记忆”功能。
比如,我们该如何处理视频片段呢?在这种情况下,每个视频片段可能由不同数量的帧组成。通过前一帧的图像,我们可能对后一帧中发生的事情更有把握。语言也是如此,机器翻译的输入和输出都为文字序列。
序列学习需要摄取输入序列或预测输出序列,或两者兼而有之。具体来说,输入和输出都是可变长度的序列。
4.无监督学习
数据中不含有“目标”的机器学习问题通常被为无监督学习(unsupervised learning)。
4.1 聚类问题
没有标签的情况下,我们是否能给数据分类呢?
比如,给定一组照片,我们能把它们分成风景照片、狗、婴儿、猫和山峰的照片吗?同样,给定一组用户的网页浏览记录,我们能否将具有相似行为的用户聚类呢?
4.2 主成分分析问题
我们能否找到少量的参数来准确地捕捉数据的线性相关属性?
比如,一个球的运动轨迹可以用球的速度、直径和质量来描述。再比如,裁缝们已经开发出了一小部分参数,这些参数相当准确地描述了人体的形状,以适应衣服的需要。
4.3 因果关系(causality)和概率图模型(probabilistic graphical models)问题
我们能否描述观察到的许多数据的根本原因?
例如,如果我们有关于房价、污染、犯罪、地理位置、教育和工资的人口统计数据,我们能否简单地根据经验数据发现它们之间的关系?
4.4 生成对抗性网络(generative adversarial networks)
为我们提供一种合成数据的方法,甚至像图像和音频这样复杂的非结构化数据。潜在的统计机制是检查真实和虚假数据是否相同的测试。
5.与环境互动
到目前为止,不管是监督学习还是无监督学习,我们都会预先获取大量数据,然后启动模型,不再与环境交互。这里所有学习都是在算法与环境断开后进行的,被称为离线学习(offline learning)。
这种简单的离线学习有它的魅力。好的一面是,我们可以孤立地进行模式识别,而不必分心于其他问题。但缺点是,解决的问题相当有限。这时我们可能会期望人工智能不仅能够做出预测,而且能够与真实环境互动。
5.1 强化学习
在强化学习问题中,智能体(agent)在一系列的时间步骤上与环境交互。在每个特定时间点,智能体从环境接收一些观察(observation),并且必须选择一个动作(action),然后通过某种机制(有时称为执行器)将其传输回环境,最后智能体从环境中获得奖励(reward)。此后新一轮循环开始,智能体接收后续观察,并选择后续操作,依此类推。

例如,我们可以将任何监督学习问题转化为强化学习问题。假设我们有一个分类问题,可以创建一个强化学习智能体,每个分类对应一个“动作”。然后,我们可以创建一个环境,该环境给予智能体的奖励。这个奖励与原始监督学习问题的损失函数是一致的。
强化学习者必须处理学分分配(credit assignment)问题:决定哪些行为是值得奖励的,哪些行为是需要惩罚的。
在任何时间点上,强化学习智能体可能知道一个好的策略,但可能有许多更好的策略从未尝试过的。强化学习智能体必须不断地做出选择:是应该利用当前最好的策略,还是探索新的策略空间(放弃一些短期回报来换取知识)。
当环境可被完全观察到时,强化学习问题被称为马尔可夫决策过程(markov decision process)。当状态不依赖于之前的操作时,我们称该问题为上下文赌博机(contextual bandit problem)。当没有状态,只有一组最初未知回报的可用动作时,这个问题就是经典的多臂赌博机(multi‐armed bandit problem)。