1.1 机器学习的一些概念和组件

这篇文章中的概念对初学者而言十分通俗易懂,所以我在此进行全文的转述。之所以不是全文copy,是因为中间我会删减和改一些内容,以更加符合我的个人喜好,原文链接请看:https://zh.d2l.ai/chapter\_introduction/index.html

引言

一般应用程序的业务逻辑是“点对点”的,代码会详细说明应用程序在各种情况下进行的操作。为了完善业务逻辑,开发人员必须细致地考虑应用程序所有可能遇到的边界情况,并为这些边界情况设计合适的规则,最终完成一个“完美程序”。但现在,机器学习让实现很多任务的自动化并不再屈从于人类所能考虑到的业务逻辑
想象一下,假如开发人员要试图解决以下问题之一:

  • 编写一个应用程序,接受地理信息、卫星图像和一些历史天气信息,并预测明天的天气;
  • 编写一个应用程序,接受自然文本表示的问题,并正确回答该问题;
  • 编写一个应用程序,接受一张图像,识别出该图像所包含的人,并在每个人周围绘制轮廓;
  • 编写一个应用程序,向用户推荐他们可能喜欢,但在自然浏览过程中不太可能遇到的产品。

在这些情况下,即使是顶级程序员也无法提出完美的解决方案,原因可能各不相同。有时任务可能遵循一种随着时间推移而变化的模式,我们需要程序来自动调整。有时任务内的关系可能太复杂(比如像素和抽象类别之间的关系),需要数千或数百万次的计算。即使人类的眼睛能毫不费力地完成这些难以提出完美解决方案的任务,这其中的计算也超出了人类意识理解范畴。

机器学习(machine learning,ML)是一类强大的可以从经验中学习的技术。通常采用观测数据或与环境交互的形式,机器学习算法会积累更多的经验,其性能也会逐步提高。相反,对业务逻辑式的程序,无论积累多少经验,都不会自动提高,除非开发人员认识到问题并更新软件。

日常生活中的机器学习

我们可以从”Hi, Siri“程序出发来理解机器学习的基本概念

我们拿起一部iPhone,对它说道:“Hey Siri!”手机的语音识别系统就被唤醒了。现在,假如需要我们编写程序来响应一个“唤醒词”(比如“Alexa”“小爱同学”和“Hey Siri”),问题看似是很困难的:麦克风每秒钟将收集大约44000个样本,每个样本都是声波振幅的测量值。而该测量值与唤醒词难以直接关联。那又该如何编写程序,令其输入麦克风采集到的原始音频片段,输出一个是否是唤醒词的可靠预测呢?

此时,我们可以类比自己的大脑。

通常,我们并不知道怎样明确地执行一件事,我们的大脑仍然能够自己执行认知功能,即使我们不知道如何编写计算机程序来识别某个这个词,我们的大脑自己也能够识别它。
同样的,利用机器学习算法,我们不需要设计一个“明确地”识别唤醒词的系统。我们可以收集一个包含大量音频样本的数据集(dataset),并对包含和不包含唤醒词的样本进行标记。我们将定义一个灵活的程序算法,其输出由许多参数(parameter)决定,然后使用数据集来确定当下的“最佳参数集”,这些参数通过某种性能度量方式来达到完成任务的最佳性能。

那么到底什么是参数呢?
参数可以被看作旋钮,旋钮的转动可以调整程序的行为。任一调整参数后的程序被称为模型(model)。通过操作参数而生成的所有不同程序(输入-输出映射)的集合称为“模型族”。使用数据集来选择参数的元程序被称为学习算法(learning algorithm)

在开始用机器学习算法解决问题之前,我们必须精确地定义问题,确定输入(input)输出(output)的性质,并选择合适的模型族。在本例中,模型接收一段音频作为输入,然后在是或否中生成一个选择作为输出。如果一切顺利,经过一番训练,模型对于“片段是否包含唤醒词”的预测通常是正确的。
理想情况下,同一个模型族应该适合于“Alexa”识别和“Hey Siri”识别,因为从直觉上看,它们似乎是相似的任务。然而,如果我们想处理完全不同的输入或输出,比如:从图像映射到字幕,或从英语映射到中文,可能需要一个完全不同的模型族。如果模型所有的按钮(模型参数)都被随机设置,就不太可能识别出“Alexa”“Hey Siri”或任何其他单词。
在机器学习中,学习(learning)是一个训练模型的过程。
通过这个过程,我们可以发现正确的参数集,从而使模型强制执行所需的行为。
换句话说,我们用数据训练(train)模型
训练过程通常包含如下步骤:

  1. 从一个随机初始化参数的模型开始,这个模型基本没有“智能”;
  2. 获取一些数据样本(例如,音频片段以及对应的是或否标签);
  3. 调整参数,使模型在这些样本中表现得更好;
  4. 重复第(2)步和第(3)步,直到模型在任务中的表现令人满意。

