PyTorch教程-1.简介

电子说

1.2w人已加入

描述

直到最近,您在日常生活中可能与之交互的几乎每个计算机程序都被编码为一组严格的规则,精确指定了它应该如何运行。假设我们要编写一个应用程序来管理电子商务平台。在围着白板思考几个小时后,我们可能会确定一个可行解决方案的大致思路,例如:(i) 用户通过在 Web 浏览器或移动应用程序中运行的界面与应用程序交互;(ii) 我们的应用程序与商业级数据库引擎交互,以跟踪每个用户的状态并维护历史交易记录;(iii) 在我们应用程序的核心,业务逻辑(你可能会说,大脑) 我们的应用程序阐明了一组规则,将每一种可能的情况映射到我们的程序应该采取的相应行动。

为了构建我们应用程序的大脑,我们可能会枚举我们的程序应该处理的所有常见事件。例如,每当客户点击将商品添加到他们的购物车时,我们的程序就应该向购物车数据库表添加一个条目,将用户的 ID 与请求的产品 ID 相关联。然后我们可能会尝试遍历每一个可能的极端情况,测试我们的规则的适当性并进行任何必要的修改。如果用户使用空购物车开始购买会怎样?虽然很少有开发人员第一次就完全正确(可能需要进行一些测试才能解决问题),但在大多数情况下,我们可以编写此类程序并自信地启动它们见过真正的客户。我们通常在新情况下手动设计驱动功能产品和系统的自动化系统的能力是一项了不起的认知壮举。当您能够设计出有效的解决方案时 (100%)当时,您通常不应该担心机器学习。

幸运的是,对于不断壮大的机器学习科学家群体来说,我们想要自动化的许多任务并不容易屈从于人类的聪明才智。想象一下,你认识的最聪明的人围坐在白板周围,但这一次你要解决以下问题之一:

编写一个程序,根据地理信息、卫星图像和过去天气的拖尾窗口预测明天的天气。

编写一个程序,接受一个以自由格式文本表达的事实型问题,并正确回答它。

编写一个程序,根据给定的图像识别图像中描绘的所有人,并在每个人周围画出轮廓。

编写一个程序,向用户展示他们可能会喜欢但在自然浏览过程中不太可能遇到的产品。

对于这些问题,即使是精英程序员也很难从头开始编写解决方案。原因可能各不相同。有时我们正在寻找的程序遵循一种随时间变化的模式,因此没有固定的正确答案!在这种情况下,任何成功的解决方案都必须优雅地适应不断变化的世界。在其他时候,关系(比如像素和抽象类别之间的关系)可能过于复杂,需要数千或数百万次计算并遵循未知的原则。在图像识别的情况下,执行任务所需的精确步骤超出了我们的意识理解,即使我们的潜意识认知过程毫不费力地执行任务。

机器学习是对可以从经验中学习的算法的研究。随着机器学习算法积累更多经验(通常以观察数据或与环境交互的形式),其性能会提高。将此与我们的确定性电子商务平台进行对比,无论积累多少经验,它都遵循相同的业务逻辑,直到开发人员自己学习并决定是时候更新软件了。在本书中,我们将向您介绍机器学习的基础知识,尤其是深度学习,这是一套强大的技术,可在计算机视觉、自然语言处理、医疗保健和基因组学等不同领域推动创新。

1.1. 一个激励人心的例子

在开始写作之前,本书的作者和许多工作人员一样,不得不喝下咖啡因。我们跳上车,开始开车。亚历克斯使用 iPhone 喊出“Hey Siri”,唤醒了手机的语音识别系统。然后Mu命令“去Blue Bottle咖啡店的方向”。手机很快就显示出他的命令抄录。它还认识到我们正在询问方向并启动了地图应用程序 (app) 来满足我们的请求。启动后,地图应用程序会识别出多条路线。在每条路线旁边,手机会显示预计的通行时间。虽然我们为了教学方便而编造了这个故事,但它表明,在短短几秒钟的时间里,我们与智能手机的日常互动可以涉及多种机器学习模型。

想象一下,只需编写一个程序来响应诸如“Alexa”、“OK Google”和“Hey Siri”之类的唤醒词。尝试自己在房间里用计算机和代码编辑器编写代码,如图1.1.1所示。你会如何根据第一性原理编写这样的程序?想一想……这个问题很难。每秒,麦克风将收集大约 44000 个样本。每个样本都是对声波振幅的测量。什么规则可以可靠地将一段原始音频映射到自信的预测 ({text{yes}, text{no}})关于片段是否包含唤醒词?如果您被卡住了,请不要担心。我们也不知道如何从头开始编写这样的程序。这就是我们使用机器学习的原因。

pytorch

图 1.1.1识别唤醒词。

这是诀窍。通常,即使我们不知道如何明确地告诉计算机如何将输入映射到输出,我们仍然能够自己完成认知壮举。换句话说,即使你不知道如何让计算机识别“Alexa”这个词,你自己也能识别它。有了这种能力,我们可以收集一个巨大的数据集,其中包含音频片段和相关标签的示例,指示哪些片段包含唤醒词。在机器学习的主流方法中,我们不会尝试设计一个明确识别唤醒词的系统。相反,我们定义了一个灵活的程序,其行为由许多参数决定. 然后我们使用数据集来确定可能的最佳参数值,即那些可以根据所选性能指标提高程序性能的参数值。

您可以将参数视为我们可以转动的旋钮,从而操纵程序的行为。固定参数,我们称程序为模型。我们仅通过操纵参数就可以生成的所有不同程序(输入-输出映射)的集合称为 模型族。而使用我们的数据集来选择参数的元程序称为学习算法。

在我们继续使用学习算法之前,我们必须精确定义问题,确定输入和输出的确切性质,并选择合适的模型系列。在这种情况下,我们的模型接收一段音频作为输入,然后模型生成一个选择({text{yes}, text{no}})作为 输出。如果一切按计划进行,模型对片段是否包含唤醒词的猜测通常是正确的。

如果我们选择正确的模型系列,应该有一个旋钮设置,这样模型每次听到“Alexa”这个词时都会发出“是”。因为唤醒词的确切选择是任意的,我们可能需要一个足够丰富的模型系列,通过旋钮的另一种设置,它可以仅在听到“Apricot”这个词时发出“是”。我们期望相同的模型系列应该适用于“Alexa”识别和“Apricot”识别,因为从直觉上看,它们似乎是相似的任务。然而,如果我们想要处理根本不同的输入或输出,比如我们想要从图像映射到字幕,或者从英文句子映射到中文句子,我们可能需要完全不同的模型系列。

您可能会猜到,如果我们只是随机设置所有旋钮,我们的模型不太可能识别“Alexa”、“Apricot”或任何其他英文单词。在机器学习中,学习是我们发现旋钮的正确设置的过程,通过该过程可以从我们的模型中强制执行所需的行为。换句话说,我们用数据训练我们的模型。如图 1.1.2所示,训练过程通常如下所示:

从一个随机初始化的模型开始,它不能做任何有用的事情。

抓取你的一些数据(例如,音频片段和相应的 ({text{yes}, text{no}})标签)。

调整旋钮以使模型在这些示例中评估时表现更好。

重复步骤 2 和 3,直到模型很棒。

pytorch

图 1.1.2一个典型的训练过程。

总而言之,我们不是编写唤醒词识别器的代码,而是编写一个可以学习识别唤醒词的程序,如果提供一个大型标记数据集的话。您可以将这种通过向程序展示数据集来确定程序行为的行为视为使用数据进行编程. 也就是说,我们可以通过为我们的机器学习系统提供许多猫和狗的例子来“编程”一个猫检测器。这样,检测器最终将学习如果它是猫则发出一个非常大的正数,如果它是狗则发出一个非常大的负数,如果不确定则发出接近于零的值。这仅仅触及了机器学习可以做什么的皮毛。我们稍后将更详细地解释深度学习,它只是解决机器学习问题的众多流行方法之一。

1.2. 关键部件

在我们的唤醒词示例中,我们描述了一个由音频片段和二进制标签组成的数据集,并且我们对如何训练模型来近似从片段到分类的映射给出了一个简单的概念。这类问题,我们尝试根据已知输入预测指定的未知标签,给定由标签已知的示例组成的数据集,称为 监督学习。这只是众多机器学习问题中的一种。在我们探索其他品种之前,我们想更清楚地了解一些核心组件,无论我们处理什么样的机器学习问题,这些核心组件都会跟随我们:

我们可以从中学习的数据。

如何转换数据的模型。

量化模型运行情况的目标函数。

调整模型参数以优化目标函数的算法。

1.2.1. 数据

不用说,没有数据就无法进行数据科学。我们可能会浪费数百页来思考数据到底是什么,但现在,我们将专注于我们将关注的数据集的关键属性。通常,我们关注示例的集合。为了有效地处理数据,我们通常需要提出合适的数字表示。每个示例(或数据点、数据实例、样本)通常由一组称为特征的属性(有时称为协变量或 输入),模型必须基于此做出预测。在监督学习问题中,我们的目标是预测一个特殊属性的值,称为标签(或目标),它不是模型输入的一部分。

如果我们处理的是图像数据,则每个示例都可能包含一张单独的照片(特征)和一个指示照片所属类别的数字(标签)。照片将以数字方式表示为三个数值网格,代表每个像素位置的红光、绿光和蓝光的亮度。例如,一个(200times 200)彩色照片将包括(200times200times3=120000)数值。

或者,我们可以使用电子健康记录数据来处理预测给定患者在接下来 30 天内存活的可能性的任务。在这里,我们的特征可能包括一组现成的属性和经常记录的测量值,包括年龄、生命体征、合并症、当前药物治疗和最近的程序。可用于训练的标签将是一个二进制值,指示历史数据中的每个患者是否在 30 天窗口内存活。

在这种情况下,当每个示例都具有相同数量的数字特征时,我们说输入是固定长度的向量,我们将向量的(恒定)长度称为数据的维度。正如您想象的那样,固定长度的输入可能很方便,让我们不必担心那么复杂。但是,并非所有数据都可以轻松表示为固定长度向量。虽然我们可能期望显微镜图像来自标准设备,但我们不能期望从 Internet 中提取的图像都以相同的分辨率或形状显示。对于图像,我们可能会考虑将它们全部裁剪为标准尺寸,但该策略只能让我们走到这一步。我们冒着丢失裁剪部分信息的风险。此外,文本数据更顽固地抵制固定长度的表示。考虑在亚马逊、IMDb 和 TripAdvisor 等电子商务网站上留下的客户评论。有些很短:“它很臭!”。其他人漫不经心地寻找页面。与传统方法相比,深度学习的一大优势是现代模型可以相对优雅地处理变长数据。

通常,我们拥有的数据越多,我们的工作就越容易。当我们拥有更多数据时,我们可以训练更强大的模型,减少对先入为主的假设的依赖。从(相对)小数据到大数据的机制变化是现代深度学习成功的主要贡献者。为了说明这一点,深度学习中许多最令人兴奋的模型如果没有大型数据集就无法工作。其他一些在小数据领域工作,但并不比传统方法好。

最后,拥有大量数据并巧妙地处理数据是不够的。我们需要正确的数据。如果数据充满错误,或者如果所选特征不能预测感兴趣的目标数量,学习就会失败。陈词滥调很好地描述了这种情况:垃圾进,垃圾出. 此外,糟糕的预测性能并不是唯一的潜在后果。在机器学习的敏感应用中,例如预测性监管、简历筛选和用于贷款的风险模型,我们必须特别警惕垃圾数据的后果。一种常见的故障模式发生在训练数据中没有代表某些人群的数据集中。想象一下,在以前从未见过黑色皮肤的野外应用皮肤癌识别系统。当数据不仅不能充分代表某些群体而且反映了社会偏见时,也可能会失败。例如,如果过去的招聘决定被用来训练一个用于筛选简历的预测模型,那么机器学习模型可能会无意中捕捉到历史上的不公正现象并将其自动化。

1.2.2. 楷模

大多数机器学习都涉及在某种意义上转换数据。我们可能想要构建一个系统来摄取照片并预测笑脸。或者,我们可能想要获取一组传感器读数并预测读数的正常与异常程度。按 型号,我们表示用于摄取一种类型的数据并吐出可能不同类型的预测的计算机器。特别是,我们对可以从数据中估计的统计模型感兴趣。虽然简单的模型完全能够解决适当的简单问题,但我们在本书中关注的问题超出了经典方法的局限性。深度学习与经典方法的区别主要在于它关注的一组强大模型。这些模型由许多连续的数据转换组成,这些数据从上到下链接在一起,因此得名深度学习。在讨论深度模型的过程中,我们还将讨论一些更传统的方法。

1.2.3. 目标函数

早些时候,我们将机器学习介绍为从经验中学习。通过 在这里学习,我们的意思是随着时间的推移在某些任务上有所改进。但是谁能说什么是改进呢?您可能会想象我们可以提议更新我们的模型,而有些人可能不同意提议的更新是改进还是下降。

为了开发一个正式的学习机器数学系统,我们需要对我们的模型有多好(或多坏)有正式的衡量标准。在机器学习和更一般的优化中,我们称这些 为目标函数。按照惯例,我们通常将目标函数定义为越低越好。这只是一个惯例。您可以采用任何越高越好的函数,并通过翻转符号将其转换为质量相同但越低越好的新函数。因为越低越好,这些函数有时被称为损失函数。

当尝试预测数值时,最常见的损失函数是平方误差,即预测值与真实目标之间的差值的平方。对于分类,最常见的目标是最小化错误率,即我们的预测与基本事实不一致的示例部分。一些目标(例如,平方误差)易于优化,而其他目标(例如,错误率)由于不可微性或其他复杂性而难以直接优化。在这些情况下,通常会优化替代目标。

在优化过程中,我们将损失视为模型参数的函数,并将训练数据集视为常数。我们通过最小化由为训练收集的一些示例组成的集合所产生的损失来学习模型参数的最佳值。然而,在训练数据上做得很好并不能保证我们在看不见的数据上也会做得很好。因此,我们通常希望将可用数据分成两个部分:训练数据集(或训练集),用于学习模型参数;和测试数据集(或测试集), 用于评估。在一天结束时,我们通常会报告我们的模型在两个分区上的表现。您可以将培训绩效视为类似于学生在用于准备某些实际期末考试的练习考试中取得的分数。即使结果令人鼓舞,也不能保证在期末考试中取得成功。在学习过程中,学生可能会开始背诵练习题,看似掌握了主题,但在面对实际期末考试中以前没见过的问题时却步履蹒跚。当一个模型在训练集上表现良好但无法泛化到看不见的数据时,我们说它对训练数据过度拟合。

1.2.4. 优化算法

一旦我们获得了一些数据源和表示、模型和定义明确的目标函数,我们就需要一种能够搜索最佳参数以最小化损失函数的算法。流行的深度学习优化算法基于一种称为梯度下降的方法。简而言之,在每个步骤中,此方法都会检查每个参数,以查看如果您对该参数进行少量扰动,训练集损失将以何种方式移动。然后它在降低损失的方向上更新参数。

1.3. 机器学习问题的种类

我们激励示例中的唤醒词问题只是机器学习可以解决的众多问题之一。为了进一步激励读者并为我们提供一些贯穿全书的通用语言,我们现在提供机器学习问题公式的广泛概述。

1.3.1. 监督学习