总而言之,我们没有编写唤醒词识别器,而是编写了一个“学习”程序。这种“通过用数据集来确定程序行为”的方法可以被看作用数据编程(programming with data)

机器学习中的关键组件

首先介绍一些核心组件。无论什么类型的机器学习问题,都会遇到这些组件:

  1. 可以用来学习的数据(data)
  2. 如何转换数据的模型(model)
  3. 一个目标函数(objective function),用来量化模型的有效性;
  4. 调整模型参数以优化目标函数的算法(algorithm)

数据

每个数据集由一个个样本(example, sample)组成,大多时候,它们遵循独立同分布(independently and identically distributed, i.i.d.)。样本有时也叫做数据点(data point)或者数据实例(data instance),通常每个样本由一组称为特征(features,或协变量(covariates))的属性组成。
机器学习模型会根据这些属性进行预测。在上面的监督学习问题中,要预测的是一个特殊的属性,它被称为
*
标签(label,或目标***(target))。

当处理图像数据时,每一张单独的照片即为一个样本,它的特征由每个像素数值的有序列表表示。比如,200*200彩色照片由120000个数值组成,其中*3对应于每个空间位置的红、绿、蓝通道的强度。再比如,对于一组医疗数据,给定一组标准的特征(如年龄、生命体征和诊断),此数据可以用来尝试预测患者是否会存活。

当每个样本的特征类别数量都是相同的时候,其特征向量是固定长度的,这个长度被称为数据的维数(dimensionality)

固定长度的特征向量是一个方便的属性,它可以用来量化学习大量样本,然而,并不是所有的数据都可以用“固定长度”的向量表示。以图像数据为例,如果它们全部来自标准显微镜设备,那么“固定长度”是可取的;但是如果图像数据来自互联网,它们很难具有相同的分辨率或形状。文本数据更不符合“固定长度”的要求。

传统机器学习方法相比,深度学习的一个主要优势是可以处理不同长度的数据。一般来说,拥有越多数据的时候,工作就越容易,更多的数据可以被用来训练出更强大的模型,从而减少对预先设想假设的依赖。在没有大数据集的情况下,许多令人兴奋的深度学习模型黯然失色,就算一些深度学习模型在小数据集上能够工作,但其效能并不比传统方法高。

但请注意,仅仅拥有海量的数据是不够的,我们还需要正确的数据。毕竟“Garbage in, garbage out.”
还有一种常见的问题来自不均衡的数据集,比如我们想要训练一个皮肤癌识别模型,但它(在训练数据集中)从未“见过”黑色皮肤的人群,这个模型就会顿时束手无策。

再比如,如果用“过去的招聘决策数据”来训练一个筛选简历的模型,那么机器学习模型可能会无意中捕捉到历史残留的不公正,并将其自动化。
因此,当数据不具有充分代表性,甚至包含了一些社会偏见时,模型就很有可能有偏见。

模型

大多数机器学习会涉及到数据的转换。但深度学习与经典方法的区别主要在于:前者关注的功能强大的模型,这些模型由神经网络错综复杂的交织在一起,包含层层数据转换,因此被称为深度学习(deep learning)

目标函数

在机器学习中,我们需要定义模型的优劣程度的度量,这个度量在大多数情况是“可优化”的,这被称之为目标函数(objective function)。因为越低越好,所以这些函数有时被称为损失函数(loss function,或cost function)
当然,但这只是一个惯例,我们也可以取一个新的函数,优化到它的最高点。

当任务在试图预测数值时,最常见的损失函数是平方误差(squared error),即预测值与实际值之差的平方。当试图解决分类问题时,最常见的目标函数是最小化错误率,即预测与实际情况不符的样本比例。有些目标函数(如平方误差)很容易被优化,有些目标(如错误率)由于不可微性或其他复杂性难以直接优化。在这些情况下,通常会优化替代目标