监督学习描述的任务是给定一个包含特征和标签的数据集,并负责生成一个模型来预测给定输入特征的标签。每个特征-标签对称为一个示例。有时,当上下文清楚时,我们可以使用术语示例引用一组输入,即使相应的标签未知。监督发挥作用是因为为了选择参数,我们(监督者)为模型提供了一个由标记示例组成的数据集。在概率方面,我们通常对估计给定输入特征的标签的条件概率感兴趣。虽然它只是机器学习中的几种范式之一,但监督学习占机器学习在工业中的大部分成功应用。部分原因是,许多重要任务可以清晰地描述为在给定一组特定的可用数据的情况下估计未知事物的概率:

根据计算机断层扫描图像预测癌症与非癌症。

给出英语句子,预测正确的法语翻译。

根据本月的财务报告数据预测下个月的股票价格。

虽然所有监督学习问题都被简单描述“预测给定输入特征的标签”所捕获,但监督学习可以采取多种形式并需要大量建模决策,具体取决于(除其他考虑因素外)输入的类型、大小和数量和输出。例如,我们使用不同的模型来处理任意长度的序列和处理固定长度的向量表示。我们将在本书中深入探讨其中的许多问题。

非正式地,学习过程如下所示。首先,获取大量特征已知的示例,并从中随机选择一个子集,为每个示例获取真实标签。有时这些标签可能是已经收集到的可用数据(例如,患者是否在下一年内死亡?),而其他时候我们可能需要使用人工注释器来标记数据(例如,将图像分配给类别)。这些输入和相应的标签一起构成了训练集。我们将训练数据集输入监督学习算法,该算法将数据集作为输入并输出另一个函数:学习模型。最后,我们可以将以前看不见的输入提供给学习模型,使用其输出作为相应标签的预测。图 1.3.1。

pytorch

图 1.3.1监督学习。

1.3.1.1. 回归

也许最简单的监督学习任务就是回归。例如,考虑从房屋销售数据库中收集的一组数据。我们可以构建一个表,其中每一行对应不同的房子,每一列对应一些相关属性,例如房子的平方英尺、卧室数、浴室数和分钟数(步行) 到市中心。在这个数据集中,每个例子都是一个特定的房子,对应的特征向量是表格中的一行。如果你住在纽约或旧金山,而且你不是亚马逊、谷歌、微软或 Facebook 的首席执行官,那么你家的(平方英尺、卧室数量、浴室数量、步行距离)特征向量可能看起来像:([600, 1, 1, 60]). 然而,如果你住在匹兹堡,它可能看起来更像([3000, 4, 3, 10]). 像这样的固定长度特征向量对于大多数经典机器学习算法来说都是必不可少的。

使问题回归的实际上是目标的形式。假设您正在市场上购买新房。考虑到上述某些特征,您可能想要估算房屋的公平市场价值。这里的数据可能包括历史房屋清单,标签可能是观察到的销售价格。当标签采用任意数值(即使在某个区间内)时,我们称之为 回归问题。目标是生成一个模型,其预测非常接近实际标签值。

许多实际问题很容易描述为回归问题。预测用户对电影的评分可以被认为是一个回归问题,如果你在 2009 年设计了一个伟大的算法来完成这一壮举,你可能会赢得 100 万美元的 Netflix奖。预测患者住院时间的长短也是一个回归问题。一个好的经验法则是多少?或者有多少?问题应该建议回归,例如:

这个手术需要几个小时?

这个镇在接下来的六个小时内会有多少降雨量?

即使您以前从未接触过机器学习,您也可能非正式地解决过回归问题。想象一下,例如,您修理了下水道,而您的承包商花了 3 个小时从污水管道中清除垃圾。然后他寄给你一张 350 美元的账单。现在想象一下,您的朋友雇用了同一个承包商 2 小时,他收到了一张 250 美元的账单。如果随后有人问你对他们即将开出的清除垃圾发票的期望值是多少,你可能会做出一些合理的假设,比如工作更多的时间会花费更多的钱。您可能还假设有一些基本费用,然后承包商按小时收费。如果这些假设成立,那么根据这两个数据示例,您已经可以确定承包商的定价结构:每小时 100 美元外加 50 美元出现在你家。如果你遵循了这么多,那么你已经理解了线性回归背后的高级思想。

在这种情况下,我们可以生成与承包商价格完全匹配的参数。有时这是不可能的,例如,如果某些差异归因于除您的两个特征之外的几个因素。在这些情况下,我们将尝试学习最小化我们的预测与观察值之间的距离的模型。在我们的大部分章节中,我们将重点关注最小化平方误差损失函数。正如我们稍后将看到的,这种损失对应于我们的数据被高斯噪声破坏的假设。

1.3.1.2。分类

虽然回归模型非常适合解决多少问题?问题,很多问题都不适用于此模板。例如,考虑一家想要为其移动应用程序开发支票扫描功能的银行。理想情况下,客户只需拍一张支票照片,应用程序就会自动识别图像中的文字。假设我们有能力分割出对应于每个手写字符的图像块,那么剩下的主要任务就是确定每个图像块中描绘了某个已知集合中的哪个字符。这几种是哪一种?问题称为分类,需要一组不同于用于回归的工具,尽管许多技术将继续存在。

在分类中,我们希望我们的模型查看特征,例如图像中的像素值,然后预测一些离散选项集中的类别(有时称为类),一个示例属于哪个类别。对于手写数字,我们可能有十个类别,对应于数字 0 到 9。最简单的分类形式是只有两个类别,我们称之为二进制分类的问题。例如,我们的数据集可能包含动物图像,而我们的标签可能是类别 (mathrm{{cat, dog}}). 在回归中,我们寻找一个回归器来输出一个数值,在分类中,我们寻找一个分类器,其输出是预测的类分配。

随着本书变得更加技术化,我们将深入探讨的原因是,优化只能输出硬分类分配(例如“猫”或“狗”)的模型可能很困难。在这些情况下,用概率语言来表达我们的模型通常要容易得多。给定示例的特征,我们的模型为每个可能的类别分配一个概率。回到我们的动物分类示例,其中类别是 (mathrm{{cat, dog}}),分类器可能会看到图像并输出图像是猫的概率为 0.9。我们可以通过说分类器 90% 确定图像描绘的是一只猫来解释这个数字。预测类别的概率大小传达了一种不确定性概念。它不是不确定性的唯一概念,我们将在更高级的章节中讨论其他概念。

当我们有两个以上的可能类别时,我们将问题称为 多类别分类。常见的例子包括手写字符识别(mathrm{{0, 1, 2, ... 9, a, b, c, ...}}). 虽然我们通过尝试最小化平方误差损失函数来解决回归问题,但分类问题的常见损失函数称为交叉熵,其名称可以通过后续章节的信息论介绍来揭开神秘面纱。

请注意,最有可能的类别不一定是您要用于您的决定的类别。假设你在后院发现了一个漂亮的蘑菇,如图1.3.2所示。

 

现在,假设您构建了一个分类器并训练它根据照片预测蘑菇是否有毒。假设我们的毒物检测分类器输出图 1.3.2的概率 包含死亡上限为 0.2。换句话说,分类器有 80% 的把握确定我们的蘑菇不是死亡帽。不过,你必须是个傻瓜才能吃它。那是因为美味晚餐的某些好处抵不上 20% 的死亡风险。换句话说,不确定风险的影响远远大于收益。因此,为了决定是否吃蘑菇,我们需要计算与每个行动相关的预期负效用,这取决于可能的结果以及与每个行动相关的利益或危害。在这种情况下,吃蘑菇产生的负效用可能是 (0.2 times infty + 0.8 times 0 = infty),而丢弃它的损失是(0.2 times 0 + 0.8 times 1 = 0.8). 我们的谨慎是有道理的:正如任何真菌学家都会告诉我们的那样,图 1.3.2中的蘑菇 实际上是一顶死亡帽。