通常,损失函数是根据模型参数定义的,并取决于数据集,在一个数据集上,我们可以通过最小化总损失来学习模型参数的最佳值。该数据集由一些为训练而收集的样本组成,称为训练数据集(training dataset,或称为训练集(training set))。然而,在训练数据上表现良好的模型,并不一定在“新数据集”上有同样的性能,这里的“新数据集”通常称为测试数据集(test dataset,或称为测试集(test set))
“一个模型在训练数据集上的性能”可以被想象成“一个学生在模拟考试中的分数”,这个分数用来为一些真正的期末考试做参考,即使成绩令人鼓舞,也不能保证期末考试成功,当一个模型在训练集上表现良好,但不能推广到测试集时,这个模型被称为过拟合(overfitting)的。就像在现实生活中,尽管模拟考试考得很好,真正的考试不一定百发百中。

优化算法

当我们获得了一些数据源及其表示、一个模型和一个合适的损失函数,接下来就需要一种算法,它能够搜索出最佳参数,以最小化损失函数。深度学习中,大多流行的优化算法通常基于一种基本方法–梯度下降(gradient descent)
简而言之,在每个步骤中,梯度下降法都会检查每个参数,看看如果仅对该参数进行少量变动,训练集损失会朝哪个方向移动,然后,它在可以减少损失的方向上优化参数。

各种机器学习问题

监督学习

监督学习(supervised learning)擅长在“给定输入特征”的情况下预测标签。每个“特征-标签”对都称为一个样本(example);有时,即使标签是未知的,样本也可以指代输入特征,我们的目标是生成一个模型,能够将任何输入特征映射到标签(即预测)中

即:假设我们需要预测患者的心脏病是否会发作,那么观察结果“心脏病发作”或“心脏病没有发作”将是样本的标签。输入特征可能是生命体征,如心率、舒张压和收缩压等。

监督学习之所以能发挥作用,是因为在训练参数时,我们为模型提供了一个数据集,其中每个样本都有真实的标签,用概率论术语来说,我们希望预测“估计给定输入特征的标签”的条件概率。
虽然监督学习只是几大类机器学习问题之一,但是在工业中,大部分机器学习的成功应用都使用了监督学习,这是因为在一定程度上,许多重要的任务可以清晰地描述为,在给定一组特定的可用数据的情况下,估计未知事物的概率。比如:

  • 根据计算机断层扫描(Computed Tomography,CT)肿瘤图像,预测是否为癌症;
  • 给出一个英语句子,预测正确的法语翻译;
  • 根据本月的财务报告数据,预测下个月股票的价格;

监督学习的学习过程一般可以分为三大步骤:

  1. 从已知大量数据样本中随机选取一个子集,为每个样本获取真实标签。有时,这些样本已有标签(例如,患者是否在下一年内康复?);有时,这些样本可能需要被人工标记(例如,图像分类)。这些输入和相应的标签一起构成了训练数据集;
  2. 选择有监督的学习算法,它将训练数据集作为输入,并输出一个“已完成学习的模型”;
  3. 将之前没有见过的样本特征放到这个“已完成学习的模型”中,使用模型的输出作为相应标签的预测。

整个监督学习过程如下图所示:

image.png

即使使用简单的描述给定输入特征的预测标签,监督学习也可以采取多种形式的模型,并且需要大量不同的建模决策,这取决于输入和输出的类型、大小和数量。例如,我们会使用不同的模型来处理“任意长度的序列”或“固定长度的序列”。

回归

回归(regression)是最简单的监督学习任务之一。
假设有一组房屋销售数据表格,其中每行对应一个房子,每列对应一个相关的属性,例如房屋的面积、卧室的数量、浴室的数量以及到镇中心的步行距离,等等。这样每一行的属性构成了一个房子样本的特征向量
一个特征向量可能类似于:[200, 1, 1, 60]。
当人们在市场上寻找新房子时,可能需要估计一栋房子的公平市场价值,即不要溢价,也不要因为什么原因降价,需要这么一组预测的向量,为什么这个任务可以归类为回归问题呢?因为这个问题的本质上是输出决定的:销售价格(即标签)是一个数值,他可以是任何一个数值,此时我们想要贴近这个数值,即称之为回归问题。

生活中的许多问题都可归类为回归问题。比如,预测用户对一部电影的评分、预测病人在医院的住院时间等等,总之,任何有关“有多少”的问题很可能就是回归问题。比如:

我们可能在不经意间已经解决了一些回归问题。比如你让人修理排水管,承包商花了3小时清除污水管道中的污物,然后收到了350美元的账单。第二次雇了同一个承包商2小时,收到了250美元的账单。如果有人请你估算清理污物的费用,你可以假设承包商收取一些基本费用,然后按小时收费,如果这些假设成立,那么给出这两个数据样本,你就已经可以确定承包商的定价结构:50美元上门服务费,另外每小时100美元。
在不经意间,你就已经理解并应用了线性回归算法。

然而,以上假设有时并不可取。例如,一些差异是由于基础价格和每小时付费这个两个特征之外的因素造成的。在这些情况下,我们将尝试学习最小化“预测值和实际标签值的差异”的模型。

分类

回归是训练一个回归函数来输出一个数值;分类是训练一个分类器来输出预测的类别。“哪一个”的问题叫做分类(classification)问题。
分类问题希望模型能够预测样本属于哪个类别(category,正式称为(class))。例如,手写数字可能有10类,标签可以被设置为数字0~9。最简单的分类问题是只有两类,这被称之为二分类(binomial classification)。例如,数据集可能由动物图像组成,标签可能是{猫, 狗}两类。

然而模型怎么判断得出这种“是”或“不是”的硬分类预测呢?我们可以试着用概率语言来理解模型:给定一个样本特征,模型为每个可能的类分配一个概率。比如,猫狗分类例子中,分类器可能会输出图像是猫的概率为0.9。预测类别的概率的大小传达了一种模型的不确定性。

当有两个以上的类别时,我们把这个问题称为多项分类(multiclass classification)问题。常见的例子包括手写字符识别 {0, 1, 2, … 9, a, b, c, …}。与解决回归问题不同,分类问题的常见损失函数被称为交叉熵(cross-entropy)。

请注意,最常见的类别不一定是最终用于决策的类别。
举个例子,假设后院有一个蘑菇,我们想要训练一个毒蘑菇检测分类器,根据照片预测蘑菇是否有毒。
假设这个分类器输出该图片包含死帽蕈的概率是0.2,即80%确定图中的蘑菇不是死帽蕈,但尽管如此我们也不会吃它,因为不值得冒20%的死亡风险。换句话说,不确定风险的影响远远大于收益
因此,我们需要将“预期风险”作为损失函数,即需要将结果的概率乘以与之相关的收益(或伤害)。在这种情况下,食用蘑菇造成的损失为正无穷,而丢弃蘑菇的损失为0.8。
分类可能变得比二项分类、多项分类复杂得多。

例如,有一些分类任务的变体可以用于寻找层次结构,层次结构假定在许多类之间存在某种关系,因此并不是所有的错误都是均等的,人们宁愿错误地分入一个相关的类别,也不愿错误地分入一个遥远的类别,这通常被称为层次分类**(hierarchical classification)**。比如,在动物分类的应用中,把一只狮子狗误认为雪纳瑞可能不会太糟糕。但如果模型将狮子狗与恐龙混淆就会被喷。而且,层次结构相关性可能取决于模型的使用者计划如何使用模型, 例如响尾蛇和乌梢蛇血缘上可能很接近,但如果把响尾蛇误认为是乌梢蛇是要命的,因为响尾蛇是有毒的,而乌梢蛇是无毒的。

标记问题

有些分类问题很适合于二项分类或多项分类。
例如,我们可以训练一个普通的二项分类器来区分猫和狗,运用最前沿的计算机视觉的算法,这个模型可以很轻松地被训练,但尽管如此,无论模型有多精确,当分类器遇到新的动物时可能会束手无策。
比如下图所示的这个图:

image.png

这个时候将其视为二项分类问题可能没有多大意义,取而代之,我们可能想让模型描绘输入图像的内容:一只猫、一只公鸡、一只狗,还有一头驴。

学习预测不相互排斥的类别的问题称为多标签分类(multi-label classification)
举个例子,人们在技术博客上贴的标签,比如“机器学习”“技术”“小工具”“编程语言”“Linux”“云计算”“AWS”,一篇典型的文章可能会用5~10个标签,因为这些概念是相互关联的,关于“云计算”的帖子可能会提到“AWS”,而关于“机器学习”的帖子也可能涉及“编程语言”。

在处理生物医学文献时,我们也会遇到这类问题,在NLM,一些专业的注释员会检查每一篇在PubMed中被索引的文章以便将其与Mesh中的相关术语相关联(Mesh是一个大约有28000个标签的集合)。这是一个十分耗时的过程,所以这些文献的Mesh词搜索通常有延迟。而机器学习算法可以提供临时标签,直到每一篇文章都有严格的人工审核。

搜索

有时,我们不仅仅希望输出一个类别或一个实值,而是希望对一组项目进行排序。以网络搜索为例,目标不是简单的“查询(query)-网页(page)”分类,而是在海量搜索结果中找到用户最需要的那部分,学习算法需要输出有序的元素子集。换句话说,如果要求我们输出字母表中的前5个字母,返回“A、B、C、D、E”和“C、A、B、E、D”是不同的。