分类可能比二分类或多分类复杂得多。例如,有一些分类变体处理层次结构的类。在这种情况下,并不是所有的错误都是平等的——如果我们一定会犯错,我们可能更愿意错误分类到一个相关的类而不是一个遥远的类。通常,这称为层次分类。为了获得灵感,您可能会想到 林奈,他将动物按等级组织起来。

在动物分类的情况下,将贵宾犬误认为雪纳瑞犬可能并没有那么糟糕,但如果将贵宾犬与恐龙混淆,我们的模型将付出巨大的代价。哪个层次结构是相关的可能取决于您计划如何使用该模型。例如,响尾蛇和吊带蛇在系统发育树上可能很接近,但将响尾蛇误认为是吊带蛇可能是致命的。

1.3.1.3. 标记

一些分类问题非常适合二元或多类分类设置。例如,我们可以训练一个普通的二元分类器来区分猫和狗。鉴于计算机视觉的当前状态,我们可以使用现成的工具轻松地做到这一点。尽管如此,无论我们的模型变得多么准确,当分类器遇到 不来梅小镇音乐家的图像时,我们可能会遇到麻烦,这是一个以四只动物为特色的流行德国童话(图 1.3.3)。

 

如您所见,照片中有一只猫、一只公鸡、一只狗和一头驴,背景中有一些树。当我们预期会遇到此类图像时,多类分类可能不是正确的问题表述。相反,我们可能想让模型选择说图像描绘了一只猫、一只狗、一只驴和一只公鸡。

学习预测不互斥类的问题称为多标签分类。自动标记问题通常最好描述为多标签分类问题。想一想人们可能会在技术博客上贴上的标签,例如“机器学习”、“技术”、“小工具”、“编程语言”、“Linux”、“云计算”、“AWS”。一篇典型的文章可能应用了 5-10 个标签。通常,标签会展示一些相关结构。关于“云计算”的帖子可能会提到“AWS”,而关于“机器学习”的帖子可能会提到“GPU”。

有时,此类标记问题会利用大量标签集。国家医学图书馆雇用了许多专业注释员,他们将 PubMed 中要编入索引的每篇文章与一组从医学主题词表 (MeSH) 本体中提取的标签关联起来,该集合包含大约 28000 个标签。正确标记文章很重要,因为它允许研究人员对文献进行详尽的审查。这是一个耗时的过程,注释者通常在归档和标记之间有一年的滞后时间。机器学习可以提供临时标签,直到每篇文章都可以进行适当的人工审查。事实上,多年来,BioASQ 组织一直在举办这项任务的竞赛。

1.3.1.4。搜索

在信息检索领域,我们经常对项目集进行排名。以网络搜索为例。目标不是确定特定页面是否与查询相关,而是在一组相关结果中,哪些应该最突出地显示给特定用户。一种可能的解决方案可能是首先为集合中的每个元素分配一个分数,然后检索评分最高的元素。 网页排名,Google 搜索引擎背后的原始秘密武器,是此类评分系统的早期示例。特别是,PageRank 提供的评分并不取决于实际查询。相反,他们依靠一个简单的相关性过滤器来识别一组相关的候选者,然后使用 PageRank 来确定更权威的页面的优先级。如今,搜索引擎使用机器学习和行为模型来获得与查询相关的相关性分数。有整个学术会议专门讨论这个主题。

1.3.1.5。推荐系统

推荐系统是另一个与搜索和排名相关的问题设置。就目标是向用户显示一组相关项目而言,问题是相似的。主要区别在于在推荐系统的上下文中强调对特定用户的个性化。例如,对于电影推荐,科幻迷的结果页面和彼得塞勒斯喜剧鉴赏家的结果页面可能会有很大差异。类似的问题也出现在其他推荐设置中,例如零售产品、音乐和新闻推荐。

在某些情况下,客户会提供明确的反馈,传达他们对特定产品的喜爱程度(例如,亚马逊、IMDb 和 Goodreads 上的产品评级和评论)。在其他情况下,他们提供隐式反馈,例如,通过跳过播放列表中的标题,这可能表示不满意,或者可能只是表示歌曲在上下文中不合适。在最简单的公式中,这些系统被训练来估计一些分数,例如预期的星级或给定用户购买特定商品的概率。

给定这样一个模型,对于任何给定的用户,我们可以检索得分最高的对象集,然后可以将其推荐给用户。生产系统要先进得多,在计算此类分数时会考虑详细的用户活动和项目特征。图 1.3.4显示了亚马逊基于个性化算法推荐的深度学习书籍,这些算法经过调整以捕捉 Aston 的偏好。

pytorch

图 1.3.4亚马逊推荐的深度学习书籍。

尽管具有巨大的经济价值,但天真地建立在预测模型之上的推荐系统存在一些严重的概念缺陷。首先,我们只观察经过审查的反馈:用户优先评价他们有强烈感受的电影。例如,在五分制中,您可能会注意到项目获得许多一星和五星评级,但明显很少有三星级评级。此外,当前的购买习惯通常是当前推荐算法的结果,但学习算法并不总是考虑到这个细节。因此,有可能形成反馈循环,其中推荐系统优先推送随后被认为更好的项目(由于购买量增加),进而更频繁地被推荐。许多关于如何处理审查、激励和反馈循环的问题都是重要的开放研究问题。

1.3.1.6。序列学习

到目前为止,我们已经研究了具有固定数量输入并产生固定数量输出的问题。例如,我们考虑在给定一组固定特征的情况下预测房价:建筑面积、卧室数量、浴室数量以及到市中心的交通时间。我们还讨论了从图像(固定维度)映射到它属于固定数量类别中每个类别的预测概率,并仅根据用户 ID 和产品 ID 预测与购买相关的星级。在这些情况下,一旦我们的模型被训练,在每个测试示例被输入我们的模型后,它会立即被遗忘。我们假设连续的观察是独立的,因此没有必要坚持这种背景。

但是我们应该如何处理视频片段呢?在这种情况下,每个片段可能包含不同数量的帧。如果我们考虑之前或之后的帧,我们对每一帧中发生的事情的猜测可能会更加强烈。语言也是如此。一个流行的深度学习问题是机器翻译:提取某种源语言的句子并预测其在另一种语言中的翻译的任务。

这些问题也发生在医学上。我们可能需要一个模型来监控重症监护病房的患者,并在他们在接下来的 24 小时内死亡的风险超过某个阈值时发出警报。在这里,我们不会每小时丢弃我们所了解的有关患者病史的所有信息,而仅根据最近的测量结果做出预测。

这些问题是机器学习最令人兴奋的应用之一,它们是序列学习的实例。他们需要一个模型来摄取输入序列或发出输出序列(或两者)。具体来说,序列到序列学习 考虑输入和输出均由可变长度序列组成的问题。示例包括机器翻译和语音到文本的转录。虽然不可能考虑所有类型的序列转换,但以下特殊情况值得一提。

标记和解析。这涉及用属性注释文本序列。此处,输入和输出是对齐的,即它们具有相同的编号并以相应的顺序出现。例如,在 词性(PoS)标注中,我们用相应的词性(即“名词”或“直接宾语”)对句子中的每个单词进行注释。或者,我们可能想知道哪些连续词组指的是命名实体,如people、places或organizations。在下面的卡通简单示例中,我们可能只想为句子中的每个单词指示它是否是命名实体(标记为“Ent”)的一部分。

 

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

 

自动语音识别。对于语音识别,输入序列是说话者的录音(图 1.3.5),输出是说话者所说内容的转录本。挑战在于音频帧(声音通常以 8kHz 或 16kHz 采样)比文本多得多,即音频和文本之间没有 1:1 的对应关系,因为数千个样本可能对应于一个口语单词。这些是序列到序列的学习问题,其中输出比输入短得多。虽然人类非常擅长识别语音,即使是低质量的音频,但让计算机完成这项壮举仍是一项艰巨的挑战。

pytorch

图 1.3.5在录音中。-D-e-e-p- L-ea-r-ni-ng-

文字转语音。这与自动语音识别相反。这里,输入是文本,输出是音频文件。在这种情况下,输出比输入长得多。

机器翻译。与语音识别的情况不同,相应的输入和输出以相同的顺序出现,在机器翻译中,未对齐的数据提出了新的挑战。这里输入和输出序列可以有不同的长度,并且各个序列的相应区域可以以不同的顺序出现。考虑以下德国人将动词放在句子末尾的特殊倾向的说明性示例:

 

German:      Haben Sie sich schon dieses grossartige Lehrwerk angeschaut?
English:     Did you already check out this excellent tutorial?
Wrong alignment: Did you yourself already this excellent tutorial looked-at?

 

在其他学习任务中会弹出许多相关问题。例如,确定用户阅读网页的顺序是一个二维布局分析问题。对话问题表现出各种额外的复杂性,其中确定接下来要说什么需要考虑现实世界的知识和跨越很长时间距离的对话的先前状态。这些都是活跃的研究领域。

1.3.2. 无监督和自我监督学习

前面的示例侧重于监督学习,我们为模型提供一个包含特征和相应标签值的巨大数据集。您可以将监督学习者视为拥有极其专业的工作和极其独裁的老板。老板站在它的肩膀上,告诉它在每种情况下应该做什么,直到你学会将情况映射到行动。为这样的老板工作听起来很蹩脚。另一方面,取悦这样的老板是很容易的。您只需尽快识别模式并模仿他们的动作即可。

考虑到相反的情况,为一个不知道他们要你做什么的老板工作可能会令人沮丧。但是,如果你打算成为一名数据科学家,你最好习惯它。老板可能只是给你一大堆数据,并告诉你用它做一些数据科学!这听起来很模糊,因为它确实如此。我们将这类问题称为 无监督学习,我们可以提出的问题的类型和数量仅受我们创造力的限制。我们将在后面的章节中介绍无监督学习技术。现在,为了激发您的胃口,我们描述了您可能会问的以下几个问题。

我们能否找到少量准确概括数据的原型?给定一组照片,我们能否将它们分为风景照片、狗、婴儿、猫和山峰的照片?同样,给定用户浏览活动的集合,我们是否可以将他们分组为具有相似行为的用户?这个问题通常称为 聚类。

我们能否找到少量准确捕捉数据相关属性的参数?球的轨迹可以通过球的速度、直径和质量很好地描述。裁缝们为了试穿衣服而开发了一些相当准确地描述人体形状的参数。这些问题被称为子空间估计。如果相关性是线性的,则称为主成分分析。

欧几里德空间中是否存在(任意结构的)对象的表示,使得符号属性可以很好地匹配?这可以用来描述实体及其关系,例如“罗马”(-)“意大利”(+)“法国”(=)“巴黎”。

是否描述了我们观察到的大部分数据的根本原因?例如,如果我们有关于房价、污染、犯罪、位置、教育和薪水的人口统计数据,我们能否仅仅根据经验数据发现它们之间的关系?与因果关系和概率图形模型有关的领域解决了这些问题。

无监督学习的另一个重要且令人兴奋的近期发展是深度生成模型的出现。这些模型显式或隐式地估计数据的密度。训练完成后,我们可以使用生成模型根据样本的可能性对样本进行评分,或者从学习分布中抽取合成样本。生成建模的早期深度学习突破伴随着变分自动编码器的发明 (Kingma 和 Welling,2014 年,Rezende等人,2014 年),并继续发展生成对抗网络 (Goodfellow等人,2014 年). 最近的进展包括标准化流量 (Dinh等人,2014 年,Dinh等人,2017 年)和扩散模型 (Ho等人,2020 年, Sohl -Dickstein等人,2015 年,Song 和 Ermon,2019 年,Song等人. , 2021 ) .

无监督学习的一个重大发展是自我监督学习的兴起 ,这种技术利用未标记数据的某些方面来提供监督。对于文本,我们可以通过使用大语料库中周围的词(上下文)预测随机屏蔽词来训练模型来“填空”,而无需任何标记工作( Devlin等人,2018 年)!对于图像,我们可以训练模型来判断同一图像的两个裁剪区域之间的相对位置 (Doersch等人,2015 年),根据图像的剩余部分预测图像的遮挡部分,或预测两个示例是否是同一底层图像的扰动版本。自监督模型通常会学习表示,随后通过对某些感兴趣的下游任务的结果模型进行微调来利用这些表示。

1.3.3. 与环境互动

到目前为止,我们还没有讨论数据的实际来源,或者当机器学习模型生成输出时实际发生了什么。这是因为监督学习和非监督学习并没有以非常复杂的方式解决这些问题。在任何一种情况下,我们都会预先获取大量数据,然后让我们的模式识别机器运转起来,而无需再次与环境交互。因为所有的学习都是在算法脱离环境之后进行的,所以这有时被称为离线学习。例如,监督学习假定 图 1.3.6中描述的简单交互模式。

pytorch

图 1.3.6从环境中为监督学习收集数据。

这种离线学习的简单性有它的魅力。好处是我们可以单独担心模式识别,而不必担心与动态环境交互所产生的复杂性。但是这个问题的表述是有局限性的。如果你是读着阿西莫夫的机器人小说长大的,那么你可能会想象人工智能代理不仅能够做出预测,而且能够在世界上采取行动。我们想考虑智能 代理,而不仅仅是预测模型。这意味着我们需要考虑选择动作,而不仅仅是做出预测。与单纯的预测不同,行动实际上会影响环境。如果我们想训练一个智能代理,我们必须考虑其行为可能影响代理未来观察的方式。

考虑与环境的交互会引发一整套新的建模问题。以下只是几个例子。

环境是否记得我们之前所做的事情?

环境是否想要帮助我们,例如,用户将文本读入语音识别器?

环境是否想打败我们,例如,垃圾邮件发送者更改他们的电子邮件以逃避垃圾邮件过滤器?

环境是否有动态变化?例如,未来的数据是否总是与过去相似,或者模式是否会随时间自然或响应我们的自动化工具而变化?

这些问题提出了distribution shift的问题,训练数据和测试数据是不同的。我们大多数人在参加由讲师编写的考试时遇到过这个问题,而家庭作业是由他们的助教编写的。接下来,我们简要描述强化学习,这是一个丰富的框架,用于提出代理与环境交互的学习问题。

1.3.4. 强化学习

如果您有兴趣使用机器学习来开发与环境交互并采取行动的代理,那么您可能最终会专注于强化学习。这可能包括应用于机器人技术、对话系统,甚至用于开发视频游戏的人工智能 (AI)。将深度学习应用于强化学习问题的深度强化学习已大受欢迎。在仅使用视觉输入的 Atari 游戏中击败人类的突破性深度 Q 网络 (Mnih等人,2015 年),以及在棋盘游戏围棋中击败世界冠军的 AlphaGo 程序 (Silver等人,2016 年))是两个突出的例子。

强化学习给出了一个非常一般的问题陈述,其中代理在一系列时间步长上与环境交互。在每个时间步,智能体都会从环境中接收一些观察结果,并且必须选择一个动作,该动作随后会通过某种机制(有时称为执行器)传回环境 。最后,代理从环境中获得奖励。这个过程如图 1.3.7所示。然后代理接收后续观察,并选择后续操作,依此类推。强化学习代理的行为受政策支配。简而言之,一项政策只是一个将环境观察映射到动作的函数。强化学习的目标是产生好的策略。

pytorch

图 1.3.7强化学习与环境的交互。