该问题的一种可能的解决方案:首先为集合中的每个元素分配相应的相关性分数,然后检索评级最高的元素。PageRank,谷歌等是这种评分系统的早期例子,它的奇特之处在于它不依赖于实际的查询。
而如今,搜索引擎使用机器学习和用户行为模型来获取网页相关性得分,很多学术会议也致力于这一主题。

推荐系统

另一类与搜索和排名相关的问题是推荐系统(recommender system),它的目标是向特定用户进行“个性化”推荐。对于电影推荐,科幻迷和喜剧爱好者的推荐结果页面可能会有很大不同。类似的应用也会出现在零售产品、音乐和新闻推荐等等。

客户可能会提供显性或隐性的反馈。例如某用户跳过播放列表中的某些歌曲,这可能说明这些歌曲对此用户不大合适等等,总的来说,推荐系统会为“给定用户和物品”的匹配性打分,这个“分数”可能是估计的评级或购买的概率。
由此,对于任何给定的用户,推荐系统都可以检索得分最高的对象集,然后将其推荐给用户。以上只是简单的算法,而工业生产的推荐系统要先进得多,它会将详细的用户活动和项目特征考虑在内。
尽管推荐系统具有巨大的应用价值,但单纯用它作为预测模型仍存在一些缺陷。
首先,我们的数据只包含“审查后的反馈”:用户更倾向于给他们感觉强烈的事物打分。例如,在五分制电影评分中,会有许多五星级和一星级评分,但三星级却明显很少。此外,推荐系统有可能形成反馈循环:推荐系统首先会优先推送一个购买量较大的商品,然而目前用户的购买习惯往往是遵循推荐算法,但学习算法并不总是考虑到这一细节,进而已经被推荐的会更频繁地被推荐。
综上所述,关于如何处理审查、激励和反馈循环的许多问题,都是重要的开放性研究问题。

序列学习

以上大多数问题都具有固定大小的输入和产生固定大小的输出。在这些情况下,模型只会将输入作为生成输出的“原料”,而不会“记住”输入的具体内容。但是如果输入是连续的,模型可能就需要拥有“记忆”功能。

比如,我们该如何处理视频片段呢?在这种情况下,每个视频片段可能由不同数量的帧组成,通过前一帧的图像,我们可能对后一帧中发生的事情更有把握,语言也是如此,机器翻译的输入和输出都为文字序列。再比如,在医学上序列输入和输出就更为重要,设想一下,假设一个模型被用来监控重症监护病人,如果他们在未来24小时内死亡的风险超过某个阈值,这个模型就会发出警报,我们绝不希望抛弃过去每小时有关病人病史的所有信息,而仅根据最近的测量结果做出预测。

这些问题是是机器学习最令人兴奋的应用之一。序列学习需要摄取输入序列或预测输出序列,或两者兼而有之。具体来说,输入和输出都是可变长度的序列,例如机器翻译和从语音中转录文本。
虽然不可能考虑所有类型的序列转换,但以下特殊情况值得一提。

标记和解析。这涉及到用属性注释文本序列。标记为“Ent”,是实体(entity)的简写。

1
2
Tom has dinner in Washington with Sally
Ent - - - Ent - Ent

自动语音识别。它的挑战在于,与文本相比,音频帧多得多(声音通常以8kHz或16kHz采样)。音频和文本之间没有1:1的对应关系,因为数千个样本可能对应于一个单独的单词。这也是“序列到序列”的学习问题,其中输出比输入短得多。

文本到语音。在这种情况下,输出比输入长得多。
机器翻译
在语音识别中,输入和输出的出现顺序基本相同。而在机器翻译中,颠倒输入和输出的顺序非常重要。换句话说,虽然我们仍将一个序列转换成另一个序列,但是输入和输出的数量以及相应序列的顺序大都不会相同。

无监督学习

“监督学习”模型像一个打工仔,有一份极其专业的工作和一位极其平庸的老板。老板站在身后,准确地告诉模型在每种情况下应该做什么,直到模型学会从情况到行动的映射。取悦这位老板很容易,只需尽快识别出模式并模仿他们的行为即可。

相反,如果工作没有十分具体的目标,就需要“自发”地去学习了。比如,老板可能会给我们一大堆数据,然后要求用它做一些数据科学研究,却没有对结果有要求。这类数据中不含有“目标”的机器学习问题通常被为无监督学习(unsupervised learning)。
那么无监督学习可以回答什么样的问题呢?

  • 聚类(clustering)问题:没有标签的情况下,我们是否能给数据分类呢?比如,给定一组照片,我们能把它们分成风景照片、狗、婴儿、猫和山峰的照片吗?同样,给定一组用户的网页浏览记录,我们能否将具有相似行为的用户聚类呢?
  • 主成分分析(principal component analysis)问题:我们能否找到少量的参数来准确地捕捉数据的线性相关属性?比如,一个球的运动轨迹可以用球的速度、直径和质量来描述。再比如,裁缝们已经开发出了一小部分参数,这些参数相当准确地描述了人体的形状,以适应衣服的需要。另一个例子:在欧几里得空间中是否存在一种(任意结构的)对象的表示,使其符号属性能够很好地匹配?这可以用来描述实体及其关系,例如“罗马” - “意大利” + “法国” = “巴黎”。
  • 因果关系(causality)和概率图模型(probabilistic graphical models)问题:我们能否描述观察到的许多数据的根本原因?例如,如果我们有关于房价、污染、犯罪、地理位置、教育和工资的人口统计数据,我们能否简单地根据经验数据发现它们之间的关系?
  • 生成对抗性网络(generative adversarial networks):为我们提供一种合成数据的方法,甚至像图像和音频这样复杂的非结构化数据。潜在的统计机制是检查真实和虚假数据是否相同的测试,它是无监督学习的另一个重要而令人兴奋的领域。

与环境互动

有人一直心存疑虑:机器学习的输入(数据)来自哪里?机器学习的输出又将去往何方?到目前为止,不管是监督学习还是无监督学习,我们都会预先获取大量数据,然后启动模型,不再与环境交互。这里所有学习都是在算法与环境断开后进行的,被称为离线学习(offline learning)
对于监督学习,从环境中收集数据的过程如图所示:

image.png

好的一面是,我们可以孤立地进行模式识别,而不必分心于其他问题,缺点是解决的问题相当有限。我们可能会期望人工智能不仅能够做出预测,而且能够与真实环境互动。
与预测不同,“与真实环境互动”实际上会影响环境,这里的人工智能会变成“智能代理”,而不仅是“预测模型”,因此,我们必须考虑到它的行为可能会影响未来的观察结果。

考虑“与真实环境互动”将打开一整套新的建模问题。以下只是几个例子。

  • 环境还记得我们以前做过什么吗?
  • 环境是否有助于我们建模?例如,用户将文本读入语音识别器。
  • 环境是否想要打败模型?例如,一个对抗性的设置,如垃圾邮件过滤或玩游戏?
  • 环境是否重要?
  • 环境是否变化?例如,未来的数据是否总是与过去相似,还是随着时间的推移会发生变化?是自然变化还是响应我们的自动化工具而发生变化?

当训练和测试数据不同时,最后一个问题提出了分布偏移(distribution shift)的问题。接下来的内容将简要描述强化学习问题,这是一类明确考虑与环境交互的问题。

强化学习

如果你对使用机器学习开发与环境交互并采取行动感兴趣,那么最终可能会专注于强化学习(reinforcement learning)深度强化学习(deep reinforcement learning)将深度学习应用于强化学习的问题,是非常热门的研究领域。
突破性的深度Q网络(Q-network)在雅达利游戏中仅使用视觉输入就击败了人类,
以及 AlphaGo 程序在棋盘游戏围棋中击败了世界冠军,是两个突出强化学习的例子。在强化学习问题中,智能体(agent)在一系列的时间步骤上与环境交互
在每个特定时间点,智能体从环境接收一些观察(observation),并且必须选择一个动作(action),然后通过某种机制(有时称为执行器)将其传输回环境,最后智能体从环境中获得奖励(reward)

此后新一轮循环开始,智能体接收后续观察,并选择后续操作,依此类推。

请注意,强化学习的目标是产生一个好的策略(policy)。强化学习智能体选择的“动作”受策略控制,即一个从环境观察映射到行动的功能。

我们可以将任何监督学习问题转化为强化学习问题。假设我们有一个分类问题,可以创建一个强化学习智能体,每个分类对应一个“动作”,然后,我们可以创建一个环境,该环境给予智能体的奖励,这个奖励与原始监督学习问题的损失函数是一致的。

强化学习还可以解决许多监督学习无法解决的问题,例如在监督学习中,我们总是希望输入与正确的标签相关联,但在强化学习中,我们并不假设环境告诉智能体每个观测的最优动作。一般来说,智能体只是得到一些奖励,环境甚至可能不会告诉是哪些行为导致了奖励。