强化学习框架的通用性怎么强调都不为过。例如,我们可以将监督学习问题转化为强化学习问题。假设我们有一个分类问题。我们可以创建一个强化学习代理,每个类对应一个动作。然后我们可以创建一个环境,该环境给出的奖励恰好等于原始监督学习问题的损失函数。

也就是说,强化学习还可以解决许多监督学习无法解决的问题。例如,在监督学习中,我们总是期望训练输入与正确的标签相关联。但在强化学习中,我们并不假设对于每次观察,环境都会告诉我们最佳行动。一般来说,我们只是得到一些奖励。此外,环境甚至可能不会告诉我们哪些行为导致了奖励。

考虑下国际象棋。唯一真正的奖励信号出现在游戏结束时,当我们获胜时获得奖励,比如 1,或者当我们失败时,获得奖励,比如 -1。因此,强化学习者必须处理信用分配问题:确定哪些行为应该归功于或归咎于结果。这同样适用于在 10 月 11 日获得晋升的员工。这次晋升可能反映了前一年的大量精心选择的行动。要想在未来获得更多晋升,就需要弄清楚一路上采取的哪些行动导致了晋升。

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

最后,在任何给定点,强化学习者可能知道一个好的策略,但可能有许多其他代理人从未尝试过的更好的策略。强化学习者必须不断地选择是利用最好的(当前)已知策略作为策略,还是探索策略空间,可能会放弃一些短期奖励以换取知识。

一般的强化学习问题是一个非常普遍的设置。行动会影响后续的观察。仅观察到与所选操作相对应的奖励。可以完全或部分观察环境。一次性解释所有这些复杂性可能对研究人员提出的要求太多。此外,并非每个实际问题都表现出所有这些复杂性。因此,研究人员研究了许多强化学习问题的特例。

当环境被完全观察时,我们称强化学习问题为马尔可夫决策过程。当状态不依赖于之前的动作时,我们称该问题为上下文强盗问题。当没有状态,只有一组初始奖励未知的可用动作时,这个问题就是经典的多臂老虎机问题。

1.4. 根

我们刚刚回顾了机器学习可以解决的一小部分问题。对于各种各样的机器学习问题,深度学习提供了解决这些问题的强大工具。尽管许多深度学习方法是近期发明的,但从数据中学习背后的核心思想已经被研究了几个世纪。事实上,长期以来,人类一直有分析数据和预测未来结果的愿望,许多自然科学都源于此。例如,伯努利分布以Jacob Bernoulli (1655–1705)的名字命名,而高斯分布则是由Carl Friedrich Gauss (1777–1855)发现的. 例如,高斯发明了最小均方算法,至今仍被用于解决从保险计算到医疗诊断的无数问题。这些工具催生了自然科学中的一种实验方法——例如,与电阻器中的电流和电压相关的欧姆定律可以用线性模型完美地描述。

即使在中世纪,数学家也有敏锐的估计直觉。例如,Jacob Köbel(1460-1533 年)的几何书 说明了对 16 名成年男子的脚长求平均以估计人口的平均脚长(图 1.4.1)。

 

当一群人离开教堂时,16 名成年男子被要求排成一排并测量他们的脚。然后将这些测量值的总和除以 16,得到现在相当于 1 英尺的估计值。这个“算法”后来被改进来处理畸形脚;脚最短和最长的 2 名男子被送走,平均只超过其余人。这是修剪均值估计的最早示例之一。

随着数据的收集和可用性,统计真正起飞。它的先驱之一罗纳德·费舍尔 (Ronald Fisher, 1890–1962)对其理论及其在遗传学中的应用做出了重大贡献。他的许多算法(如线性判别分析)和公式(如 Fisher 信息矩阵)在现代统计学的基础上仍然占有突出的地位。甚至他的数据资源也产生了持久的影响。Fisher 于 1936 年发布的 Iris 数据集有时仍用于演示机器学习算法。费舍尔也是优生学的支持者,这应该提醒我们,数据科学在道德上可疑的使用与其在工业和自然科学中的生产性使用一样有着悠久而持久的历史。

机器学习的第二个影响来自 Claude Shannon (1916-2001)的信息论和Alan Turing (1912-1954)的计算理论。图灵提出了“机器能思考吗?”的问题。在他著名的论文Computing Machinery and Intelligence ( Turing, 1950 )中。在他所描述的图灵测试中,如果人类评估者难以根据文本交互区分来自机器和人类的回复,则机器可以被认为是智能的。

另一个影响可以在神经科学和心理学中找到。毕竟,人类显然表现出智能行为。许多学者询问是否可以解释并可能对这种能力进行逆向工程。最古老的受生物学启发的算法之一是由Donald Hebb(1904-1985)制定的。在他开创性的著作《行为的组织》 (赫布和赫布,1949 年)中,他假设神经元通过正强化来学习。这被称为赫布学习规则。这些想法启发了后来的作品,如 Rosenblatt 的感知器学习算法,并奠定了今天支撑深度学习的许多随机梯度下降算法的基础:加强理想行为并减少不良行为以获得神经网络中参数的良好设置。

生物学灵感是神经网络得名的原因。一个多世纪以来(可追溯到 Alexander Bain,1873 年和 James Sherrington,1890 年的模型),研究人员一直试图组装类似于相互作用神经元网络的计算电路。随着时间的推移,对生物学的解释变得不那么直白了,但这个名字却流传了下来。其核心是当今大多数网络中都可以找到的一些关键原则:

线性和非线性处理单元的交替,通常称为层。

使用链式规则(也称为反向传播)一次性调整整个网络的参数。

在最初的快速发展之后,神经网络的研究从 1995 年左右到 2005 年停滞不前。这主要有两个原因。首先,训练网络在计算上非常昂贵。虽然随机存取存储器在上个世纪末很丰富,但计算能力却很稀缺。其次,数据集相对较小。事实上,1932 年 Fisher 的 Iris 数据集是测试算法有效性的流行工具。具有 60000 个手写数字的 MNIST 数据集被认为是巨大的。

鉴于数据和计算的稀缺性,核方法、决策树和图形模型等强大的统计工具在许多应用中凭经验证明是优越的。此外,与神经网络不同,它们不需要数周的时间来训练并提供具有强大理论保证的可预测结果。

1.5. 深度学习之路

由于万维网、为数亿在线用户提供服务的公司的出现、廉价、高质量传感器的传播、廉价数据存储(克莱德定律)、大量数据的可用性,这在很大程度上发生了变化。和廉价的计算(摩尔定律)。特别是,GPU 的进步彻底改变了深度学习中的计算领域,GPU 最初是为电脑游戏而设计的。突然间,似乎在计算上不可行的算法和模型变得相关(反之亦然)。这在表 1.5.1中得到了最好的说明。

表 1.5.1数据集与计算机内存和计算能力
十年 数据集 记忆 每秒浮点计算
1970 100(虹膜) 1 KB 100 KF(英特尔 8080)
1980 1K(波士顿房价) 100 KB 1 个 MF(英特尔 80186)
1990 10K(光学字符识别) 10MB 10 MF(英特尔 80486)
2000 10 M(网页) 100MB 1 GF(英特尔酷睿)
2010 10G(广告) 1GB 1 个 TF(英伟达 C2050)
2020 1 T(社交网络) 100GB 1 个 PF(英伟达 DGX-2)

请注意,随机存取存储器并没有跟上数据增长的步伐。与此同时,计算能力的增长超过了数据集的增长。这意味着统计模型需要提高内存效率,并且由于计算预算增加,可以自由地花费更多的计算机周期来优化参数。因此,机器学习和统计的最佳点从(广义)线性模型和核方法转移到深度神经网络。这也是许多深度学习的中流砥柱的原因之一,例如多层感知器 (McCulloch 和 Pitts,1943)、卷积神经网络 (LeCun等,1998)、长短期记忆 (Hochreiter 和 Schmidhuber,1997 年)和 Q-Learning (Watkins 和 Dayan,1992 年)在相对休眠了相当长的时间后,在过去十年中基本上被“重新发现”。

统计模型、应用程序和算法的最新进展有时被比作寒武纪大爆发:物种进化快速发展的时刻。事实上,最先进的技术不仅仅是可用资源应用于数十年旧算法的结果。请注意,下面的列表只是帮助研究人员在过去十年中取得巨大进步的想法的皮毛。

容量控制的新方法,例如dropout ( Srivastava et al. , 2014 ),有助于减轻过度拟合。在这里,噪声在训练期间被注入 整个神经网络( Bishop, 1995 ) 。

注意力机制解决了困扰统计一个多世纪的第二个问题:如何在不增加可学习参数数量的情况下增加系统的内存和复杂性。研究人员通过使用只能被视为可学习的指针结构找到了一个优雅的解决方案 (Bahdanau等人,2014 年)。不必记住整个文本序列,例如,对于固定维度表示中的机器翻译,需要存储的只是指向翻译过程中间状态的指针。这可以显着提高长序列的准确性,因为模型在开始生成新序列之前不再需要记住整个序列。

Transformer 架构 (Vaswani等人,2017 年)完全建立在注意力机制之上,展示了卓越的 缩放行为:随着数据集大小、模型大小和训练计算量的增加,它的性能会更好 (Kaplan等人,2020 年)。这种架构在自然语言处理(Brown等人,2020 年,Devlin等人,2018 年)、计算机视觉 (Dosovitskiy等人,2021 年,刘等人。, 2021 )、语音识别( Gulati et al. , 2020 )、强化学习 ( Chen et al. , 2021 )和图形神经网络 ( Dwivedi and Bresson, 2020 )。例如,在文本、图像、关节力矩​​和按钮按下等多种模式上进行预训练的单个 Transformer 可以播放 Atari、字幕图像、聊天和控制机器人( Reed等人,2022 年)。

对文本序列的概率建模,语言模型可以预测给定其他文本的文本。扩展数据、模型和计算已经解锁了越来越多的语言模型功能,可以通过基于输入文本的类人文本生成来执行所需的任务(Brown 等人,2020 年, Chowdhery等人, 2022年, Hoffmann等人)等人,2022 年,Rae等人,2021 年)。例如,将语言模型与人类意图对齐 (欧阳等人,2022 年),OpenAI 的 ChatGPT允许用户以对话的方式与之交互,以解决问题,例如代码调试和笔记起草。

多阶段设计,例如,通过记忆网络 (Sukhbaatar等人,2015 年)和神经编程器-解释器(Reed 和 De Freitas,2015 年)允许统计建模人员描述迭代推理方法。这些工具允许重复修改深度神经网络的内部状态,从而执行推理链中的后续步骤,类似于处理器如何修改内存以进行计算。

深度生成建模的一个关键发展是生成对抗网络 的发明 (Goodfellow等人,2014 年). 传统上,用于密度估计和生成模型的统计方法侧重于寻找适当的概率分布和(通常是近似的)从中抽样的算法。因此,这些算法在很大程度上受到统计模型固有的缺乏灵活性的限制。生成对抗网络的关键创新是用具有可微参数的任意算法代替采样器。然后以鉴别器(实际上是双样本测试)无法区分假数据和真实数据的方式进行调整。通过使用任意算法生成数据的能力,它为各种技术开辟了密度估计。斑马奔腾的例子(Zhu et al. , 2017)和假名人面孔 (Karras等人,2017 年)都证明了这一进步。即使是业余涂鸦者也可以仅根据描述场景布局的草图来制作逼真的图像(Park等人,2019 年)。

此外,当扩散过程逐渐向数据样本中添加随机噪声时,扩散模型 (Ho et al. , 2020 , Sohl-Dickstein et al. , 2015)学习去噪过程以逐渐从随机噪声中构建数据样本,逆转扩散过程. 它们开始在最近的深度生成模型中取代生成对抗网络,例如在 DALL-E 2 ( Ramesh et al. , 2022 )和 Imagen ( Saharia et al. , 2022 )中用于基于文本描述的创意艺术和图像生成。

在许多情况下,单个 GPU 不足以处理大量可用于训练的数据。在过去十年中,构建并行和分布式训练算法的能力有了显着提高。设计可扩展算法的主要挑战之一是深度学习优化的主力,随机梯度下降,依赖于相对较小的小批量数据进行处理。同时,小批量限制了 GPU 的效率。因此,在 1024 个 GPU 上进行小批量训练,比如每批 32 张图像,总计约有 32000 张图像。最近的工作,首先由 Li ( 2017 )完成,随后由 You等人完成。( 2017 )和 贾等。( 2018 )将大小增加到 64000 个观察,将 ResNet-50 模型在 ImageNet 数据集上的训练时间减少到不到 7 分钟。为了进行比较——最初的训练时间是按天数计算的。

并行计算的能力也促进了强化学习的进步,这导致计算机在围棋、Atari 游戏、星际争霸等任务和物理模拟(例如,使用 MuJoCo)中实现超人性能方面取得了重大进展,其中环境模拟器是可用的。参见,例如, Silver等人。( 2016 )描述了如何在 AlphaGo 中实现这一点。简而言之,如果有大量(状态、动作、奖励)元组可用,强化学习效果最好。仿真提供了这样一条途径。

深度学习框架在传播思想方面发挥了至关重要的作用。第一代神经网络建模的开源框架包括 Caffe、 Torch和 Theano。许多开创性论文都是使用这些工具撰写的。到目前为止,它们已被 TensorFlow(通常通过其高级 API Keras使用)、 CNTK、Caffe 2和Apache MXNet取代。第三代工具包括所谓的深度学习 命令式工具,这一趋势可以说是由Chainer点燃的,它使用类似于 Python NumPy 的语法来描述模型。PyTorch、 MXNet 的Gluon API和 JAX都采用了这个想法。

构建更好工具的系统研究人员与构建更好神经网络的统计建模人员之间的分工大大简化了事情。例如,训练线性逻辑回归模型曾经是一个不平凡的作业问题,值得交给新的机器学习博士。2014年卡内基梅隆大学的学生。到现在,这个任务可以用不到10行代码完成,牢牢掌握在程序员手中。

1.6. 成功的故事

人工智能在交付难以通过其他方式实现的结果方面有着悠久的历史。例如,自 1990 年代以来就部署了使用光学字符识别的邮件分拣系统。毕竟,这是著名的 MNIST 手写数字数据集的来源。阅读银行存款支票,对申请者的信用评分也是如此。自动检查金融交易是否存在欺诈。这构成了许多电子商务支付系统的支柱,例如 PayPal、Stripe、支付宝、微信、Apple、Visa 和 MasterCard。几十年来,国际象棋的计算机程序一直具有竞争力。机器学习为互联网上的搜索、推荐、个性化和排名提供支持。换句话说,机器学习无处不在,尽管通常是隐藏在视线之外的。

直到最近,人工智能才成为人们关注的焦点,主要是因为解决了以前被认为棘手且与消费者直接相关的问题。许多这样的进步都归功于深度学习。

苹果的 Siri、亚马逊的 Alexa 和谷歌的助手等智能助手能够以合理的准确度回答口头问题。这包括一些琐碎的任务,比如打开电灯开关,以及更复杂的任务,比如安排理发师的预约和提供电话支持对话。这可能是人工智能正在影响我们生活的最明显迹象。

数字助理的一个关键要素是准确识别语音的能力。逐渐地,此类系统的准确性已提高到在某些应用程序中达到人类对等的程度(Xiong等人,2018 年)。