以强化学习在国际象棋的应用为例。唯一真正的奖励信号出现在游戏结束时:当智能体获胜时,智能体可以得到奖励1;当智能体失败时,智能体将得到奖励-1。因此,强化学习者必须处理学分分配(credit assignment)问题:决定哪些行为是值得奖励的,哪些行为是需要惩罚的。就像一个员工升职一样,这次升职很可能反映了前一年的大量的行动,要想在未来获得更多的晋升,就需要弄清楚这一过程中哪些行为导致了晋升。

强化学习可能还必须处理部分可观测性问题,也就是说,当前的观察结果可能无法阐述有关当前状态的所有信息。比方说,一个清洁机器人发现自己被困在一个许多相同的壁橱的房子里,推断机器人的精确位置需要在进入壁橱之前考虑它之前的观察结果。

最后,在任何时间点上,强化学习智能体可能知道一个好的策略,但可能有许多更好的策略从未尝试过的,强化学习智能体必须不断地做出选择:是应该利用当前最好的策略,还是探索新的策略空间(放弃一些短期回报来换取知识)。

一般的强化学习问题是一个非常普遍的问题。智能体的动作会影响后续的观察,而奖励只与所选的动作相对应,环境可以是完整观察到的,也可以是部分观察到的,解释所有这些复杂性可能会对研究人员要求太高,此外,并不是每个实际问题都表现出所有这些复杂性。

当环境可被完全观察到时,强化学习问题被称为马尔可夫决策过程(markov decision process)
当状态不依赖于之前的操作时,我们称该问题为上下文赌博机(contextual bandit problem)
当没有状态,只有一组最初未知回报的可用动作时,这个问题就是经典的多臂赌博机(multi-armed bandit problem)

起源

人类长期以来就有分析数据和预测未来结果的愿望,自然科学大部分都植根于此。例如伯努利分布是以雅各布•伯努利(1654-1705)命名的,高斯分布是由卡尔•弗里德里希•高斯(1777-1855)发现的,他发明了最小均方算法,至今仍用于解决从保险计算到医疗诊断的许多问题。这些工具算法催生了自然科学中的实验方法——例如,电阻中电流和电压的欧姆定律可以用线性模型完美地描述。

即使在中世纪,数学家对估计(estimation)也有敏锐的直觉。例如,雅各布·克贝尔 (1460–1533)的几何学书籍举例说明,通过平均16名成年男性的脚的长度,可以得出一英尺的长度:16名成年男子被要求脚连脚排成一行,将它们的总长度除以16,得到现在等于1英尺的估计值。这个算法后来被改进以处理畸形的脚——将拥有最短和最长脚的两个人剔除,对其余的人取平均值,这是最早的修剪均值估计的例子之一。

随着数据的收集和可获得性,统计数据真正实现了腾飞。罗纳德·费舍尔(1890-1962)对统计理论和在遗传学中的应用做出了重大贡献,他的许多算法(如线性判别分析)和公式(如费舍尔信息矩阵)至今仍被频繁使用,费舍尔在1936年发布的鸢尾花卉数据集,有时仍然被用来解读机器学习算法。

机器学习的第二个影响来自克劳德·香农(1916–2001)的信息论和艾伦·图灵(1912-1954)的计算理论。图灵在他著名的论文《计算机器与智能》中提出了“机器能思考吗?”的问题,在他所描述的图灵测试中,如果人类评估者很难根据文本互动区分机器和人类的回答,那么机器就可以被认为是“智能的”。

另一个影响可以在神经科学和心理学中找到,其中,最古老的算法之一是唐纳德·赫布 (1904–1985)开创性的著作《行为的组织》 他提出神经元通过积极强化学习,是Rosenblatt感知器学习算法的原型,被称为“赫布学习”。这个算法也为当今深度学习的许多随机梯度下降算法奠定了基础:强化期望行为和减少不良行为,从而在神经网络中获得良好的参数设置。

神经网络(neural networks)的得名源于生物灵感。一个多世纪以来(追溯到1873年亚历山大·贝恩和1890年詹姆斯·谢林顿的模型),研究人员一直试图组装类似于相互作用的神经元网络的计算电路。随着时间的推移,对生物学的解释变得不再肤浅,但这个名字仍然存在。其核心是当今大多数网络中都可以找到的几个关键名词:

  • 线性和非线性处理单元的交替,通常称为(layers)
  • 使用链式规则(也称为反向传播(backpropagation))一次性调整网络中的全部参数。

经过最初的快速发展,神经网络的研究从1995年左右开始停滞不前,直到2005年才稍有起色,这主要是因为两个原因:首先,训练网络(在计算上)非常昂贵。在上个世纪末,随机存取存储器(RAM)非常强大,而计算能力却很弱。其次,数据集相对较小。考虑到数据和计算的稀缺性,核方法(kernel method)、决策树(decision tree)和图模型(graph models)等强大的统计工具(在经验上)证明是更为优越的。与神经网络不同的是,这些算法不需要数周的训练,而且有很强的理论依据,可以提供可预测的结果。