物体识别同样取得了长足的进步。在 2010 年,估计图片中的对象是一项相当具有挑战性的任务。在 ImageNet 基准测试中,来自 NEC 实验室和伊利诺伊大学香槟分校的研究人员取得了 28% 的前 5 错误率(Lin 等 人,2010年)。到 2017 年,这一错误率降至 2.25% (Hu et al. , 2018)。同样,在识别鸟类和诊断皮肤癌方面也取得了惊人的成果。

游戏中的实力曾经为人类智力提供了衡量标准。从 TD-Gammon 开始,一个使用时间差异强化学习、算法和计算进步来玩西洋双陆棋的程序已经产生了广泛应用的算法。与西洋双陆棋不同,国际象棋的状态空间和动作集要复杂得多。DeepBlue 使用大规模并行、专用硬件和对游戏树的高效搜索击败了 Garry Kasparov (Campbell等人,2002 年)。由于其巨大的状态空间,围棋更加困难。AlphaGo 在 2015 年达到了与人类相同的水平,使用深度学习结合蒙特卡洛树采样(Silver等人,2016 年). 扑克中的挑战在于状态空间很大并且只能部分观察到(我们不知道对手的牌)。Libratus 使用高效的结构化策略在扑克中超越了人类的表现 (Brown 和 Sandholm,2017 年)。

人工智能进步的另一个迹象是自动驾驶汽车和卡车的出现。虽然完全自主还不是遥不可及,但在这个方向上已经取得了很好的进展,特斯拉、NVIDIA 和 Waymo 等公司推出的产品至少可以实现部分自主。完全自动驾驶之所以如此具有挑战性,是因为正确的驾驶需要具备感知、推理和将规则纳入系统的能力。目前,深度学习主要用于这些问题的计算机视觉方面。其余的由工程师大量调整。

这只是机器学习有影响力应用的冰山一角。例如,机器人技术、物流、计算生物学、粒​​子物理学和天文学最近取得的一些最令人印象深刻的进展至少部分归功于机器学习。机器学习因此成为工程师和科学家无处不在的工具。

在关于 AI 的非技术文章中,经常会提出有关即将到来的 AI 末日和奇点的合理性的问题。令人担忧的是,机器学习系统会以某种方式变得有感知力并独立于直接影响人类生活的程序员做出决策。在某种程度上,人工智能已经以直接的方式影响了人类的生计:自动评估信用度,自动驾驶仪主要为车辆导航,是否准予保释的决定使用统计数据作为输入。更轻率的是,我们可以让 Alexa 打开咖啡机。

幸运的是,我们远不是一个可以故意操纵其人类创造者的有感知力的人工智能系统。首先,人工智能系统以特定的、面向目标的方式进行设计、训练和部署。虽然他们的行为可能给人一种通用智能的错觉,但它是设计基础的规则、启发式和统计模型的组合。其次,目前根本不存在能够改进自身、推理自身以及能够在尝试解决一般任务时修改、扩展和改进自身架构的通用人工智能工具。

一个更紧迫的问题是人工智能如何在我们的日常生活中使用。卡车司机和店员完成的许多琐碎任务很可能可以而且将会自动化。农场机器人可能会降低有机农业的成本,但它们也会使收割操作自动化。工业革命的这个阶段可能会对社会的大部分人产生深远的影响,因为卡车司机和店员是许多国家最常见的工作。此外,如果不加注意地应用统计模型,可能会导致种族、性别或年龄偏见,如果自动驱动相应的决策,则会引起对程序公平性的合理担忧。确保谨慎使用这些算法非常重要。以我们今天所知道的,

1.7. 深度学习的本质

到目前为止,我们已经广泛地讨论了机器学习。深度学习是机器学习的一个子集,涉及基于多层神经网络的模型。它的深度恰恰在于它的模型学习了很多层的转换。虽然这听起来可能很狭隘,但深度学习已经产生了一系列令人眼花缭乱的模型、技术、问题公式和应用程序。已经发展出许多直觉来解释深度的好处。可以说,所有机器学习都有很多计算层,第一层由特征处理步骤组成。深度学习的不同之处在于,在许多表示层中的每一层学习的操作都是从数据中联合学习的。

到目前为止我们讨论的问题,例如从原始音频信号、图像的原始像素值中学习,或任意长度的句子与其对应的外语句子之间的映射,都是深度学习擅长而传统方法步履蹒跚的问题。事实证明,这些多层模型能够以以前的工具无法处理的方式处理低级感知数据。可以说,深度学习方法中最重要的共性是端到端训练。也就是说,不是基于单独调整的组件组装系统,而是构建系统然后联合调整它们的性能。例如,在计算机视觉中,科学家们过去常常将特征工程的过程分开来自构建机器学习模型的过程。Canny 边缘检测器 ( Canny, 1987 )和 Lowe 的 SIFT 特征提取器 ( Lowe, 2004 )作为将图像映射到特征向量的算法统治了十多年。在过去,将机器学习应用于这些问题的关键部分包括提出手动设计的方法,将数据转换为某种适合浅层模型的形式。不幸的是,与算法自动执行的对数百万个选择的一致评估相比,人类凭借独创性所能完成的事情非常少。当深度学习接管时,这些特征提取器被自动调整的过滤器所取代,从而产生更高的准确性。

因此,深度学习的一个关键优势在于它不仅取代了传统学习管道末端的浅层模型,而且取代了特征工程的劳动密集型过程。此外,通过取代许多特定领域的预处理,深度学习消除了以前分隔计算机视觉、语音识别、自然语言处理、医学信息学和其他应用领域的许多界限,提供了一套统一的工具来处理各种不同的问题。问题。

除了端到端训练之外,我们正在经历从参数统计描述到完全非参数模型的转变。当数据稀缺时,人们需要依靠简化对现实的假设以获得有用的模型。当数据丰富时,可以用更适合数据的非参数模型代替这些模型。在某种程度上,这反映了物理学在上世纪中叶随着计算机的出现而取得的进步。与其手动求解电子行为的参数近似值,不如求助于相关偏微分方程的数值模拟。这导致了更准确的模型,尽管通常以牺牲可解释性为代价。

与以前工作的另一个不同是接受次优解,处理非凸非线性优化问题,以及在证明之前尝试事物的意愿。这种处理统计问题的新经验主义,加上人才的迅速涌入,导致实用算法的快速进步,尽管在许多情况下,代价是修改和重新发明已经存在了几十年的工具。

最后,深度学习社区以跨学术和企业边界共享工具而自豪,发布了许多优秀的库、统计模型和训练有素的网络作为开源。正是本着这种精神,组成本书的笔记本可以免费分发和使用。我们一直在努力降低每个人学习深度学习的门槛,希望我们的读者能从中受益。

1.8. 概括

机器学习研究计算机系统如何利用经验(通常是数据)来提高特定任务的性能。它结合了统计、数据挖掘和优化的思想。通常,它被用作实施人工智能解决方案的手段。作为机器学习的一类,表征学习的重点是如何自动找到合适的方式来表示数据。作为通过学习多层转换的多层次表示学习,深度学习不仅取代了传统机器学习管道末端的浅层模型,而且取代了特征工程的劳动密集型过程。深度学习最近取得的大部分进展是由廉价传感器和互联网规模应用程序产生的大量数据以及计算方面的重大进展(主要是通过 GPU)引发的。除了,

1.9. 练习

您当前正在编写的代码的哪些部分可以“学习”,即通过学习和自动确定代码中所做的设计选择来改进?您的代码是否包含启发式设计选择?您可能需要哪些数据来学习所需的行为?

您遇到的哪些问题有很多解决方法的示例,但没有具体的自动化方法?这些可能是使用深度学习的主要候选对象。

描述算法、数据和计算之间的关系。数据的特性和当前可用的计算资源如何影响各种算法的适用性?

列举一些端到端训练目前不是默认方法但可能有用的设置。

Discussions

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分