深度学习的发展

大约2010年开始,那些在计算上看起来不可行的神经网络算法变得热门起来,实际上是以下两点导致的:
其一,随着互联网的公司的出现,为数亿在线用户提供服务,大规模数据集变得触手可及;
另外,廉价又高质量的传感器、廉价的数据存储(克莱德定律)以及廉价计算(摩尔定律)的普及,特别是GPU的普及,使大规模算力唾手可得。

当下,随机存取存储器没有跟上数据增长的步伐,而算力的增长速度已经超过了现有数据的增长速度。这意味着统计模型需要提高内存效率(这通常是通过添加非线性来实现的),同时由于算力的增加,能够花费更多时间来优化这些参数。
因此,机器学习和统计的关注点从(广义的)线性模型和核方法转移到了深度神经网络。这也造就了许多深度学习的中流砥柱,如多层感知机、卷积神经网络、长短期记忆网络和Q学习,在相对休眠了相当长一段时间之后,在过去十年中被“重新发现”。

最近十年,在统计模型、应用和算法方面的进展就像寒武纪大爆发——历史上物种飞速进化的时期。事实上,最先进的技术不仅仅是将可用资源应用于几十年前的算法的结果。这里就不列举了,有关内容可以看相关论文与教程。

关于人工智能的非技术性文章中,经常提到人工智能奇点的问题:机器学习系统会变得有知觉,并独立于主人来决定那些直接影响人类生计的事情。在某种程度上,人工智能已经直接影响到人类的生计:信誉度的自动评估,车辆的自动驾驶,保释决定的自动准予等等。

幸运(或者不幸?)的是,我们离一个能够控制人类创造者的有知觉的人工智能系统还很远。首先,人工智能系统是以一种特定的、面向目标的方式设计、训练和部署的,虽然他们的行为可能会给人一种通用智能的错觉,但设计的基础是规则、启发式和统计模型的结合。其次,目前还不存在能够自我改进、自我推理、能够在试图解决一般任务的同时,修改、扩展和改进自己的架构的“人工通用智能”工具。

相比担心这个,一个更紧迫的问题是人工智能在日常生活中的应用问题…

特点

机器学习既是人工智能的一个分支,也是人工智能的一种方法。虽然深度学习是机器学习的一个子集,但令人眼花缭乱的算法和应用程序集让人很难评估深度学习的具体成分是什么。这就像试图确定披萨所需的配料一样困难,因为几乎每种成分都是可以替代的。

如前所述,机器学习可以使用数据来学习输入和输出之间的转换,例如在语音识别中将音频转换为文本,在这样做时,通常需要以适合算法的方式表示数据,以便将这种表示转换为输出。

深度学习是“深度”的,模型学习了许多“层”的转换,每一层提供一个层次的表示。例如,靠近输入的层可以表示数据的低级细节,而接近分类输出的层可以表示用于区分的更抽象的概念。由于表示学习(representation learning)目的是寻找表示本身,因此深度学习可以称为“多级表示学习”

深度学习方法中最显著的共同点是使用端到端训练。也就是说,与其基于单独调整的组件组装系统,不如构建系统,然后联合调整它们的性能:深度学习的一个关键优势是它不仅取代了传统学习管道末端的浅层模型,而且还取代了劳动密集型的特征工程过程。此外,通过取代大部分特定领域的预处理,深度学习消除了以前分隔计算机视觉、语音识别、自然语言处理、医学信息学和其他应用领域的许多界限,为解决各种问题提供了一套统一的工具。

小结

  • 机器学习研究计算机系统如何利用经验(通常是数据)来提高特定任务的性能。它结合了统计学、数据挖掘和优化的思想。通常,它是被用作实现人工智能解决方案的一种手段。
  • 表示学习作为机器学习的一类,其研究的重点是如何自动找到合适的数据表示方式。深度学习是通过学习多层次的转换来进行的多层次的表示学习。
  • 深度学习不仅取代了传统机器学习的浅层模型,而且取代了劳动密集型的特征工程。
  • 最近在深度学习方面取得的许多进展,大都是由廉价传感器和互联网规模应用所产生的大量数据,以及(通过GPU)算力的突破来触发的。
  • 整个系统优化是获得高性能的关键环节。有效的深度学习框架的开源使得这一点的设计和实现变得非常容易。