人工智能的数学基础-全-

人工智能的数学基础(全)

原文:zh.annas-archive.org/md5/2493e49e788325932f4968ea203e1f3d

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

我为什么写这本书

人工智能是建立在数学模型上的。我们需要知道它是如何建立的。

我用纯粹的口语写了这本书,把大部分技术细节都留在了外面。这是一本关于人工智能的数学书,但是几乎没有数学公式和方程式,没有定理,没有证明,也没有编码。我的目标不是让这些重要的知识只留在少数精英手中,而是吸引更多的人进入技术领域。我相信很多人在有机会了解并可能喜欢数学并且天生擅长它之前就对数学产生了厌恶。这种情况也发生在大学或研究生阶段,很多学生从数学专业转到其他专业,或者开始攻读博士学位却没有完成。原因不是因为他们没有能力,而是因为他们看不到学习那些看似无用的艰难方法和技巧的动机或目标。这就好像每天去大脑健身房只是为了去那里一样。没有人每天都想去健身房(这是一个有偏见的说法,但你懂我的意思)。在数学中,将对象形式化为函数、空间、测度空间和整个数学领域是在动机之后,而不是之前。不幸的是,它被反过来教授,先是形式化,然后,如果我们幸运的话,会有一些动机。

数学最美妙的地方在于它有表达能力,可以把看似不相关的事物联系在一起。像人工智能这样大而重要的领域不仅建立在数学基础上,这是理所当然的,而且它需要数学所能提供的联系能力,以便简洁地讲述它的大故事。在这本书中,我将以不偏离真实人工智能应用的数学方式提取所需的数学知识。详细介绍现有工具是不可行的,会导致百科全书式的压倒性介绍。我所做的是尝试教会你如何思考这些工具,并从更高的角度来看待它们,作为我们可以在需要时调整和改进的手段。我希望你从这本书中得到的是一种看待事物之间关系的方式,以及我们为什么会开发或使用某些方法而不是其他方法。在某种程度上,这本书提供了一个平台,让你进入你感兴趣或想专攻的领域。

这本书的另一个目标是民主化数学,并增强更多人询问事物如何运作的信心。常见的回答,比如“这是复杂的数学”、“这是复杂的技术”或“这是复杂的模型”,已经不再令人满意,尤其是建立在数学模型上的技术目前影响着我们生活的方方面面。我们不需要成为数学的每个领域的专家(没有人能做到这一点)才能理解事物是如何构建的,以及它们为什么以这种方式运作。关于数学模型,每个人都需要知道一件事:它们总是会给出一个答案。它们总是会输出一个数字。一个经过验证、有理论支持的模型会给出一个答案。同样,一个完全垃圾的模型也会给出一个答案。两者都会计算数学函数。说我们的决策是基于数学模型和算法的并不意味着它们是神圣的。这些模型是基于什么构建的?它们的假设是什么?有什么限制?它们是在哪些数据上进行训练的?进行了哪些测试?它们考虑了哪些变量?又忽略了哪些?它们有改进的反馈循环吗?有地面真相来进行比较和改进吗?有没有理论支持它们?当这些模型是我们自己的时候,我们需要对这些信息透明,当这些模型是决定我们生计的时候,我们需要询问这些信息。

本书中主题的非正统组织是有意为之的。我希望避免在涉及实际应用之前陷入数学细节中。我的立场是,除非我们个人正在实践某些事情并且背景材料成为我们知识中的一个未填补的空白,阻碍我们取得进展,否则我们永远不需要深入研究背景材料。只有在这种情况下,值得投入大量时间学习事物的复杂细节。更重要的是要看到一切是如何联系在一起的,以及一切如何相互配合。换句话说,这本书提供了数学和人工智能之间相互交互的地图。

我还想向新手们指出大数据时代。在处理大数据之前,无论是真实的还是模拟的,结构化的还是非结构化的,我们可能认为计算机和互联网理所当然。如果我们需要建立模型或对小型和策划好的数据集进行分析,我们可能会假设我们的机器硬件可以处理计算,或者互联网会在我们需要时提供更多策划好的数据,或者提供更多关于类似模型的信息。然而,我们真正面对的是数据获取的现实和限制、数据中的错误、查询结果中的错误、硬件的限制、存储、设备之间的数据流以及向量化非结构化数据(如自然语言或图像和视频)。这时,我们开始涉足并行计算、云计算、数据管理、数据库、数据结构、数据架构和数据工程,以了解允许我们运行模型的基础设施。我们拥有什么样的基础设施?它的结构是怎样的?它是如何发展的?它的发展方向是什么?它使用了什么材料?这些材料是如何工作的?量子计算到底是怎么回事?我们不应将软件视为与硬件分离,也不应将我们的模型视为与允许我们模拟它们的基础设施分离。这本书只关注数学、人工智能模型和一些数据。没有练习题,也没有编程。换句话说,我们关注的是软性、智力性我不需要触碰任何东西的一面。但我们需要不断学习,直到能够理解支撑我们生活许多方面的技术实际上是一个相互关联的整体:硬件、软件、传感器和测量设备、数据仓库、连接电缆、无线中心、卫星、通信中心、物理和软件安全措施以及数学模型。

这本书适合谁?

  • 对于懂数学但想进入人工智能、机器学习和数据科学领域的人。

  • 对于从事人工智能、数据科学和机器学习的人,但希望提高数学思维,并了解最新模型背后的数学理念。

  • 对于数学、数据科学、计算机科学、运筹学、科学、工程或其他领域的本科生或研究生早期学生,他们对人工智能感兴趣。

  • 对于管理岗位的人,他们希望将人工智能和数据分析整合到业务中,但希望更深入地了解他们可能基于的模型实际上是如何工作的。

  • 对于主要从事商业智能的数据分析师,现在像世界其他地方一样,被推向由人工智能驱动的商业智能,因此他们希望在将其纳入业务决策之前了解这究竟意味着什么。

  • 对于关心人工智能可能给世界带来的伦理挑战,并希望了解模型的内部运作方式,以便就自主武器、定向广告、数据管理等问题进行辩论的人。

  • 对于想要开设数学和人工智能课程的教育工作者。

  • 对于任何对人工智能感到好奇的人。

这本书不适合谁?

一个喜欢坐下来做很多练习来掌握特定数学技巧或方法的人,一个喜欢写作和证明定理的人,或者一个想要学习编码和开发的人。这不是一本数学教科书。有许多优秀的教科书教授微积分、线性代数和概率(但很少有书将这些数学与 AI 联系起来)。也就是说,这本书在文中有很多指向相关书籍和科学出版物的指针,供那些想深入技术细节、严格的陈述和证明的读者参考。这也不是一本编码书。重点是概念、直觉和一般理解,而不是实施和开发技术。

这本书中的数学将如何呈现?

写一本书最终是一个决策过程:如何以最有洞察力的方式组织主题材料,以及如何选择详细阐述和不详细阐述的内容。我会在一些地方详细介绍一些数学知识,在其他地方则会省略细节。这是有意为之的,因为我的目标不是让自己分心,而是讲述一个故事:

我们使用哪些数学,为什么我们需要它,以及我们在 AI 中具体在哪里使用它?

  1. 我总是定义 AI 的背景,有许多应用。

  2. 然后我谈论相关的数学,有时详细说明,有时只是一般性的思考方式。每当我跳过细节时,我会指出我们应该提出的相关问题以及如何去找到它们的答案。

  3. 我展示数学、AI 和模型作为一个相互联系的整体。

  4. 只有当数学必须成为基础的一部分时,我才会深入研究数学。即使如此,我更偏向直觉而不是形式化。我在这里付出的代价是,在极少数情况下,我可能会在定义之前使用一些技术术语,暗中希望你之前遇到过这些术语。在这方面,我采用了 AI 的transformer (Google Brain, 2017)对自然语言理解的哲学:模型从上下文中学习单词的含义。因此,当你遇到一个我之前没有定义的技术术语时,专注于术语周围的环境。在它出现的章节中,你会对它的含义有很好的直觉。另一个选择当然是google 它。总的来说,我避免使用行话,也不使用任何缩写词。

  5. 由于这本书处于数学、数据科学、人工智能、机器学习和哲学的交叉点上,我写这本书时期望有一个技能和背景迥异的多样化受众。因此,根据主题的不同,相同的材料对一些人来说可能感觉平凡,但对其他人来说可能很复杂。我希望在这个过程中不会冒犯任何人的思想。也就是说,这是我愿意冒的风险,以便所有读者都能从这本书中学到有用的东西。例如,数学家将学习 AI 的应用,数据科学家和 AI 从业者将学到更深层次的数学知识。

各个章节的技术难度不断变化,所以如果某一章节变得太令人困惑,可以心里记下它的存在,然后跳到下一章节。你可以在以后回到你跳过的部分。

大多数章节彼此独立,所以读者可以直接跳到他们感兴趣的主题。当章节与其他章节相关时,我会指出这一点。由于我尽量使每一章尽可能独立,所以可能会在不同的章节中重复一些解释。我将概率章节一直推迟到最后(第十一章),但我一直在使用和讨论概率分布(特别是数据集特征的联合概率分布)。我的想法是在学习语法之前,先习惯概率的语言以及它与 AI 模型的关系,这样当我们开始学习语法时,我们就对它适用的背景有了很好的理解。

我相信有两种类型的学习者:那些先学习具体细节,然后慢慢开始构想一个更大的图景和事物如何相互关联的人;以及那些首先需要理解大局和事物如何相互关联,然后只在需要时才深入细节的人。两者同样重要,区别只在于某人的大脑类型和自然倾向。我更倾向于第二种类型,这本书就是这种倾向的反映:从上面看,一切是什么样的,数学和人工智能如何相互作用?结果可能感觉像一场旋风般的主题,但你最终会拥有丰富的数学和人工智能知识基础,以及一定的自信心。

当我爸爸教我开车时,他坐在副驾驶座上让我开车。十分钟后,路变成了悬崖边的路。他让我停下车,下车后说:现在开车,尽量不要掉下悬崖,不要害怕,我在看着(好像那会有帮助一样)。我没有掉下悬崖,事实上我最喜欢悬崖边的路。现在把这个比作通过强化学习训练自动驾驶汽车,不同之处在于对我来说掉下悬崖的代价将是负无穷。我承受不起,我是一个真实的人在一辆真实的汽车上,而不是一个模拟。

这本书中你将如何学习数学和人工智能。没有引言、结论、定义、定理、练习或类似的内容。只有沉浸。

你已经在其中。你知道的。现在开车吧。

信息图表

我用信息图表来陪伴这本书,将所有的主题以视觉方式联系在一起。你可以在这本书的 github 页面上找到它:https://github.com/halanelson/Essential-Math-For-AI

你需要具备怎样的数学背景才能阅读这本书?

这本书是自包含的,我们会激发我们需要使用的一切。我希望你已经接触过微积分和一些线性代数,包括向量和矩阵运算,比如加法、乘法和一些矩阵分解。我也希望你知道什么是函数以及它是如何将输入映射到输出的。在人工智能中,我们大部分的数学工作都涉及构建函数、评估函数、优化函数或组合一系列函数。你需要了解导数(它们衡量事物变化的速度)和导数的链式法则。你不一定需要知道如何为每个函数计算它们,因为现在计算机、Desmos 和 MathWolfram Alpha 都可以为我们做这一切,但你需要知道它们的含义。对概率和统计思维的一些了解也是有帮助的。如果你对以上任何一点都不了解,那也完全没关系。你可能需要坐下来自己做一些例子(来自其他书籍)来熟悉某些概念。关键在于你应该知道什么时候查找你不了解的东西:只有在你需要它们时,也就是说只有当你遇到一个你不理解的术语,并且你对它出现的背景有一个很好的理解时。如果你真的是从零开始,那也没关系。这本书尽量避免技术性的内容。

章节概述

我们总共有十四章。

如果你是一个关心数学和人工智能技术与伦理、政策、社会影响以及各种影响、机遇和挑战的人,那么首先阅读第一章和第十四章。如果你不关心这些,那么我们会提出你应该关心的理由。在这本书中,我们将数学视为看似不相关主题的粘合剂,而不是数学通常呈现的一堆复杂公式、定理和希腊字母的绿洲。

第十三章可能会让你觉得与本书无关,如果你从未接触过微分方程(ODE 和 PDE),但如果你对数学建模、物理和自然科学、模拟或数学分析感兴趣,你会欣赏它,并且想知道 AI 如何有益于你的领域,以及微分方程如何有益于 AI。无数的科学成就都建立在微分方程之上,因此当我们处于一个有潜力解决该领域许多长期存在问题的计算技术的黎明时,我们不能忽略它们。这一章并不是AI 的必需品,但它对我们对数学的整体理解至关重要,对于建立 AI 和神经运算符的理论基础也是必不可少的。

其余的章节对于 AI、机器学习和数据科学至关重要。对于奇异值分解(主成分分析和潜在语义分析的基本数学,以及维度缩减的一个很好的方法)来说,没有最佳的位置。让你的自然好奇心决定你何时阅读这一章:在你觉得最合适的章节之前或之后。这完全取决于你的背景以及你所来自的行业或学术学科。

让我们简要回顾一下第一章,“为什么学习 AI 的数学”和第十四章:

第一章,“为什么学习 AI 的数学”

人工智能已经到来。它已经渗透到我们生活的许多领域,参与了重要的决策,并很快将被应用于我们社会和运营的每个领域。这项技术发展非常迅速,其投资也在飙升。什么是人工智能?它能做什么?它的局限性是什么?它的发展方向是什么?最重要的是,它是如何工作的,为什么我们真的应该关心知道它是如何工作的?在这个介绍性的章节中,我们简要调查了重要的 AI 应用,公司在尝试将 AI 整合到其系统中时通常遇到的问题,系统未能很好实施时发生的事件,以及 AI 解决方案中通常使用的数学。

第二章,“数据,数据,数据”

这一章强调了数据对 AI 的重要性。它解释了通常会引起混淆的概念之间的区别:结构化和非结构化数据,线性和非线性模型,真实和模拟数据,确定性函数和随机变量,离散和连续分布,先验概率,后验概率和似然函数。它还提供了 AI 所需的概率和统计的地图,而不深入任何细节,并介绍了最流行的概率分布。

第三章,“将函数拟合到数据”

在许多流行的机器学习模型的核心,包括自 2012 年以来重新引起人工智能关注的非常成功的神经网络,都存在一个非常简单的数学问题:将给定的数据点拟合到一个合适的函数中,然后确保这个函数在新数据上表现良好。这一章通过一个真实的数据集和其他简单的例子突出了这个广泛有用的事实。回归、逻辑回归和一些流行的机器学习技术在这里讨论,有一个统一的主题:训练函数、损失函数和优化。

第四章,“神经网络的优化”

神经网络是模仿大脑皮层的,它涉及数百万个神经元排列成分层结构。大脑通过在面对之前见过的概念时加强神经元连接来学习,并在学习到否定或矛盾于先前学到的概念的新信息时削弱连接。机器只能理解数字。在数学上,更强的连接对应于更大的数字,而更弱的连接对应于更小的数字。本章解释了训练神经网络时使用的优化和反向传播步骤,类似于我们大脑中学习的方式(尽管我们尚未完全理解这一点)。它还介绍了各种正则化技术,解释了它们的优点、缺点和用例。此外,我们解释了逼近理论和神经网络的普适逼近定理背后的直觉。

第五章,“卷积神经网络和计算机视觉”

卷积神经网络在计算机视觉和自然语言处理中广受欢迎。在本章中,我们从卷积和交叉相关操作开始,然后调查它们在系统设计和信号图像滤波中的用途。然后我们将卷积与神经网络整合,以从图像中提取高阶特征。

第六章,“奇异值分解:图像处理、自然语言处理和社交媒体”

对角矩阵的行为类似于标量,因此非常理想。奇异值分解是线性代数中至关重要的数学方法,它将密集矩阵转换为对角矩阵。在这个过程中,它揭示了矩阵对空间本身的作用:旋转、拉伸和挤压。我们可以将这个简单的过程应用于任何数字矩阵。这种广泛的适用性,以及它能够显著减少维度同时保留基本信息的能力,使奇异值分解在数据科学、人工智能和机器学习领域备受欢迎。它是主成分分析和潜在语义分析背后的基本数学。本章详细介绍了奇异值分解以及它最相关和最新的应用。

第七章,“自然语言和金融人工智能:向量化和时间序列”

我们在本章中提出了自然语言模型的数学概念,比如识别主题、机器翻译和注意力模型。要克服的主要障碍是从携带意义的单词和句子转移到机器可以处理的低维向量。我们讨论了谷歌大脑的变压器等最先进的模型(从 2017 年开始),同时我们只关注相关的数学。时间序列数据和模型(如循环神经网络)在这里自然而然地出现。我们简要介绍了金融人工智能,因为它在建模和两个领域相互影响方面与自然语言有重叠。

第八章,“概率生成模型”

生成的图像,包括人类的图像,变得越来越逼真。如今很难分辨时尚界模特的图像是真实人物还是计算机生成的图像。我们要感谢生成对抗网络取得的进展,使得虚拟和真实之间的界限变得更加模糊。这些网络的设计方式是使用两个神经网络重复一个简单的数学过程,直到机器本身无法区分真实图像和计算机生成的图像,因此取得了“非常接近现实”的成功。博弈论和零和游戏在这里自然而然地发生,因为两个神经网络相互“竞争”。本章调查了生成模型,这是人类思维中的想象力。这些网络有着广泛的应用,从扩充数据集到完成遮挡的人脸,再到高能物理,比如模拟类似于 CERN 大型强子对撞机产生的数据集。

第九章,“图模型”

图和网络无处不在:城市和道路图、机场和航班连接、全球网络、云(计算中)、分子网络、我们的神经系统、社交网络、恐怖组织网络,甚至各种机器学习模型和人工神经网络。具有自然图结构的数据可以通过利用和保留该结构的机制更好地理解,构建直接在图上操作的函数,而不是将图数据嵌入现有的机器学习模型中,然后再进行分析。这与卷积神经网络成功处理图像数据、循环神经网络成功处理序列数据等原因相同。图神经网络背后的数学是图论、计算和神经网络的结合。本章在许多应用的背景下调查了这些数学。

第十章,“运筹学”

运筹学的另一个合适的名称可能是“物流优化”。本章向读者介绍了人工智能和运筹学交叉的问题,如供应链、旅行推销员、调度和人员配备、排队等问题,其特征是高维度、复杂性和平衡竞争利益和有限资源。解决这些问题所需的数学知识来自于优化、博弈论、对偶性、图论、动态规划和算法。

第十一章,“概率”

概率理论提供了一种系统化的方法来量化随机性和不确定性。它将逻辑推广到在人工智能中至关重要的情况:当信息和知识不确定时。本章重点介绍了人工智能应用中使用的基本概率:贝叶斯网络和因果建模、悖论、大型随机矩阵、随机过程、马尔可夫链和强化学习。最后介绍了严格的概率理论,揭开了测度论的神秘面纱,并向感兴趣的读者介绍了神经网络的普遍逼近定理的证明。

第十二章,“数理逻辑”

这个重要的主题放在最后,以免打断书本的自然流程。设计能够收集知识、对其所处的环境进行逻辑推理,并根据这种逻辑推理做出推断和良好决策的代理人,是人工智能的核心。本章简要介绍了命题逻辑、一阶逻辑、概率逻辑、模糊逻辑和时间逻辑,以及智能知识型代理人。

第十三章,“人工智能和偏微分方程”

微分方程模拟了现实世界中无数的现象,从空气湍流到星系、股票市场到材料和人口增长的行为。现实模型通常非常难以解决,并且在依赖传统的数值技术时需要大量的计算能力。最近,人工智能已经开始加速求解偏微分方程。本章的第一部分充当了微分方程的速成课程,突出了最重要的主题,并为读者提供了一个鸟瞰图。第二部分探讨了基于人工智能的新方法,简化了解微分方程的整个过程。这些方法有潜力解决科学、金融和其他领域长期存在的问题。

第十四章,“人工智能、伦理、数学和政策”

我相信这一章应该是任何一本关于人工智能的书的第一章,然而,这个主题是如此广泛和深刻,以至于需要多本书来覆盖。这一章只是触及了表面,并总结了与人工智能相关的各种伦理问题,包括:公平、公正、偏见、包容性、透明度、政策、监管、隐私、武器化和安全。它提出了每个问题以及可能的解决方案(数学或政策和监管)。

我最喜欢的 AI 书籍

关于 AI 和与该领域密切相关的主题,有许多优秀而极具洞察力的书籍。以下列表并不全面。有些是数学重的技术书籍,有些是介绍性的或完全非技术性的。有些是代码导向(Python 3),有些则不是。我从中学到了很多:

  • 《使用 Scikit-Learn、Keras 和 TensorFlow 进行实践机器学习》,作者奥雷利安·杰龙,奥莱利,2019 年

  • 《线性代数与数据学习》,作者吉尔伯特·斯特朗,韦尔斯利剑桥出版社,2019 年

  • 《随机图和复杂网络》,作者雷姆科·范德霍夫斯塔德,剑桥,2017 年

  • 《机器学习设计模式》,作者瓦利亚帕·拉克什马南、萨拉·罗宾逊和迈克尔·蒙,奥莱利,2020 年

  • 《使用 TensorFlow2 进行计算机视觉》,Packt,2019 年

  • 《智能的建筑师》,作者马丁·福特,Packt,2018 年

  • 《物联网人工智能食谱》,作者迈克尔·罗沙克,Packt,2021 年

  • 《进阶分析:从 Excel 到 Python 和 R》,作者乔治·芒特,奥莱利媒体,2021 年。

  • 《贝叶斯定理,贝叶斯分析教程导论》,作者詹姆斯·V·斯通,Sebtel 出版社,2013 年

  • 《信息理论:教程导论》,作者詹姆斯·V·斯通,Sebtel 出版社,2015 年

  • 《AI 地图》,作者凯特·克劳福德,耶鲁大学出版社,2021 年

  • 《千个大脑》,作者杰夫·霍金斯,纽约基本书籍,2021 年

  • 《面向程序员的 AI 和机器学习》,作者劳伦斯·莫罗尼,奥莱利,2021 年

  • 《物理学家、工程师和数据科学家的随机矩阵理论初级课程》,作者马克·波特斯和让-菲利普·布沙尔,剑桥大学出版社,2021 年

  • 《高维概率,数据科学应用导论》,作者罗曼·维尔申因,剑桥大学出版社,2018 年

  • 《实用自然语言处理》,作者索米娅·瓦贾拉、博迪萨特瓦·马朱姆德、阿努吉普塔和哈希特·苏拉纳,奥莱利,2020 年

  • 《人工智能:现代方法》,作者斯图尔特·拉塞尔和彼得·诺维格,皮尔逊,2020 年

  • 《实践中的人工智能》,作者伯纳德·马尔,马特·沃德-贡献者,吉尔丹传媒,2019 年

  • 《AI 超级大国》,作者李开复,霍顿米夫林哈考特,2018 年

  • 《自然语言处理实战》,作者霍布森·莱恩、汉内斯·哈普克和科尔·霍华德,曼宁出版社,2019 年

  • 《深度学习https://www.deeplearningbook.org》,作者伊恩·古德费洛、约书亚·本吉奥和亚伦·库尔维尔,麻省理工学院出版社,2016 年。

  • 《数据科学:数据分析、数据挖掘、数据仓库、数据可视化、回归分析、数据库查询、商业大数据和机器学习的终极指南》,作者赫伯特·琼斯,2018 年

  • 《数据驱动科学与工程,机器学习,动力系统与控制》,作者 Steven L. Brunton 和 J. Nathan Kutz,剑桥大学出版社,2019 年

  • 《从零开始的数据科学》,作者 Joel Grus,O’Reilly,2019 年

  • 《每个数据工程师都应该知道的 97 件事》,编辑 Tobias Macey,O’Reilly,2021 年

  • 《现代多元统计技术》,作者 Alan Julian Izenman,斯普林格,2013 年

  • 《严格的概率论第二版》,作者 Jeffrey S. Rosenthal,世界科学出版社,2016 年

  • 《设计数据密集型应用》,作者 Martin Kleppmann,O’Reilly,2017 年

本书中使用的约定

本书中使用以下排版约定:

斜体

指示新术语、URL、电子邮件地址、文件名和文件扩展名。

等宽

用于程序清单,以及段落内引用程序元素,如变量或函数名、数据库、数据类型、环境变量、语句和关键字。

等宽粗体

显示用户应按字面输入的命令或其他文本。

等宽斜体

显示应由用户提供值或由上下文确定的值替换的文本。

此元素表示提示或建议。

此元素表示一般说明。

此元素表示警告或注意。

使用代码示例

我们在本书中仅有的一些代码示例可在https://github.com/halanelson/Essential-Math-For-AI下载。

如果您有技术问题或在使用代码示例时遇到问题,请发送电子邮件至bookquestions@oreilly.com

本书旨在帮助您完成工作。一般来说,如果本书提供示例代码,您可以在程序和文档中使用它。除非您复制了代码的大部分,否则无需征得我们的许可。例如,编写一个使用本书中几个代码块的程序不需要许可。出售或分发 O’Reilly 图书中的示例需要许可。引用本书并引用示例代码来回答问题不需要许可。将本书中大量示例代码合并到产品文档中需要许可。

我们感谢但通常不需要署名。署名通常包括标题,作者,出版商和 ISBN。例如:“Essential Math for AI by Hala Nelson (O’Reilly). Copyright 2023 Hala Nelson, 978-1-098-10763-5.”

如果您认为您使用的代码示例超出了合理使用范围或上述给出的许可,请随时与我们联系permissions@oreilly.com

O’Reilly 在线学习

40 多年来,O’Reilly Media提供技术和商业培训,知识和见解,帮助公司取得成功。

我们独特的专家和创新者网络通过书籍、文章和我们的在线学习平台分享他们的知识和专长。O’Reilly 的在线学习平台为您提供按需访问实时培训课程、深入学习路径、交互式编码环境以及来自 O’Reilly 和其他 200 多家出版商的大量文本和视频。有关更多信息,请访问https://oreilly.com

如何联系我们

请将有关本书的评论和问题发送至出版商:

  • O’Reilly Media,Inc.

  • 1005 Gravenstein Highway North

  • Sebastopol, CA 95472

  • 800-998-9938(美国或加拿大)

  • 707-829-0515(国际或本地)

  • 707-829-0104(传真)

我们为本书创建了一个网页,列出勘误、示例和任何其他信息。您可以在https://oreil.ly/essentialMathAI访问此页面。

发送电子邮件至bookquestions@oreilly.com发表评论或提出有关本书的技术问题。

有关我们的书籍和课程的新闻和信息,请访问https://oreilly.com

在 LinkedIn 上找到我们:https://linkedin.com/company/oreilly-media

在 Twitter 上关注我们:https://twitter.com/oreillymedia

在 YouTube 上观看我们:https://www.youtube.com/oreillymedia

致谢

我的父亲尤素夫·赛因,教会了我数学,并始终提醒我:*不要认为我们在这个生活中给你最好的东西是土地或金钱,这些都会来来去去,人类创造金钱,购买资产,创造更多的金钱。我们给你的是大脑,一个非常好的大脑,这才是你真正的资产,所以出去利用它吧。*我爱你的大脑,这本书是为你写的,爸爸。

我的母亲萨米拉·哈姆丹,教会了我英语和哲学,并放弃了一切来确保我们幸福和成功。我用英语写了这本书,而不是我的母语,多亏了你,妈妈。

我的女儿萨瑞,在我最脆弱的时候让我活下来,是我生活的快乐。

我的丈夫基思,他给了我爱、激情和稳定,让我可以做自己,做很多事情,其中一些是不明智的,比如写一本关于数学和人工智能的五百页书。我爱你。

我的妹妹拉莎,她是我的灵魂伴侣。这就是全部。

我的兄弟海瑟姆,违背了我们所有的文化规范和传统来支持我。

我的叔叔奥马尔·赛因,他也教会了我哲学,让我爱上了人类思想的奥秘。

我的朋友莎朗和杰米,让我在他们家写了这本书的大部分内容,并且每次我提出要求时都是很好的编辑。

我一生的朋友奥伦,不仅是任何人都希望拥有的最好的朋友之一,还同意阅读和审阅这本书。

我的朋友阮欢,他的故事应该成为一本书,还抽出时间来阅读和审阅这本书。谢谢你,上将。

我的朋友和同事约翰·韦伯,逐字阅读了每一章,并提供了他宝贵的纯数学观点。

我美妙的朋友黛布、潘卡吉、杰米、塔玛尔、萨吉达、贾米拉、珍、马蒂亚斯和卡伦,你们是我的家人。有你们的生活我很爱。

我的导师罗伯特·科恩(纽约大学)和约翰·斯科特兰(耶鲁大学),我在职业生涯中达到了许多里程碑都要归功于他们。我从你们那里学到了很多。

这本书的审阅者,尽管时间紧张,还是花时间和精力让它变得更好。感谢你们的专业知识,慷慨地给我提供了你们不同领域的独特观点。

彼得的记忆,他的影响是巨大的,将永远激励着我。

世界上许多城市的服务员,容忍我在他们的餐馆里坐着写这本书,写了很多个小时。我从你们那里得到了很多能量和快乐。

我的不可思议、耐心、开朗,总是支持我的编辑安吉拉·鲁菲诺。

第一章:为什么学习人工智能的数学

直到有人说,“这是智能的”,我才停止搜索,开始关注。

人工智能,即 AI,已经出现。它已经渗透到我们生活的多个方面,并越来越多地参与做出非常重要的决策。很快它将被应用到我们社会的每个领域,推动我们大部分日常运营。这项技术发展非常迅速,投资也在飙升。与此同时,我们似乎正处于人工智能的狂热之中。每天我们都听到新的人工智能成就:AI 击败了围棋比赛中最优秀的人类选手。AI 在分类任务中表现优于人类视觉。AI 制作深度伪造视频。AI 生成高能物理数据。AI 解决了模拟世界自然现象的困难偏微分方程。自动驾驶汽车在路上行驶。送货无人机在世界某些地区盘旋。我们还听说了 AI 看似无限的潜力:AI 将彻底改变医疗保健和教育。AI 将消除全球饥饿。AI 将对抗气候变化。AI 将拯救濒危物种。AI 将与疾病作斗争。AI 将优化供应链。AI 将揭示生命的起源。AI 将绘制可观测宇宙。我们的城市和家园将变得智能。最终,我们进入了科幻领域:人类将把他们的大脑上传到计算机中。人类将被 AI增强。最后,恐惧和怀疑的声音出现了:AI 将接管并摧毁人类。

在这种狂热中,现实、猜测、夸大、愿望和纯虚构之间的界限变得模糊,我们首先必须至少在本书的背景下定义人工智能。然后我们将讨论一些它的局限性,它的发展方向,并为当今人工智能中使用的数学做好准备。我希望当你理解数学时,你将能够从一个相对深入的角度来看待这个主题,虚构、现实和介于两者之间的界限将变得更加清晰。你还将学习人工智能中最先进数学的主要思想,为你提供使用、改进甚至创造全新人工智能系统所需的信心。

什么是人工智能?

我还没有找到一个统一的人工智能定义。如果我们问两个人工智能专家,我们会听到两个不同的答案。即使我们在两个不同的日子问同一个专家,他们可能会提出两个不同的定义。这种不一致和似乎无法定义AI的原因是,直到现在还不清楚智能的定义是什么。什么是智能?是什么使我们成为人类和独特的?是什么让我们意识到自己的存在?我们的大脑如何聚集微小的电脉冲并将它们转化为图像、声音、感觉和思想?这些是几个世纪以来一直让哲学家、人类学家和神经科学家着迷的广泛话题。我不打算在这本书中深入探讨这些问题。然而,我将根据 AI 代理来讨论人工智能,并列出本书的以下定义原则。在 2021 年,AI 代理可以是以下一种或多种:

  1. AI 代理可以是纯软件,也可以有一个物理机器人身体。

  2. AI 代理可以针对特定任务,也可以是一个灵活的代理,探索和操纵其环境,无论是否有特定目的都在建立知识。

  3. AI 代理通过经验学习,也就是说,通过更多的练习,它在执行任务时变得更加熟练。

  4. AI 代理感知其环境,然后为这个环境构建、更新和/或演化模型。

  5. AI 代理感知、建模、分析并做出决策,以实现其目标。这个目标可以是预定义和固定的,也可以是随着更多输入而变化的。

  6. AI 代理理解因果关系,并能区分模式和原因。

每当人工智能的数学模型受到我们大脑工作方式的启发时,我会指出这种类比,因此在不必定义任何一种情况下,保持人工智能和人类智能的比较。尽管今天的人工智能与人类智能相去甚远,除了特定任务的人工智能,如图像分类、AlphaGo 等,最近有如此多的人类大脑汇聚在一起发展人工智能,这个领域注定会在未来几年取得突破并发展壮大。

还需要注意的是,有些人将人工智能、机器学习和数据科学这些术语互换使用。这些领域有重叠,但它们并不相同。第四个非常重要但稍微不那么被炒作的领域是机器人技术,其中必须将物理部件和运动技能整合到学习和推理过程中,将机械工程、电气工程、生物工程与信息和计算机工程融合在一起。思考这些领域之间的相互关联的一种快速方法是:数据推动机器学习算法,进而为许多流行的人工智能和/或机器人系统提供动力。本书中的数学对所有四个领域都有用,只是比例不同。

为什么人工智能现在如此受欢迎?

在过去的十年里,人工智能之所以引起全球关注,是因为成功结合了以下因素:

  • 大量数据的生成和数字化,如文本数据、图像、视频、健康记录、电子商务、网络和传感器数据。社交媒体和物联网在这方面发挥了非常重要的作用,不断地传输大量数据。

  • 计算能力的进步,通过并行和分布式计算以及硬件创新,使得能够高效且相对廉价地处理大量复杂的结构化和非结构化数据。

  • 神经网络在理解大数据方面取得了最近的成功,超越了人类在某些任务上的表现,比如图像识别和围棋。2012 年,当AlexNet赢得了ImageNet Large Scale Visual Recognition Challenge时,它激发了对卷积神经网络(由图形处理单元支持)的大量活动,而在 2015 年,PReLU-Net(ResNet)首次在图像分类方面超越了人类。

当我们审视以上观点时,我们意识到今天的人工智能并不同于科幻小说中的人工智能。今天的人工智能以大数据(各种数据)、机器学习算法为中心,并且在很大程度上致力于非常出色地执行一项任务,而不是根据周围环境的响应来发展和适应各种智能类型和目标。

人工智能能做什么?

AI 可以成功应用的领域和行业比适合应对这一不断增长需求的 AI 专家要多得多。人类一直致力于自动化流程,而 AI 正好有望在大规模上实现这一目标。大大小小的公司都有大量的原始数据,他们希望分析并将其转化为利润、最佳策略和资源分配的见解。医疗行业面临着医生严重短缺的问题,而 AI 在那里有无数的应用和无限的潜力。全球金融系统、股票市场和银行业一直严重依赖我们做出良好预测的能力,当这些预测失败时,它们遭受了巨大的损失。随着我们计算能力的不断提高,科学研究取得了显著进展,如今我们正处于 AI 进步的黎明,这种进步使得计算能力达到了几十年前认为不可能的规模。从电网到交通运输再到供应链以及森林和野生动物保护,对于高效的系统和运营需求无处不在,还有对抗世界饥饿、疾病和气候变化。甚至在 AI 本身,人们也在寻求自动化,AI 系统自发地决定最佳的管道、算法和参数,轻松地为给定任务产生期望的结果,从而完全消除了对人类监督的需求。

AI 代理的具体任务

在本书中,当我研究数学时,我将专注于 AI 的流行应用领域,以 AI 代理指定的任务为背景。然而,有益的数学思想和技术很容易在不同的应用领域之间转移。这种看似容易和广泛适用的原因是,我们恰好处于 AI实施的时代,因为解决某些任务的主要思想已经被开发出来,只需稍加调整,它们就可以在各个行业和领域实施。我们的 AI 主题和/或任务包括:

模拟和真实数据

我们的 AI 代理处理数据,提供见解,并基于该数据做出决策。

大脑新皮层

AI 中的神经网络是模仿新皮层或新大脑的。这是我们大脑负责高级功能的部分,如感知、记忆、抽象思维、语言、自愿的身体行动、决策、想象和意识。新皮层有许多层,其中有六层大部分是可区分的。它是灵活的,具有巨大的学习能力。旧大脑爬行动物大脑位于新皮层下方,负责情感以及更基本和原始的生存功能,如呼吸、调节心跳、恐惧、攻击性、性冲动等。旧大脑记录了导致有利或不利感觉的行动和经验,形成了影响我们行为和未来行动的情感记忆。我们的 AI 代理在非常基本的方式上模拟了新皮层,有时也模拟了旧大脑。

计算机视觉

我们的 AI 代理感知并识别其环境。它窥探一切,从我们日常的图片和视频,到我们的 MRI 扫描,一直到遥远星系的图像。

自然语言处理

我们的 AI 代理与其环境进行通信,并自动化繁琐和耗时的任务,如文本摘要、语言翻译、情感分析、文档分类和排名、图像标题和与用户的聊天。

金融系统

我们的 AI 代理检测我们日常交易中的欺诈,评估贷款风险,并提供有关我们财务习惯的 24 小时反馈和见解。

网络和图

我们的 AI 代理处理网络和图数据,如动物社交网络、基础设施网络、专业合作网络、经济网络、交通网络、生物网络等。

社交媒体

我们的 AI 代理要感谢社交媒体提供了学习所需的大量数据。作为回报,我们的 AI 代理试图表征社交媒体用户,识别他们的模式、行为和活跃网络。

供应链

我们的 AI 代理是一个优化专家。它帮助我们预测每个生产链级别的最佳资源需求和分配策略。它还找到了结束世界饥饿的方法。

排程和人员安排

我们的 AI 代理促进了我们的日常运营。

天气预报

我们的 AI 代理解决了天气预报和预测中使用的偏微分方程。

气候变化

我们的 AI 代理试图对抗气候变化。

教育

我们的 AI 代理提供个性化的学习体验。

伦理

我们的 AI 代理致力于公平、公正、包容、透明、无偏见,并保护数据安全和隐私。

AI 的限制是什么?

除了 AI 的令人印象深刻的成就和它在增强或彻底改变整个行业方面的巨大承诺,还有一些真正的限制需要克服。一些最紧迫的限制包括:

  • 当前的 AI 在我们人类认为自己独特聪明的意义上甚至远远不接近智能。尽管 AI 在无数任务中表现优于人类,但它不能自然地切换和适应新任务。例如,一个训练用于识别图像中的人类的 AI 系统不能在不重新训练的情况下识别猫,也不能在不改变其架构和算法的情况下生成文本。在三种类型的 AI 的背景下,到目前为止我们只部分实现了人工狭窄智能,它具有狭窄范围的能力。我们既没有实现人工通用智能,也没有实现比人类更有能力的人工超级智能。此外,今天的机器无法体验任何美丽的人类情感,比如爱、亲近、幸福、自豪、尊严、关怀、悲伤、失落等。模仿情感与体验和真正提供情感是不同的。在这个意义上,机器远远不能取代人类。

  • 大多数流行的 AI 应用需要大量标记数据,例如 MRI 图像可以标记为癌症或非癌症,YouTube 视频可以标记为适合儿童观看或不安全,或者房屋价格可以与房屋区域、卧室数量、家庭收入中位数等特征一起提供-在这种情况下,房屋价格就是标签。限制在于训练系统所需的数据通常不容易获得,获取、标记、维护或存储数据也不便宜。大量数据是机密的、无组织的、无结构的、有偏见的、不完整的和未标记的。获取数据、清理数据、预处理数据和标记数据成为需要大量时间和资源投入的主要障碍。

  • 对于某个 AI 任务,有时会有许多方法或算法来完成它。每个任务、数据集和/或算法都有可以在实施过程中进行调整的参数,称为超参数,并不总是清楚这些超参数的最佳值是什么。可用于解决特定 AI 任务的方法和超参数的多样性意味着不同的方法可能会产生非常不同的结果,人们需要评估依赖哪种方法的决定。在某些应用中,例如为某个客户推荐哪种服装风格,这些差异可能是微不足道的。在其他领域,基于 AI 的决策可能会改变生活:患者被告知他们没有某种疾病,而实际上他们确实患有;一个人被错误地标记为极有可能再次犯罪,并因此被拒绝假释;或者一个合格的人被拒绝贷款。关于如何解决这些问题的研究正在进行中,随着我们在整本书中的进展,我将对这些问题进行更多的扩展。

  • 人类的能力和潜力受限于他们大脑的力量和容量,他们的生物体,地球和宇宙中可利用的资源,他们能够操纵的资源。这些再次受到他们大脑的力量和容量的限制。人工智能系统同样受到支持人工智能软件的系统的计算能力和硬件能力的限制。最近的研究表明,计算密集型的深度学习正接近其计算极限,需要新的想法来提高算法和硬件的效率,或者发现全新的方法。人工智能的进步在很大程度上取决于计算能力的大幅增加。然而,这种能力并不是无限的,对于处理大规模数据集的大型系统来说成本极高,并且具有无法忽视的巨大碳足迹。此外,数据和算法软件并不是孤立存在的。诸如计算机、手机、平板电脑、电池以及存储、传输和处理数据和算法所需的仓库和系统等设备都是由地球上采集的真实物质制成的。地球花了数百万年时间才制造出其中一些材料,而永远维持这些技术所需的无限供应是不存在的。

  • 安全、隐私和对抗性攻击仍然是人工智能的主要关注点,特别是随着互联系统的出现。大量的研究和资源正在被用于解决这些重要问题。由于当前大部分人工智能是软件,大部分数据是数字化的,这一领域的竞争从未停止。这意味着人工智能系统需要不断监控和更新,这需要更多昂贵的人工智能专家,可能会造成成本上的浪费,这反而违背了自动化的初衷。

  • 到目前为止,人工智能研究和实施行业一直把自己视为与其不断发展的技术的经济、社会和安全后果略有关联的。通常,这些人工智能工作的伦理、社会和安全影响被认为是重要的,需要得到关注,但超出了工作本身的范围。随着人工智能的广泛部署,其对社会、市场和潜在威胁的影响越来越强烈地被感知,整个领域必须更加有意识地关注这些至关重要的问题。在这方面,人工智能发展社区在分配资源以解决实施和部署新技术的更广泛影响方面存在局限。

当人工智能系统失败时会发生什么?

了解人工智能的一个非常重要的部分就是了解它的事件和失败。这有助于我们在设计自己的人工智能并将其部署到现实世界之前,预见并避免类似的结果。如果人工智能在部署后失败,后果可能是极其不良的,危险的,甚至是致命的。

一个名为 AI 事故数据库的在线知识库包含了一千多起此类事件。该网站上的例子包括:一辆自动驾驶汽车撞死了行人,自动驾驶汽车与公司服务器失联整整 20 分钟,同时在旧金山街头全部熄火(2022 年 6 月 28 日和 5 月 18 日),一个交易算法导致市场发生“闪崩”,数十亿美元自动在各方之间转移,一个面部识别系统导致一个无辜的人被逮捕,以及微软臭名昭著的聊天机器人 Tay,在发布仅 16 小时后就被关闭,因为它迅速学会并发布了冒犯性、种族主义和极具煽动性的言论。

这些不良结果可以得到缓解,但需要深刻理解这些系统在所有生产层面的工作方式,以及它们被部署的环境和用户。了解人工智能背后的数学是这个辨别过程中的一个至关重要的步骤。

人工智能的前景在哪里?

要能够回答或推测人工智能的前景,最好回顾该领域自诞生以来的最初目标:复制人类智能。这个领域是在五十年代构想出来的。研究该领域在过去七十年的发展可能会告诉我们一些关于其未来方向的信息。此外,研究该领域的历史和趋势使我们能够以鸟瞰的视角看待人工智能,将一切放在背景中并提供更好的视角。这也使得学习人工智能涉及的数学变得不那么令人畏惧。以下是人工智能演变及其最近由于深度学习的令人印象深刻的进展而受到关注的非常简要和非技术性的概述。

  • 起初,人工智能研究试图使用规则和逻辑来模仿智能。当时的想法是,我们只需要向机器输入事实和逻辑推理的规则。学习过程并不受重视。挑战在于,为了获取人类知识,编码人员需要处理太多的规则和约束,这似乎是不可行的。

  • 在 20 世纪 90 年代末和 21 世纪初,各种机器学习方法变得流行。机器学习不是通过编程规则来得出结论和决策,而是从数据中推断规则。机器学习系统处理和处理数据的能力越强,性能就越好。数据和从大量数据中经济高效地处理和学习成为中心目标。那个时期流行的机器学习算法包括支持向量机、贝叶斯网络、进化算法、决策树、随机森林、回归、逻辑回归等。这些算法现在仍然很受欢迎。

  • 2010 年后,特别是在 2012 年,神经网络和深度学习的浪潮席卷而来,之后 AlexNet 的卷积神经网络在图像识别方面取得成功。

  • 最近五年来,强化学习在 DeepMind 的 AlphaGo 击败世界冠军后变得流行,这是一个非常复杂的古老中国游戏。

需要注意的是,前面对历史的描述非常粗糙:回归分析自从 19 世纪初由勒让德和高斯提出以来就一直存在,第一个人工神经元和神经网络是在 20 世纪 40 年代末和 50 年代初由神经生理学家沃伦·麦卡洛克、数学家沃尔特·皮茨、心理学家唐纳德·赫布和弗兰克·罗森布拉特提出的。图灵测试最初被艾伦·图灵引入,他在 1950 年的论文《计算机器械与智能》中提出。图灵提出,如果机器的回答与人类的回答无法区分,那么这台机器就具有人工智能。因此,如果机器能够模仿人类的回答,就被认为具有智能。然而,对于计算机科学领域之外的人来说,图灵测试在定义智能方面似乎有所限制,我想知道图灵测试是否无意中限制了人工智能研究的目标或方向。

尽管机器能够在某些特定任务中模仿人类智能,但复制人类智能的最初目标尚未实现,因此可以安全地假设这是该领域的发展方向,即使这可能涉及重新发现旧观念或发明全新的观念。当前对该领域的投资水平,加上研究和公众兴趣的激增,必将产生新的突破。然而,最近人工智能进展带来的突破已经在整个行业中引起了革命,这些行业急于实施这些技术。这些当代人工智能进展涉及许多重要的数学内容,我们将在本书中进行探讨。

目前谁是人工智能领域的主要贡献者?

主要的人工智能竞争者是美国、欧洲和中国。一些世界领先的科技公司包括谷歌及其母公司 Alphabet、亚马逊、Facebook、微软、英伟达和 IBM 在美国,DeepMind 在英国和美国(由 Alphabet 拥有),百度和腾讯在中国。学术界也有许多重要的贡献者,但这些太多了无法一一列举。如果您是该领域的新手,了解这些大公司的名称、历史和贡献以及它们目前正在追求的目标是很有价值的。了解他们的工作是否存在争议也是有价值的。这些一般知识在您在人工智能领域中获得更多经验时会派上用场。

在人工智能中通常涉及哪些数学?

问题:当我说数学这个词时,您会想到哪些主题和学科?

无论您是数学专家还是初学者,您所想到的数学主题很可能涉及人工智能。以下是一个常用的最有用的数学学科列表,用于人工智能实施,但您不需要成为所有这些领域的专家才能在人工智能领域取得成功。您所需要的是对以下数学学科中的某些有用主题有深入的理解:微积分、线性代数、优化、概率和统计学。根据您的特定应用领域,您可能需要来自以下数学学科的特殊主题:随机矩阵理论、图论、博弈论、微分方程和运筹学。

在本书中,我们将在不提供每个主题的教科书的情况下讨论上述主题。人工智能应用和实施是这些不同且密切相互作用的数学主题的统一主题。采用这种方法,我可能会冒犯一些数学专家,简化许多技术定义或省略整个定理和细节,我也可能会冒犯人工智能或专业行业专家,再次省略某些应用和实施中涉及的细节。然而,目标是保持本书简单易读,同时涵盖大部分对人工智能应用重要的数学主题。有兴趣的读者可以深入研究数学或人工智能领域,然后阅读更深入的关于他们感兴趣的特定领域的书籍。我希望本书是一个简洁的总结和全面的概述,因此读者可以自信地进入他们感兴趣的任何人工智能数学领域或人工智能应用领域。

总结和展望

人类智能表现在感知、视觉、通过自然语言进行交流、推理、决策、合作、共情、对周围环境进行建模和操纵、技能和知识在人群和世代之间的传递,以及将天生和学到的技能推广到新的和未知的领域。人工智能渴望复制人类智能的所有方面。在目前的状态下,人工智能一次只能处理一种或少数几种智能方面。即使有这种局限性,人工智能已经能够完成令人印象深刻的壮举,比如对蛋白质折叠进行建模和预测蛋白质结构,这些是生命的基本组成部分。这一人工智能应用(众多应用之一)对于理解生命的本质和对抗各种疾病的意义是无限的。

当你进入人工智能领域时,重要的是要注意你正在开发或使用智能的哪个方面。是感知?视觉?自然语言?导航?控制?推理?然后自然而然地会知道要关注哪些数学,以及为什么,因为你已经知道自己在人工智能领域的哪个方面。然后就会很容易关注社区开发该特定人工智能方面所使用的数学方法和工具。本书的方法也类似:首先是人工智能类型和应用,然后是数学。

在本章中,我们讨论了一般性问题,比如:什么是人工智能?人工智能能做什么?人工智能的局限性是什么?人工智能的发展方向是什么?人工智能是如何工作的?我们还简要调查了重要的人工智能应用、公司在尝试将人工智能整合到其系统中时通常遇到的问题、系统实施不良时发生的事件,以及通常需要用于人工智能实施的数学学科。

在下一章中,我们将深入探讨数据,并确认其与人工智能的密切关系。当我们谈论数据时,我们也谈论数据分布,这直接将我们带入了概率论和统计学。

第二章:数据,数据,数据

也许如果我知道一切的来龙去脉,我就会知道一切的发展方向和原因。

数据是大多数 AI 系统的动力源。在本章中,我们将了解数据以及设计从数据中提取有用和可操作信息的方法,这是感知 AI 的核心。

感知 AI基于从数据中进行统计学习,其中 AI 代理或机器从其环境中感知数据,然后检测数据中的模式,使其能够得出结论和/或做出决策。

感知 AI 不同于其他三种类型的 AI:

  1. 理解 AI,AI 系统理解将图像分类为椅子意味着它可以用来坐,将图像分类为癌症意味着人生病需要进一步的医疗关注,或者它读过的线性代数教科书可以用来从数据中提取有用的信息。

  2. 控制 AI,涉及控制 AI 代理的物理部分,以便在空间中导航,打开门,倒咖啡等。机器人在这个领域取得了重大进展。我们需要用包括感知 AI 和理解 AI 的大脑来增强机器人,并将其连接到控制 AI。理想情况下,像人类一样,控制 AI 然后从其与环境的物理交互中学习,通过将该信息传递给其感知和理解系统,然后将控制命令传递给代理的控制系统。

  3. 意识 AI,其中 AI 代理具有类似于人类经历的内在体验。由于我们还不知道如何在数学上定义意识,因此在本书中我们根本不讨论这个概念。

理想情况下,真正类似于人类的智能结合了上述四个方面:感知,理解,控制和意识。本章和接下来的几章的主要重点是感知 AI。AI 和数据已经紧密结合,以至于现在常见的,尽管错误的,是将数据科学和 AI 视为同义词。

AI 的数据

在许多流行的机器学习模型的核心,包括自 2012 年 AlexNet 以来重新引起人们关注的高度成功的神经网络,存在一个非常简单的数学问题:

将给定的数据点拟合到适当的函数中(将输入映射到输出),从数据中捕捉重要信号并忽略噪音,然后确保该函数在新数据上表现良好。

然而,复杂性和挑战来自各种来源。

假设和特征

生成数据的真实函数以及它实际依赖的所有特征都是未知的。我们只是观察数据,然后尝试估计生成它的假设函数。我们的函数试图学习数据中哪些特征对我们的预测、分类、决策或一般目的很重要。它还学习这些特征如何相互作用以产生观察到的结果。在这种情况下,人工智能的一个巨大潜力是它能够捕捉到人类通常不会注意到的数据特征之间的微妙相互作用,因为我们非常擅长观察强特征,但忽略更微妙的特征。例如,我们作为人类可以知道一个人的月收入影响他们偿还贷款的能力,但我们可能不会观察到他们的日常通勤或早晨例行公事对此也可能有非常重要的影响。一些特征之间的相互作用比其他的简单得多,比如线性相互作用。其他的则更复杂,是非线性的。从数学角度来看,无论我们的特征相互作用是简单的(线性)还是复杂的(非线性),我们的目标仍然是相同的:找到一个适合你的数据并能够在新数据上做出良好预测的假设函数。这里还有一个额外的复杂性:有许多假设函数可以拟合相同的数据集,我们如何知道选择哪一个?

性能

即使计算出一个适合我们数据的假设函数,我们如何知道它在新的未知数据上表现良好呢?我们如何知道选择哪种性能度量,并且在部署到真实世界后如何监控这种性能?真实世界的数据和场景并不都带有地面真相的标签,所以我们不能轻易衡量我们的人工智能系统是否表现良好并做出正确或适当的预测和决策。我们不知道如何衡量人工智能系统的结果。如果真实世界的数据和场景都带有地面真相的标签,那么我们都会失业,因为我们会知道在每种情况下该做什么,地球上会和平,我们会幸福地生活下去(实际上并非如此,我希望事情能够如此简单)。

数量

人工智能领域几乎所有的东西都是非常高维的!数据实例的数量、观察到的特征以及需要计算的未知权重可能都在百万级别,所需的计算步骤则在十亿级别。在这样大量数据上的高效存储、传输、探索、预处理、结构化和计算成为中心目标。此外,探索涉及高维数学函数的景观是一项非常艰巨的任务。

结构

现代世界创造的绝大部分数据都是非结构化的。它不是以易于查询的表格形式组织的,其中包含有标记的字段,比如姓名,电话号码,性别,年龄,邮政编码,房价,收入水平,等等。非结构化数据无处不在:社交媒体上的帖子,用户活动,文字文档,PDF 文件,图像,音频和视频文件,协作软件数据,交通,地震和天气数据,GPS,军事行动,电子邮件,即时通讯软件,移动聊天数据等等。其中一些例子,比如电子邮件数据,可以被视为半结构化的,因为电子邮件带有包括邮件元数据的标题:发件人,收件人,日期,时间,主题,内容类型,垃圾邮件状态,等等。此外,大量重要数据并不以数字格式可用,并且分散在多个不相互通信的数据库中。这里的例子包括历史军事数据,博物馆和医院记录。目前,我们正努力将我们的世界和城市数字化,以利用更多的人工智能应用。总的来说,从结构化和标记的数据中获得见解比从非结构化数据中获得见解更容易。挖掘非结构化数据需要创新技术,这些技术目前是数据科学,机器学习和人工智能领域的推动力。

真实数据*vs.*模拟数据

当我们处理数据时,非常重要的是要知道真实数据和模拟数据之间的区别。这两种类型的数据对于人类的发现和进步都非常宝贵。

真实数据

这些数据是通过真实世界观察收集的,使用测量设备,传感器,调查,结构化表格(如医学问卷),望远镜,成像设备,网站,股票市场,受控实验,等等。这些数据通常是不完美和嘈杂的,因为测量方法和仪器的不准确性和故障。从数学上讲,我们不知道生成真实数据的确切函数或概率分布,但我们可以使用模型,理论和模拟来假设它们。然后我们可以测试我们的模型,最终使用它们进行预测。

模拟数据

这是使用已知函数生成的数据,或者从已知概率分布中随机抽样得到的数据。在这里,我们有我们已知的数学函数(们),或者模型,我们将数值代入模型中以生成我们的数据点。例子很多:数值解决了模拟各种自然现象的偏微分方程,涵盖了各种规模,比如湍流流动,蛋白质折叠,热扩散,化学反应,行星运动,断裂材料,交通,甚至迪士尼电影动画(《冰雪奇缘》,《海洋奇缘》,等等)。

在本章中,我们提供了两个关于人类身高和体重数据的例子,以演示真实数据和模拟数据之间的区别。在第一个例子中,我们访问一个在线公共数据库,然后下载并探索两个包含真实个体身高和体重测量的真实数据集。在第二个例子中,我们根据我们假设的函数模拟了自己的身高和体重数据集:我们假设一个人的体重在数值上取决于他们的身高,这意味着当我们将体重数据与身高数据绘制在一起时,我们期望看到一个直线或平坦的视觉模式。

数学模型:线性*vs.*非线性

线性依赖模拟了世界上的平坦,比如一维直线、二维平面(称为平面)和更高维的超平面。线性函数的图形,它模拟了线性依赖,永远是平的,不会弯曲。每当你看到一个平的物体,比如桌子、杆、天花板,或者一堆数据点聚集在一条直线或一个平面周围,知道它们代表的函数是线性的。除了平的东西是非线性的,所以图形弯曲的函数是非线性的,而聚集在弯曲曲线或曲面周围的数据点必须是由非线性函数生成的。

线性函数的公式,代表了函数输出对特征变量的线性依赖,非常容易写下来。这些特征在公式中只是它们自己,没有幂或根,并且没有嵌入在任何其他函数中,比如分数的分母、正弦、余弦、指数、对数或其他微积分函数。它们只能被标量(实数或复数,而不是向量或矩阵)相乘,并且可以相互加减。例如,一个依赖于三个特征<x 1,x 2>和<x 3>的线性函数可以写成:

f ( x 1 , x 2 , x 3 ) = ω 0 + ω 1 x 1 + ω 2 x 2 + ω 3 x 3 ,

其中参数ω 0 , ω 1 , ω 2ω 3是标量数。这些参数,或权重ω 1 , ω 2ω 3 线性组合特征,并在添加偏置ω 0后产生f ( x 1 , x 2 , x 3 )的结果。换句话说,结果是由特征之间的线性相互作用x 1 , x 2x 3以及偏置产生的。

非线性函数的公式,表示函数输出对特征的非线性依赖,也很容易识别:一个或多个特征以非一次幂出现在函数公式中,或者与其他特征相乘或相除,或者嵌入在其他微积分函数中,如正弦、余弦、指数、对数等。以下是三个关于三个特征 x1,x2 和 x3 非线性依赖的函数的例子:

1 f x 1 x 2 x 3 = ω 0 + ω 1 x 1 + ω 2 x 2 x 3 2 f x 1 x 2 x 3 = ω 0 + ω 1 x 1 2 + ω 2 x 2 2 + ω 3 x 3 2 3 f x 1 x 2 x 3 = ω 1 e x 1 + ω 2 e x 2 + ω 3 cos x 3

正如您所看到的,我们可以提出各种各样的非线性函数,以及与非线性交互相关的可能性是无限的。事实上,神经网络之所以成功,是因为它们能够捕捉数据特征之间的相关非线性交互。

我们将在整本书中使用上述符号和术语,因此您将非常熟悉线性组合、权重、特征以及特征之间的线性和非线性交互等术语。

一个真实数据的例子

您可以在第二章的链接 Jupyter 笔记本中找到调查数据并生成图表的 Python 代码的两个示例。

注意:结构化数据

我们将在这里使用的身高、体重和性别的两个数据集是结构化数据集的示例。它们以行和列的形式组织。列包含特征,如体重、身高、性别、健康指数,等等。行包含每个数据实例的特征分数,也就是每个人的情况。另一方面,一堆音频文件、Facebook 帖子、图像或视频都是非结构化数据集的示例。

我从数据科学家的Kaggle 网站下载了两个数据集。这两个数据集都包含了一定数量的个体的身高、体重和性别信息。我的目标是了解一个人的体重如何取决于他们的身高。从数学上讲,我想要写出一个公式,将体重作为一个特征,即身高的函数:

数学符号“美元符号重量等于 f 左括号高度右括号逗号美元符号”

因此,如果我得到一个人的身高,我将能够预测他们的体重。当然,人的体重除了身高之外还取决于其他特征,比如他们的性别、饮食习惯、锻炼习惯、遗传倾向,等等。但是,对于我下载的数据集,我们只有身高、体重和性别数据可用。除非我们想要寻找更详细的数据集,或者出去收集新数据,我们必须使用我们手头的数据。此外,这个例子的目标只是为了说明真实数据和模拟数据之间的差异。当我们有更深入的目标时,我们将使用更多特征的更复杂的数据集。

对于第一个数据集,我在图 2-1 中绘制了体重列与身高列,得到了似乎完全没有模式的结果!

250

图 2-1。当绘制第一个数据集的体重与身高时,我们无法检测到模式。散点图上方和右侧的图显示了身高和体重数据的直方图和经验分布。

对于第二个数据集,我做了同样的事情,我可以在图 2-2 中明显观察到线性依赖。数据点似乎聚集在一条直线周围!

250

图 2-2。当绘制第二个数据集的体重与身高时,我们观察到线性模式。请注意,体重数据的经验分布绘制在图的右侧,身高数据的经验分布绘制在图的顶部。两者似乎都有两个峰值(双峰),表明存在混合分布。实际上,身高和体重数据集都可以使用两个正态分布的混合来建模,称为高斯混合,代表混合男性和女性数据的基础分布。因此,如果我们单独绘制女性或男性亚群的数据,就像图 2-6 中那样,我们会观察到身高和体重数据呈正态分布(钟形)。

发生了什么?为什么我的第一个真实数据集完全没有反映出人的身高和体重之间的任何依赖关系,但我的第二个数据集反映出了线性依赖?我们需要深入研究数据。

这是处理真实数据时面临的许多挑战之一。我们不知道是什么函数生成了数据,以及为什么数据看起来是这个样子。我们调查、获得洞察力、检测模式(如果有的话),并提出一个假设函数。然后我们测试我们的假设,如果根据我们的性能指标表现良好,我们就将其部署到现实世界中。我们使用我们部署的模型进行预测,直到新数据告诉我们我们的假设不再有效为止,在这种情况下,我们调查更新的数据,并提出一个新的假设。只要我们的模型在运行,这个过程和反馈循环就会继续下去。

在转向模拟数据之前,让我们解释一下为什么第一个数据集似乎对个体的身高和体重之间的关系没有任何见解。经过进一步检查,我们注意到数据集中有过多指数分数为 4 和 5 的个体,指的是肥胖和极度肥胖。因此,我决定按指数分数拆分数据,并为所有具有相似指数分数的个体绘制体重与身高的图。这一次,在图 2-3 中明显地显示了身高和体重之间的线性依赖关系,谜团得到了解决。这可能会让人觉得我们在通过个体的指数分数进行条件处理来获得线性关系,但在数据探索的名义下,一切都是公平竞争。

250

图 2-3。当为第一个数据集中具有相似指数分数的个体绘制体重与身高时,我们观察到了线性模式。这张图显示了指数分数为 3 的个体的体重与身高。

现在我们可以放心地假设体重是线性依赖于身高的:

w e i g h t = ω 0 + ω 1 × h e i g h t .

当然,我们还需要找到参数ω 0ω 1的适当值。下一章将教会我们如何做到这一点。事实上,机器学习,包括深度学习,的大部分活动都是关于从数据中学习这些ω。在我们非常简单的例子中,我们只需要学习两个ω,因为我们只有一个特征,身高,并且在观察到真实数据中的线性模式后,我们假设了线性依赖关系。在接下来的几章中,我们将遇到一些有数百万个ω需要学习的深度学习网络,然而,我们将看到问题的数学结构实际上与我们将在第三章中学到的完全相同的结构。

模拟数据的一个例子

在这个例子中,我模拟了自己的身高-体重数据集。模拟我们自己的数据可以避免在网上搜索数据、现实世界中寻找数据,甚至建立实验室以获得受控的测量数据的麻烦。当所需数据不可用或非常昂贵时,这是非常有价值的。它还可以通过只改变函数中的数字来测试不同的场景,而不是创建新材料、建立实验室并进行新实验。模拟数据非常方便,因为我们只需要一个数学函数,如果我们想要涉及随机性和/或噪声,还需要一个概率分布,以及一台计算机。

让我们再次假设身高和体重之间存在线性依赖关系,因此我们将使用的函数是:

w e i g h t = ω 0 + ω 1 × h e i g h t .

为了能够模拟数值( h e i g h t , w e i g h t )对,或者数据点,我们必须假设参数ω 0ω 1的数值。在没有来自真实数据的见解来选择这些ω的正确值时,我们只能根据问题的背景做出合理的猜测并尝试不同的数值。请注意,在本例中的身高体重情况下,我们碰巧有真实数据可以用来学习ω的适当值,第三章的一个目标就是学习如何做到这一点。然而,在许多其他情况下,我们没有真实数据,所以唯一的方法就是尝试不同的ω的数值。

在以下模拟中,我们设置ω 0 = - 314 . 5ω 1 = 7 . 07,所以函数变为:

w e i g h t = - 314 . 5 + 7 . 07 × h e i g h t .

现在我们可以生成尽可能多的数值( h e i g h t , w e i g h t )对,我们想要。例如,将h e i g h t = 60插入重量函数的公式中,我们得到w e i g h t = - 314 . 5 + 7 . 07 × 60 = 109 . 7。因此,我们的线性模型预测,身高为 60 英寸的人体重为109 . 7磅,我们可以在身高体重图上绘制的数据点的坐标为( 60 , 109 . 7 )。在图 2-4 中,我们生成了 5000 个这些数据点:我们选择了身高在 54 至 79 英寸之间的 5000 个值,并将它们代入重量函数。我们注意到图 2-4 中的图是一条完美的直线,模拟数据中没有噪音或变化,因为我们没有将这些因素纳入我们的线性模型中。这是模拟数据的特点:它做了生成它的函数所做的事情。如果我们了解我们用来构建模拟的函数(称为模型)以及我们的计算没有积累太多的数值误差和/或非常大的数值,那么我们就了解了我们的模型生成的数据,并且我们可以以任何我们认为合适的方式使用这些数据。这里没有太多的惊喜。在我们的例子中,我们提出的函数是线性的,因此它的方程式是一条直线的方程式,正如你在图 2-4 中看到的,生成的数据完全位于这条直线上。

200

图 2-4。模拟数据:我们使用线性函数w e i g h t = - 314 . 5 + 7 . 07 × h e i g h t生成了五千个(身高,体重)点。

如果我们想要模拟更真实的身高和体重数据呢?那么我们可以从更真实的人类身高分布中对身高值进行抽样:钟形正态分布!同样,我们知道我们正在抽样的概率分布,这与真实数据的情况不同。在我们抽样身高值之后,我们将其代入体重的线性模型中,然后添加一些噪音,因为我们希望我们的模拟数据更加真实。由于噪音具有随机性质,因此我们还必须选择它将从哪个概率分布中抽样。我们再次选择钟形正态分布,但我们也可以选择均匀分布来模拟均匀的随机波动。我们更真实的身高体重模型变为:

w e i g h t = - 314 . 5 + 7 . 07 × h e i g h t + n o i s e .

我们获得图 2-5。

200

图 2-5。模拟数据:我们使用线性函数w e i g h t = - 314 . 5 + 7 . 07 × h e i g h t生成了五千个(身高,体重)点。身高点是正态分布的,我们也添加了正态分布的噪声。请注意图的右侧和顶部分别的体重和身高数据的分布都是正态分布的。这并不奇怪,因为我们在模拟中就是这样设计的。

现在比较包含我们模拟的身高体重数据的图 2-5 和包含来自我们使用的第二个 Kaggle 数据集中 5000 名女性真实身高体重数据的图 2-6。考虑到只花了五分钟的代码编写来生成这些数据,情况还不错,而不是收集真实数据!如果我们花更多时间调整我们的ω的值,以及我们添加的正态分布噪声的参数(均值和标准差),我们将获得一个看起来更好的模拟数据集。然而,我们将在这里结束这个模拟,因为很快我们的整个重点将是学习我们假设模型的适当参数值。

200

图 2-6。真实数据:第二个 Kaggle 数据集中 5000 名女性的体重数据与身高数据的图。请注意图的右侧和顶部分别的女性体重和身高数据的分布都是正态分布的。请查看链接的 Jupyter 笔记本以获取更多详细信息。

数学模型:模拟和人工智能

我们总是可以调整我们的数学模型使其更加现实。我们是设计者,所以我们决定这些模型中包含什么。通常情况下,模型越接近自然,其中包含的数学对象就越多。因此,在构建数学模型时,通常需要在接近现实和模型的简单性以及数学分析和计算的可访问性之间进行权衡。不同的设计者提出不同的数学模型,有些模型比其他模型更好地捕捉了某些现象。随着捕捉自然行为的探索不断进行,这些模型不断改进和演变。值得庆幸的是,过去几十年中我们的计算能力已经大大提高,使我们能够创建和测试更复杂和更现实的数学模型。

自然同时非常细致和巨大。自然界的相互作用范围从亚原子量子领域一直到星系间的相互作用。我们作为人类,永远试图理解自然,并捕捉其复杂的组成部分及其众多的相互联系和相互作用。我们这样做的原因是多种多样的。它们从对生命和宇宙起源的纯好奇,到创造新技术,增强通信系统,设计药物和发现治疗方法,建造武器和防御系统,到未来可能前往遥远行星并在那里居住。数学模型以仅仅使用数字、函数、方程式来描述自然的所有细节的方式,以及在面对不确定性时通过概率引入量化的随机性,提供了一种极好而几乎奇迹般的方式。这些数学模型的计算机模拟使我们能够研究和可视化所建模系统或现象的各种简单和复杂行为。反过来,来自计算机模拟的见解有助于模型的增强和设计,除了提供更深入的数学见解。这种令人难以置信的积极反馈循环使数学建模和模拟成为一种不可或缺的工具,而我们的计算能力的增强使其得到了极大的增强。

宇宙的奥秘在于,它的各种现象可以用数学的抽象语言准确地建模,而人类的头脑之所以了解和理解数学,并构建强大的技术设备,对各种应用都有用,这也是一个奇迹。同样令人印象深刻的是,这些设备在其核心上所做的无非是计算或传输数学,更具体地说,就是一堆零和一。

人类能够将对简单数字的理解推广到建立和应用各种规模的自然现象的数学模型,这是学习知识的泛化的一个壮观例子,也是人类智慧的标志。在人工智能领域,通用人工智能(类似人类)和狭义人工智能(特定任务导向)的一个共同目标是泛化:人工智能代理能够将学到的能力推广到新的和未知的情况。在下一章中,我们将了解狭义和任务导向人工智能的这一原则:人工智能代理从数据中学习,然后为新的和未见过的数据产生良好的预测

人工智能以三种方式与数学模型和模拟进行交互:

  1. 数学模型和模拟产生数据,供人工智能系统进行训练:自动驾驶汽车被一些人认为是人工智能的一个基准。让智能汽车原型车在没有人工智能系统学会这些不利事件必须避免之前,开车冲下悬崖,撞到行人,或者撞上新的工作区域,这将是不方便的。在这里,模拟数据的训练尤其有价值,因为模拟可以为汽车创造各种危险的虚拟情况,供其在上路之前进行训练。同样,模拟数据对于火星车、药物发现、材料设计、天气预报、航空、军事训练等人工智能系统的训练非常有帮助。

  2. 人工智能增强了现有的数学模型和模拟:人工智能在传统上对数学模型和模拟困难和限制的领域有很大潜力,例如学习模型中涉及的参数的适当值、适当的概率分布、在离散化方程时的网格形状和大小(细网格捕捉各种空间和时间尺度上的细节和微妙行为),以及将计算方法扩展到更长的时间或具有复杂形状的更大领域。诸如导航、航空、金融、材料科学、流体动力学、运筹学、分子和核科学、大气和海洋科学、天体物理学、物理和网络安全等领域都严重依赖数学建模和模拟。将人工智能能力整合到这些领域正在开始,并取得了非常积极的成果。在本书的后面章节中,我们将遇到人工智能增强模拟的例子。

  3. 人工智能本身是一个数学模型和模拟:人工智能的一个重要愿景是通过计算来复制人类智能。成功的机器学习系统,包括神经网络及其所有架构和变体,都是旨在模拟人类智能相关任务的数学模型,如视觉、模式识别和泛化、自然语言交流和逻辑推理。理解、情感体验、共情和合作也与智能相关,并且对人类的成功和统治做出了巨大贡献,因此如果我们想实现通用人工智能并同时更深入地了解智能的本质和人脑的运作,我们也必须找到复制它们的方法。在这些领域的努力已经在进行中。我们要记住的是,在所有这些领域,机器所做的是计算:机器计算自然语言处理文档的含义,组合和计算计算机视觉的数字图像像素,将音频信号转换为数字向量并计算人机交互的新音频,等等。因此很容易看出,软件人工智能是一个大型数学模型和模拟。随着我们在本书中的进展,这一点将变得更加明显。

我们的数据从哪里获取?

当我决定进入人工智能领域时,我想要运用我的数学知识来帮助解决我热衷的现实世界问题。我在战争中长大,看到许多问题的爆发、破坏,然后最终消散或得到解决,要么通过直接修复,要么通过人类网络的调整并最终稳定在全新的(不稳定的)平衡状态。战争中常见的问题包括对不同供应链的突然和大规模破坏,大部分电网的突然毁坏,通过有针对性的炸桥导致整个道路网络的突然瘫痪,恐怖网络的突然出现,黑市、贩卖、通货膨胀和贫困的突然出现。数学在这些情况下可以帮助解决的问题数量是无限的,包括战争战术和战略。在美国的安全环境下,我拥有数学博士学位,并在大学任教,我开始接触公司、政府机构和军方,寻找真实的项目和真实的数据来进行研究。我提出免费帮助他们解决问题。我不知道的是,我以艰难的方式学到的,获取真实数据是最大的障碍。有许多法规、隐私问题、机构审查委员会和其他障碍阻碍着我们。即使跳过了所有这些障碍,公司、机构和组织也倾向于保留他们的数据,即使他们知道他们没有充分利用它,我们几乎不得不乞求才能获取真实数据。结果证明,我遇到的经历并不是独一无二的。同样的事情也发生在这个领域的许多其他人身上。

以上故事并不是要阻止你获取训练 AI 系统所需的真实数据。重点不是要让你在遇到数据所有者的犹豫和抵抗时感到惊讶和沮丧。继续询问,总会有人愿意冒险一试。

有时你需要的数据可以在网上公开获取。在本章中,我使用了Kaggle网站的数据集来构建简单的模型。还有其他很棒的公共数据存储库,我就不一一列举了,但是简单的谷歌搜索关键词“最佳数据存储库”会返回出色的结果。一些存储库专门用于计算机视觉,其他用于自然语言处理、音频生成和转录、科学研究等等。

在网上获取数据是常见的,但你必须遵守你爬取的网站的规则。你还必须学会如何爬取(有人说数据科学家和统计学家的区别在于数据科学家知道如何“黑客”!)。有些网站要求你在爬取之前获得书面许可。例如,如果你对社交媒体用户行为或合作网络感兴趣,你可以爬取社交媒体和专业网络:Facebook、Instagram、YouTube、Flickr、LinkedIn 等等,以获取用户账户的统计数据,比如他们的朋友或联系人数量,点赞、评论以及他们在这些网站上的活动。你最终会得到包含数十万条记录的非常庞大的数据集,然后你可以进行计算。

为了直观地了解数据如何集成到人工智能中,以及进入各种系统的数据类型,同时避免被所有信息和数据所压倒,有益的是养成一个习惯,即探索成功的人工智能系统所训练的数据集,如果可以的话。你不必下载并处理这些数据。浏览数据集、其元数据、特征和标签(如果有的话)等就足以让你对数据感到舒适。例如,DeepMind 的WaveNet(2016)是一个神经网络,可以生成真实的人声或愉悦的音乐。它可以完成文本到音频的转换,甚至可以模仿特定人的声音。我们将在第七章学习 WaveNet 时了解条件的数学含义。现在,可以将其视为对问题施加的人为限制,以将结果限制在一定的结果集中。那么 WaveNet 是在哪些数据上训练的呢?对于不受文本条件限制的多说话者音频生成,WaveNet 是在包含来自 109 位不同说话者的 44 小时音频的数据集上进行训练的:英语多说话者语料库来自 CSTR Voice Cloning Toolkit(2012)。对于文本转语音,WaveNet 是在包含 24 小时语音数据的北美英语数据集和包含 34.8 小时语音数据的中文数据集上进行训练的。对于生成音乐,WaveNet 是在包含来自 YouTube 视频的 60 小时独奏钢琴音乐的数据集和包含约 200 小时音乐音频的MagnaTagATune 数据集(2009)上进行训练的。标记数据对于人工智能系统非常有价值,因为它提供了一个基准来衡量你的假设函数的输出。我们将在接下来的几节中学习这一点。

那么著名的图像分类(用于计算机视觉)AlexNet(2012)呢?它的卷积神经网络是在哪些数据上进行训练和测试的?AlexNet 是在包含数百万图像(从互联网上获取)并标记了数千个类别的ImageNet数据集上进行训练的。

请注意,上述示例都是关于非结构化数据的示例。

如果某个系统所训练的数据不是公开可用的,最好查阅该系统的发表论文或文档,并了解所需数据是如何获取的。这本身就会让你学到很多。

在继续进行数学之前,请记住以下要点:

  1. 人工智能系统需要数字数据。

  2. 有时,你需要的数据并不容易获取。

  3. 有一个数字化我们整个世界的运动。

数据分布、概率和统计的词汇

当你进入一个新的领域时,你想要学习的第一件事是该领域的词汇。这类似于学习一门新语言。你可以在课堂上学习,然后受苦,或者你可以去一个说这种语言的国家,听频繁使用的术语。你不必知道法语中的“Bonjour”是什么意思。但当你在法国时,你会注意到人们经常互相说这个词,所以你也开始说。有时候你可能不会在正确的上下文中使用它,比如当你必须说“Bonsoir”而不是“Bonjour”。但慢慢地,当你发现自己在法国呆得越来越久时,你会在正确的上下文中使用正确的词汇。

尽快学习词汇的另一个优势是,不一定要掌握任何细节,因为不同领域用不同的术语指代相同的概念,因此存在大量的词汇冲突。这最终成为混淆的一个重要来源,因此体现了语言障碍。当你学习该领域的常用词汇时,你会意识到你可能已经了解这些概念,只是现在你有了新的名称。

你想要了解的概率和统计学的词汇术语并不多。我会在我们使用它时定义每个术语,但请注意,概率论的目标是对随机或随机数量和事件做出确定性的陈述,因为人类讨厌不确定性,喜欢他们的世界是可控和可预测的。当你阅读有关人工智能、机器学习或数据科学的内容时,留意以下来自概率和统计领域的语言。再次强调,你不必立刻了解任何定义,你只需要听到以下术语,并熟悉它们在彼此之后的进展方式:

  • 一切都始于随机变量。数学家们不停地谈论函数。函数有确定的结果。当你评估一个函数时,你知道它将返回什么值:在 3 处评估函数x 2,你可以肯定会得到3 2 = 9。另一方面,随机变量没有确定的结果。它们的结果是不确定的、不可预测的或随机的。当你调用一个随机变量时,你在实际看到结果之前不知道它将返回什么值。由于你不再能够追求确定性,你可以追求的是量化得到某个结果的可能性有多大。例如,当你掷骰子时,你可以自信地说你得到 4 的机会是 1/6,假设你掷的骰子没有被篡改。你在实际掷骰子之前永远不知道你会得到什么结果。如果知道的话,赌场就会破产,金融部门就会取消其整个预测分析和风险管理部门。就像确定性函数一样,随机变量可以返回离散集合的结果(离散随机变量)或连续集合的结果(连续随机变量)。随机变量和函数之间的关键区别在于结果的随机性*vs.*确定性。

  • 在随机变量之后,我们为连续随机变量定义概率密度函数,为离散随机变量定义概率质量函数。我们都称之为分布,以增加我们的困惑。通常,一个分布代表离散还是连续随机变量是从上下文中理解的。使用这个术语,我们有时会说一个随机变量,无论是连续还是离散的,是从一个概率分布中抽样,多个随机变量是从一个联合概率分布中抽样。在实践中,我们很少知道我们数据中涉及的所有随机变量的完整联合概率分布。当我们知道,或者我们能够学习它时,这是一件强大的事情。

  • 边际概率分布就像坐落在联合概率分布的边缘上(如果我们用包含所涉变量所有组合状态的概率的表来表示联合概率分布,例如此维基百科页面上的第一个表)。在这种情况下,你很幸运能够访问多个随机变量的完整联合概率分布,并且你有兴趣找出其中一个或几个的概率分布。你可以使用概率的求和规则轻松地找到这些边际概率分布,例如:

p ( x ) = yallstatesofy p ( x , y )

  • 均匀分布正态分布是最受欢迎的连续分布,因此我们从它们开始。正态分布和概率论中的基本中心极限定理密切相关。在我们的数据中涉及的许多其他有用分布代表不同的随机变量,但我们不需要立即使用它们,所以我们推迟到需要使用它们时再讨论。

  • 一旦我们开始处理多个随机变量(例如我们的性别、身高、体重和健康指数数据),这几乎总是情况,我们引入条件概率贝叶斯定理或定理和条件概率的乘积或链规则

  • 还有独立和条件独立的随机变量的概念(知道一个变量的值不会改变另一个变量的概率)。

  • 条件概率和联合分布都涉及多个随机变量,因此它们之间有某种联系是有意义的:切割联合概率分布的图表(当我们固定一个变量的值时),我们得到一个条件概率分布(见图 _slice_joint)。

非常重要的一点:贝叶斯定理 vs. 联合概率分布

如果我们恰好可以访问我们设置中关心的所有多个随机变量的完整联合概率分布,那么我们就不需要贝叶斯定理。换句话说,贝叶斯定理帮助我们计算所需的条件概率当我们无法访问所涉随机变量的完整联合概率分布时。

  • 从逻辑和数学的角度来看,我们可以定义条件概率,然后顺利进行我们的计算和生活。然而,从业者根据他们是在对已观察到的数据进行条件概率还是对他们仍需要估计的权重(也称为参数)进行条件概率,给不同的条件概率赋予不同的名称。这里的词汇包括:先验分布(在观察任何数据之前,模型权重的一般概率分布),后验分布(给定观察数据的权重的概率分布),以及似然函数(编码给定特定权重分布的情况下观察数据点的概率)。所有这些都可以通过贝叶斯定理以及联合分布来联系起来。

注:我们说似然函数不是似然分布。

我们将似然性称为函数,而不是分布,因为概率分布必须加起来为一(或者如果我们处理连续随机变量,则积分为一),但似然函数不一定加起来为一(或者在连续随机变量的情况下积分为一)。

  • 我们可以混合概率分布并产生分布混合物高斯混合非常有名。上面包含男性和女性身高测量值的身高数据就是高斯混合的一个很好的例子。

  • 我们可以将从简单分布中抽样的随机变量相加或相乘,以产生具有更复杂分布的新随机变量,代表更复杂的随机事件。通常在这里调查的自然问题是:随机变量的和或积的分布是什么?

  • 最后,我们使用有向和无向图表示来有效地分解联合概率分布。这使得我们的计算生活变得更加便宜和可处理。

  • 对于概率、统计和数据科学来说,有四个关键的量:期望均值,用于量化平均值,以及方差标准差,用于量化围绕平均值的扩散,因此编码不确定性。我们的目标是控制方差,以减少不确定性。方差越大,使用平均值进行预测时可能犯的错误就越多。因此,当你探索这个领域时,你经常会注意到数学陈述、不等式和定理主要涉及对涉及随机性的任何量的期望和方差的一些控制。

  • 当我们有一个随机变量及其相应的概率分布时,我们计算期望(预期平均结果)、方差(与预期平均值的平方距离的期望)和标准差(与平均值的期望距离)。对于已经抽样或观察到的数据,例如上面的身高和体重数据,我们计算样本均值(平均值)、方差(与均值的平方距离的平均值)和标准差(与均值的平均距离,因此这测量了均值周围的扩散)。因此,如果我们关心的数据尚未被抽样或观察到,我们使用期望的语言进行推测,但如果我们已经有了观察或测量的样本,我们计算其统计量。自然地,我们对我们的推测与我们计算出的观察数据的统计量有多大偏差感兴趣,以及在极限(但理想化)情况下,我们实际上可以测量整个人口的数据。大数定律为我们解答了这个问题,并告诉我们,在这种极限情况下(样本量趋于无穷大时),我们的期望与样本均值相匹配。

  • 当我们有两个或更多的随机变量时,我们计算协方差相关性协方差矩阵。这时,线性代数领域的向量、矩阵和矩阵分解(如特征值和奇异值分解)的语言与概率和统计领域结合在一起。每个随机变量的方差都位于协方差矩阵的对角线上,每对可能的协方差都位于对角线之外。协方差矩阵是对称的。当你对其进行对角化时,使用标准线性代数技术,你会去相关涉及的随机变量。

  • 与此同时,我们暂停一下,确保我们知道独立性和零协方差之间的区别。协方差和相关性都是关于捕捉两个随机变量之间的线性关系。相关性适用于标准化的随机变量,这样我们即使随机变量或数据测量具有非常不同的尺度,仍然可以检测到线性关系。当你对数量进行标准化时,它的尺度就不再重要了。无论它是以百万为单位还是以 0.001 为单位测量都无关紧要。协方差适用于未标准化的随机变量。生活并不都是线性的。独立性比零协方差更强。

  • 马尔可夫过程对于人工智能的强化学习范式非常重要。它们的特征是系统的所有可能状态,代理可以执行的所有可能动作的集合(向左移动、向右移动,),包含所有状态之间转移概率的矩阵,或者代理在采取某个动作后将转移到哪个状态的概率分布,以及一个奖励函数,我们希望最大化。人工智能中的两个流行例子包括棋盘游戏和智能恒温器,如 NEST。我们将在强化学习章节中介绍这些内容。

注:标准化、缩放和/或标准化随机变量或数据集

这是许多情况下词汇冲突的一个例子。在各种上下文中,标准化、缩放和标准化通常是同义词。目标总是相同的。从数据或随机变量的所有可能结果中减去一个数字(偏移),然后除以一个常数(比例)。如果你从数据样本的均值(或随机变量的期望)中减去并除以它们的标准差,那么你会得到新的标准化归一化数据值(或新的标准化或归一化的随机变量),它们的均值等于零(或期望值等于零),标准差等于一。如果你减去最小值并除以范围(最大值减去最小值),那么你会得到新的数据值或新的随机变量,其结果都在零和一之间。有时我们谈论标准化数字向量。在这种情况下,我们的意思是我们将向量中的每个数字除以向量本身的长度,这样我们就得到一个长度为一的新向量。因此,无论我们说我们正在标准化、缩放还是标准化一组数字,目标都是尝试控制这些数字的值,并将它们居中在零周围,并/或限制它们的扩散小于或等于一,同时保留它们固有的变异性。

数学家喜欢用抛硬币、掷骰子、从瓮中取球、从牌组中抽牌、火车到站、顾客打电话、顾客点击广告或网站链接、疾病及其症状、刑事审判和证据,以及直到某事发生的时间等概率概念。不要感到惊讶,这些例子随处可见,因为它们很好地概括了许多其他现实生活情况。

除了上述概率理论的映射,我们还将从统计力学(例如分区函数)和信息论(例如信号vs.噪声、熵和交叉熵函数)中借用很少的术语和函数。我们将在后面的章节中遇到它们时进行解释。

连续分布*vs.离散分布(密度vs.*质量)

当我们处理连续分布时,重要的是使用诸如观察或抽样接近围绕某个值的数据点的术语,而不是观察或抽样确切的值。实际上,在这种情况下观察到确切值的概率为零。

当我们的数字处于连续状态时,一个值和下一个值之间没有离散的分隔。实数具有无限的精度。例如,如果我测量一个男性的身高,得到 6 英尺,我就不知道我的测量是精确的 6 英尺,还是 6.00000000785 英尺,或者是 5.9999111134255 英尺。最好将我的观察设置在 6 英尺左右的一个区间内,例如 5.95 < height < 6.05,然后量化在 5.95 英尺和 6.05 英尺之间观察到的概率。

对于离散随机变量,我们不必担心这种情况,因为我们可以轻松地将可能的值彼此分开。例如,当我们掷骰子时,我们的可能值是 1、2、3、4、5 或 6。因此,我们可以自信地断言掷出确切的 5 的概率为 1/6。此外,离散随机变量可以具有非数值结果,例如,当我们抛硬币时,我们的可能值是正面或反面。连续随机变量只能具有数值结果。

由于上述推理,当我们有一个连续的随机变量时,我们定义它的概率密度函数,而不是其概率质量函数,就像离散随机变量的情况一样。密度指定了在一定长度、面积或空间体积内存在多少物质(取决于我们所处的维度)。为了找到指定区域内的物质质量,我们将密度与所考虑区域的长度、面积或体积相乘。如果我们给定了每个无限小区域的密度,那么我们必须对整个区域进行积分,以便找到该区域内的质量,因为积分类似于对无限多个无限小区域进行求和。

我们将在概率章节中详细阐述这些想法,并在数学上对其进行形式化。目前,我们强调以下几点:

  • 如果我们只有一个连续的随机变量,比如某一人口中男性的身高,那么我们使用一维概率密度函数来表示其概率分布:f ( x 1 )。为了找到身高在 5.95 < height < 6.05 之间的概率,我们对区间(5.95,6.05)上的概率密度函数f ( x 1 )进行积分,我们写成:

P ( 5 . 95 < h e i g h t < 6 . 05 ) = 5.95 6.05 f ( x 1 ) d x 1 .

  • 如果我们有两个连续随机变量,比如某一人群中男性的身高和体重,或者一个人的真实身高和测量身高(通常包括随机噪声),那么我们使用一个二维概率密度函数来表示它们的联合概率分布f ( x 1 , x 2 )。因此,为了找到身高在 5.95 < height < 6.05 体重在 160 < weight < 175 之间的联合概率,我们对联合概率密度函数f ( x 1 , x 2 )进行双重积分,假设我们知道f ( x 1 , x 2 )的公式,对区间(5.95, 6.05)和(160,175)进行积分,并写成:

P ( 5 . 95 < h e i g h t < 6 . 05 , 160 < w e i g h t < 175 ) = 160 175 5.95 6.05 f ( x 1 , x 2 ) d x 1 d x 2 .

  • 如果我们有两个以上的连续随机变量,那么我们使用更高维的概率密度函数来表示它们的联合分布。例如,如果我们有某一人群中男性的身高、体重和血压,那么我们使用一个三维联合概率分布函数:f ( x 1 , x 2 , x 3 )。类似于上述两个项目的推理,为了找到第一个随机变量在a < x 1 < b之间的联合概率,第二个随机变量在c < x 2 < d之间,第三个随机变量在e < x 3 < f之间,我们对区间(a,b)、(c,d)和(e,f)上的联合概率密度函数进行三重积分,并写成:

P ( a < x 1 < b , c < x 2 < d , e < x 3 < f ) = e f c d a b f ( x 1 , x 2 , x 3 ) d x 1 d x 2 d x 3 .

  • 我们定义了连续随机变量的概率密度函数后,我们并没有消除所有的担忧(即数学上的加法)。再次,罪魁祸首是实数的无限精度。如果我们允许所有集合都有概率,我们会遇到悖论,因为我们可以构造不相交的集合(如分形形状的集合或通过变换有理数集合而构成的集合),它们的概率总和超过了 1!必须承认,这些集合是病态的,必须由有充裕时间的人仔细构造,但是,它们存在并产生悖论。数学中的测度论提供了一个数学框架,我们可以在其中使用概率密度函数而不会遇到悖论。它定义了零测度集合(这些集合在我们工作的空间中不占体积),然后给我们提供了许多定理,允许我们在几乎所有地方进行计算,即除了零测度集合。这对我们的应用来说已经足够了。

联合概率密度函数的威力

拥有许多随机变量的联合概率分布是一件强大但罕见的事情。原因是联合概率分布中包含了每个单独随机变量的概率分布(边际分布),以及我们在这些随机变量之间遇到的所有可能的共同发生(和条件概率)。这类似于从上方看到整个城镇,而不是在城镇内部观察两条或多条小巷之间的交叉口。

如果随机变量是独立的,那么联合分布就是它们各自的分布的乘积。然而,当随机变量不独立时,例如一个人的身高和体重,或者一个人的观测身高(包括测量误差)和一个人的真实身高(不包括误差),访问联合分布就会变得更加困难和昂贵。在依赖随机变量的情况下,联合分布是不可分的,因此我们不能仅仅单独存储它的每个部分。我们需要存储两个或更多变量之间每个共同发生的每个值。随着依赖随机变量数量的增加,存储需求(以及计算或搜索空间)呈指数增长,这是臭名昭著的维度诅咒的一种体现。

当我们切割联合概率密度函数,比如f ( x 1 , x 2 ),意味着当我们固定一个随机变量(或在更高维度中固定更多)为一个确切的值时,我们会得到与后验概率分布(给定观察结果的模型参数的概率分布)成比例的分布,这通常是我们感兴趣的。例如,切割f ( x 1 , x 2 )x 1 = a时,我们得到f ( a , x 2 ),它恰好与概率分布f ( x 2 | x 1 = a )成比例(见图 2-7)。

300

图 2-7。切割联合概率分布。

同样,这是在我们知道联合概率分布的奢侈情况下,否则,我们使用贝叶斯定理来获得相同的后验概率分布(使用先验分布和似然函数)。

在一些人工智能应用中,人工智能系统通过使用概率乘法规则将联合概率分布分解为条件概率的乘积来学习联合概率分布。一旦它学习了联合分布,它就会从中进行抽样,以生成新的有趣的数据。DeepMind 的 WaveNet 在生成原始音频的过程中就是这样做的。

接下来的部分介绍了人工智能应用中最有用的概率分布。两种普遍的连续分布是均匀分布正态分布(也称为高斯分布),因此我们从这里开始。有关复制图表和更多细节,请参阅Jupyter Notebook

数据分布:均匀分布

为了直观地理解均匀分布,让我们举一个非均匀分布的例子,我们在本章前面已经看到过。在我们上面的真实身高体重数据集中,我们不能使用均匀分布来建模身高数据。我们也不能用它来建模体重数据。原因是人类的身高和体重并不是均匀分布的。在一般人群中,遇到身高约 7 英尺的人和遇到身高约 5 英尺 6 英寸的人并不是同样可能的。

均匀分布只模拟均匀分布的数据。如果我们有一个区间( x min , x max ),其中包含我们的数据在x minx max之间的连续值,我们的数据在我们的区间内均匀分布,那么在我们的区间内观察到接近任何特定值的数据点的概率对于该区间内的所有值来说是相同的。也就是说,如果我们的区间是( 0 , 1 ),那么选择接近 0.2 的点和选择接近 0.75 的点是同样可能的。

因此,均匀分布的概率密度函数是常数。对于区间( x min , x max )上的一个随机变量 x,连续均匀分布的概率密度函数的公式如下:

f ( x ; x min , x max ) = 1 x max -x min for x min < x < x max ,

在其他情况下为零。

让我们绘制均匀分布在区间( x min , x max )上的概率密度函数。图 2-8 中的图表是一条直线段,因为均匀分布的数据,无论是真实的还是模拟的,都在考虑的整个区间内均匀分布。区间内没有比其他更有利于出现的数据值。

300

图 2-8。概率密度函数的图表,显示了在区间[0,1]上的均匀分布。

均匀分布在计算机模拟中非常有用,用于生成来自任何其他概率分布的随机数。如果你瞥一眼 Python 使用的随机数生成器,你会看到均匀分布在底层算法中的某个地方被使用。

数据分布:钟形正态(高斯)分布

连续概率分布更适合模拟人类身高数据(当限制为一种性别时)的是钟形正态分布,也称为高斯分布。从正态分布中抽样往往聚集在分布峰值处的平均值周围,称为均值μ,然后随着远离均值而对称减少。分布在减少时扩散到离均值多远由正态分布的第二个参数控制,称为标准差σ。约 68%的数据落在均值的一个标准差范围内,95%的数据落在均值的两个标准差范围内,约 99.7%的数据落在均值的三个标准差范围内。

300

图 2-9。参数为μ = 0σ = 1的钟形正态分布的概率密度函数图。

在从正态分布中抽取数据时,接近均值的值更有可能被选中(或发生或被观察到),而非常小( - )或非常大( )的值更不可能被选中。这种在分布的中心值附近出现的高峰和在分布的外围逐渐减小,使得这个分布具有其著名的钟形。请注意,还有其他钟形连续分布,但正态分布是最常见的。它有一个整洁的数学理由来解释这个当之无愧的名声,这是基于概率论中一个重要的定理,即中心极限定理

中心极限定理表明,许多独立随机变量的平均值(不一定是正态分布)通常是正态分布的。这解释了为什么正态分布在社会和自然界中随处可见。它模拟了婴儿出生体重、学生成绩分布、国家收入分布、血压测量分布等。有特殊的统计测试可以帮助我们确定真实数据集是否可以用正态分布来建模。我们将在概率章节中进一步扩展这些想法。

如果你发现自己处于一个不确定的情况,并且对于你的应用程序不知道使用哪种分布,正态分布通常是一个合理的选择。实际上,在所有具有相同方差的分布选择中,正态分布是具有最大不确定性的选择,因此它实际上将最少的先验知识编码到你的模型中。

一个随机变量 x(单变量)的正态分布的概率密度函数公式为:

g ( x ; μ , σ ) = 1 2πσ 2 e -(x-μ) 2 2σ 2 ,

参数为μ = 0σ = 1的图在图 2-9 中绘制出来。

两个随机变量 x 和 y(双变量)的正态分布的概率密度函数公式为:

数学符号“美元符号 g 左括号 x 逗号 y 分号 μ1 逗号 σ1 逗号 μ2 逗号 σ2 逗号 ρ 右括号 等于 分数 1 除以 开方 左括号 2π 右括号 平方 行列式 2 乘 2 矩阵 1 行 1 列 σ1 平方 2 列 ρσ1σ2 2 行 1 列 ρσ1σ2 2 列 σ2 平方 结束矩阵 开方 结束分数 e 上标负号 左大括号 一半 1 乘 2 矩阵 1 行 1 列 x 减去μ1 2 列 y 减去μ2 结束矩阵 2 乘 2 矩阵 1 行 1 列 σ1 平方 2 列 ρσ1σ2 2 行 1 列 ρσ1σ2 2 列 σ2 平方 结束矩阵 上标负 1 开合式 x 减去μ1 选择 y 减去μ2 结束式 美元符号”

并且它的图在图 2-10 中绘制。

我们可以使用线性代数的语言,用更紧凑的符号表示上述双变量公式。

g ( x , y ; μ , Σ ) = 1 (2π) 2 det(Σ) e - 1 2 (u-μ) T Σ -1 ( u - μ )250

图 2-10。钟形双变量正态分布的概率密度函数图。

在图 2-11 中,我们从双变量正态分布中抽取了 6000 个点。

250

图 2-11。从双变量正态分布中抽取 6000 个点。中心附近的点更有可能被选中,而远离中心的点被选中的可能性较小。这些线大致追踪了正态分布的轮廓线,如果我们只观察样本点而不知道它们是从哪个分布中抽取的。

让我们暂停一下,比较双变量正态分布的概率密度函数公式与单变量正态分布的概率密度函数公式:

  • 当只有一个随机变量时,我们只有一个均值μ和一个标准差σ

  • 当有两个随机变量时,我们有两个均值μ 1 μ 2,两个标准差σ 1 σ 2。乘积σ 2将被协方差矩阵Σ = σ 1 2 ρ σ 1 σ 2 ρ σ 1 σ 2 σ 2 2及其行列式所取代。ρ是两个随机变量之间的相关性,即两个随机变量的标准化版本的协方差。

双变量正态分布的概率密度函数的完全相同的公式推广到任何维度,其中我们有许多随机变量而不仅仅是两个随机变量。例如,如果我们有 100 个随机变量,代表数据集中的 100 个特征,公式中的均值向量将有 100 个条目,并且协方差矩阵的大小将为 100×100,对角线上是每个随机变量的方差,而非对角线上是 4950 对随机变量的协方差。

数据分布:其他重要和常用的分布

在本章中你不理解的几乎所有内容都将在整本书中多次重访,第十一章专门讨论概率。这些概念将在各种有趣的背景中再次出现时得到强化。我们本章的目标是接触概率和统计的词汇,并为 AI 应用中经常出现的重要思想提供一个指导图。我们还希望在不必要的情况下获得对接下来的章节有一个良好的概率直觉,而不必深入研究和延迟我们的进展。

有许多概率分布。每个模型都代表不同类型的现实世界场景。均匀分布和正态分布非常常见,但我们还有其他重要的分布经常出现在 AI 领域。回想一下,我们的目标是模拟我们周围的世界,以便进行良好的设计、预测和/或决策。概率分布帮助我们在我们的模型涉及随机性或我们对结果不确定时进行预测。

当我们研究分布时,令人沮丧的一部分是大多数分布都有奇怪的名称,对于给定分布可能有用的现象提供零直觉。这使我们要么花费额外的精力来记住这些名称,要么在口袋里放一张分布备忘单。我更喜欢备忘单。另一个令人沮丧的部分是,大多数教科书例子都涉及抛硬币、掷骰子或从瓮中取出彩色球。这使我们没有真实生活的例子或动力来理解这个主题,因为我从未见过有人在那里抛硬币并数头或尾,除了《黑暗骑士》(一部 2008 年的非常好的电影,其中小丑(希斯·莱杰)说了一些我最喜欢和深刻的关于随机性和机会的声明,比如这个,“世界是残酷的。在残酷的世界中,唯一的道德是机会。公正的。无偏见的。公平的。”)。我会尽量在这本书中修正这一点,指出尽可能多的真实世界例子,以符合我的页面限制。

以下一些分布在数学上相关,或者自然地从其他分布中得出。我们将在第十章中探讨这些关系。现在,让我们命名一个流行的分布,说明它是离散的(预测我们关心的某种数量)还是连续的(预测存在于连续中的数量,例如某事发生前需要经过的时间:注意,这不是小时数,因为小时数是离散的,而是时间段的长度),说明控制它的参数,以及对我们的 AI 应用有用的定义属性。

  • 二项分布:这是离散的。它表示在重复一次实验时,独立地多次进行时获得一定数量的成功的概率。它的控制参数是 n,我们进行的实验次数,以及p预先定义的成功概率。现实世界的例子包括预测在临床试验中接种疫苗或新药物的患者出现副作用的数量,预测广告点击将导致购买的数量,或者客户在每月信用卡付款上违约的数量。当我们使用需要试验独立性的概率分布对现实世界的例子进行建模时,这意味着即使现实世界的试验并不真正独立,我们也假设独立。指出我们模型的假设是一个良好的礼仪。

  • 泊松分布:这是离散的。它预测在一定时间内会发生的罕见事件的数量。这些事件是独立的或者弱相关的,这意味着事件的一次发生不会影响同一时间段内下一次发生的概率。它们也以已知和恒定的平均速率λ发生。因此,我们知道平均速率,并且想要预测在一定时间段内会发生多少这样的事件。泊松分布的控制参数是预先定义的罕见事件率λ。现实世界的例子包括预测在一个小时内出生的婴儿数量,一个人口中年满 98 岁以上的人数,一定时间段内从放射性系统中释放的α粒子数量,国税局发送的重复账单数量,某一天销售的不太受欢迎产品的数量,本书一页中包含的错别字数量,某一天某台机器生产的次品数量,某个小时进入商店的人数,保险公司需要在一定时间段内承担的车祸数量,以及在特定时间段内发生的地震数量。

  • 几何分布:这是离散的。它预测了在进行独立试验时,在每次成功的已知概率 p 的情况下,我们获得成功之前需要的试验次数。这里的控制参数显然是成功的概率 p。现实世界的例子包括估计一家公司在不经历网络故障的情况下能够运作的周数,一台机器在生产次品之前能够运行的小时数,或者我们需要采访多少人才能遇到反对我们想通过的某项法案的人。同样,对于这些现实世界的例子,如果使用几何分布进行建模,我们可能会假设试验是独立的,而实际上试验可能并不是独立的。

  • 指数分布:这是连续的。如果我们碰巧知道某个事件以恒定速率λ发生,那么指数分布预测了该事件发生的等待时间。它是“无记忆”的,因为属于指数分布的物品的剩余寿命也是指数分布。控制参数是恒定速率λ。现实世界的例子包括等待地震发生的时间,贷款违约的时间,机器零件失效的时间,或者恐怖袭击发生之前的时间。这对于可靠性领域非常有用,可用于计算某个机器零件的可靠性,因此会有“10 年保证”之类的说法。

  • 威布尔分布:这是连续的。它在工程领域被广泛用于预测产品的寿命(10 年保修声明也适用于这里)。在这里,一个产品由许多部分组成,如果其中任何一个部分出现故障,那么产品就停止工作。例如,如果汽车的电池故障,或者变速箱中的保险丝烧断,汽车就无法工作。威布尔分布在考虑了许多部分及其最薄弱环节后,为汽车在停止工作之前的寿命提供了一个很好的近似值(假设我们不对汽车进行维护和重置计时器)。它由三个参数控制:形状、比例和位置参数。指数分布是这个分布的特例,因为指数分布具有恒定的事件发生率,但威布尔分布可以模拟随时间增加或减少的发生率。

  • 对数正态分布:这是连续的。如果我们对该分布中提供的每个值取对数,那么我们得到的是正态分布的数据。这意味着起初你的数据可能看起来不是正态分布的,但尝试使用对数函数进行转换,然后你会看到正态分布的数据。当遇到偏斜数据、低均值、大方差和仅假设正值时,这是一个很好的分布。就像当你对一个随机变量的许多独立样本取平均值时会出现正态分布(使用中心极限定理),当你取许多正样本值的乘积时,就会出现对数正态分布。从数学上讲,这是由于对数函数的一个很棒的性质:乘积的对数是对数的和。这个分布由三个参数控制:形状、比例和位置参数。现实世界的例子包括石油储备中的气体体积,以及一天结束时证券价格与前一天结束时价格的比率。

  • 卡方分布:这是连续的。这是一种用于正态分布独立随机变量平方和的分布。你可能会想为什么我们要关心平方正态分布的随机变量,然后把它们加起来。答案是这通常是我们计算随机变量或数据样本方差的方法,而我们的主要目标之一是控制方差,以降低我们的不确定性。与这个分布相关的有三种显著性检验:拟合优度检验,衡量我们的期望与观察结果的偏差程度,以及数据特征的独立性和均匀性检验。

  • 帕累托分布:这是连续的。它对许多现实世界的应用非常有用,比如,完成分配给超级计算机的工作所需的时间(考虑机器学习计算)、特定人群的家庭收入水平、社交网络中的朋友数量以及互联网流量的文件大小。这个分布只由一个参数α控制,它是重尾的(其尾部比指数分布更重)。

在继续之前,让我们再加入一些其他分布,而不要为任何细节烦恼。这些都或多或少与前述分布相关:学生 t-分布(连续,类似于正态分布,但在样本量较小且总体方差未知时使用),贝塔分布(连续,在给定区间内产生随机值),柯西分布(连续,病态,因为它的均值和方差都未定义,可以使用随机选择的角的正切获得),伽玛分布(连续,与等待时间有关,直到发生 n 个独立事件,而不仅仅是一个事件,如指数分布),负二项分布(离散,与获得一定数量的成功所需的独立试验次数有关),超几何分布(离散,类似于二项分布,但试验不是独立的),以及负超几何分布(离散,捕捉在获得一定数量的成功之前需要的依赖试验次数)。

分布一词的各种用法

您可能已经注意到,“分布”一词根据上下文指的是许多不同(但相关)的概念。同一个词的不一致使用可能会导致混淆,并且可能会立即使一些试图进入该领域的人望而却步。

让我们列出“分布”一词所指的不同概念,以便我们可以轻松地在特定上下文中识别其预期的含义:

  • 如果您有真实数据,比如本章中的身高体重数据,并绘制数据集的一个特征的直方图,比如身高,那么您将得到身高数据的经验分布。您通常不知道整个人口身高的潜在概率密度函数,也称为分布,因为您拥有的真实数据只是该人口的样本,因此您尝试使用概率论给出的概率分布来估计它或对其进行建模。对于身高和体重特征,按性别分开时,高斯分布是合适的。

  • 如果您有一个离散随机变量,“分布”一词可能指的是其概率质量函数或其累积分布函数(指定随机变量小于或等于某个值的概率 f ( x ) = p r o b ( X x ) )。

  • 如果您有一个连续随机变量,“分布”一词可能指的是其概率密度函数或其累积分布函数,其积分给出了随机变量小于或等于某个值的概率。

  • 如果您有多个随机变量(离散、连续或两者混合),那么“分布”一词指的是它们的联合概率分布。

一个共同的目标是建立一个理想化的数学函数,比如一个具有适当分布的随机变量,与真实观察到的数据或现象之间的适当对应关系,具有观察到的经验分布。在处理真实数据时,数据集的每个特征都可以使用随机变量进行建模。因此,在某种程度上,数学随机变量及其相应的分布是我们测量或观察到的特征的理想化版本。

最后,分布在人工智能应用中随处可见。在接下来的章节中,我们将多次遇到它们,例如神经网络每一层的权重分布,以及各种机器学习模型产生的噪音和误差的分布。

A/B 测试

在离开本章之前,我们会稍微偏离一下,进入* A/B 测试的世界,也称为分割测试*,或随机单盲双盲试验。我们会偏离一下,因为这是数据科学家重要的主题,而且这个想法足够简单,可以放在一个小节里。

无数家公司依靠 A/B 测试的数据来增加参与度、收入和客户满意度。微软、亚马逊、LinkedIn、谷歌等每年都进行数千次 A/B 测试。

A/B 测试很简单:将人群分成两组。将要测试的东西的一个版本(新的网页设计、不同的字体大小、新药、新的政治广告)推出给一个组,即测试组,而将另一组作为对照组。比较两组之间的数据。

如果受试者不知道他们属于哪个组(有些人甚至不知道他们根本在测试中),但实验者知道,那么这个测试就是单盲的。如果实验者和受试者都不知道他们正在与哪个组互动,那么这个测试就是双盲的。

总结和展望

在本章中,我们强调了数据对于人工智能的重要性。我们还澄清了通常会引起混淆的概念之间的区别:结构化和非结构化数据,线性和非线性模型,真实和模拟数据,确定性函数和随机变量,离散和连续分布,后验概率和似然函数。我们还提供了概率和统计学的地图,而没有深入任何细节,并介绍了最流行的概率分布。

如果你发现自己在某个新的概率概念中迷失了方向,你可能会想要查阅本章提供的地图,看看这个概念如何融入概率论的大局,最重要的是,它如何与人工智能相关。如果不知道某个数学概念如何与人工智能相关,你就只是拥有一个你知道如何打开的工具,但你不知道它用来做什么。

我们还没有提到随机矩阵高维概率。在这些领域,概率论不断跟踪分布、期望和任何相关随机量的方差,与其对特征值和各种矩阵分解的超关注相结合。这些领域对于涉及人工智能应用中的极高维数据非常重要。我们在第十一章中讨论这些内容。

在下一章中,我们将学习如何将我们的数据拟合到一个函数中,然后使用这个函数进行预测和/或决策。从数学上讲,我们找到了表征我们数据特征之间各种相互作用强度的权重(ω)。当我们表征了涉及的相互作用类型(拟合函数的公式,称为学习训练函数)和这些相互作用的强度(ω的值)时,我们就可以进行预测。在人工智能中,这个用适当的权重值表征拟合函数的概念可以成功地用于计算机视觉、自然语言处理、预测分析(比如房价、维护时间等),以及许多其他应用。

第三章:将函数拟合到数据

今天适合。明天呢?

在本章中,我们介绍了许多人工智能应用的核心数学思想,包括神经网络的数学引擎。我们的目标是内化人工智能问题的机器学习部分的以下结构:

  • 根据具体用例识别问题:分类图像,分类文档,预测房价,检测欺诈或异常,推荐下一个产品,预测犯罪分子再次犯罪的可能性,根据外部图像预测建筑的内部结构,将语音转换为文本,生成音频,生成图像,生成视频,等等

  • 获取适当的数据,以便训练我们的模型做正确的事情。我们说我们的模型从数据中学习。确保这些数据是干净的、完整的,并且如果必要的话,根据我们正在实施的具体模型进行转换(归一化、标准化、一些特征聚合,等等)。这一步通常比实施和训练机器学习模型耗费更多时间。

  • 创建一个假设函数。我们可以互换使用假设函数、学习函数预测函数训练函数模型这些术语。我们的主要假设是,这个输入/输出的数学函数解释了观察到的数据,并且可以在以后用于对新数据进行预测。我们给我们的模型特征,比如一个人的日常习惯,它返回一个预测,比如这个人偿还贷款的可能性。在本章中,我们将给我们的模型鱼的长度测量,并且它将返回它的重量。

  • 我们将遇到许多模型(包括神经网络),其中我们的训练函数具有称为权重的未知参数。目标是使用数据找到这些权重的数值。在找到这些权重值之后,我们可以使用训练函数进行预测,将新数据点的特征插入到训练函数的公式中。

  • 为了找到未知权重的值,我们创建另一个函数,称为误差函数成本函数目标函数损失函数(人工智能领域的一切都有三个或更多的名称)。这个函数必须衡量地面真相和我们的预测之间的某种距离。自然地,我们希望我们的预测尽可能接近地面真相,因此我们寻找最小化我们损失函数的权重值。从数学上讲,我们解决了一个最小化问题。数学优化领域对人工智能至关重要。

  • 在整个过程中,我们是工程师,所以我们决定训练函数、损失函数、优化方法和计算机实现的数学公式。不同的工程师决定不同的流程,产生不同的性能结果,这是可以接受的。最终的评判是部署模型的性能,与普遍看法相反,数学模型是灵活的,可以在需要时进行调整和修改。部署后监控性能至关重要。

  • 由于我们的目标是找到最小化预测和实际值之间误差的权重数值,我们需要找到一种高效的数学方法来搜索这些最小化者:那些产生最小误差的特殊权重数值。梯度下降方法在这里起着关键作用。这种强大而简单的方法涉及计算我们误差函数的一个导数。这就是我们花了一半的微积分课程计算导数的原因之一(以及梯度:这是高维度中的一个导数)。还有其他需要计算两个导数的方法。我们将遇到它们,并评论使用高阶方法的利弊。

  • 当数据集非常庞大,而我们的模型恰好是一个分层神经网络时,我们需要一种高效的方法来计算这个导数。反向传播算法就是在这一点上发挥作用。我们将在下一章中讨论梯度下降和反向传播。

  • 如果我们的学习函数对给定数据拟合得太好,那么它在新数据上表现不佳。原因是对数据拟合得太好的函数意味着它既捕捉到了数据中的噪音,也捕捉到了信号(例如,图 3-1 左侧的函数)。我们不希望捕捉到噪音。这就是正则化发挥作用的地方。有多种数学方法可以使函数正则化,这意味着使其更加平滑和不那么振荡和不规则。一般来说,跟随数据中的噪音的函数振荡太多。我们希望更规则的函数。我们将在下一章中介绍正则化技术。

280

图 3-1。左:拟合函数完美地拟合了数据,但它不是一个很好的预测函数,因为它拟合了数据中的噪音而不是主要信号。右:一个更规则的函数拟合了相同的数据集。使用这个函数将比左侧子图中的函数给出更好的预测,即使左侧子图中的函数更好地匹配了数据点。

在接下来的章节中,我们将用真实但简单的数据集探索 AI 问题的上述结构。我们将在接下来的章节中看到相同的概念如何推广到更复杂的任务。

传统且非常有用的机器学习模型

本章中使用的所有数据都带有地面真相标签,我们模型的目标是预测新的(未见过的)和未标记的数据的标签。这是监督学习。

在接下来的几节中,我们将使用以下流行的机器学习模型将训练函数拟合到我们的标记数据中。虽然您可能会听到关于 AI 最新和最伟大发展的许多消息,但在典型的商业环境中,您可能最好从这些更传统的模型开始:

  1. 线性回归:预测数值。

  2. 逻辑回归:分类到两个类别(二元分类)。

  3. Softmax 回归:分类到多个类别。

  4. 支持向量机:分类到两个类别,或回归(预测数值)。

  5. 决策树:分类到任意数量的类别,或回归(预测数值)。

  6. 随机森林:分类到任意数量的类别,或回归(预测数值)。

  7. 模型集成:通过平均预测值、投票最受欢迎的类别或其他捆绑机制来捆绑许多模型的结果。

我们在相同的数据集上尝试多个模型以进行性能比较。在现实世界中,很少有任何模型在没有与许多其他模型进行比较的情况下部署。这是计算密集型 AI 行业的特性,这也是为什么我们需要并行计算的原因,它使我们能够同时训练多个模型(除了那些构建和改进其他模型结果的模型,比如堆叠的情况,我们不能使用并行计算)。

在我们深入研究任何机器学习模型之前,非常重要的一点是,一再有报道称,数据科学家和/或人工智能研究人员只有大约百分之五的时间用于训练机器学习模型。大部分时间都用于获取数据、清理数据、组织数据、为数据创建适当的管道,等等将数据输入机器学习模型之前。因此,机器学习只是生产过程中的一步,一旦数据准备好训练模型就变得很容易。我们将发现这些机器学习模型是如何工作的:我们需要的大部分数学知识都存在于这些模型中。人工智能研究人员一直在努力改进机器学习模型,并将它们自动适应到生产管道中。因此,对我们来说,最终学习整个流程,从原始数据(包括其存储、硬件、查询协议,等等)到部署和监控,是非常重要的。学习机器学习只是更大更有趣故事的一部分。

我们必须从回归开始,因为回归的思想对于接下来的大多数人工智能模型和应用都是如此基础。只有对于线性回归,我们才会使用解析方法找到最小化权重,直接给出所需权重的显式公式,以训练数据集及其目标标签为参数。正是线性回归模型的简单性使得这种显式解析解成为可能。大多数其他模型没有这样的显式解,我们必须使用数值方法找到它们的最小值,其中梯度下降方法非常受欢迎。

在回归和许多其他即将出现的模型中,包括接下来几章的神经网络,要注意建模过程中的以下进展:

  1. 训练函数

  2. 损失函数

  3. 优化

数值解*vs.*解析解

了解数学问题的数值解和解析解之间的区别非常重要。数学问题可以是任何东西,比如:

  • 找到某个函数的最小值。

  • 找到从目的地A到目的地B的最佳方式,预算受限。

  • 找到设计和查询数据仓库的最佳方式。

  • 寻找数学方程的解(其中左手边有数学内容等于右手边有数学内容)。这些方程可以是代数方程、常微分方程、偏微分方程、积分微分方程、方程组,或者任何类型的数学方程。它们的解可以是静态的,也可以随时间演变。它们可以模拟物理、生物、社会经济或自然世界的任何事物。

以下是词汇表:

  • 数值:与数字有关。

  • 解析:与分析有关。

一般来说,数值解比分析解容易获得得多,也更容易获得,只要我们有足够的计算能力来模拟和计算这些解。我们通常只需要离散化一些连续空间和/或函数,尽管有时需要非常巧妙的方法,并在这些离散量上评估函数。数值解的唯一问题是它们只是近似解。除非它们有估计值表明它们与真实分析解的差距有多大,以及它们收敛到这些真实解的速度有多快,而这又需要数学背景和分析,数值解并不是精确的。然而,它们确实提供了关于真实解的非常有用的见解。在许多情况下,数值解是唯一可用的解,许多科学和工程领域如果不依赖于复杂问题的数值解,就不会有任何进展。如果这些领域等待分析解和证明发生,或者换句话说,等待数学理论“赶上”,它们的进展将会非常缓慢。

另一方面,分析解是精确的、稳健的,并且有整个数学理论支持它们。它们伴随着定理和证明。当分析解可用时,它们非常强大。然而,它们并不容易获取,有时甚至是不可能的,并且确实需要在微积分、数学分析、代数、微分方程理论等领域具有深厚的知识和专业知识。然而,分析方法对于描述解的重要性质(即使明确的解不可用)、指导数值技术,并提供基本事实以比较近似数值方法(在这些分析解可用的幸运情况下)是极其有价值的。

一些研究人员纯粹是分析和理论的,另一些则是纯粹数值和计算的,而最好的存在位置是在接近交集的地方,我们对数学问题的分析和数值方面有一个良好的理解。

回归:预测一个数值

Kaggle 网站上快速搜索回归数据集会返回许多优秀的数据集和相关笔记本。我随机选择了一个简单的Fish Market数据集,我们将用它来解释我们即将介绍的数学。我们的目标是构建一个模型,根据鱼的五种不同长度测量或特征来预测鱼的重量,这些特征在数据集中标记为:Length1、Length2、Length3、Height 和 Width(见图 3-2)。为简单起见,我们选择不将分类特征 Species 纳入此模型,尽管我们可以(这样会给我们更好的预测,因为鱼的类型是其重量的良好预测因子)。如果我们选择包括 Species 特征,那么我们将不得不将其值转换为数值值,使用one hot coding,这意味着确切地说:根据其类别(类型)为每条鱼分配由一和零组成的代码。我们的 Species 特征有七个类别:鲈鱼、鲷鱼、鲫鱼、梭子鱼、胖鱼、Parkki 和白鱼。因此,如果我们的鱼是梭子鱼,那么我们将把它的种类编码为(0,0,0,1,0,0,0),如果它是鲷鱼,我们将把它的种类编码为(0,1,0,0,0,0,0)。当然,这会给我们的特征空间增加七个维度,并增加七个权重来训练。

280

图 3-2. 从 Kaggle 的Fish Market下载的鱼数据集的前五行。重量列是目标特征,我们的目标是构建一个模型,根据鱼的长度测量来预测新鱼的重量。

让我们节省墨水空间,并将我们的五个特征重新标记为:x 1 , x 2 , x 3 , x 4 , 和 x 5 , 然后将鱼的重量写成这五个特征的函数 y = f ( x 1 , x 2 , x 3 , x 4 , x 5 ) . 这样,一旦我们确定了这个函数的一个可接受的公式,我们只需要输入某条鱼的特征值,我们的函数就会输出该鱼的预测重量。

本节为即将到来的一切构建了基础,因此首先看看它是如何组织的是很重要的:

训练函数

  • 参数模型 vs. 非参数模型

损失函数

  • 预测值 vs. 真实值

  • 绝对值距离 vs. 平方距离

  • 具有奇点(尖点)的函数

  • 对于线性回归,损失函数是均方误差

  • 本书中的向量始终是列向量

  • 训练、验证和测试子集

  • 当训练数据具有高度相关的特征时

优化

  • 凸景观 vs. 非凸景观

  • 我们如何找到函数的最小值点?

  • 微积分简介

  • 一维优化示例

  • 我们一直在使用的线性代数表达式的导数

  • 最小化均方误差损失函数

  • 警告:将大矩阵相乘是非常昂贵的。应该将矩阵乘以向量。

  • 警告:我们永远不希望训练数据拟合得太好

训练函数

对数据的快速探索,例如绘制重量与各种长度特征的关系,使我们可以假设一个线性模型(即使在这种情况下非线性模型可能更好)。也就是说,我们假设重量线性地依赖于长度特征(参见图 3-3)。

280

图 3-3. 鱼市场数值特征的散点图。有关更多详细信息,请查看附加的 Jupyter 笔记本,或者与此数据集相关的一些公开的Kaggle 笔记本

这意味着鱼的重量 y 可以使用其五个不同长度测量的线性组合来计算,再加上一个偏置项 ω 0 ,得到以下训练函数

y = ω 0 + ω 1 x 1 + ω 2 x 2 + ω 3 x 3 + ω 4 x 4 + ω 5 x 5

在我们在建模过程中做出的主要决定是使用线性训练函数 f(x1, x2, x3, x4, x5),我们所要做的就是找到参数ω0,ω1,ω2,ω3,ω4 和ω5 的适当值。我们将从数据中学习出ω的最佳值。利用数据找到适当的ω的过程称为训练模型。训练好的模型是指ω的值已经确定的模型。

一般来说,无论是线性还是非线性的训练函数,包括表示神经网络的函数,都有我们需要从给定数据中学习的未知参数ω。对于线性模型,每个参数在预测过程中给每个特征赋予一定的权重。因此,如果ω2 的值大于ω5 的值,那么第二个特征在我们的预测中起到比第五个特征更重要的作用,假设第二个和第五个特征具有可比较的规模。这是在训练模型之前对数据进行缩放或归一化的好处之一。另一方面,如果与第三个特征相关联的ω3 值消失,即变为零或可以忽略,那么第三个特征可以从数据集中省略,因为它在我们的预测中没有作用。因此,从数据中学习我们的ω允许我们在数学上计算每个特征对我们的预测的贡献(或者在数据准备阶段合并一些特征时,特征组合的重要性)。换句话说,模型学习数据特征如何相互作用以及这些相互作用的强度。结论是,通过训练学习函数,我们可以量化特征如何相互作用以产生已观察到的和尚未观察到的结果。

注意:参数模型与非参数模型

一个具有预先内置参数(我们称之为权重)的模型,比如我们当前的线性回归模型中的ω:

y = ω 0 + ω 1 x 1 + ω 2 x 2 + ω 3 x 3 + ω 4 x 4 + ω 5 x 5

(以及神经网络的ω)被称为参数模型。这意味着我们在实际训练之前固定训练函数的公式,所有训练所做的就是解决公式中涉及的参数。提前固定公式类似于指定训练函数所属的,找到参数值指定了最能解释数据的确切成员。

非参数模型,例如我们将在本章后面讨论的决策树和随机森林,不会提前指定训练函数及其参数的公式。因此,当我们训练非参数模型时,我们不知道训练模型最终会有多少参数。模型会根据数据自适应并确定所需的参数数量。在这里要小心,过度拟合的警钟正在响!请记住,我们不希望我们的模型过度适应数据,因为它们可能无法很好地推广到未见过的数据。这些模型通常配有帮助它们避免过拟合的技术。

参数化和非参数化模型都有其他参数称为超参数,在训练过程中也需要进行调整。然而,这些参数并没有内置到训练函数的公式中(非参数化模型的公式中也没有)。我们将在本书中遇到许多超参数。

损失函数

我们已经确信,下一个逻辑步骤是找到适合训练函数(我们的线性参数模型)中出现的ω的合适值,使用我们拥有的数据。为了做到这一点,我们需要优化适当的损失函数

预测值与真实值

假设我们为我们每个未知的ω 0ω 1ω 2ω 3ω 4ω 5分配一些随机数值,例如ω 0 = - 3ω 1 = 4ω 2 = 0 . 2ω 3 = 0 . 03ω 4 = 0 . 4,和ω 5 = 0 . 5。然后线性训练函数的公式y = ω 0 + ω 1 x 1 + ω 2 x 2 + ω 3 x 3 + ω 4 x 4 + ω 5 x 5变为:

y = - 3 + 4 x 1 + 0 . 2 x 2 + 0 . 03 x 3 + 0 . 4 x 4 + 0 . 5 x 5

并准备好进行预测:为i th条鱼的长度特征插入数值,然后获得这条鱼的重量预测值。例如,我们数据集中的第一条鱼是鲱鱼,长度测量值为x 1 1 = 23 . 2x 2 1 = 25 . 4x 3 1 = 30x 4 1 = 11 . 52,以及x 5 1 = 4 . 02。将这些值代入训练函数,我们得到了这条鱼的重量预测值:

y predict 1 = ω 0 + ω 1 x 1 1 + ω 2 x 2 1 + ω 3 x 3 1 + ω 4 x 4 1 + ω 5 x 5 1 = - 3 + 4 ( 23 . 2 ) + 0 . 2 ( 25 . 4 ) + 0 . 03 ( 30 ) + 0 . 4 ( 11 . 52 ) + 0 . 5 ( 4 . 02 ) = 102 . 398 grams.

通常,对于第 i 条鱼,我们有:

y predict i = ω 0 + ω 1 x 1 i + ω 2 x 2 i + ω 3 x 3 i + ω 4 x 4 i + ω 5 x 5 i

然而,考虑的鱼有一个真实重量,y true i,如果它属于标记数据集,则为其标签。对于我们数据集中的第一条鱼,真实重量是y true 1 = 242 。我们随机选择的线性模型预测了 102.398 。这当然相差甚远,因为我们根本没有校准ω值。无论如何,我们可以测量我们的模型预测的重量与真实重量之间的误差,然后找到更好的方法来选择ω

绝对值距离vs平方距离

数学的一大优点是它有多种方法来衡量事物之间的差距,使用不同的距离度量。例如,我们可以天真地将两个量之间的距离测量为如果它们不同则为 1,如果它们相同则为 0,编码为:不同-1,相似-0。当然,使用这样一个天真的度量,我们会失去大量信息,因为两和十之间的距离将等于两和一百万之间的距离,即 1。

在机器学习中有一些流行的距离度量。我们首先介绍两种最常用的:

  • 绝对值距离:| y predict - y true |,源自微积分函数| x |

  • 平方距离:| y predict - y true | 2,源自微积分函数|x| 2(对于标量量来说,这与x 2是相同的)。当然,这也会平方单位。

检查函数图像| x |x 2在图 3-4 中,我们注意到在点(0,0)处函数的平滑度有很大的差异。函数| x |在该点有一个拐角,使得它在 x=0 处不可微。这种在 x=0 处的| x |奇点使得许多从业者(包括数学家!)不愿将这个函数或具有类似奇点的函数纳入他们的模型中。然而,让我们铭记以下事实:

数学模型是灵活的。当我们遇到障碍时,我们会深入挖掘,了解发生了什么,然后我们会克服障碍。

275

图 3-4。左:图形| x |x = 0处有一个转角,使得其在该点的导数未定义。右:图形|x| 2x = 0处平滑,因此其导数在那里没有问题。

除了函数| x ||x| 2规则性之外(即它们在所有点是否都有导数),在决定是否将任一函数纳入我们的误差公式之前,我们还需要注意另一个问题:如果一个数很大,那么它的平方就更大。这个简单的观察意味着,如果我们决定使用真实值和预测值之间的平方距离来衡量误差,那么我们的方法将对数据中的异常值更敏感。一个混乱的异常值可能会使我们整个预测函数偏向它,因此远离数据中更普遍的模式。理想情况下,我们应该在数据准备步骤中处理异常值,并决定是否应该在将数据输入任何机器学习模型之前保留它们。

| x |(以及类似的分段线性函数)和x 2(以及类似的非线性但可微函数)之间的最后一个区别是,| x |的导数非常简单:

1 如果 x>0,-1 如果 x<0(如果 x=0,则未定义)。

在涉及数十亿次计算步骤的模型中,当使用| x |的导数时,无需评估任何内容,这一特性被证明非常有价值。通常情况下,既不是线性的也不是分段线性的函数的导数需要进行评估(因为它们的公式中不仅有常数,还有x),这在大数据环境中可能会很昂贵。

具有奇点的函数

一般来说,可微函数的图形没有尖点、转角、角或任何尖锐的地方。如果它们有这样的奇点,那么这些点处的函数就没有导数。原因是在尖锐的点上,你可以画出两条不同的切线,取决于你决定是在点的左边还是右边画切线(见图 3-5)。回想一下,函数在某一点的导数是函数图形在该点的切线的斜率。如果有两个不同的斜率,那么我们就无法定义该点的导数。

275

图 3-5。在奇点处,导数不存在。在这些点上,切线可能有多个可能的斜率。

切线斜率的不连续在依赖于评估函数的导数的方法(如梯度下降法)中造成了问题。问题在于:

  1. 如果你碰巧落在一个古怪的尖点上,那么方法就不知道该怎么办,因为那里没有定义的导数。有些人会为那一点分配一个导数值(称为次梯度次微分)然后继续前进。实际上,我们会不幸地正好落在那一个可怕的点上的几率有多大呢?除非函数的景观看起来像阿尔卑斯山的崎岖地形(实际上很多函数确实如此),数值方法可能会设法避开它们。

  2. 另一个问题是不稳定性。由于导数的值在函数的景观中跳跃得如此突然,使用这个导数的方法也会突然改变数值,如果你试图收敛到某个地方,就会产生不稳定性。想象一下你正在瑞士阿尔卑斯山徒步旅行图 3-6(损失函数的景观),你的目的地是山谷下面那个漂亮的小镇(误差值最低的地方)。然后突然你被某个外星人带到了山的另一边,你再也看不到你的目的地了。事实上,现在你在山谷下看到的只有一些丑陋的灌木丛,还有一个非常狭窄的峡谷,如果你的方法把你带到那里,你就会被困住。你原来的目的地的收敛现在是不稳定的,甚至完全丢失了。

275

图 3-6. 瑞士阿尔卑斯山:优化类似于徒步穿越函数的景观。

尽管如此,具有这种奇点的函数在机器学习中经常被使用。我们将在一些神经网络训练函数的公式(修正线性单元函数-谁起这些名字?)、一些损失函数(绝对值距离)和一些正则化项(Lasso 回归-这些也是谁起的名字?)中遇到它们。

对于线性回归,损失函数是均方误差

回到本节的主要目标:构建一个误差函数,也称为损失函数,它编码了我们的模型在进行预测时产生了多少误差,并且必须尽量小。

对于线性回归,我们使用均方误差函数。该函数对m个数据点的预测与真实值之间的平方距离误差进行平均(我们很快会提到包括哪些数据点):

均方误差等于 1/m(|ypredict¹ - ytrue¹|² + |ypredict² - ytrue²|² + ... + |ypredictm - ytruem|²)

让我们使用求和符号更紧凑地写出上面的表达式:

均方误差等于 1/m 的 sigma-求和(从 i=1 到 m)|ypredicti - ytruei|²

现在我们养成了使用更紧凑的线性代数符号的好习惯。这种习惯在这个领域非常方便,因为我们不想在试图跟踪索引的同时淹没。索引可能潜入我们对理解一切的美好梦想中,并迅速将它们转变成非常可怕的噩梦。使用紧凑的线性代数符号的另一个非常重要的原因是,为机器学习模型构建的软件和硬件都针对矩阵和张量(想象一个由分层矩阵组成的对象,就像一个三维盒子而不是一个平面正方形)计算进行了优化。此外,美丽的数值线性代数领域已经解决了许多潜在问题,并为我们提供了快速执行各种矩阵计算的方法。

使用线性代数符号,我们可以将均方误差写成:

均方误差是预测基准减去真实值的修改后的 y 箭头预测基准减去修改后的 y 箭头真实基准的 t 次方左括号修改后的 y 箭头预测基准减去修改后的 y 箭头真实基准右括号等于 1 除以 m 平行于修改后的 y 箭头预测基准减去修改后的 y 箭头真实基准平行于句号

最后一个等式引入了向量的 l 平方范数,根据定义,这只是其分量的平方和的平方根。

主要观点:我们构建的损失函数编码了训练过程中涉及的数据点的预测和地面真相之间的差异,用某种范数来衡量:作为距离的数学实体。我们可以使用许多其他范数,但 l 平方范数非常受欢迎。

符号:本书中的向量始终是列向量

为了在整本书中符号一致,所有向量都是列向量。因此,如果一个向量修改后的 v 箭头有四个分量,符号修改后的 v 箭头代表的是修改后的 v 箭头代表的是 4 乘 1 矩阵第一行 v1 第二行 v2 第三行 v3 第四行 v4。

向量v 的转置始终是一个行向量。具有四个分量的上述向量的转置是v t = v 1 v 2 v 3 v 4

我们永远不会使用点积符号(也称为数量积,因为我们乘以两个向量,但我们的答案是一个标量)。而不是写两个向量的点积a . b ,我们将写成a t b ,这是一样的,但本质上将列向量视为形状为:向量的长度乘以 1的矩阵,其转置为形状为:1 乘以向量的长度的矩阵。

假设现在a b 有四个分量,那么

a t b = a 1 a 2 a 3 a 4 b 1 b 2 b 3 b 4 = a 1 b 1 + a 2 b 2 + a 3 b 3 + a 4 b 4 = i=1 4 a i b i .

此外,

a l 2 2 = a t a = a 1 2 + a 2 2 + a 3 2 + a 4 2 .

同样地,

b l 2 2 = b t b = b 1 2 + b 2 2 + b 3 2 + b 4 2 .

这样,我们在整个过程中都使用矩阵表示,并且只在字母上方加上箭头,以表明我们正在处理一个列向量。

训练、验证和测试子集

我们在损失函数中包含哪些数据点?我们包括整个数据集,其中的一些小批次,甚至只有一个点吗?我们是针对训练子集验证子集还是测试子集来测量均方误差?这些子集到底是什么?

实际上,我们将数据集分成三个子集:

  1. 训练子集:这是我们用来拟合训练函数的数据子集。这意味着这个子集中的数据点被纳入我们的损失函数中(通过将它们的特征值和标签插入到损失函数的y predicty true中)。

  2. 验证子集:这个子集中的数据点被多种方式使用:

    • 常见的描述是,我们使用这个子集来调整机器学习模型的超参数。 超参数是机器学习模型中不是我们试图解决的训练函数的ω的任何参数。 在机器学习中,有许多这样的参数,它们的值会影响模型的结果和性能。 超参数的示例包括(您现在不必知道这些是什么):出现在梯度下降方法中的学习率,决定支持向量机方法中边缘宽度的超参数,原始数据分成训练、验证和测试子集的百分比,随机批量梯度下降时的批量大小,权重衰减超参数,例如 Ridge、LASSO 和 Elastic Net 回归中使用的超参数,带有动量方法的超参数,例如带有动量的梯度下降和 ADAM(这些方法加速了方法向最小值的收敛,这些项乘以需要在测试和部署之前进行调整的超参数),神经网络的架构,例如层数、每层的宽度,,以及优化过程中的epochs的数量(优化器已经看到整个训练子集的传递次数)。

    • 验证子集还帮助我们知道何时停止优化之前过度拟合我们的训练子集。

    • 它还作为一个测试集,用来比较不同机器学习模型在同一数据集上的性能,例如,比较线性回归模型、随机森林和神经网络的性能。

  3. 测试子集:在决定使用最佳模型(或对多个模型的结果进行平均或聚合)并训练模型之后,我们使用这个未触及的数据子集作为模型在部署到真实世界之前的最后阶段测试。由于模型之前没有见过这个子集中的任何数据点(这意味着它没有在优化过程中包含其中任何数据点),因此它可以被视为最接近真实世界情况的类比。这使我们能够在开始将其应用于全新的真实世界数据之前评估我们模型的性能。

总结

在继续之前,让我们简要回顾一下。

  • 我们当前的机器学习模型称为线性回归

  • 我们的训练函数是线性的,公式为:

y = ω 0 + ω 1 x 1 + ω 2 x 2 + ω 3 x 3 + ω 4 x 4 + ω 5 x 5 .

x是特征,ω是未知的权重或参数。

  • 如果我们将特定数据点的特征值(例如第十个数据点)代入训练函数的公式中,我们就可以得到我们模型对该点的预测:

y predict 10 = ω 0 + ω 1 x 1 10 + ω 2 x 2 10 + ω 3 x 3 10 + ω 4 x 4 10 + ω 5 x 5 10 .

上标 10 表示这些值对应于第十个数据点。

  • 我们的损失函数是带有以下公式的均方误差函数:

Mean Squared Error = 1 m (y predict -y true ) t ( y predict - y true ) = 1 m y predict -y true l 2 2 .

  • 我们想要找到最小化这个损失函数的ω的值。因此,下一步必须是解决一个最小化(优化)问题。

为了让我们的优化工作更加轻松,我们将再次使用线性代数(向量和矩阵)的便捷符号。这使我们能够将整个训练数据子集作为损失函数公式中的矩阵,并立即在训练子集上进行计算,而不是在每个数据点上分别计算。这种小小的符号操作可以避免我们在非常大的数据集上出现许多难以跟踪的组件的错误、痛苦和繁琐计算。

首先,写出我们模型对训练子集的每个数据点的预测:

y predict 1 = 1 ω 0 + ω 1 x 1 1 + ω 2 x 2 1 + ω 3 x 3 1 + ω 4 x 4 1 + ω 5 x 5 1 y predict 2 = 1 ω 0 + ω 1 x 1 2 + ω 2 x 2 2 + ω 3 x 3 2 + ω 4 x 4 2 + ω 5 x 5 2 y predict m = 1 ω 0 + ω 1 x 1 m + ω 2 x 2 m + ω 3 x 3 m + ω 4 x 4 m + ω 5 x 5 m

我们可以轻松地将上述系统安排如下:

y predict 1 y predict 2 y predict m = 1 1 1 ω 0 + x 1 1 x 1 2 x 1 m ω 1 + x 1 1 x 2 2 x 2 m ω 2 + x 3 1 x 3 2 x 3 m ω 3 + x 4 1 x 4 2 x 4 m ω 4 + x 5 1 x 5 2 x 5 m ω 5 ,

或者更好:

美元符号开始 4 乘 1 矩阵第一行 y 下标 predict 上标 1 第二行 y 下标 predict 上标 2 第三行省略号第四行 y 下标 predict 上标 m 等于 4 乘 6 矩阵第一行第一列 1 第二列 x1 上标 1 第三列 x2 上标 1 第四列 x3 上标 1 第五列 x4 上标 1 第六列 x5 上标 1 第二行第一列 1 第二列 x1 平方第三列 x2 平方第四列 x3 平方第五列 x4 平方第六列 x5 平方第三行第一列省略号第四行第一列 1 第二列 x1 上标 m 第三列 x2 上标 m 第四列 x3 上标 m 第五列 x4 上标 m 第六列 x5 上标 m 结束矩阵开始 6 乘 1 矩阵第一行 omega0 第二行 omega1 第三行 omega2 第四行 omega3 第五行 omega4 第六行 omega5 结束矩阵。

上述方程左侧的向量是y predict,右侧的矩阵是训练子集X与包含 1 的向量增广,右侧的最后一个向量包含了所有未知的权重。将这个向量称为ω ,然后用训练子集和ω 简洁地写成y predict

y predict = X ω .

现在我们之前写过的均方误差损失函数的公式如下:

Mean Squared Error = 1 m (y predict -y true ) t ( y predict - y true ) = 1 m y predict -y true l 2 2

变成:

均方误差 = 1 m Xω -y true t X ω - y true = 1 m Xω -y true l 2 2 .

我们现在准备找到最小化精心编写的损失函数的ω 。为此,我们必须访问优化的丰富而美丽的数学领域。

当训练数据具有高度相关的特征时

检查训练矩阵(附加了一个包含 1 的向量)

X = 1 x 1 1 x 2 1 x 3 1 x 4 1 x 5 1 1 x 1 2 x 2 2 x 3 2 x 4 2 x 5 2 1 x 1 m x 2 m x 3 m x 4 m x 5 m

出现在向量y predict = X ω 中,均方误差损失函数的公式,以及后来确定未知ω (也称为正规方程)的公式。

ω = (X t X) -1 X t y true ,

我们可以看到,如果数据的两个或更多特征(x列)高度相关,我们的模型可能会出现问题:这意味着特征之间存在强烈的线性关系,因此其中一个特征可以通过其他特征的线性组合来确定(或几乎确定)。因此,相应的特征列是不线性独立的(或接近不是线性独立的)。对于矩阵来说,这是一个问题,因为它表明矩阵要么不能被反转,要么病态。病态的矩阵在计算中产生大的不稳定性,因为训练数据的轻微变化(必须假设)会导致模型参数的大变化,从而使其预测不可靠。

我们在计算中希望得到条件良好的矩阵,因此必须消除病态条件的来源。当我们有高度相关的特征时,一个可能的途径是只在我们的模型中包含其中一个,因为其他特征并不添加太多信息。另一个解决方案是应用主成分分析等降维技术,我们将在第十一章中遇到。鱼市数据集具有高度相关的特征,附带的 Jupyter Notebook 解决了这些问题。

也就是说,重要的是要注意,一些机器学习模型,如决策树和随机森林(下文讨论),不受相关特征的影响,而其他一些模型,如当前的线性回归模型,以及接下来的逻辑回归和支持向量机模型受到了负面影响。至于神经网络模型,即使它们可以在训练过程中学习数据特征中的相关性,但当这些冗余在时间之前得到处理时,它们的表现更好,除了节省计算成本和时间。

优化

优化意味着寻找最佳、最大、最小或极端解决方案。

我们编写了一个线性训练函数

y = ω 0 + ω 1 x 1 + ω 2 x 2 + ω 3 x 3 + ω 4 x 4 + ω 5 x 5 .

我们留下了它的六个参数ω 0ω 1ω 2ω 3ω 4ω 5的值未知。目标是找到使我们的训练函数最适合训练数据子集的值,其中最适合一词是使用损失函数量化的。该函数提供了模型训练函数所做预测与真实情况的偏差程度的度量。我们希望这个损失函数很小,因此我们解决了一个最小化问题。

我们不会坐在那里尝试每个可能的ω值,直到找到使损失最小的组合。即使我们这样做了,我们也不会知道何时停止,因为我们不知道是否还有其他更好的值。我们必须对损失函数的地形有先验知识,并利用其数学特性。类比是盲目徒步穿越瑞士阿尔卑斯山vs.带着详细地图徒步穿越(图 3-7 显示了瑞士阿尔卑斯山的崎岖地形)。我们不是盲目地搜索损失函数的地形以寻找最小值,而是利用优化领域。优化是数学的一个美丽分支,提供了各种方法来高效地搜索函数的最优解及其对应的最优值。

275

图 3-7. 瑞士阿尔卑斯山:优化类似于徒步穿越函数的地形。目的地是最低谷的底部(最小化)或最高峰的顶部(最大化)。我们需要两样东西:最小化或最大化点的坐标,以及这些点的地形高度。

本章和接下来几章的优化问题如下:

min ω Loss Function .

对于当前的线性回归模型,这是:

min ω 1 m Xω -y true t X ω - y true = min ω 1 m Xω -y true l 2 2 .

当我们进行数学运算时,我们绝不能忘记我们知道什么,我们正在寻找什么。否则我们可能会陷入循环逻辑的陷阱。在上述公式中,我们知道:

  • m(训练子集中的实例数),

  • X(训练子集增加了一个全为 1 的向量),

  • 在训练子集对应的标签向量中的最小损失函数值。

我们正在寻找:

  • 最小化的ω :我们必须找到它。

  • 在最小化的损失函数值处的ω

凸景观 vs. 非凸景观

最容易处理和最容易解决的方程是线性的。不幸的是,我们处理的大多数函数(和方程)都是非线性的。与此同时,这并不太不幸,因为线性的生活是平淡、无聊、乏味和无趣的。当我们手头的函数是完全非线性的时候,有时我们会在我们关心的某些点附近线性化它。这里的想法是,即使函数的整体图像可能是非线性的,我们可能能够在我们关注的局部用线性函数来近似它。换句话说,在一个非常小的邻域内,非线性函数可能看起来和行为上是线性的,尽管该邻域可能是无限小的。打个比方,想想地球从我们自己的地方看起来是平的,从高处我们只能看到它的非线性形状。当我们想要在某一点附近线性化一个函数时,我们通过计算函数对所有变量的一个导数来近似它,因为这给我们提供了近似平坦空间的斜率(它测量了近似平坦空间的倾斜度)。

令人沮丧的消息是,在一个点附近进行线性化可能不够,我们可能希望在多个位置使用线性近似。幸运的是,这是可行的,因为我们在计算上所要做的就是在几个点上评估一个导数。这将我们带到了(在线性函数之后)最容易处理的函数:分段线性函数,它们在结构上是线性的,或者在孤立点或位置上是线性的。线性规划领域处理这样的函数,其中要优化的函数是线性的,而优化发生的域的边界是分段线性的(它们是半空间的交集)。

当我们的目标是优化时,最好处理的函数要么是线性的(线性规划领域帮助我们),要么是凸的(我们不用担心陷入局部最小值,而且我们有很好的不等式帮助我们进行分析)。

在机器学习中要记住的一个重要类型的函数是两个或多个凸函数的最大值。这些函数总是凸的。线性函数是平的,因此它们同时是凸的和凹的。这很有用,因为有些函数被定义为线性函数的最大值:这些函数不一定是线性的(它们是分段线性的),但是保证是凸的。也就是说,即使我们在取线性函数的最大值时失去了线性性,但我们得到了凸性的补偿。

在神经网络中作为非线性激活函数使用的修正线性单元函数(ReLU)是一个被定义为两个线性函数的最大值的例子:R e L U ( x ) = m a x ( 0 , x )。另一个例子是支持向量机中使用的铰链损失函数:H ( x ) = m a x ( 0 , 1 - t x ),其中t是 1 或-1。

请注意,一组凸函数的最小值不能保证是凸的,它可能有双井。然而,它们的最大值肯定是凸的。

线性和凸性之间还有另一个关系:如果我们有一个凸函数(非线性,因为线性将是平凡的),那么所有保持在函数下方的线性函数的最大值恰好等于它。换句话说,凸性取代了线性性,意思是当线性性不可用时,但凸性可用时,我们可以用所有图形位于函数图形下方的线性函数的最大值来替换我们的凸函数(见图 3-8)。请记住,凸函数的图形位于任意点的切线图形上方,而切线是线性的。这为我们提供了一条直接利用线性函数简单性的路径,当我们有凸函数时。当我们考虑所有切线的最大值时,我们有相等,当我们考虑少数点的切线的最大值时,我们只有近似。

300

图 3-8。凸函数等于其所有切线的最大值。

图 3-9 和图 3-10 分别展示了非线性凸函数和非凸函数的一般景观。总的来说,凸函数的景观对于最小化问题是有利的。我们不必担心被困在局部最小值,因为对于凸函数来说,任何局部最小值也是全局最小值。非凸函数的景观有峰值、谷底和鞍点。在这样的景观上进行最小化问题会有被困在局部最小值而无法找到全局最小值的风险。

280

图 3-9。凸函数的景观对于最小化问题是有利的。我们不必担心被困在局部最小值,因为对于凸函数来说,任何局部最小值也是全局最小值。

280

图 3-10。非凸函数的景观有峰值、谷底和鞍点。在这样的景观上进行最小化问题会有被困在局部最小值而无法找到全局最小值的风险。

最后,请确保你知道凸函数、凸集和凸优化问题之间的区别,凸优化问题是在凸集上优化凸函数。

我们如何找到函数的最小值?

一般来说,有两种方法来找到函数的最小值(和/或最大值)。通常的权衡是:

  1. 只计算一个导数并缓慢收敛到最小值(尽管有加速方法可以加快收敛速度)。这些被称为梯度方法。梯度是多个变量的函数的一个导数。例如,我们的损失函数是多个ω的函数(或一个向量ω )。

  2. 计算两个导数(在计算上更昂贵,尤其是当我们有成千上万个参数时,这是一个大的缺点),并更快地收敛到最小值。可以通过近似第二导数来节省一些计算成本,而不是精确计算它。第二导数方法被称为牛顿方法。Hessian(二阶导数的矩阵)或 Hessian 的近似出现在这些方法中。

我们从不需要计算超过两个导数。

但是为什么函数的一阶和二阶导数对于找到其最优解如此重要呢?简洁的答案是,一阶导数包含了函数在某一点上增加或减少的速度信息(因此如果你按照它的方向,你可能会上升到最大值或下降到最小值),而二阶导数包含了函数的“碗”的形状信息,它是向上弯曲还是向下弯曲。

微积分中的一个关键思想仍然是基本的:极小值(和/或极大值)发生在临界点(定义为函数的一个导数为零或不存在的点)或边界点。因此,为了找到这些最优解,我们必须搜索边界点(如果我们的搜索空间有边界)内部临界点。

我们如何找到搜索空间内部的临界点?

方法 1

我们按照这些步骤进行。

  • 找到我们函数的一个导数(不太糟糕,我们在微积分中都做过),

  • 然后将其设置为零(我们都可以写出等于和零的符号),

  • 并解出使我们的导数为零的ω(这是一个糟糕的步骤!)。

对于其导数是线性的函数,比如我们的均方误差损失函数,解这些ω是相对容易的。线性代数领域特别是为了帮助解线性方程组而建立的。数值线性代数领域是为了帮助解决现实和大型的线性方程组而建立的,其中病态条件很普遍。当我们的系统是线性的时,我们有很多可用的工具(和软件包)。

另一方面,当我们的方程是非线性的时,找到解是完全不同的故事。这成为了一个碰运气的游戏,大多数情况下都是运气不佳!以下是一个简短的例子,说明了解线性和非线性方程之间的差异:

解线性方程

找到ω,使得0 . 002 ω - 5 = 0

解决方案:将 5 移到另一边,然后除以 0.002,我们得到ω = 5 / 0 . 002 = 2500。完成。

解非线性方程

找到ω,使得0 . 002 sin ( ω ) - 5 ω 2 + e ω = 0

解决方案:是的,我要离开了。我们需要一个数值方法!(见图 3-11 以图形逼近解这个非线性方程的解)。

275

图 3-11。解非线性方程很困难。在这里,我们绘制f ( ω ) = 0 . 002 sin ( ω ) - 5 ω 2 + e ω并在图上近似其三个根(使f ( ω ) = 0的点)。

有许多数值技术专门用于求解非线性方程的解(以及专门用于数值求解非线性常微分方程和偏微分方程的整个领域)。这些方法找到近似解,然后提供数值解与精确解相差多远的界限。它们通常构造一个在某些条件下收敛到解析解的序列。有些方法收敛速度比其他方法快,并且更适合某些问题而不适合其他问题。

方法 2

另一个选择是沿着梯度方向前进,以便向最小值下降或向最大值上升。

要理解这些梯度类型的方法,可以想象下山徒步旅行(或者如果方法加速或具有动量,则滑雪下山)。我们从搜索空间中的一个随机点开始,这将使我们处于函数景观的初始高度水平。现在,该方法将我们移动到搜索空间中的一个新点,希望在这个新位置,我们最终到达的高度水平比我们来自的高度水平更低。因此,我们将下降。我们重复这个过程,理想情况下,如果函数的地形配合,这些点的序列将收敛到我们正在寻找的函数的最小化器。

当然,对于函数的景观具有许多峰和谷的情况,我们从哪里开始,或者换句话说,如何初始化,很重要,因为我们可能下降到与我们想要到达的完全不同的山谷。我们可能最终会陷入局部最小值而不是全局最小值。

凸函数和下界有界的函数的形状像沙拉碗,因此我们不必担心被困在局部最小值处,远离全局最小值。凸函数可能存在另一个令人担忧的问题:当函数的碗形太窄时,我们的方法可能变得非常缓慢。我们将在下一章中详细讨论这一点。

方法 1 和方法 2 都很有用且受欢迎。有时,我们别无选择,只能使用其中一种,这取决于每种方法在特定设置下收敛的速度有多快,我们试图优化的函数有多“规则”(它有多少良好的导数),等等。有时,这只是品味的问题。对于线性回归的均方误差损失函数,两种方法都适用,所以我们将使用方法 1,只是因为我们将在本书中对所有其他损失函数使用梯度下降方法。

我们必须提到,对于下降方法的登山下山类比是很好的,但有点误导。当我们人类下山时,我们在物理上属于与我们的山脉景观存在的相同三维空间,这意味着我们处于某个海拔高度,我们能够下降到更低海拔的位置,即使我们被蒙住眼睛,即使天气雾蒙蒙,我们只能一步一步地下降。我们感知海拔然后向下移动。另一方面,数值下降方法并不在与函数景观嵌入的相同空间维度中搜索最小值。相反,它们在地面上搜索,即函数景观的一维下方(参见图 3-12)。这使得朝向最小值的下降变得更加困难,因为在地面上,我们可以从任意一点移动到任何其他点,而不知道我们上方存在什么高度水平,直到我们在该点评估函数本身并找到高度。因此,我们的方法可能会意外地将我们从一个具有某个海拔高度的地面点移动到另一个具有更高海拔高度的地面点,因此离最小值更远。这就是为什么在地面上定位一个快速减小函数高度的方向以及我们在地面上可以移动多远(步长)而仍然减小我们上方函数高度的重要性。步长也称为学习率超参数,每当我们使用下降方法时都会遇到。

250

图 3-12。搜索最小值发生在地面上,而不是直接在函数的景观上。

回到我们的主要目标:我们想要找到最佳的ω ,以便为我们的训练函数最小化均方误差损失函数,方法 1:对损失函数进行一阶导数,并将其设置为零,然后解出向量ω 。为此,我们需要掌握对线性代数表达式进行微积分。让我们首先回顾一下我们的微积分课程。

微积分简介

在微积分的第一门课程中,我们学习关于单变量函数(f ( ω ))及其图形,并在特定点进行评估。然后我们学习数学分析中最重要的操作:极限。从极限概念中,我们定义函数的连续性和不连续性,点的导数f ' ( ω )(通过点的切线斜率的极限)和域上的积分(由函数在域上确定的小区域的和的极限)。我们以微积分基本定理结束课程,将积分和微分作为反向操作进行关联。导数的关键特性之一是它确定函数在某一点的增长或减少速度,因此,在其定义域的内部定位函数的最小值和/或最大值中起着至关重要的作用(边界点是分开的)。

在多变量微积分课程中,通常是微积分的第三门课程,许多概念从单变量微积分中转移,包括导数的重要性,现在称为梯度,因为我们有几个变量,用于定位任何内部最小值和/或最大值。函数f ( ω )的梯度 ( f ( ω ) )是函数对于变量向量ω 的导数。

在深度学习中,未知的权重是以矩阵而不是向量的形式组织的,因此我们需要对变量矩阵W的函数f ( W )进行导数。

对于我们在 AI 中的目的,我们需要计算导数的函数是损失函数,其中包含了训练函数。根据导数的链式法则,我们还需要计算对于ω的训练函数的导数。

让我们使用单变量微积分的一个简单例子来演示,然后立即过渡到对线性代数表达式进行导数运算。

一维优化示例

找到函数f ( ω ) = 3 + (0.5ω-2) 2在区间[-1,6]上的最小值(如果有的话)和最小值。

一个不可能的长方法是尝试在-1 和 6 之间尝试无限多ω的值,并选择给出最低f值的ω。另一种方法是使用我们的微积分知识,即优化器(最小化器和/或最大化器)发生在临界点(导数不存在或为零)或边界点。有关参考,请参阅图 3-13。

275

图 3-13。函数的最小值f ( ω ) = 3 + (0.5ω-2) 2在区间[-1,6]上是 3,并且发生在临界点ω = 4。在这个临界点,函数的导数为零,这意味着如果我们画一条切线,它将是水平的。

我们的边界点是-16,所以我们首先在这些点上评估我们的函数:f ( - 1 ) = 3 + (0.5(-1)-2) 2 = 9 . 25f ( 6 ) = 3 + (0.5(6)-2) 2 = 4 。显然,-1不是一个最小化器,因为f(6)<f(-1),所以这个边界点退出了竞争,现在只有边界点6与内部临界点竞争。为了找到我们的临界点,我们检查区间*[-1,6]内函数的导数:f ' ( ω ) = 0 + 2 ( 0 . 5 ω - 2 ) 0 . 5 = 0 . 25 ( 0 . 5 ω - 2 ) 。将这个导数设为零,我们有0 . 25 ( 0 . 5 ω - 2 ) = 0 意味着ω = 4 。因此,我们只在区间*[-1,6]的内部找到了一个临界点ω = 4。在这个特殊点,函数的值是f ( 4 ) = 3 + (0.5(4)-2) 2 = 3 。由于f的值在这里是最低的,显然我们已经找到了我们最小化竞赛的赢家,即ω = 4,最小的f值等于3*。

我们经常使用的线性代数表达式的导数

在涉及向量和矩阵的表达式上直接计算导数是高效的,而不必将它们分解成它们的分量。以下两种方法很受欢迎:

  1. aω是标量且a是常数时,f ( ω ) = a ω的导数是f ' ( ω ) = a。当a ω 是向量(长度相同)且a 的条目是常数时,f ( ω ) = a t ω 的梯度是 f ( ω ) = a 。同样,f ( ω ) = w t a 的梯度是 f ( ω ) = a

  2. s是标量且常数,ω是标量时,二次函数f ( ω ) = s ω 2的导数是f ' ( ω ) = 2 s ω。类似的高维情况是当S是具有常数条目的对称矩阵时,函数f ( ω ) = ω t S ω 是二次的,其梯度是 f ( ω ) = 2 S ω

最小化均方误差损失函数

我们终于准备好最小化均方误差损失函数了。

L ( ω ) = 1 m Xω -y true t X ω - y true .

让我们在将其梯度展开并将其设置为零之前打开上述表达式:

数学符号开始布局第一行第一列上方 L 左括号修改上方 omega 箭头右括号第二列等于分数 1/m 左括号左括号上方 X 修改上方 omega 箭头右括号上标 t 减去上方 y 箭头下标 true 上标 t 右括号左括号上方 X 修改上方 omega 箭头减去上方 y 箭头下标 true 右括号第二行第一列空第二列等于分数 1/m 左括号上方 omega 箭头上标 t 上方 X 上标 t 减去上方 y 箭头下标 true 上标 t 右括号左括号上方 X 修改上方 omega 箭头减去上方 y 箭头下标 true 右括号第三行第一列空第二列等于分数 1/m 左括号上方 omega 箭头上标 t 上方 X 上标 t 上方 X 修改上方 omega 箭头减去上方 omega 箭头上标 t 上方 X 上标 t 上方 y 箭头下标 true 减去上方 y 箭头下标 true 上标 t 上方 X 修改上方 omega 箭头加上上方 y 箭头下标 true 上标 t 上方 y 箭头下标 true 右括号第四行第一列空第二列等于分数 1/m 左括号上方 omega 箭头上标 S 上方 omega 箭头减去上方 omega 箭头上标 t 上方 a 箭头减去上方 a 箭头上标 t 上方 omega 箭头加上上方 y 箭头下标 true 上标 t 上方 y 箭头下标 true 右括号,结束布局。

在最后一步中,我们设置了X t X = SX t y true = a 。接下来,对上述表达式关于ω 的梯度进行计算,并将其设置为零。在计算梯度时,我们使用了上面小节中学到的关于线性代数表达式的微分知识:

L ( ω ) = 1 m 2 S ω - a - a + 0 = 0

现在很容易解出ω

1 m 2 S ω - 2 a = 0

所以

2 S ω = 2 a

这给出了

ω = S -1 a

现在回想一下,我们设置了S = X t Xa = X t y true,所以让我们用训练集X(增加了 1)和相应的标签向量y true来重新写我们的最小化ω

ω = (X t X) -1 X t y true .

对于 Fish Market 数据集,这将是(请参阅附带的 Jupyter 笔记本):

ω = ω 0 ω 1 ω 2 ω 3 ω 4 ω 5 = - 475 . 19929130109716 82 . 84970118 - 28 . 85952426 - 28 . 50769512 29 . 82981435 30 . 97250278

注意:将大矩阵相乘非常昂贵。请改为将矩阵乘以向量。

尽量避免相乘矩阵,而是用向量相乘。例如,在正规方程ω = (X t X) -1 X t y true,首先计算X t y true,避免计算(X t X) -1。解决这个问题的方法是使用X伪逆来解决线性系统X ω = y true(查看附带的 Jupyter 笔记本)。我们将在第十一章中讨论伪逆,但现在,它允许我们求解(相当于除以)没有逆的矩阵。

我们只是找到了权重向量ω ,它能够在我们的训练数据和线性回归训练函数之间提供最佳拟合:

f ( ω ; x ) = ω 0 + ω 1 x 1 + ω 2 x 2 + ω 3 x 3 + ω 4 x 4 + ω 5 x 5 .

我们使用了一种分析方法(计算损失函数的梯度并将其置为零)来推导正规方程给出的解决方案。这是我们能够推导出解析解的非常罕见的情况之一。所有其他找到最小化ω 的方法都是数值方法。

注意:我们永远不希望训练数据拟合得太好。

我们计算的ω = (X t X) -1 X t y true给出了使训练函数最佳拟合训练数据的ω值,但是过于拟合意味着训练函数可能也会捕捉到数据中的噪音而不仅仅是信号。因此,上述解决方案,甚至是最小化问题本身,需要进行修改,以不要获得过于完美的拟合正则化提前停止在这里是有帮助的。我们将在下一章节中花一些时间来讨论这些问题。

这是回归的长路。因为我们刚刚开始,所以我们必须通过微积分和线性代数。介绍即将到来的机器学习模型:逻辑回归、支持向量机、决策树和随机森林,将会更快,因为我们所做的一切都是将完全相同的思想应用于不同的函数。

逻辑回归:分类为两类

逻辑回归主要用于分类任务。我们首先解释如何将这个模型用于二元分类任务(将数据分类为两类,例如癌症/非癌症;适合儿童/不适合儿童;可能偿还贷款/不太可能等)。然后我们将模型推广到将数据分类为多个类别(例如,将手写数字图像分类为 0、1、2、3、4、5、6、7、8 或 9)。同样,我们有相同的数学设置:

  1. 训练函数

  2. 损失函数

  3. 优化

训练函数

与线性回归类似,逻辑回归的训练函数计算特征的线性组合并添加一个常数偏差项,但是不是直接输出结果,而是通过逻辑函数,其图在图 3-14 中绘制,其公式为:

σ ( s ) = 1 1+e -s275

图 3-14. 逻辑函数的图形 σ ( s ) = 1 1+e -s。注意,这个函数可以在任何s处进行评估,并始终输出介于01之间的数字,因此其输出可以被解释为概率。

这是一个只接受值在01之间的函数,因此它的输出可以被解释为数据点属于某一类的概率:如果输出小于0.5,则将数据点分类为属于第一类,如果输出大于0.5,则将数据点分类为另一类。数字0.5是做出分类数据点决定的阈值

因此,这里的训练函数最终是特征的线性组合,加上偏差,首先与逻辑函数组合,最后与阈值函数组合:

y = T h r e s h ( σ ( ω 0 + ω 1 x 1 + + ω n x n ) )

与线性回归情况类似,ω 是我们需要优化损失函数的未知数。就像线性回归一样,这些未知数的数量等于数据特征的数量,再加上一个偏差项。对于像分类图像这样的任务,每个像素都是一个特征,所以我们可能有成千上万个。

损失函数

让我们为分类设计一个良好的损失函数。我们是工程师,我们希望惩罚错误分类的训练数据点。在我们的标记数据集中,如果一个实例属于一个类,那么它的y true = 1,如果不属于,则y true = 0

我们希望我们的训练函数输出y predict = 1,对于属于正类的训练实例(其y true也为 1)。成功的ω值应该给出一个较高的t值(线性组合步骤的结果),以进入逻辑函数,从而为正实例分配高概率,并通过 0.5 阈值获得y predict = 1。因此,如果线性组合加偏差步骤给出一个较低的t值,而y true = 1,则对其进行惩罚。

类似地,成功的权重值应该给出一个较低的t值,以进入逻辑函数,用于不属于该类的训练实例(它们真实的y true = 0)。因此,如果线性组合加偏差步骤给出一个较高的t值,而y true = 0,则对其进行惩罚。

那么我们如何找到一个惩罚错误分类的训练数据点的损失函数呢?假阳性和假阴性都应该受到惩罚。回想一下,这个分类模型的输出要么是1,要么是0

  • 想象一下奖励1并惩罚0的微积分函数:- log ( s )(见图 3-15)。

  • 考虑一个对1进行惩罚并对0进行奖励的微积分函数:- log ( 1 - s )(见图 3-15)。

275

图 3-15. 左:函数f ( s ) = - l o g ( s )的图。该函数为接近0的数字分配高值,并为接近1的数字分配低值。右:函数f ( s ) = - l o g ( 1 - s )的图。该函数为接近1的数字分配高值,并为接近0的数字分配低值。

现在关注当前选择的ω的逻辑函数σ ( s )的输出:

  • 如果σ ( s )小于0.5(模型预测为y predict = 0),但真实值y true = 1(假阴性),则通过惩罚- log ( σ ( s ) )让模型付出代价。如果相反地σ ( s ) > 0 . 5,即模型预测为y predict = 1(真阳性),- log ( σ ( s ) )很小,因此不需要付出高惩罚。

  • 同样,如果σ ( s )大于0.5,但真实值y true = 0(假阳性),则通过惩罚- log ( 1 - σ ( s ) )让模型付出代价。同样,对于真阴性也不需要付出高惩罚。

因此,我们可以将误分类一个训练实例的成本写成:

c o s t = - log ( σ ( s ) ) if y true = 1 - log ( 1 - σ ( s ) ) if y true = 0 = - y true log ( σ ( s ) ) - ( 1 - y true ) log ( 1 - σ ( s ) )

最后,损失函数是m个训练实例的平均成本,给出了流行的交叉熵损失函数的公式。

L ( ω ) = - 1 m i=1 m y true i log ( σ ( ω 0 + ω 1 x 1 i + + ω n x n i ) ) + ( 1 - y true i ) log ( 1 - σ ( ω 0 + ω 1 x 1 i + + ω n x n i ) )

优化

与线性回归情况不同,如果我们决定通过设置 L ( ω ) = 0来最小化损失函数,那么ω没有封闭形式的解析解。好消息是这个函数是凸函数,所以下一章的梯度下降(或随机或小批量梯度下降)保证能找到最小值(如果学习率不是太大,并且等待足够长的时间)。

Softmax 回归:多类分类

我们可以很容易地将逻辑回归的思想推广到多类分类。一个著名的非二进制分类任务的例子是使用MNIST 数据集对手写数字 0、1、2、3、4、5、6、7、8 和 9 进行分类。这个数据集包含了 70,000 张手写数字的图像(见图 3-16 中这些图像的样本),分为 60,000 张训练子集和 10,000 张测试子集。每个图像都标有它所属的类别,即这十个数字中的一个。

275

图 3-16。MNIST 数据集的样本图像。(图片来源:维基百科)

此数据集的链接还包含许多分类模型的结果,包括线性分类器、k 最近邻决策树、带有各种支持向量机,以及具有各种架构的神经网络,以及相应论文的参考文献和发表年份。看到随着年份的推移和方法的演变,性能的进展是很有趣的。

注意:不要将多类别分类与多输出模型混淆

Softmax 回归一次预测一个类别,所以我们不能用它来分类,例如,在同一张图像中的五个人。相反,我们可以用它来检查给定的 Facebook 图像是否是我的照片,我的妹妹的照片,我的哥哥的照片,我的丈夫的照片,或者我的女儿的照片。传入 softmax 回归模型的图像只能有我们五个人中的一个,否则模型的分类就不太明显。这意味着我们的类别必须是相互排斥的。所以当 Facebook 自动在同一张图像中标记五个人时,它们使用的是一个多输出模型,而不是 softmax 回归模型。

假设我们有数据点的特征,并且我们想要利用这些信息来将数据点分类到k个可能的类别中。以下的训练函数、损失函数和优化过程现在应该是清楚的。

关于图像数据的特征

对于灰度图像,每个像素强度都是一个特征,所以图像通常有成千上万个特征。灰度图像通常表示为数字的二维矩阵,像素强度作为矩阵的条目。彩色图像有三个通道,红色、绿色和蓝色,每个通道再次表示为数字的二维矩阵,并且通道叠加在彼此之上,形成三层二维矩阵。这种结构称为张量。查看这个[链接的 Jupyter 笔记本],它说明了我们如何在 Python 中处理灰度和彩色图像。

训练函数

第一步总是相同的:线性组合特征并添加一个常数偏差项。在逻辑回归中,当我们只有两个类别时,我们将结果传递到逻辑函数中,公式如下:

σ ( s ) = 1 1+e -s = 1 1+1 e s = e s 1+e s = e s e 0 +e s ,

我们将其解释为数据点属于感兴趣类别的概率或不属于的概率。请注意,我们将逻辑函数的公式重写为,以突出它捕捉了两个概率,每个类别一个。换句话说,给出了数据点属于感兴趣类别的概率,而给出了数据点不属于该类别的概率。

当我们有多个类别而不仅仅是两个时,对于同一个数据点,我们重复相同的过程多次:每个类别一次。每个类别都有自己的偏差和一组权重,线性组合特征,因此,给定具有特征值,...和的数据点,我们计算k不同的线性组合加上偏差:

s 1 = ω 0 1 + ω 1 1 x 1 + ω 2 1 x 2 + + ω n 1 x n s 2 = ω 0 2 + ω 1 2 x 1 + ω 2 2 x 2 + + ω n 2 x n s k = ω 0 k + ω 1 k x 1 + ω 2 k x 2 + + ω n k x n .

养成良好习惯

你想养成一个良好的习惯,即跟踪你的训练函数中有多少未知的ω出现在公式中。记住,这些是我们通过最小化损失函数找到的ω。另一个良好的习惯是以高效和一致的方式组织它们在模型中(在向量、矩阵等中)。在 softmax 情况下,当我们有 k 个类别和每个数据点的 n 个特征时,我们最终得到 k×n 个ω用于线性组合,然后 k 个偏差,总共有 k×n 加 k 个未知的ω。例如,如果我们使用 softmax 回归模型来对手写数字的MNIST 数据集中的图像进行分类,每个图像有 28×28 个像素,即 784 个特征,我们想将它们分类为 10 个类别,因此我们最终需要优化 7850 个ω。对于线性和逻辑回归模型,我们只需要优化 n 加 1 个未知的ω。

接下来,我们将这k个结果传递到一个称为softmax 函数的函数中,该函数将逻辑函数从两个类推广到多个类,并且我们也将其解释为概率。Softmax 函数的公式如下:

σ ( s j ) = e s j e s 1 +e s 2 ++e s k

这样,同一个数据点将得到k个概率分数,每个分数对应一个类别。最后,我们将数据点分类为获得最大概率分数的类别。

汇总以上所有内容,我们得到了训练函数的最终公式,现在我们可以用于分类(也就是在通过最小化适当的损失函数找到最优的ω值之后):

y = j such that σ ( ω 0 j + ω 1 j x 1 + + ω n j x n ) is maximal.

请注意,对于上述训练函数,我们所需做的就是输入数据特征(x值),它将返回一个类别编号:j

损失函数

我们推导了逻辑回归的交叉熵损失函数:

L ( ω ) = - 1 m i=1 m y true i log ( σ ( ω 0 + ω 1 x 1 i + + ω n x n i ) ) + ( 1 - y true i ) log ( 1 - σ ( ω 0 + ω 1 x 1 i + + ω n x n i ) ) ,

使用

c o s t = - log ( σ ( s ) ) if y true = 1 - log ( 1 - σ ( s ) ) if y true = 0 = - y true log ( σ ( s ) ) - ( 1 - y true ) log ( 1 - σ ( s ) )

现在我们将相同的逻辑推广到多个类别。让我们使用符号 y true,i = 1 来表示,如果某个数据点属于第 i 类,则为 1,否则为零。然后我们有与将某个数据点误分类相关的成本:

c o s t = - log ( σ ( s 1 ) ) if y true,1 = 1 - log ( σ ( s 2 ) ) if y true,2 = 1 - log ( σ ( s 3 ) ) if y true,3 = 1 - log ( σ ( s k ) ) if y true,k = 1 = - y true,1 log ( σ ( s 1 ) ) - - y true,k log ( σ ( s k ) ) .

在训练集中对所有m个数据点进行平均,我们得到广义交叉熵损失函数,将交叉熵损失函数从只有两类的情况推广到多类的情况:

L ( ω ) = - 1 m i=1 m y true,1 i log ( σ ( ω 0 1 + ω 1 1 x 1 i + + ω n 1 x n i ) ) + y true,2 i log ( σ ( ω 0 2 + ω 1 2 x 1 i + + ω n 2 x n i ) ) + + y true,k i log ( σ ( ω 0 k + ω 1 k x 1 i + + ω n k x n i ) )

优化

现在我们有了损失函数的公式,我们可以搜索它的最小化ω。由于我们将遇到的大多数损失函数都没有关于训练集和它们的目标标签的最小化的显式公式,因此我们将使用数值方法来寻找最小化值,特别是:下一章的梯度下降、随机梯度下降或小批量梯度下降。同样,广义交叉熵损失函数的凸性有助于我们在最小化过程中,因此我们保证能找到我们寻求的ω

关于交叉熵和信息论的说明

交叉熵概念源自信息论。我们将在本章后面讨论决策树时详细说明。现在,请记住以下数量,其中p是事件发生的概率:

log ( 1 p ) = - log ( p )

p较小时,上述数量较大,因此,它量化了不太可能事件的更大惊喜

关于逻辑函数和 softmax 函数以及统计力学的说明

如果您熟悉统计力学,您可能已经注意到逻辑函数和 softmax 函数以与统计力学领域的配分函数相同的方式计算概率,计算系统处于某种状态的概率。

将上述模型纳入神经网络的最后一层

线性回归模型通过适当地线性组合数据特征进行预测,然后加入偏差。逻辑回归和 softmax 回归模型通过适当地线性组合数据特征,加入偏差,然后将结果传递到概率评分函数中进行分类。在这些简单模型中,数据的特征仅被线性组合,因此,这些模型在捕捉数据特征之间潜在重要的非线性交互方面较弱。神经网络模型将非线性的激活函数纳入其训练函数中,并在多个层次上进行,因此更适合检测非线性和更复杂的关系。神经网络的最后一层是其输出层。倒数第二层将一些高阶特征输出并输入到最后一层。如果我们希望网络将数据分类为多个类别,那么我们可以将最后一层设为 softmax 层;如果我们希望将其分类为两个类别,那么我们的最后一层可以是逻辑回归层;如果我们希望网络预测数值,那么我们可以将其最后一层设为回归层。我们将在第五章中看到这些示例。

其他流行的机器学习技术和技术集成

在回归和逻辑回归之后,重要的是要涉足机器学习社区,并学习一些最流行的分类和回归任务技术背后的思想。支持向量机决策树随机森林非常强大和流行,能够执行分类和回归任务。自然的问题是,我们何时使用特定的机器学习方法,包括线性和逻辑回归,以及后来的神经网络?我们如何知道使用哪种方法并基于我们的结论和预测?这些是数学分析机器学习模型的类型的问题。

由于对每种方法的数学分析,包括它通常最适合的数据集类型,现在才开始受到严肃关注,这是在最近增加了对人工智能、机器学习和数据科学研究的资源分配之后。目前的做法是在同一数据集上尝试每种方法,并使用结果最好的那种。也就是说,假设我们有必要的计算和时间资源来尝试不同的机器学习技术。更好的是,如果你有时间和资源来训练各种机器学习模型(并行计算在这里非常完美),那么集成方法会将它们的结果组合起来,无论是通过平均还是投票,讽刺的是,数学上是合理的,会比最好的个体表现者取得更好的结果,甚至当最好的表现者是弱表现者时也是如此!

一个集成的例子是随机森林:它是一组决策树的集成。

当我们基于集成进行预测时,行业术语如bagging(或bootstrap aggregating)、pastingboosting(比如ADA boostGradient boosting)、stackingrandom patches会出现。Bagging 和 pasting 在训练集的不同随机子集上训练相同的机器学习模型。Bagging 使用替换从训练集中抽取实例,而 pasting 则不使用替换。Random patches也从特征空间中抽样,每次在随机特征子集上训练机器学习模型。当数据集具有许多特征时,比如图像(其中每个像素都是一个特征),这是非常有帮助的。Stacking学习集成的预测机制,而不是简单的投票或平均值。

支持向量机

支持向量机是一种极其流行的机器学习方法,能够在具有线性(平面)和非线性(曲线)决策边界的情况下执行分类和回归任务。

对于分类,该方法寻求使用尽可能宽的间隔来分离标记数据,从而产生最佳的分隔高速公路,而不是薄薄的分隔线。让我们解释一下支持向量机如何在本章的训练函数、损失函数和优化的结构上对标记数据实例进行分类。

训练函数

我们再次使用未知权重ω的数据点的特征进行线性组合,并添加偏差ω 0。然后通过sign函数得到答案:如果特征的线性组合加上偏差是一个正数,返回 1(或分类为第一类),如果是负数,返回-1(或分类为另一类)。因此,训练函数的公式变为:

f ( ω ; x ) = s i g n ( ω t x + ω 0 )

损失函数

我们必须设计一个损失函数,惩罚错误分类的点。对于逻辑回归,我们使用交叉熵损失函数。对于支持向量机,我们的损失函数基于一个称为hinge loss function的函数:

max ( 0 , 1 - y true ( ω t x + ω 0 ) ) .

让我们看看铰链损失函数如何惩罚分类错误。首先,回想一下y true是 1 或-1,取决于数据点是属于正类还是负类。

  • 如果对于某个数据点y true为 1,但ω t x + ω 0 < 0,训练函数将错误分类,并给出y predict = - 1,而铰链损失函数的值将为1 - ( 1 ) ( ω t x + ω 0 ) > 1,这是一个高惩罚,当你的目标是最小化时。

  • 另一方面,如果y true为 1 且ω t x + ω 0 < 0,训练函数将正确分类它并给出y predict = 1。然而,铰链损失函数设计成这样,即使ω t x + ω 0 < 1,它仍会对我们进行惩罚,其值将为1 - ( 1 ) ( ω t x + ω 0 ),现在小于 1 但仍大于零。

  • 只有当y true为 1 且ω t x + ω 0 < 1(训练函数仍然会正确分类这一点,并给出y predict = 1),则铰链损失函数值将为零,因为它将是零和负量之间的最大值。

  • y true为-1 时,相同的逻辑适用:铰链损失函数会对错误的预测进行严厉惩罚,对正确的预测进行轻微惩罚,但如果它与“零除数”(大于 1 的边距)的距离不够远,它将进行惩罚,并且仅当预测正确且该点距离“零除数”大于 1 时才返回零。

  • 请注意,零分隔器的方程式为ω t x + ω 0 = 0,边缘边缘的方程式为ω t x + ω 0 = - 1ω t x + ω 0 = 1。边缘边缘之间的距离很容易计算为2 ω 2。因此,如果我们想要增加这个边缘宽度,我们必须减少ω 2,因此,这个术语必须进入损失函数,以及 hingle 损失函数,惩罚误分类的点和边缘边界内的点。

现在,如果我们将所有 m 个数据点在训练集中的 hinge 损失平均,并添加ω 2 2,我们就得到了支持向量机常用的损失函数公式:

L ( ω ) = 1 m i=1 m max ( 0 , 1 - y true i ( ω t x i + ω 0 ) ) + λ ω 2 2

优化

我们现在的目标是寻找最小化损失函数的w 。让我们观察这个损失函数一分钟:

  • 它有两个项:1 m i=1 m max ( 0 , 1 - y true i ( ω t x i + ω 0 ) )λ ω 2 2。每当我们在优化问题中有多个项时,很可能它们是竞争项,也就是说,使第一项小且快乐的相同ω值可能会使第二项大且悲伤。因此,在寻找优化它们的和的ω 时,它是两个项之间的推拉游戏。

  • λ ω 2 2 项一起出现的λ是我们可以在训练过程的验证阶段调整的模型超参数的一个例子。请注意,控制λ的值有助于我们控制边缘的宽度:如果我们选择一个较大的λ值,优化器将忙于选择具有非常低ω 2 2ω ,以补偿较大的λ,并且损失函数的第一项将受到较少的关注。但请记住,较小的ω 2意味着更大的边缘!

  • λ ω 2 2 项也可以被视为正则化项,我们将在下一章中讨论。

  • 这个损失函数是凸的,并且下界为零,所以它的最小化问题并不太糟糕:我们不必担心陷入局部最小值。第一项具有奇点,但正如我们之前提到的,我们可以在奇异点定义其次梯度,然后应用下降方法。

一些优化问题可以被重新表述,而不是解决原始的原始问题,我们最终解决它的对偶问题!通常,一个问题比另一个更容易解决。我们可以将对偶问题看作是原始问题的平行宇宙中的另一个优化问题。这些宇宙在优化器处相遇。因此,解决一个问题会自动给出另一个问题的解。我们在研究优化时研究对偶性。特别感兴趣和应用广泛的领域是线性和二次优化,也称为线性和二次规划。我们目前有的最小化问题:

min ω 1 m i=1 m max ( 0 , 1 - y true i ( ω t x i + ω 0 ) ) + λ ω 2 2

这是二次规划的一个例子,它有一个对偶问题的公式,结果比原问题更容易优化(特别是当特征数量很高时):

max α j=1 m α j - 1 2 j=1 m k=1 m α j α k y true j y true k ( (x j ) t x k )

受到约束条件 α j 0 j=1 m α j y true j = 0 。当我们学习原始问题和对偶问题时,编写上述公式通常是直接的,因此我们跳过推导,以免打断我们的流程。

二次规划是一个非常成熟的领域,有许多软件包可以解决这个问题。一旦我们找到最大化的 α ,我们可以找到向量 ω ,使用 ω = j=1 m α j y true i x j 最小化原始问题。一旦我们有了 ω ,我们可以使用我们现在训练过的函数对新数据点进行分类:

f ( x new ) = s i g n ( ω t x new + ω 0 ) = s i g n ( j α j y i (x j ) t x new + ω 0 ) .

如果你想避免二次规划,还有另一种非常快速的方法叫做坐标下降,它解决了对偶问题,并且在具有大量特征的大数据集上表现非常好。

核技巧:我们可以将相同的思想应用于非线性分类

关于对偶问题的一个非常重要的注意事项:数据点只出现在一对中,更具体地说,只出现在一个标量积中,即。同样,它们只在训练函数中作为标量积出现。这个简单的观察可以产生魔法:

  • 如果我们找到一个函数,可以应用于数据点对,并且恰好给出我们转换后的数据点对的标量积到某个更高维度的空间(而不知道实际的转换是什么),那么我们可以通过用替换对偶问题公式中的标量积,在更高维度空间中解决完全相同的对偶问题。

  • 这里的直觉是,在低维度中非线性可分的数据几乎总是在高维度中线性可分。因此,将所有数据点转换到更高的维度,然后进行分离。核技巧解决了在更高维度中的线性分类问题,而不需要转换每个点。核本身评估了转换数据的点积,而不需要转换数据。非常酷的东西。

核函数的示例包括:

  • 多项式核:K ( x j , x j ) = (1+(x j ) t x j ) d .

  • 高斯核:K ( x j , x j ) = e -γ|x j -x k | 2 .

决策树

本章的驱动主题是一切都是一个函数,决策树本质上是一个以布尔变量作为输入的函数(这些变量只能假定为true(或 1)或false(或 0)值),例如:特征>5,特征=晴天,特征=男性,,并输出决策,例如:批准贷款,分类为 covid19,返回 25,。我们使用逻辑运算符,而不是添加或乘以布尔变量。

但是,如果我们的特征在原始数据集中不是布尔变量怎么办?那么我们必须在将它们馈送到模型进行预测之前将它们转换为布尔变量。例如,图 3-17 中的决策树是在 Fish Market 数据集上训练的。它是一个回归树。该树采用原始数据,但表示树的函数实际上是在新变量上操作的,这些新变量是原始数据特征转换为布尔变量:

  1. a1=(Width 5.117)

  2. a2=(Length3 59.55)

  3. a3=(Length3 41.1)

  4. a4=(Length3 34.9)

  5. a5=(Length3 27.95)

  6. a6=(Length3 21.25)

400

图 3-17. 基于 Fish Market 数据集构建的回归决策树。有关详细信息,请参阅附带的 Jupyter 笔记本。

现在,表示图 3-17 中决策树的函数是:

\(f(a Baseline 1, a Baseline 2, a Baseline 3, a Baseline 4, a Baseline 5, a Baseline 6) = (a Baseline 1 and a Baseline 5 and a Baseline 6) times 39.584 plus (a Baseline 1 and a Baseline 5 and not a Baseline 6) times 139.968 plus (a Baseline 1 and not a Baseline 5 and a Baseline 4) times 287.278 plus (a Baseline 1 and not a Baseline 5 and not a Baseline 4) times 422.769 plus (not a Baseline 1 and a Baseline 2 and a Baseline 3) times 639.737 plus (not a Baseline 1 and a Baseline 2 and not a Baseline 3) times 824.211 plus (not a Baseline 1 and not a Baseline 2) times 1600 dollar-sign\)

请注意,与我们迄今在本章中遇到的训练函数不同,上述函数没有我们需要解决的参数ω。这被称为非参数模型,它不会提前固定函数的形状。这使得它具有与数据一起增长或者说适应数据的灵活性。当然,这种对数据的高适应性也带来了过拟合数据的高风险。幸运的是,有办法解决这个问题,我们在这里列出了一些方法,但没有详细说明:在生长后修剪树,限制层数,设置每个节点的最小数据实例数,或者使用一组树而不是一棵树,称为随机森林,下面会讨论。

一个非常重要的观察:决策树决定只在原始数据集的两个特征上进行分割,即宽度和长度 3 特征。决策树的设计方式使得更重要的特征(那些对我们的预测提供最多信息的特征)更接近根部。因此,决策树可以帮助进行特征选择,我们选择最重要的特征来对我们最终模型的预测做出贡献。

难怪宽度和长度 3 特征最终成为预测鱼重量最重要的特征。图 3-18 中的相关矩阵和图 3-3 中的散点图显示所有长度特征之间存在极强的相关性。这意味着它们提供的信息是冗余的,并且在我们的预测模型中包含所有这些特征将增加计算成本并降低性能。

280

图 3-18. 鱼市场数据集的相关矩阵。所有长度特征之间存在极强的相关性。

注:特征选择

我们刚刚介绍了非常重要的特征选择主题。现实世界的数据集包含许多特征,其中一些可能提供冗余信息,其他一些对于预测我们的目标标签来说根本不重要。在机器学习模型中包含无关或冗余的特征会增加计算成本并降低性能。我们刚刚看到决策树是帮助选择重要特征的一种方法。另一种方法是一种称为 Lasso 回归的正则化技术,我们将在第四章中介绍。还有一些统计测试可以测试特征之间的依赖关系。F-测试测试线性依赖关系(这会为相关特征给出更高的分数,但仅仅依靠相关性是具有误导性的),互信息测试非线性依赖关系。这些提供了一个度量,衡量特征对确定目标标签的贡献程度,并因此有助于特征选择,保留最有前途的特征。我们还可以测试特征之间的依赖关系,以及它们的相关性和散点图。方差阈值移除方差很小或没有方差的特征,因为如果一个特征在自身内部变化不大,它的预测能力就很小。

我们如何在数据集上训练决策树?我们优化哪个函数?通常在生成决策树时优化两个函数:基尼不纯度。使用其中一个与另一个并没有太大区别。我们接下来会详细介绍这两个函数。

熵和基尼不纯度

在这里,我们决定根据被评估为最重要的特征来分割树的节点。基尼不纯度是衡量特征重要性的两种流行方法。它们在数学上并不等价,但它们都能工作并提供合理的决策树。基尼不纯度通常计算成本较低,因此它是软件包中的默认设置,但您可以选择从默认设置更改为熵。当某些类别的频率远高于其他类别时,使用基尼不纯度往往会产生较不平衡的树。这些类别最终会被孤立在它们自己的分支中。然而,在许多情况下,使用熵或基尼不纯度在生成的决策树中并没有太大的差异。

  1. 使用熵方法,我们寻找提供最大信息增益的特征分割(我们很快会给出它的公式)。信息增益源自信息理论,它与的概念有关。而熵又源自热力学和统计物理学,它量化了某个系统中的无序程度。

  2. 使用基尼不纯度方法,我们寻找提供子节点最低平均基尼不纯度的特征分割(我们也很快会给出它的公式)。

为了最大化信息增益(或最小化基尼不纯度),生长决策树的算法必须遍历训练数据子集的每个特征,并计算使用该特定特征作为节点进行拆分时所实现的信息增益(或基尼不纯度),然后选择提供最高信息增益(或子节点具有最低平均基尼不纯度)的特征。此外,如果特征具有实际数值,算法必须决定在节点上提出什么问题,也就是说,在哪个特征值上进行拆分,例如,x 5 < 0 . 1?算法必须在树的每一层依次执行此操作,计算每个节点中数据实例的特征的信息增益(或基尼不纯度),有时还要计算每个拆分值的可能性。通过示例更容易理解。但首先,我们写出熵、信息增益和基尼不纯度的公式。

熵和信息增益

理解熵公式最简单的方法是依靠直觉,即如果事件高概率发生,那么与之相关的惊喜就很少。因此,当p ( e v e n t )很大时,它的惊喜就很低。我们可以用一个随着概率增加而减少的函数来数学上表示这一点。微积分函数log 1 x适用,并且具有独立事件的惊喜相加的附加属性。因此,我们可以定义:

S u r p r i s e ( e v e n t ) = log 1 p(event) = - log ( p ( e v e n t ) )

现在,随机变量的熵(在我们的情况下是训练数据集中的特定特征)被定义为与随机变量相关的预期惊喜,因此我们必须将随机变量的每种可能结果(所涉及特征的每个值的惊喜)与它们各自的概率相乘,得到:

E n t r o p y ( X ) = - p ( o u t c o m e 1 ) log ( p ( o u t c o m e 1 ) ) - p ( o u t c o m e 2 ) log ( p ( o u t c o m e 2 ) ) - - p ( o u t c o m e n ) log ( p ( o u t c o m e n ) ) .

我们训练数据的一个特征的熵假设有一堆值是:

E n t r o p y ( F e a t u r e ) = - p ( v a l u e 1 ) log ( p ( v a l u e 1 ) ) - p ( v a l u e 2 ) log ( p ( v a l u e 2 ) ) - - p ( v a l u e n ) log ( p ( v a l u e n ) )

由于我们的目标是选择在提供关于结果(标签或目标特征)的大信息增益的特征上进行分割,让我们首先计算结果特征的熵。为简单起见,假设这是一个二元分类问题,因此结果特征只有两个值:正(在类中)和负(不在类中)。如果让p表示目标特征中的正实例数,n表示负实例数,则p+n=m将是训练数据子集中的实例数。现在从该目标列中选择正实例的概率将是p m = p p+n,选择负实例的概率类似地是n m = n p+n。因此,结果特征的熵(不利用其他特征的任何信息)是:

E n t r o p y ( Outcome Feature ) = - p ( p o s i t i v e ) log ( p ( p o s i t i v e ) ) - p ( n e g a t i v e ) log ( p ( n e g a t i v e ) ) = - p p+n log ( p p+n ) - n p+n log ( n p+n )

现在我们利用另一个特征的信息,并计算结果特征熵的差异,我们期望随着获得更多信息(更多信息通常会导致更少的惊喜),结果特征的熵将减少。

假设我们选择特征A来分割我们决策树上的一个节点。假设特征A有四个值,并且有k 1个实例具有v a l u e 1,其中p 1个标记为正,n 1个标记为负,所以p 1 + n 1 = k 1。同样,特征Ak 2个实例具有v a l u e 2,其中p 2个标记为正,n 2个标记为负,所以p 2 + n 2 = k 2。对于特征Av a l u e 3v a l u e 4也是一样的。注意k 1 + k 2 + k 3 + k 4 = m,即数据集训练子集中的实例总数。现在,特征A的每个值v a l u e k可以被视为一个随机变量,具有p k个正结果和n k个负结果,因此我们可以计算它的熵(期望的惊喜)。

数学符号开始布局第一行第一列熵左括号 v a l u e 1 右括号第二列等于负开始分数 p 1 除以 p 1 加 n 1 结束分数对数左括号开始分数 p 1 除以 p 1 加 n 1 结束分数右括号减开始分数 n 1 除以 p 1 加 n 1 结束分数对数左括号开始分数 n 1 除以 p 1 加 n 1 结束分数右括号第二行第一列熵左括号 v a l u e 2 右括号第二列等于负开始分数 p 2 除以 p 2 加 n 2 结束分数对数左括号开始分数 p 2 除以 p 2 加 n 2 结束分数右括号减开始分数 n 2 除以 p 2 加 n 2 结束分数对数左括号开始分数 n 2 除以 p 2 加 n 2 结束分数右括号第三行第一列熵左括号 v a l u e 3 右括号第二列等于负开始分数 p 3 除以 p 3 加 n 3 结束分数对数左括号开始分数 p 3 除以 p 3 加 n 3 结束分数右括号减开始分数 n 3 除以 p 3 加 n 3 结束分数对数左括号开始分数 n 3 除以 p 3 加 n 3 结束分数右括号第四行第一列熵左括号 v a l u e 4 右括号第二列等于负开始分数 p 4 除以 p 4 加 n 4 结束分数对数左括号开始分数 p 4 除以 p 4 加 n 4 结束分数右括号减开始分数 n 4 除以 p 4 加 n 4 结束分数对数左括号开始分数 n 4 除以 p 4 加 n 4 结束分数右括号结束布局。

既然我们有了这些信息,我们可以计算在特征A上分割后的预期熵,因此我们将上述四个熵分别乘以其相应的概率相加。请注意,p ( v a l u e 1 ) = k 1 mp ( v a l u e 2 ) = k 2 mp ( v a l u e 3 ) = k 3 m,以及p ( v a l u e 4 ) = k 4 m。因此,在特征A上分割后的预期熵将是:

预期 ( 特征 A ) = p ( v a l u e 1 ) ( v a l u e 1 ) + p ( v a l u e 2 ) ( v a l u e 2 ) + p ( v a l u e 3 ) ( v a l u e 3 ) + p ( v a l u e 4 ) ( v a l u e 4 ) = k 1 m ( v a l u e 1 ) + k 2 m ( v a l u e 2 ) + k 3 m ( v a l u e 3 ) + k 4 m ( v a l u e 4 )

其中,特征A的每个值的熵在前一段中给出。

那么,使用特征A进行分割所获得的信息是什么?这将是没有来自特征A的任何信息时结果特征的熵与特征A的预期熵之间的差异。因此,我们有一个关于信息增益的公式,假设我们决定在特征A上进行分割:

Information Gain = E n t r o p y ( Outcome Feature ) - Expected Entropy ( Feature A ) = - p p+n log ( p p+n ) - n p+n log ( n p+n ) - Expected Entropy ( Feature A ) .

现在很容易浏览训练数据子集的每个特征,并计算使用该特征进行拆分后产生的信息增益。最终,决策树算法决定在具有最高信息增益的特征上进行拆分。该算法对每个节点和树的每一层递归执行此操作,直到没有要拆分的特征或数据实例。因此,我们得到了基于熵的决策树。

将上述逻辑推广到具有多类输出的情况并不太困难,例如,具有三个或更多目标标签的分类问题。经典的Iris 数据集来自UCI 机器学习库是一个具有三个目标标签的绝佳示例。该数据集为给定的鸢尾花具有四个特征:其萼片长度和宽度,以及其花瓣长度和宽度。请注意,每个特征都是连续随机变量,而不是离散的。因此,我们必须设计一个测试来拆分每个特征的值,应用上述逻辑之前。这是数据科学项目的特征工程阶段的一部分。这里的工程步骤是:将连续值特征转换为布尔特征,例如,花瓣长度>2.45?我们不会详细介绍如何选择数字 2.45,但是现在你可能可以猜到这里也应该进行优化过程。

基尼不纯度

每个决策树都由其节点,分支和叶子特征。如果一个节点只包含来自训练数据子集的具有相同目标标签的数据实例(这意味着它们属于同一类),则认为该节点是的。请注意,纯节点是期望的节点,因为我们知道它的类别。因此,算法希望以最小化节点的不纯度的方式来生长树:如果节点中的数据实例不都属于同一类,则该节点是不纯的。基尼不纯度以以下方式量化这种不纯度:

假设我们的分类问题有三个类别,就像Iris 数据集一样。假设决策树中的某个节点是为了适应这个数据集而生长的,有n个训练实例,其中n 1个属于第一类,n 2个属于第二类,n 3个属于第三类(所以n 1 + n 2 + n 3 = n)。那么这个节点的基尼不纯度由以下公式给出:

Gini impurity = 1 - (n 1 n) 2 - (n 2 n) 2 - (n 3 n) 2

因此,对于每个节点,计算属于每个类别的数据实例的比例,然后求平方,然后从 1 中减去这些的总和。请注意,如果节点的所有数据实例都属于同一类,则上述公式给出的基尼不纯度等于零。

决策树生长算法现在寻找每个特征和特征中的分割点,以产生平均基尼不纯度最低的子节点。这意味着节点的子节点平均上必须比父节点更纯。因此,该算法试图最小化两个子节点(二叉树)的基尼不纯度的加权平均值。每个子节点的基尼不纯度由其相对大小加权,其相对大小是其实例数与该树层中的总实例数(与其父节点的实例数相同)之比。因此,我们最终需要搜索解决以下最小化问题的特征和分割点(对于每个特征)组合:

min Feature,FeatureSplitValue n left n G i n i ( Left Node ) + n right n G i n i ( Right Node )

左右子节点中最终存在的数据实例的数量分别为n leftn rightn是父节点中存在的数据实例的数量(注意n leftn right必须加起来等于n)。

回归决策树

需要指出的是,决策树既可以用于回归也可以用于分类。回归决策树返回的是预测值而不是类别,但与分类树类似的过程适用。

与选择最大化信息增益或最小化基尼不纯度的特征和特征值(例如,身高>3 英尺吗?)来分割节点不同,我们选择最小化真实标签与左右子节点中所有实例标签的平均值之间的均方距离的特征和特征值。也就是说,算法选择要分割的特征和特征值,然后查看由该分割产生的左右子节点,并计算:

  • 左节点中所有训练数据实例标签的平均值。这个平均值将成为左节点值y left,如果该节点最终成为叶节点,这就是决策树预测的值。

  • 右节点中所有训练数据实例标签的平均值。这个平均值将成为右节点值y right。同样,如果该节点最终成为叶节点,这就是决策树预测的值。

  • 左节点值与左节点中每个实例的真实标签之间的平方距离之和 LeftNodeInstances |y true i -y left | 2

  • 右节点值与右节点中每个实例的真实标签之间的平方距离之和 RightNodeInstances |y true i -y right | 2

  • 上述两个总和的加权平均值,其中每个节点的权重由其相对于父节点的大小加权,就像我们对基尼不纯度所做的那样:

n left n LeftNodeInstances | y true i - y left | 2 + n right n RightNodeInstances | y true i - y right | 2 ) .

上述算法是贪婪和计算密集的,因为它必须对每个特征和每个可能的特征拆分值进行操作,然后选择提供左右子节点之间加权平方误差平均值最小的特征和特征拆分。

CART(分类和回归树)算法是一种著名的算法,被软件包使用,包括 Python 的 Scikit Learn,我们在 Jupyter 笔记本中使用这本书的补充。该算法生成的树的节点只有两个子节点(二叉树),每个节点上的测试只有是或否的答案。其他算法,如 ID3,可以生成具有两个或多个子节点的树。

决策树的缺点

决策树非常容易解释,因为有很多很好的原因而受欢迎:它们适应大数据集,不同的数据类型(离散和连续特征,不需要数据缩放),并且可以执行回归和分类任务。然而,它们可能不稳定,因为向数据集添加一个实例就可以改变树的根,从而导致非常不同的决策树。它们也对数据中的旋转敏感,因为它们的决策边界通常是水平和垂直的(不像支持向量机那样倾斜)。这是因为拆分通常发生在特定的特征值,因此决策边界最终与特征轴平行。解决这个问题的一个方法是转换数据集以匹配其主轴,使用稍后在第十一章中介绍的奇异值分解方法。决策树往往会过度拟合数据,因此需要修剪。这通常使用统计测试来完成。构建树涉及的贪婪算法,其中搜索发生在所有特征及其值上,使它们在计算上昂贵且不太准确。接下来讨论的随机森林解决了其中一些缺点。

随机森林

当我第一次了解决策树时,最令我困惑的是:

  • 我们如何开始构建树,也就是如何决定哪个数据特征是根特征?

  • 在特定的特征值上,我们决定如何分割一个节点?

  • 我们什么时候停下来?

  • 实质上,我们如何构建一棵树?

(请注意,我们在上一小节中回答了一些上述问题。)我在网上寻找答案时并没有使事情变得更容易,只是遇到了声明说决策树很容易构建和理解,所以感觉自己是唯一一个对决策树深感困惑的人。

当我了解了随机森林后,我的困惑立刻消失了。随机森林的惊人之处在于,我们可以获得非常好的回归或分类结果,而不需要回答我困惑的问题。通过随机化整个过程,也就是构建许多决策树并用两个词回答我的问题:“随机选择”,然后将它们的预测聚合在一起,产生非常好的结果,甚至比一个精心设计的决策树还要好。有人说随机化经常产生可靠性

随机森林的另一个非常有用的特性是它们提供了特征重要性的度量,帮助我们找出哪些特征对我们的预测有显著影响,并且也有助于特征选择。

k 均值聚类

数据分析师的一个常见目标是将数据分成,每个簇突出显示某些共同特征。k 均值聚类是一种常见的机器学习方法,它将n个数据点(向量)分成k个簇,其中每个数据点被分配到与其最近均值的簇。每个簇的均值,或者它的质心,作为簇的原型。总的来说,k 均值聚类最小化了每个簇内的方差(到均值的平方欧氏距离)。

k 均值聚类最常见的算法是迭代的:

  • 从初始的一组k均值开始。这意味着我们提前指定了簇的数量,这就引出了一个问题:如何初始化?如何选择第一个k质心的位置?有相关的文献。

  • 将每个数据点分配到与其平方欧氏距离最近的簇中。

  • 重新计算每个簇的均值。

当数据点分配到每个簇不再改变时,算法收敛。

分类模型的性能度量

开发计算事物并产生输出的数学模型相对容易。但是,开发能够很好地执行我们期望的任务的模型则完全不同。此外,根据某些指标表现良好的模型在其他一些指标下表现不佳。我们需要额外小心地开发性能指标,并根据我们特定的用例决定依赖于哪些指标。

衡量预测数值的模型的性能,例如回归模型,比分类模型更容易,因为我们有许多方法来计算数字之间的距离(好的预测和坏的预测)。另一方面,当我们的任务是分类(我们可以使用逻辑回归、softmax 回归、支持向量机、决策树、随机森林或神经网络等模型),我们必须对评估性能进行一些额外的思考。此外,通常存在权衡。例如,如果我们的任务是将 YouTube 视频分类为适合儿童观看(正面)或不适合儿童观看(负面),我们是否调整我们的模型以减少假阳性或假阴性的数量?显然,如果一个视频被分类为安全,而实际上是不安全的(假阳性),那么问题就更加棘手,因此我们的性能指标需要反映这一点。

以下是常用于分类模型的性能测量。不要担心记住它们的名称,因为它们的命名方式并不合乎逻辑。相反,花时间理解它们的含义。

  • 准确度:预测模型正确分类的百分比:

A c c u r a c y = 正例+负例 所有预测为正例+所有预测为负例

  • 混淆矩阵:计算所有真正例、假正例、真负例和假负例。
真负例 假正例
假负例 真正例
  • 精确度分数:正预测的准确性:

P r e c i s i o n = 正例 所有预测为正例 = 正例 正例+正例

  • 召回率分数:被正确分类的正实例的比率:

R e c a l l = 正例 所有正标签 = 正例 正例+负例

  • 特异度:被正确分类的负实例的比率:

S p e c i f i c i t y = 负例 所有负标签 = 负例 负例+正例

  • F 1 分数:只有在精确度和召回率得分都很高时才会很高:

F 1 = 2 1 precision+1 recall

  • AUC(曲线下面积)和 ROC(接收器操作特性)曲线:这些曲线提供了分类模型在各种阈值下的性能度量。我们可以使用这些曲线来衡量某个变量预测某个结果的能力,例如,GRE 学科考试成绩如何预测在第一年通过研究生院的资格考试?

Andrew Ng 的百页书《机器学习渴望》提供了性能指标最佳实践的出色指南。在真正的人工智能应用之前,请仔细阅读,因为该书的方法基于许多试验、成功和失败。

总结和展望

在本章中,我们调查了一些最流行的机器学习模型,强调了本书中出现的特定数学结构:训练函数、损失函数和优化。我们讨论了线性、逻辑和 softmax 回归,然后迅速地浏览了支持向量机、决策树、集成和随机森林。

此外,我们提出了研究以下数学主题的理由:

微积分

最小值和最大值发生在边界或导数为零或不存在的点。

线性代数

  • 线性组合特征:ω 1 x 1 + ω 2 x 2 + + ω n x n

  • 使用矩阵和向量表示各种数学表达式。

  • 两个向量的数量积a t b

  • 向量的l 2范数。

  • 避免使用病态矩阵。消除线性相关的特征。这也与特征选择有关。

  • 避免矩阵相乘,这太昂贵了。改为将矩阵乘以向量。

优化

  • 对于凸函数,我们不必担心陷入局部最小值,因为局部最小值也是全局最小值。我们担心狭窄的山谷(下一章)。

  • 梯度下降方法,它们只需要一个导数(下一章)。

  • 牛顿法,它们需要两个导数或两个导数的近似(对于大数据不方便)。

  • 二次规划,对偶问题和坐标下降(都出现在支持向量机中)。

统计学

  • 相关矩阵和散点图。

  • 特征选择的 F 检验和互信息。

  • 标准化数据特征(减去平均值并除以标准差)。

我们没有也不会再讨论的更多步骤(但尚未):

  • 验证我们的模型-调整权重值和超参数,以避免过拟合。

  • 在测试数据的测试子集上测试训练模型,这是我们的模型在训练和验证步骤中没有使用(或看到)的(我们在附带的 Jupyter 笔记本中进行此操作)。

  • 部署和监控最终模型。

  • 永远不要停止思考如何改进我们的模型,以及如何更好地将它们整合到整个生产流程中。

在下一章中,我们将迈入神经网络的新而令人兴奋的时代。

第四章:神经网络的优化

我已经活了我生命中的每一天进行优化...我的第一个顿悟是当我发现我们的大脑也会学习世界的模型。

各种人工神经网络在其架构中具有全连接层。在本章中,我们解释全连接神经网络的数学原理,并通过一个真实数据集的端到端示例进行讲解。我们设计并尝试各种训练和损失函数。我们还解释了训练神经网络时使用的优化和反向传播步骤与我们大脑中学习的方式相似。大脑通过在面对之前见过的概念时加强神经元之间的连接来学习,并在学习到破坏或与之前学到的概念相矛盾的新信息时削弱连接。机器只能理解数字。从数学上讲,更强的连接对应于更大的数字,而更弱的连接对应于更小的数字。

最后,我们将介绍各种正则化技术,解释它们的优点、缺点和用例。

大脑皮层和人工神经网络

神经网络是模仿大脑皮层的结构,其中涉及数十亿个神经元排列成分层结构。图 4-1 显示了大脑新皮层的三个垂直横截面图像,图 4-2 显示了一个完全连接的人工神经网络的图表。

300

图 4-1. Santiago Ramon y Cajal 绘制的三幅皮层层析图,摘自书籍《人类皮层感觉区域的比较研究》。每幅图显示了皮层的垂直横截面,皮层的表面(最靠近头骨的最外侧)位于顶部。左侧:染色的成年人视觉皮层。中间:染色的成年人运动皮层。右侧:一个半月大婴儿的 Golgi 染色皮层。Nissl 染色显示神经元的细胞体。Golgi 染色显示了一组随机神经元的树突和轴突。图片来源:维基百科。在所有三个横截面中,皮层中神经元的分层结构是显而易见的。

300

图 4-2. 一个具有四层的全连接或密集的人工神经网络。

尽管大脑皮层的不同区域负责不同的功能,比如视觉、听觉感知、逻辑思维、语言、言语等,但实际上决定特定区域功能的是它的连接:它连接到哪些感觉和运动技能输入输出区域。这意味着,如果一个皮层区域连接到不同的感觉输入/输出区域,例如,一个视觉而不是听觉的地方,那么它将执行视觉任务(计算),而不是听觉任务。在非常简化的意义上,皮层在神经元水平上执行一个基本功能。在人工神经网络中,基本的计算单元是感知器,它在整个网络中的功能方式相同。神经网络(无论是大脑皮层还是人工神经网络)的各种连接、层和架构是使这些计算结构能够执行非常令人印象深刻的任务的原因。

训练功能:全连接或密集的前馈神经网络

全连接密集的人工神经网络中(参见图 4-2),每个神经元,由每一层中的节点(圆圈)表示,都连接到下一层中的所有神经元。第一层是输入层,最后一层是输出层,中间层称为隐藏层。神经网络本身,无论是全连接还是不全连接(我们将在接下来的几章中遇到的网络是卷积的,不是全连接的),都是表示训练函数公式的计算图。请记住,训练后我们使用这个函数进行预测。

在神经网络的背景下,训练意味着通过最小化损失函数找到进入训练函数公式的参数值或权重。这类似于我们在第三章中讨论的线性回归、逻辑回归、softmax 回归和支持向量机模型的训练。数学结构保持不变:

  1. 训练函数

  2. 损失函数

  3. 优化

唯一的区别是,在第三章中简单模型的训练函数公式非常简单。它们线性组合数据特征,添加偏置项(ω 0),并将结果传递至最多一个非线性函数(例如,在逻辑回归中的逻辑函数)。因此,这些模型的结果也很简单:线性(平坦)函数用于线性回归,逻辑回归中不同类别之间的线性分界线,softmax 回归和支持向量机。即使我们使用这些简单模型来表示非线性数据,例如多项式回归(将数据拟合到特征的多项式函数中)或带有核技巧的支持向量机,我们仍然得到线性函数或分界线,但在更高的维度(对于多项式回归,维度将是特征及其幂)或转换后的维度(例如当我们使用支持向量机的核技巧时)。

另一方面,对于神经网络模型,线性组合特征、添加偏置项,然后通过非线性函数(现在称为激活函数)传递结果的过程是发生在一个神经元中的计算。这个简单的过程在成百上千、甚至数百万个神经元中一遍又一遍地发生,这些神经元排列在层中,其中一层的输出作为下一层的输入。类似于大脑皮层,许多神经元和层上的简单和相似过程的聚合产生了或允许了更复杂功能的表示。这有点神奇。幸运的是,我们能够比我们的大脑神经网络更多地了解人工神经网络,主要是因为我们设计它们,毕竟,人工神经网络只是一个数学函数。一旦我们在数学的镜头下剖析它,没有黑匣子会保持黑暗。也就是说,对人工神经网络的数学分析是一个相对较新的领域:仍有许多问题有待解答,还有很多待发现的东西。

神经网络是训练函数的计算图表示

即使是只有五个神经元的网络,比如图 4-3 中的网络,编写训练函数的公式也会非常混乱。这证明了使用计算图来有组织地、简单地表示神经网络的合理性。图表的特点是两个方面:节点和边(恭喜,这是图论中的第一课)。在神经网络中,连接第 m 层的节点 i 和第 n 层的节点 j 的边被赋予权重ω mn,ij。这是一个边上的四个指标!为了避免淹没在指标的深海中,我们必须将神经网络的权重组织成矩阵。

250

图 4-3. 一个只有五个神经元的全连接(或密集)前馈神经网络,排列在三层中。第一层(最左边的三个黑点)是输入层,第二层是唯一的隐藏层,有三个神经元,最后一层是有两个神经元的输出层。

让我们建模一个前馈全连接神经网络的训练函数。前馈意味着信息通过代表网络训练函数的计算图向前传递。

线性组合,添加偏差,然后激活

当信息通过一个神经元流动时会发生什么样的计算:使用不同的权重线性组合输入信息,添加偏差项,然后使用非线性函数激活神经元。我们将逐步进行这个过程。

权重

让矩阵W 1包含incident to隐藏层 1 的边的权重,W 2包含incident to隐藏层 2 的边的权重,依此类推,直到达到输出层。

因此,对于图 4-3 中表示的小型神经网络,我们只有h=1个隐藏层,获得两个权重矩阵:

W 1 = ω 11 1 ω 12 1 ω 13 1 ω 21 1 ω 22 1 ω 23 1 ω 31 1 ω 32 1 ω 33 1 and W h+1 = W 2 = W output = ω 11 2 ω 12 2 ω 13 2 ω 21 2 ω 22 2 ω 23 2 ,

上标表示边指向的层。请注意,如果输出层只有一个节点而不是两个,那么权重矩阵的最后一个矩阵将只是一个行向量:

W h+1 = W 2 = W output = ω 11 2 ω 12 2 ω 13 2

现在在这个神经网络的一个节点上进行两次计算:

  1. 一个线性组合加上偏差。

  2. 通过非线性激活函数(微积分中的复合运算)传递结果。

我们详细说明这两个,然后最终构建完全连接前馈神经网络的训练函数,该网络在图 4-3 中表示。

线性组合加偏差

在第一个隐藏层的第一个节点处(这个小网络的唯一隐藏层),我们线性组合输入:

z 1 1 = ω 11 1 x 1 + ω 12 1 x 2 + ω 13 1 x 3 + ω 01 1

在第一个隐藏层的第二个节点处,我们使用不同的权重线性组合输入:

z 2 1 = ω 21 1 x 1 + ω 22 1 x 2 + ω 23 1 x 3 + ω 02 1

在第一个隐藏层的第三个节点处,我们使用不同的权重线性组合输入:

z 3 1 = ω 31 1 x 1 + ω 32 1 x 2 + ω 33 1 x 3 + ω 03 1

让我们用向量和矩阵表示上述三个方程。这将极大方便我们后面的优化任务,当然也会保持我们的理智:

z 1 1 z 2 1 z 3 1 = ω 11 1 ω 21 1 ω 31 1 x 1 + ω 12 1 ω 22 1 ω 32 1 x 2 + ω 13 1 ω 23 1 ω 33 1 x 3 + ω 01 1 ω 02 1 ω 03 1 = ω 11 1 ω 12 1 ω 13 1 ω 21 1 ω 22 1 ω 23 1 ω 31 1 ω 32 1 ω 33 1 x 1 x 2 x 3 + ω 01 1 ω 02 1 ω 03 1 .

我们现在可以将上述表达式简洁地总结为:

z 1 = W 1 x + ω 0 1

通过非线性激活函数传递结果

线性组合特征并添加偏差不足以捕捉数据中更复杂的信息,神经网络如果没有这一关键但非常简单的步骤就永远不会成功:在隐藏层的每个节点处与非线性函数组合。

线性组合的线性组合仍然是线性组合

如果我们跳过与非线性函数组合的步骤,仅使用线性组合将信息从第一层传递到下一层,那么我们的网络将无法在下一层学到任何新知识。它将无法从一层到下一层捕捉到更复杂的特征。为什么会这样的数学原因很简单。为了简单起见,假设我们只有两个输入特征,第一个隐藏层只有两个节点,第二个隐藏层也有两个节点。那么没有非线性激活函数的第一个隐藏层的输出将是:

z 1 1 = ω 11 1 x 1 + ω 12 1 x 2 + ω 01 1 z 2 1 = ω 21 1 x 1 + ω 22 1 x 2 + ω 02 1

在第二个隐藏层,这些将再次进行线性组合,因此这一层的第一个节点的输出将是:

z 1 2 = ω 11 2 z 1 1 + ω 12 2 z 2 1 + ω 01 2 = ω 11 2 ( ω 11 1 x 1 + ω 12 1 x 2 + ω 01 1 ) + ω 21 2 ( ω 21 1 x 1 + ω 22 1 x 2 + ω 02 1 ) + ω 01 2 = ( ω 11 2 ω 11 1 + ω 21 2 ω 21 1 ) x 1 + ( ω 11 2 ω 12 1 + ω 21 2 ω 22 1 ) x 2 + ( ω 11 2 ω 01 1 + ω 21 2 ω 02 1 + ω 01 2 ) = ω 1 x 1 + ω 2 x 2 + ω 3 .

这个输出只是原始特征加偏差的简单线性组合。因此,添加一个没有任何非线性激活的层不会带来任何新的东西。换句话说,训练函数将保持线性,并且缺乏捕捉数据中任何非线性关系的能力。

我们是决定非线性激活函数公式的人,不同的节点可以有不同的激活函数,尽管在实践中很少这样做。设 f 为这个激活函数,那么第一个隐藏层的输出将是:

s 1 = f ( z 1 ) = f ( W 1 x + ω 0 1 ) .

现在很容易看到,如果我们有更多的隐藏层,它们的输出将与前一层的输出链接在一起,使得编写训练函数有点繁琐:

s 2 = f ( z 2 ) = f ( W 2 s 1 + ω 0 2 ) = f ( W 2 ( f ( W 1 x + ω 0 1 ) ) + ω 0 2 ) , s 3 = f ( z 3 ) = f ( W 3 s 2 + ω 0 3 ) = f ( W 3 ( f ( W 2 ( f ( W 1 x + ω 0 1 ) ) + ω 0 2 ) ) + ω 0 3 ) .

这种链接继续下去,直到我们到达输出层。在这个最后一层发生的情况取决于网络的任务。如果目标是回归(预测一个数值)或二元分类(分类为两类),那么我们只有一个输出节点(参见图 4-4)。

250

图 4-4. 一个仅有九个神经元排列在四层中的全连接(或密集)前馈神经网络。最左边的第一层是输入层,第二层和第三层是每个四个神经元的两个隐藏层,最后一层是仅有一个神经元的输出层(此网络执行回归任务或二元分类任务)。
  • 如果任务是回归,我们在最终输出节点处线性组合前一层的输出,添加偏差,然后结束(在这种情况下通过非线性函数传递结果)。由于输出层只有一个节点,输出矩阵只是一个行向量W output = W h+1,和一个偏差ω 0 h+1。网络的预测现在将是:

y predict = W h+1 s h + ω 0 h+1 ,

其中 h 是网络中隐藏层的总数(不包括输入和输出层)。

  • 另一方面,如果任务是二元分类,那么我们再次只有一个输出节点,在这里我们线性组合前一层的输出,添加偏差,然后通过逻辑函数传递结果σ ( s ) = 1 1+e -s,导致网络的预测:

y predict = σ ( W h+1 s h + ω 0 h+1 )

  • 如果任务是分类到多个类别,比如五个类别,那么输出层将包括五个节点。在这些节点中,我们线性组合前一层的输出,添加偏差,然后通过 softmax 函数传递结果:

σ ( z 1 ) = e z 1 e z 1 +e z 2 +e z 3 +e z 4 +e z 5 , σ ( z 2 ) = e z 2 e z 1 +e z 2 +e z 3 +e z 4 +e z 5 , σ ( z 3 ) = e z 3 e z 1 +e z 2 +e z 3 +e z 4 +e z 5 , σ ( z 4 ) = e z 4 e z 1 +e z 2 +e z 3 +e z 4 +e z 5 , σ ( z 5 ) = e z 5 e z 1 +e z 2 +e z 3 +e z 4 +e z 5 .

将上述分组为一个矢量函数σ ,该函数还将矢量作为输入:σ ( z ),那么神经网络的最终预测是一个包含五个概率分数的向量,表示数据实例属于五个类别中的每一个的概率:

y predict = σ ( z ) = σ ( W output s h + ω 0 h+1 )

符号概述

在我们讨论神经网络时,我们将尽量保持符号的一致性:x 是输入特征,W 是包含用于线性组合的权重的矩阵或列向量,ω 0是有时分组为矢量的偏差,z 是线性组合加偏差的结果,s是将这些结果传递到非线性激活函数中的结果。

常见的激活函数

理论上,我们可以使用任何非线性函数来激活我们的节点(想象我们曾经遇到的所有微积分函数)。在实践中,有一些流行的函数,如下所列,并在图 4-5 中绘制。

275

图 4-5。神经网络的各种激活函数。第一行由类似字母 S 形状的 Sigmoid 型激活函数组成。对于输入的绝对值较大,这些函数会饱和(变得平坦并输出相同的值)。第二行由不会饱和的 ReLU 型激活函数组成。

到目前为止,修正线性单元函数(简称 ReLU)是当今网络中最常用的激活函数,2012 年AlexNet的成功部分归因于使用这种激活函数,而不是当时神经网络中常用的双曲正切和逻辑函数(Sigmoid)。下面列表中的前四个函数以及图 4-5 中的函数都受到计算神经科学的启发,它们试图模拟一个神经元细胞的激活(发射)阈值。它们的图形看起来相似,有些是其他函数的平滑变体,有些只输出正数,其他输出在-1 和 1 之间或在- π 2π 2之间的更平衡的数字。它们对于小或大的输入都会饱和,意味着它们的图形对于绝对值较大的输入会变得平坦。这会导致学习问题,因为如果这些函数一遍又一遍地输出相同的数字,那么学习就不会发生太多。从数学上讲,这表现为所谓的梯度消失问题。第二组激活函数试图纠正这种饱和问题,它确实做到了,正如我们在图 4-5 的第二行图中所看到的。然而,这引入了另一个问题,称为梯度爆炸问题,因为这些激活函数是无界的,现在可以输出大数字,如果这些数字在多个层上增长,我们就会遇到问题。引入的每个新问题都伴随着一套尝试解决它的技术,例如梯度裁剪,在每一层后对输出进行归一化,等等。重要的一点是,这一切都不是魔法。其中很多是试错,新方法出现是为了解决其他新方法引入的问题。我们只需要理解原则,为什么和如何,对领域中流行的内容有一定了解,同时保持开放的思维来改进事物,或者完全不同的方式来做事。

让我们列出常见激活函数的公式,以及它们的导数。在我们寻找神经网络最佳权重时,我们需要计算训练函数的一个导数,以优化损失函数:

  • 阶跃函数:f ( z ) = 0 if z < 0 1 if z 0

其导数:

  • 逻辑函数:

其导数:

  • 双曲正切函数:

它的导数:

  • 反正切函数:

其导数:

  • 整流线性单元函数或 ReLU(z):

其导数:

  • 泄漏整流线性单元函数(或参数化线性单元):

其导数:

  • 指数线性单元函数:f(z)= {α(e^z - 1)如果 z < 0;z 如果 z ≥ 0}。

它的导数:f'(z)= {f(z)+ α如果 z < 0;1 如果 z ≥ 0}。

  • Softplus 函数:f(z)= ln(1 + e^z)。

它的导数:f'(z)= 1 /(1 + e^-z)= σ(z)。

请注意,所有这些激活函数都是相当基本的函数。这是一件好事,因为它们及其导数通常参与在训练、测试和部署神经网络过程中涉及数千个参数(权重)和数据实例的大规模计算,因此最好保持它们基本。另一个原因是,在理论上,我们最终选择的激活函数并不真的重要,因为接下来将讨论的通用函数逼近定理。在操作上,我们选择神经网络节点的激活函数确实很重要。正如我们在本节前面提到的,AlexNet 在图像分类任务中取得成功部分归功于其使用的修正线性单元函数 ReLU(z)。在这种情况下,理论和实践并不矛盾,尽管表面上看起来是这样。我们将在下一小节中解释这一点。

通用函数逼近

逼近定理一旦可用,就会很棒,因为它们以数学的信心和权威告诉我们,如果我们有一个我们不知道的函数,或者我们知道但难以包含在我们的计算中的函数,那么我们根本不必处理这个未知或困难的函数。相反,我们可以使用更容易计算的已知函数来近似它,以很高的精度。这意味着在未知或复杂函数以及已知和简单(有时是基本的)函数的一定条件下,我们可以使用简单函数,并确信我们的计算是正确的。这些类型的逼近定理量化了真实函数与其近似之间的差距,因此我们确切地知道在用这个近似替代真实函数时我们所犯的错误有多少。

神经网络,甚至有时只有一个隐藏层的非深度神经网络,在视觉、语音识别、分类、回归等各种任务中取得了如此成功的成就,这意味着它们具有某种通用逼近性质:神经网络表示的训练函数(由基本线性组合、偏差和非常简单的激活函数构建)相当好地逼近了真正表示或生成数据的未知函数。

数学家现在必须用一个定理或一堆定理来回答的自然问题是:

  1. 鉴于我们不知道但非常关心的某个函数(因为我们认为它是潜在或生成我们数据的真实函数),是否有一个神经网络可以以很高的精度近似它(而不必知道这个真实函数)?成功使用神经网络的实践表明答案是肯定的,并且神经网络的通用逼近定理证明了对于某一类函数和网络,答案是肯定的。

  2. 如果有一个神经网络可以逼近这个真实而难以捉摸的数据生成函数,我们如何构建它?它应该有多少层?每层有多少节点?应该包含什么类型的激活函数?换句话说,这个网络的架构是什么?遗憾的是,到目前为止,我们对如何构建这些网络知之甚少,尝试各种架构和激活是唯一的前进之路,直到更多的数学家参与其中。

  3. *有多种神经网络架构表现良好吗?有些比其他的更好吗?*实验证明答案是肯定的,因为各种架构在相同任务和数据集上的可比性表现。

请注意,对上述问题有明确答案非常有用。对第一个问题的肯定回答告诉我们:嘿,这里没有魔法,神经网络确实相当好地逼近了广泛类别的函数!这种广泛覆盖或普适性至关重要,因为请记住,我们不知道数据生成函数,但如果逼近定理涵盖了广泛类别的函数,我们未知和难以捉摸的函数很可能也被包括在内,因此神经网络的成功。回答第二和第三个问题对实际应用更有用,因为如果我们知道哪种架构最适合每种任务类型和数据集,那么我们将免于进行大量实验,并立即选择一个表现良好的架构。

在陈述神经网络的通用逼近定理并讨论它们的证明之前,让我们回顾两个例子,我们已经在中学时代遇到过逼近类型的定理。所有例子都适用同一原则:我们有一个难以处理或未知的难以处理的量,我们想用另一个更容易处理的量来近似它。如果我们想要通用结果,我们需要指定三件事:

  1. 难以处理的量或函数属于什么类别或什么空间?它是实数集吗?无理数集?区间上连续函数的空间?紧支持函数在上的空间?勒贝格可测函数的空间(我在这里插入了一些测度论的内容,希望没有人注意到或逃跑)?等等

  2. 我们使用什么样的更简单的量或函数来近似难以处理的实体,使用这些量而不是真实函数对我们有什么好处?如果已经有一些其他流行的近似方法,这些近似方法与其他近似方法相比如何?

  3. 近似发生在什么意义上,也就是说,当我们说我们可以用f true来近似f approximate时,我们究竟是如何测量f truef approximate之间的距离?回想一下,在数学中我们可以用许多方式来测量物体的大小,包括距离。那么我们究竟在我们特定的近似中使用哪种方式?这就是我们听说欧几里得范数、均匀范数、上确界范数、L 2范数等的地方。范数(大小)与距离有什么关系?范数引出距离。这是直观的:如果我们的空间允许我们谈论物体的大小,那么它最好也允许我们谈论距离。我们将在概率章节中稍后形式化这一点。

    例 1:用有理数近似无理数

    任何无理数都可以用有理数近似,直到我们想要的任意精度。有理数表现得很好且有用,因为它们只是整数对。我们的思维可以轻松地理解整数和分数。无理数则完全相反。你有没有在六年级被要求计算47 = 6 . 8556546 . . .,没有计算器,一直计算直到得到一个确定的答案?我有。相当刻薄!即使计算器和计算机也用有理数近似无理数。但我必须坐在那里想着我可以继续写数字,直到我找到一个模式或计算终止。当然,两者都没有发生,大约 30 位数字后,我才知道有些数字就是无理数。

有多种方式可以编写数学陈述来量化这种近似。它们都是等效且有用的:

  • 近似实体可以无限接近真实数量:这是最直观的方式。

给定一个无理数s和任意精度ϵ,无论多么小,我们都可以找到一个距离s小于ϵ的有理数q

| s - q | < ϵ .

这意味着有理数和无理数在实数线上彼此之间生活得非常接近。这引入了密度的概念。

  • 密度和闭包:逼近实体在真实数量所在的空间中是密集的。

这意味着,如果我们只关注逼近成员的空间,然后加入所有它们序列的所有极限,我们就得到了真实成员的整个空间。在某个空间 S 中加入所有极限点被称为闭合空间,或者取其闭包S ¯。例如,当我们在开区间( a , b )中加入其极限点ab时,我们得到了闭合区间[a,b]。因此,( a , b )闭包是[a,b]。我们写成(a,b) ¯ =[a,b]。

有理数集在实数线中是密集的。换句话说,闭包。我们写成 ¯ =

  • 序列的极限:真实数量是逼近实体序列的极限。

在前面的点中添加 极限点的概念引入了使用序列及其极限的术语进行逼近。

在有理数逼近无理数的背景下,因此我们可以写成:对于任意无理数s,存在一个有理数序列q n,使得lim n q n = s。这使我们有机会举例说明最著名的无理数之一的最喜欢的定义:e=2.71828182…

lim n (1+1 n) n = e

也就是说,无理数e 是有理数序列(1+1 1) 1 , (1+1 2) 2 , (1+1 3) 3 , 的极限,等价于2 , 2 . 25 , 2 . 370370 . . ,

无论我们使用任意接近概念、密集性和闭包概念还是序列极限概念来用有理数逼近无理数,数学陈述中涉及的任何距离都是使用通常的欧几里德范数来衡量的:d ( s , q ) = | s - q |,这是两个数之间的正常距离。

注意:接近性质需要伴随特定的范数。

我们可能会想:如果我们改变范数会怎样?逼近性质是否仍然成立?如果我们使用某种与通常的欧几里德范数不同的距离定义来衡量它们之间的距离,我们是否仍然可以用有理数逼近无理数?欢迎来到数学分析。一般来说,答案是否定的。使用某种范数可以使量之间彼此接近,而使用另一种范数可以使它们之间相距很远。因此,在数学中,当我们说量之间彼此接近、逼近其他量或收敛到某处时,我们需要提及伴随的范数,以便准确定义这些接近性质是如何发生

例 2:用多项式逼近连续函数

连续函数可以是任何东西。一个孩子可以在一张纸上画一条曲线,那就是一个没有人知道公式的连续函数。另一方面,多项式是一种特殊类型的连续函数,极易评估、求导、积分、解释和进行计算。多项式函数中唯一涉及的操作是幂、标量乘法、加法和减法。n次多项式有一个简单的公式:

p n ( x ) = a 0 + a 1 x + a 2 x 2 + a 3 x 3 + + a n x n ,

其中a i是标量数。自然地,我们非常希望能够用多项式函数逼近非多项式连续函数。令人惊喜的消息是,我们可以,直到任意精度ϵ。这是数学分析中的一个经典结果,称为魏尔斯特拉斯逼近定理。

魏尔斯特拉斯逼近定理:假设f是定义在实区间[a,b]上的连续实值函数。对于任意精度ϵ > 0,存在一个多项式p n,使得对于[a,b]中的所有x,我们有| f ( x ) - p n ( x ) | < ϵ,或者等价地,上确界范数 f - p n < ϵ

注意,与我们讨论使用有理数逼近无理数的原理相同:定理断言我们总是可以找到多项式,这些多项式与连续函数任意接近;这意味着多项式集合在区间[a,b]上的连续函数空间中是密集的;或者等价地,对于任何连续函数f,我们可以找到一系列多项式函数,它们收敛于f(因此f是一系列多项式的极限)。在这些相同事实的所有变化中,距离是根据上确界范数来衡量的。在图 4-6 中,我们验证连续函数sin x是多项式函数序列的极限{ x , x - x 3 3! , x - x 3 3! + x 5 5! , }

250

图 4-6。通过一系列多项式逼近连续函数sin x

神经网络的通用逼近定理陈述

现在我们了解了逼近原理,让我们陈述神经网络的最新逼近定理。

回想一下神经网络是将训练函数表示为计算图。我们希望这个训练函数能够很好地逼近生成数据的未知函数。这使我们能够使用训练函数,而不是我们不知道的基础真实函数,也可能永远不会知道,来进行预测。以下逼近定理断言神经网络可以以任意精度逼近基础函数。当我们将这些定理的陈述与上述无理数和连续函数的两个示例进行比较时,我们注意到它们是相同类型的数学陈述。

以下结果归功于 Hornik,Stinchombe 和 White 1989:设 f 是紧集 K 上的连续函数(这是数据背后的真实但未知函数),其输出在 d中。那么:

  • 任意接近:存在一个只有单隐藏层的前馈神经网络,可以在 K 上均匀逼近 f,精度在 K 上任意ϵ > 0

  • 密集性:具有预定非线性激活和神经元数量和层数限制的神经网络集合在C ( K , d )的均匀拓扑中是密集的。

在这两种相同事实的变化中,距离是根据连续函数上的上确界范数来衡量的。

证明需要来自测度论泛函分析的数学概念。我们将在第十一章中介绍测度论,即概率。目前我们只列出证明所需的内容,没有任何细节:Borel 和 Radon 测度;Hahn Banach 定理;以及 Reiz 表示定理。

深度学习的逼近理论

在激励逼近理论并陈述其在深度学习中的一个主要结果后,我们指向了诸如神经网络学习概率分布的能力、Barron 定理、神经切线核、以及其他内容等最新成果。

损失函数

尽管在本章中我们从第三章的传统机器学习过渡到了深度学习时代,但训练函数、损失函数和优化的结构仍然完全相同。用于神经网络的损失函数与第三章中讨论的并无不同,因为损失函数的目标并未改变:捕捉地面真相与训练函数所做预测之间的误差。在深度学习中,神经网络代表训练函数,对于前馈神经网络,我们看到这只不过是一系列线性组合后跟随非线性激活函数的组合。

在深度学习中使用最广泛的损失函数仍然是用于回归任务的均方误差和用于分类任务的交叉熵函数。回到第三章详细解释这些函数。

在领域中我们有时会遇到其他损失函数。当我们遇到一个新的损失函数时,通常模型的设计者会有某种理由更喜欢它而不是其他更流行的损失函数,所以确保你仔细阅读他们使用特定损失函数的理由。理想情况下,一个好的损失函数会惩罚糟糕的预测,计算成本不高,并且有一个易于计算的导数。我们需要这个导数存在,以便我们的优化方法表现良好。正如我们在第三章中讨论的,具有一个良好导数的函数比具有不连续导数的函数具有更平滑的地形,因此在搜索损失函数的最小值时,在优化过程中更容易导航。

注意:最小化交叉熵损失函数等同于最大化对数似然函数。概率分布的 KL 散度与之密切相关。

回想一下,交叉熵函数是从信息论和统计力学中借来的,它量化了数据的真实(经验)分布与神经网络训练函数产生的分布(预测)之间的交叉熵。交叉熵函数的公式中有一个负号和一个log函数。最小化一个函数的负号等同于最大化没有负号的相同函数,因此有时你会在领域中遇到以下陈述:最大化对数似然函数,对我们来说等同于最小化交叉熵损失函数。一个密切相关的概念是Kullback-Leibler 散度,也称为 KL 散度。有时,例如在生成图像或机器音频的情况下,我们需要学习一个概率分布,而不是一个确定性函数。在这种情况下,我们的损失函数应该捕捉数据的真实概率分布与学习到的概率分布之间的差异(我不会说距离,因为它的数学公式不是一个距离度量)。KL 散度就是这样一种损失函数的例子,它量化了当学习到的分布用于近似真实分布时丢失的信息量,或者真实分布相对于学习到的分布的相对熵。

优化

忠实于我们的训练函数损失函数优化数学结构,我们现在讨论优化步骤。我们的目标是对损失函数L ( ω )的景观进行高效搜索,以找到最小化的ω。请注意,当我们在早期章节明确写出神经网络的训练函数的公式时,我们将ω权重捆绑在矩阵W中,将偏差捆绑在向量ω 0中。在本节中,为了简化符号并保持对数学的关注,我们将所有权重和偏差放在一个非常长的向量ω 中。也就是说,我们将损失函数写为L ( ω ),而实际上,对于具有h隐藏层的全连接神经网络,它是:

Loss function = L ( W 1 , ω 0 1 , W 2 , ω 0 2 , , W h+1 , ω 0 h+1 ) .

我们只需要上述表示当我们明确使用反向传播计算损失函数的导数时,这将在本章后面讨论。

对于深度学习,向量ω 中的ω的数量可能非常高,可以达到数万、百万甚至十亿:OpenAI 的 GPT-2 自然语言拥有 15 亿个参数,并且是在 800 万个网页数据集上训练的。我们需要解决这么多未知数!

使用优化方法,如牛顿类型方法,需要计算这么多未知数的损失函数的二阶导数矩阵,即使在我们当前强大的计算能力下也是不可行的。这是一个很好的例子,数值方法的数学理论完全有效,但在计算和实际应用中是不切实际的。这里令人沮丧的是,使用二阶导数的数值优化方法通常比仅使用一阶导数的方法收敛更快,因为它们利用了关于函数凹凸性(其碗的形状)的额外知识,而不仅仅使用一阶导数提供的关于函数增减的信息。在我们发明更强大的计算机之前,我们必须满足于只使用损失函数对未知ω的一阶导数的一阶方法。这些是梯度下降类型的方法,幸运的是,它们在许多当前部署在我们日常生活中使用的真实 AI 系统中表现非常出色,例如亚马逊的 Alexa。

数学与神秘的神经网络成功

值得在这里停下来反思神经网络的成功,这在本节的背景下可以理解为:我们能够找到使训练函数很好地泛化到新的和未见过的数据的损失函数的最小化器。我没有北美口音,亚马逊的 Alexa 能够完全理解我。从数学上讲,神经网络的这种成功仍然令人困惑,原因有很多。

  • 损失函数的ω域,即发生最小化的地方,是非常高维的(可以达到数十亿维)。我们有数十亿甚至数万亿的选择。我们如何找到正确的解决方案?

  • 损失函数本身的景观是非凸的,因此有很多局部最小值和鞍点,优化方法可能会陷入困境或收敛到错误的局部最小值。同样,我们如何找到正确的解决方案?

  • 在一些人工智能应用中,比如计算机视觉,比数据点(图像)要多得多的ω。回想一下,对于图像,每个像素都是一个特征,因此在输入级别就已经有很多ω。对于这样的应用,未知数(ω)比确定它们所需的信息(数据点)要多得多。从数学上讲,这是一个“欠定”系统,这样的系统有“无限多个可能的解”!那么我们的网络的优化方法究竟是如何选择好的解决方案的呢?哪些能很好地泛化?

一些神秘的成功归因于在训练过程中已经成为基本技术的技巧,比如正则化(在本章的后面部分讨论)、验证、测试等。然而,深度学习仍然缺乏坚实的理论基础。这就是为什么很多数学家最近聚集在一起回答这些问题。国家科学基金会(NSF)在这方面的努力,以及我们从其公告中摘录的引用(用斜体表示)非常具有信息性,并深入了解数学如何与推进人工智能相互交织:

NSF 最近成立了 11 个新的人工智能研究所来推动各个领域的人工智能发展,比如人机交互与协作、优化进展的人工智能、高级网络基础设施的人工智能、计算机和网络系统中的人工智能、动态系统中的人工智能、增强学习和农业和食品系统中的人工智能驱动创新。NSF 能够汇集包括计算机和信息科学工程、认知科学和心理学、经济学和博弈论、工程和控制理论、伦理学、语言学、数学和哲学在内的多个科学领域,使该机构在拓展人工智能前沿方面独具优势。NSF 的资助将帮助美国充分利用人工智能的全部潜力,以加强经济、促进就业增长,并为未来几十年为社会带来利益。

以下内容摘自 NSF 的深度学习 SCALE MoDl 的数学和科学基础深度学习取得了令人印象深刻的经验成功,推动了基础科学发现,并改变了人工智能的许多应用领域。然而,我们对该领域的理论理解尚不完整,这阻碍了更广泛范围的参与者接触深度学习技术。面对我们对深度学习成功机制的不完整理解应该有助于克服其局限性并扩展其适用性。SCALE MoDL 计划将赞助由数学家、统计学家、电气工程师和计算机科学家组成的新研究合作。研究活动应集中在涉及数学和科学基础领域中一些最具挑战性的理论问题的明确主题上。每个合作应通过涉及最近获得博士学位的研究人员、研究生和/或本科生在跨学科领域的研究中进行培训。这些提案可能涉及深度学习理论基础的各种科学主题。可能的主题包括但不限于几何、拓扑、贝叶斯或博弈论形式,利用最优输运理论、优化理论、逼近理论、信息理论、动力系统、偏微分方程或平均场理论的分析方法,以及应用启发式观点探索小数据集的有效训练、对抗性学习和关闭决策-行动循环,更不用说对成功指标、隐私保障、因果推断和算法公平性的基础性工作

梯度下降ω i+1 = ω i - η L ( ω i )

在深度学习中用于优化的梯度下降方法非常简单,以至于我们可以将其公式放在本小节的标题中。这就是梯度下降如何搜索损失函数L ( ω )的局部最小值的方式:

  • 在某处初始化 ω 0:随机选择起始数值 ω 0 = ( ω 0 , ω 1 , , ω n )。这个选择将我们放置在搜索空间的某处以及 L ( ω ) 的景观中。这里有一个重要的警告:我们从哪里开始很重要!不要用全零或全相等的数字初始化。这将减弱网络学习不同特征的能力,因为不同节点将输出完全相同的数字。我们将在即将到来的子节中讨论初始化。

  • 移动到新点 ω 1:梯度下降沿着损失函数的梯度向量相反的方向移动 - L ( ω 0 )。如果步长 η,也称为学习率不是太大,这将保证梯度下降。

ω 1 = ω 0 - η L ( ω 0 )

  • 移动到新点 ω 2:同样,梯度下降沿着损失函数的梯度向量相反的方向移动 - L ( ω 1 )。如果学习率 η 不是太大,这将再次保证梯度下降。

ω 2 = ω 1 - η L ( ω 1 )

  • 继续直到点序列 { ω 0 , ω 1 , ω 2 , } 收敛

图 4-7 显示了使用梯度下降最小化某个损失函数 L(ω1,ω2)的图片。我们作为人类受限于我们存在的三维空间,因此无法可视化超过三维。这对我们来说在可视化方面是一个严重的限制,因为我们的损失函数通常作用在非常高维的空间上。它们是许多ω的函数,但如果它们最多依赖于两个ω,我们只能准确地可视化它们。也就是说,我们可以可视化依赖于两个ω的损失函数 L(ω1,ω2),但不能可视化依赖于三个(或更多)ω的损失函数 L(ω1,ω2,ω3)。即使我们在可视化高维空间中的损失函数方面受到严重限制,图 4-7 给出了梯度下降方法的一般操作的准确图像。在图 4-7 中,搜索发生在二维(ω1,ω2)-平面(图 4-7 中的平坦地面),我们跟踪嵌入在ℝ³中的函数 L(ω1,ω2)的景观上的进展。搜索空间的维度始终比嵌入损失函数景观的空间的维度少一个。这使得优化过程更加困难,因为我们正在寻找一个繁忙景观的最小化者,而这个景观在其地形的扁平或压缩版本中(图 4-7 中的地面水平)进行了压缩。

250

图 4-7。两个梯度下降步骤。请注意,如果我们从山的另一侧开始,我们将无法收敛到最小值。因此,当我们搜索非凸函数的最小值时,我们从哪里开始,或者如何初始化ω很重要。

解释学习率超参数η的作用

在每次迭代中,梯度下降方法将我们从搜索空间中的点ω i移动到另一个点ω i+1。梯度下降将- η L ( ω i )添加到当前ω i,以获得ω i+1。数量- η L ( ω i )由标量η乘以梯度向量的负值组成,该向量指向从点ω i开始的损失函数最陡降方向。因此,缩放的- η L ( ω i )告诉我们在搜索空间中沿着最陡降方向要走多远,以选择下一个点ω i+1。换句话说,向量- L ( ω i )指定我们将远离当前点的方向,而标量η,称为学习率,控制我们将沿着该方向迈出多远。太大的学习率可能会超过最小值并越过山谷的另一侧。另一方面,学习率太小需要一段时间才能到达最小值。因此,权衡之处在于选择较大的学习率并冒着超过最小值的风险,或选择较小的学习率并增加计算成本和收敛时间。

250

图 4-8。两种不同学习率的一步梯度下降。左侧,学习率过大,梯度下降超过了最小值(星点),落在山谷的另一侧。右侧,学习率较小,但是需要一段时间才能到达最小值(星点)。请注意,某点处的梯度向量与该点处的等高线垂直。

学习率η是机器学习模型的另一个超参数的例子。它不是进入训练函数公式的权重之一。它是一种固有于我们所使用的算法的参数,用于估计训练函数的权重。

特征的比例影响梯度下降的性能

这是提前标准化特征的原因之一。标准化特征意味着从每个数据实例中减去平均值,然后除以标准差。这样可以强制所有数据值具有相同的比例,均值为零,标准差为一,而不是具有迥异的比例,例如一个特征的测量值在百万级,另一个特征的测量值在 0.001 级。但为什么这会影响梯度下降方法的性能?继续阅读。

回想一下,输入特征的值会在训练函数中与权重相乘,而训练函数又会进入损失函数的公式中。输入特征的非常不同的比例会改变损失函数的碗的形状,使最小化过程变得更加困难。图 4-9 显示了函数L ( ω 1 , ω 2 ) = ω 1 2 + a ω 2 2的等高线,模拟不同输入特征的不同比例。请注意,随着a的值增加,损失函数的等高线变得更加狭窄和延长。这意味着损失函数的碗的形状是一个长而窄的山谷。

250

图 4-9。损失函数L ( ω 1 , ω 2 ) = ω 1 2 + a ω 2 2的等高线随着a的值从 1 增加到 20 再到 40 变得更加狭窄和延长。

当梯度下降方法试图在这样一个狭窄的山谷中操作时,它的点会从山谷的一侧跳到另一侧,试图找到最小值时会蜿蜒曲折,大大减慢收敛速度。想象一下在抵达梵蒂冈之前在罗马的所有街道上蜿蜒曲折,而不是直接乘直升机到达梵蒂冈。

但为什么会发生这种蜿蜒曲折的行为?函数的梯度向量的一个特点是它与该函数的等高线垂直。我们在本书的附录中进行了这种计算。因此,如果损失函数的山谷如此长而窄,其等高线几乎看起来像是彼此平行的线条,而且具有足够大的步长(学习率),我们可以从山谷的一侧穿越到另一侧,因为它是如此狭窄。搜索梯度下降蜿蜒曲折,你会看到许多插图展示这种行为。

为了防止在狭窄的长谷底部来回摇摆(假设我们没有提前缩放输入特征值),一个修正方法是选择非常小的学习率,防止梯度下降方法从谷的一侧跨越到另一侧。然而,这会以自己的方式减慢到达最小值的速度,因为方法每次迭代只会逐步前进。这样,我们最终会从罗马到梵蒂冈,但速度很慢。

在损失函数景观的最小值(局部和/或全局)、平坦区域或鞍点附近,梯度下降方法爬行。

梯度下降方法通过添加向量- η L ( ω i ) 更新当前点ω i。因此,从点ω i沿着负梯度向量的方向的步长是η乘以梯度向量 L ( ω i )的长度。在损失函数的景观中的最小值、最大值、鞍点或任何平坦区域附近,梯度向量为零,因此其长度也为零。这意味着在最小值、最大值、鞍点或任何平坦区域附近,梯度下降方法的步长变得非常小,方法会显著减慢。如果这发生在最小值附近,那么就没有太多担心,因为这可以作为停止准则,除非这个最小值是离全局最小值很远的局部最小值。另一方面,如果发生在平坦区域或鞍点附近,那么方法将会在那里停留一段时间,这是不可取的。一些从业者将学习率η放在一个时间表上,在优化过程中改变其值。当我们研究这些时,我们注意到目标是避免爬行,节省计算时间,并加快收敛速度。

我们将在本章后面讨论随机梯度下降。由于这种方法的随机性质,点会频繁跳动,而不是沿着更一致的路径朝向最小值前进。这在我们被困的情况下(如鞍点或局部最小值)对我们有利,因为我们可能会被随机地推出局部最小值或远离鞍点,进入一个更好朝向最小值的部分景观。

vs非凸景观

我们不能没有讨论凸性的优化章节。事实上,整个数学领域专门致力于凸优化。立即注意到的是,神经网络的优化通常是非凸的。

当我们使用非凸激活函数,例如图 4-5 中第一行中的 S 型函数时,导致的神经网络中涉及的损失函数的景观不是凸的。这就是为什么我们花了大量时间讨论在局部最小值、平坦区域和鞍点处卡住的问题,而对于凸景观,我们不会担心这些。凸和非凸景观之间的对比在图 4-10 中是明显的,它展示了一个凸损失函数及其等高线图,以及图 4-11 和图 4-12,展示了非凸函数及其等高线图。

250

图 4-10。三维凸函数及其等高线图。梯度向量存在于与等高线图相同的空间( 2),而不是 3

250

图 4-11。三维非凸函数及其等高线图。梯度向量存在于与等高线图相同的空间( 2),而不是 3

250

图 4-12。三维非凸函数及其等高线图。梯度向量存在于与等高线图相同的空间( 2),而不是 3

当我们在整个网络中使用凸激活函数,例如图 4-5 中第二行中的 ReLU 型函数,凸损失函数时,我们仍然可能遇到一个凸凸优化问题,因为两个凸函数的组合不一定是凸的。如果损失函数恰好是非递减的和凸的,那么它与凸函数的组合就是凸的。神经网络中流行的损失函数,如均方误差、交叉熵和铰链损失都是凸的,但不是非递减的。

熟悉凸优化的中心概念是很重要的。如果你不知道从哪里开始,记住凸性取代了线性当线性过于简单或不可用时,然后学习关于以下内容的一切(这将与我们在运筹学章节中讨论的人工智能、深度学习和强化学习相关联):

  • 线性函数的最大值是凸的

  • 最大最小和最小最大

  • 鞍点

  • 两人零和博弈

  • 对偶

由于凸优化是一个发展成熟且被理解的领域(至少比神经网络的数学基础更为深入),而神经网络在数学上仍有很长的路要走,如果我们能利用我们对凸性的知识来更深入地理解神经网络将是很好的。这一领域的研究正在进行中。例如,在一篇最近的论文(2020 年)中,题为两层 ReLU 网络的凸几何:隐式自编码和可解释模型,作者将训练两层 ReLU 网络的问题框架为一个凸解析优化问题。以下是该论文的摘要:

我们为 ReLU 神经网络开发了一个凸解析框架,阐明了隐藏神经元及其函数空间特征的内部工作。我们展示了神经网络中的修正线性单元作为凸正则化器,通过某个凸集的极端点鼓励简单解决方案。对于一维回归和分类,我们证明了带有范数正则化的有限两层 ReLU 网络产生线性样条插值。在更一般的高维情况下,我们展示了两层网络的训练问题可以被视为一个具有无限多个约束的凸优化问题。然后我们提供了一系列凸松弛来近似解决方案,并提供了一个切割平面算法来改进这些松弛。我们推导了松弛的准确性条件,并在某些情况下为最优神经网络权重提供了简单的闭合形式公式。我们的结果表明,ReLU 网络的隐藏神经元可以被解释为输入层的凸自编码器。我们还建立了与压缩感知中最小基数解类似的神经网络的l 0 - l 1等价性的联系。大量实验结果表明,所提出的方法产生了可解释且准确的模型

随机梯度下降

到目前为止,前馈神经网络的训练进展如下:

  1. 为训练函数固定一组初始权重ω 0

  2. 在训练子集中的所有数据点上评估这个训练函数。

  3. 通过将它们的真实标签与训练函数所做的预测进行比较,计算训练子集中所有数据点的个体损失。

  4. 对训练子集中的所有数据执行此操作。

  5. 对所有这些个体损失求平均。这个平均值就是损失函数。

  6. 在这组初始权重处评估这个损失函数的梯度。

  7. 根据最陡下降规则选择下一组权重。

  8. 重复直到收敛到某个地方,或者根据验证集上训练函数的性能确定一定数量的迭代次数后停止。

以上过程的问题在于,当训练子集包含数千个点,神经网络包含数千个权重时,评估训练函数、损失函数以及在训练子集中的所有数据点上评估损失函数的梯度变得太昂贵。解决方法是随机化过程:随机选择训练子集的一个非常小的部分,在每一步评估训练函数、损失函数以及这个损失函数的梯度。这样可以大大减少每一步的计算成本。

重复这种随机选择(原则上是有替换的,但实际上是无替换的)训练子集的小部分,直到收敛到某个地方,或者根据验证集上训练函数的性能确定一定数量的迭代次数后停止。一次完整的训练子集称为一个时代

随机梯度下降表现出色,已成为训练神经网络的重要方法。

初始化权重ω 0以进行优化过程

我们已经确定,使用全零权重或全相同权重进行初始化是一个非常糟糕的主意。下一个合乎逻辑的步骤,也是传统做法(2010 年之前)将初始权重随机选择,可以从均匀分布中抽样,例如[-1,1]、[0,1]或[-0.3,0.3],或者从高斯分布中抽样,具有预先选择的均值和方差。尽管这方面尚未深入研究,但根据经验证据,初始权重是从均匀分布还是高斯分布中抽样似乎并不重要,但初始权重的规模对于优化过程的进展以及网络泛化到未见数据的能力似乎很重要。事实证明,在这方面有一些选择比其他选择更好。目前,两种最先进的选择取决于激活函数的选择,无论是 Sigmoid 类型还是 ReLu 类型。

Xavier Glorot 初始化

在这里,初始权重是从均匀分布中随机抽样,范围是[ - 6 n+m , 6 n+m ],其中 n 是节点的输入数量(例如,前一层中的节点数量),m 是该层输出的数量(例如,当前层中的节点数量)。

He 初始化

在这里,初始权重是从均值为零、方差为 2/n 的高斯分布中随机抽样,其中 n 是节点的输入数量。

正则化技术

正则化帮助我们找到训练函数权重的良好选择,同时避免过拟合数据。我们希望我们训练的函数跟随数据中的信号而不是噪音,这样它可以很好地泛化到未见的数据。在这里,我们包括四种简单但流行的正则化技术,这些技术在训练神经网络时使用:Dropout、提前停止、批量归一化和权重衰减(岭回归、Lasso 和弹性网络)正则化。

Dropout

在训练过程中,从每一层中随机删除一些神经元。通常,会随机删除输入层节点的约百分之二十,以及每个隐藏层节点的约一半。不会删除输出层的节点。Dropout 在一定程度上受到遗传繁殖的启发,其中一半父母的基因被删除,然后有一个小的随机突变。这样做的效果是同时训练不同的网络(每层节点数量不同)并对它们的结果进行平均,通常会产生更可靠的结果。

实现 dropout 的一种方法是为每个层引入一个超参数p,该参数指定该层中每个节点被丢弃的概率。回想一下每个节点发生的基本操作:线性组合前一层节点的输出,然后激活。使用 dropout,前一层节点的每个输出(从输入层开始)都乘以一个随机数r,该随机数可以是零或一,概率为p。因此,当一个节点的r取零时,该节点实际上从网络中被丢弃,这样在调整权重时,其他保留节点就需要在一个梯度下降步骤中接管。我们将在反向传播部分进一步解释这一点,这个链接提供了一个实现 dropout 的逐步路线。

对于更深入的数学探索,以下论文(2015)将 dropout 与模型不确定性的贝叶斯近似联系起来。

提前停止

在训练过程中更新权重时,特别是在梯度下降期间,每个时代之后,我们评估训练函数在当前权重下对数据的验证子集所产生的错误。这个错误应该随着模型学习训练数据而减少,然而,在一定数量的时代之后,这个错误将开始增加,表明训练函数现在开始过度拟合训练数据,并且无法很好地泛化到验证数据。一旦我们观察到模型在验证子集上的预测增加,我们就停止训练,并回到那个错误最低的权重集,就在我们开始观察到增加之前。

每层的批量归一化

这里的主要思想是对网络的每一层的输入进行归一化。这意味着每一层的输入将具有零均值和单位方差。通常通过减去每个层输入的均值并除以方差来实现这一点。我们稍后会详细说明这一点。在每个隐藏层这样做的原因与在原始输入层这样做的原因类似。

应用批量归一化通常消除了对 dropout 的需求,并使我们对初始化不那么挑剔。它使训练更快,更安全,避免了梯度消失和梯度爆炸。它还具有正则化的额外优势。所有这些收益的成本并不太高,因为通常只涉及训练每层的两个额外参数,一个用于缩放,一个用于移位。Ioffe 和 Szegedy(2015)的论文介绍了这种方法。他们的论文摘要描述了批量归一化过程以及它解决的问题(括号内是我的评论):

训练深度神经网络变得复杂,因为在训练过程中,每一层的输入分布会随着前面层的参数变化而改变。这需要更低的学习率和谨慎的参数初始化,从而减慢训练速度,并且使得训练具有饱和非线性的模型变得非常困难(例如在图 4-5 中的 Sigmoid 类型激活函数,当输入的幅度很大时,输出几乎保持不变,这使得非线性在训练过程中变得无用,网络在后续层停止学习)。我们将这种现象(每一层输入分布的变化)称为内部协变量转移,通过对层输入进行归一化来解决这个问题。我们的方法之所以有效,是因为将归一化作为模型架构的一部分,并对每个训练小批量执行归一化。批量归一化使我们能够使用更高的学习率,对初始化要求不那么严格,在某些情况下甚至可以消除 Dropout 的需要。应用于最先进的图像分类模型时,批量归一化在 14 倍更少的训练步骤下达到相同的准确率,并且明显超过原始模型。通过使用批量归一化网络的集成,我们改进了 ImageNet 分类的最佳已发布结果:达到 4.82%的前 5 测试错误率,超过了人类评分者的准确率。

批量归一化通常在网络的架构中实现,要么在激活步骤之前作为独立层,要么在激活之后。在训练期间,通常按照以下步骤进行:

  1. 从大小为 b 的训练数据中选择一个批次。每个数据点都有特征向量x i ,因此整个批次具有特征向量x 1 , x 2 , , x b

  2. 计算向量,其条目是该特定批次中每个特征的均值:μ = x 1 +x 2 ++x b b

  3. 计算批次的方差:从每个x 1 , x 2 , , x b 中减去μ ,计算结果的l 2范数,相加,然后除以b

  4. 通过减去均值并除以方差的平方根来对x 1 , x 2 , , x b 进行归一化:

  5. 通过可由梯度下降初始化和学习的可训练参数进行缩放和移位,与训练函数的权重学习方式相同。这成为第一个隐藏层的输入。

  6. 对于每个后续层的输入执行相同操作。

  7. 为下一批次重复。

在测试和预测过程中,没有数据批次可供训练,每一层的参数已经学习。然而,批量归一化步骤已经融入到训练函数的公式中。在训练过程中,我们正在更改这些每批次的训练数据。这反过来会稍微改变每批次的损失函数公式。然而,规范化的目的部分是不要过分改变损失函数的公式,因为这会改变其最小值的位置,这将导致我们永追逐一个移动的目标。好了,我们在训练过程中通过批量归一化解决了这个问题,现在我们想要验证、测试和预测。那么我们在测试/预测时应该使用哪个均值和方差向量?我们应该使用原始数据集的特征的均值和方差吗?我们必须做出这样的决定。

通过惩罚它们的范数来控制权重的大小

另一种规范化训练函数的方法,以避免过拟合数据,是在最小化问题中引入一个竞争项。而不是仅解决使损失函数最小化的权重集合ω

min ω L ( ω ) ,

我们引入一个新项α ω 并解决使权重集合ω 最小化的问题:

min ω L ( ω ) + α ω .

例如,对于通常用于回归问题的均方误差损失函数,最小化问题如下所示:

min ω 1 m i=1 m | y predict ( ω ) - y true | 2 + α ω

迄今为止,我们已经建立了两种解决上述最小化问题的方法:

最小值出现在导数(梯度)为零的点处

因此,最小化ω 必须满足 L ( ω ) + α ( ω ) = 0。然后,如果我们有幸获得解的闭式形式,我们解这个方程得到ω 。在线性回归的情况下(我们可以将其视为一个极其简化的神经网络,只有一层和零非线性激活函数),我们有这种奢侈,对于这种正则化情况,最小化ω 的公式是:

ω = (X t X+αB) -1 X t y true ,

其中 X 的列是数据的特征列,增加了一个包含 1 的向量,B 是单位矩阵(如果我们使用下面讨论的岭回归)。对于带有正则化的极其简单的线性回归问题的闭式解有助于我们理解权重衰减类型的正则化以及它所起的重要作用:在非正则化解中,我们需要求逆矩阵( X t X )并担心其病态性(例如,来自高度相关的输入特征)和由此产生的不稳定性,而在正则化解中,我们需要求逆( X t X + α B )。添加这个α B项等同于向标量数的分母添加一个小正数项,帮助我们避免除以零:我们使用1 / ( x + α )而不是使用1 / x,其中x可能为零,我们使用一个正常数α。请记住,矩阵求逆是标量数除法的类比。

梯度下降

当我们没有幸运地获得导数为零的闭式解,以及当我们的问题非常庞大以至于计算二阶导数非常昂贵时,我们使用梯度下降或其任何变体,如随机梯度下降。

常用的权重衰减正则化

在本书中,有三种流行的正则化方法来控制我们永远在寻找的权重的大小:

  1. 岭回归:对ω l 2范数进行惩罚。在这种情况下,我们将项α i=1 n |ω i | 2添加到损失函数中,然后我们最小化。

  2. 套索回归:对ωl 1范数进行惩罚。在这种情况下,我们将项α i=1 n | ω i |添加到损失函数中,然后我们最小化。

  3. 弹性网络:这是岭回归和套索回归之间的中间情况。我们引入一个额外的超参数γ,它可以取零到一之间的任何值,并通过γ将岭回归和套索回归结合起来添加到损失函数中的一个项:γ α i=1 n | ω i | 2 + ( 1 - γ ) α i=1 n | ω i |。当γ = 0时,这变成套索回归,当它等于一时,它是岭回归,当它在零和一之间时,它是某种中间地带。

何时使用普通线性回归、岭回归、套索回归或弹性网络?

如果您已经对构建机器学习模型的多种选择感到困惑和有些不知所措,请加入我们,但不要感到沮丧。在数学分析告诉我们哪些选择比其他选择更好,并在什么情况下变得可用(或者通过数学计算和实验追赶我们)之前,想想可用选择的巨大数量,就像考虑家庭装修一样:我们必须从许多可用的材料、设计和架构中进行选择,以生产最终产品。这是一次家庭装修,而不是一次家庭装饰,因此我们的决定是决定性的,比单纯的家庭装饰更有意义。它们确实影响我们最终产品的质量功能,但它们仍然是选择。放心,有多种方法可以实现人工智能:

  1. 一些正则化总是有益的:添加一个控制权重大小并与最小化损失函数竞争的项通常是有益的。

  2. 岭回归通常是一个不错的选择,因为l 2范数是可微的。最小化这个范数比最小化l 1范数更稳定。

  3. 如果我们决定选择l 1范数,即使在 0 处不可微,我们可以定义其在零点的次梯度或次梯度为零(f(x)= | x |x 0时是可微的。当 x>0 时,它的导数为 1,当 x<0 时为-1)。

  4. 如果我们怀疑只有少数特征是有用的,那么最好使用套索或弹性网络作为数据预处理步骤,以消除不太重要的特征。

  5. 弹性网络通常优于套索,因为当特征数量大于训练实例数量或多个特征强相关时,套索可能表现不佳。

惩罚l 2范数 vs 惩罚l 1范数

我们的目标是找到解决最小化问题的ω

min ω L ( ω , ω 0 ) + α ω .

第一个术语希望减少损失L ( ω , ω 0 )。另一个术语希望减少ω 的坐标值,一直减少到零。我们选择 ω 的范数类型决定了ω 0 的路径。如果我们使用l 1范数,ω 的坐标将减少,然而,很多坐标可能会过早地变为零,比其他坐标更早。也就是说,l 1范数鼓励稀疏性:当一个权重消失时,它会消除相关特征对训练函数的贡献。在图 4-13 右侧的图中显示了 ω l 1 = | ω 1 | + | ω 2 |在二维空间中的菱形级别集(如果我们只有两个特征),即,| ω 1 | + | ω 2 | = c对于不同的c*值。如果一个最小化算法遵循最陡下降的路径,比如梯度下降,那么我们必须沿着垂直于级别集的方向前进,正如图中箭头所示,ω 2很快变为零,因为沿着垂直于菱形级别集的方向必然会碰到其中一个坐标轴,有效地消除了相应的特征。然后ω 1沿着水平轴前进到零。

250

图 4-13。左侧的图显示了 l 2 范数的圆形级别集,以及梯度下降沿着朝向最小值 ( 0 , 0 ) 的方向。右侧的图显示了 l 1 范数的菱形级别集,以及梯度下降沿着朝向最小值 ( 0 , 0 ) 的方向。
  • 如果我们使用 l 2 范数,权重的大小会变小,而不会将它们彻底消除。图 4-13 中左侧的图显示了二维空间中 ω l 2 = ω 1 2 + ω 2 2 的圆形级别集,沿着垂直于圆形级别集的路径朝向最小值 ( 0 , 0 ) 减少了 ω 1ω 2 的值,而不会使它们中的任何一个在另一个之前变为零。

选择哪种范数取决于我们的用例。请注意,在所有情况下,我们不对偏置权重 ω 0 进行正则化。这就是为什么在本节中我们在损失函数中单独写出它们的原因 L ( ω , ω 0 )

解释正则化超参数 α 的作用

带有权重衰减正则化的最小化问题如下所示:

min ω L ( ω ) + α ω

为了理解正则化超参数 α 的作用,我们观察到以下内容:

  • 第一个术语之间存在竞争,其中损失函数 L ( ω ) 选择适合训练数据的训练函数的 ω ,而第二个术语只关心使 ω 的值变小。这两个目标不一定同步:使第一个术语变小的 ω 的值可能会使第二个术语变大,反之亦然。

  • 如果 α 很大,那么最小化过程将通过使 ω 的值非常小来进行补偿,无论这些小值的 ω 是否也会使第一项变小。因此,我们增加 α 的值,第二项的最小化变得比第一项更重要,因此我们最终的模型可能最终不能完全拟合数据(高偏差),但有时这是期望的(低方差),以便它能很好地推广到未知数据。

  • 另一方面,如果 α 很小(接近零),那么我们可以选择更大的 ω 值,并且最小化第一项变得更加重要。在这种情况下,最小化过程将导致使第一项满意的 ω 值,因此数据将很好地适应模型(低偏差),但方差可能很高。在这种情况下,我们的模型在已知数据上表现良好(通过最小化 L ( ω ) 来设计得很好),但可能不会很好地推广到未知数据。

  • α 0 时,我们可以数学上证明正则化问题的解收敛到未正则化问题的解。

出现在机器学习中的超参数示例

我们现在已经遇到了许多进入机器学习模型的超参数。列出进入我们特定模型的超参数及其值是一个好习惯。让我们列出我们遇到的超参数,并记住调整这些参数可以提高我们模型的性能。大多数情况下,我们可以使用预先推荐的值。这些通常作为机器学习库和软件包中的默认值实现。然而,在建模过程的验证阶段,尽管需要有可用的时间和资源,尝试不同的值总是一个好主意。

  • 梯度下降中的学习率。

  • 权重衰减系数,如 Ridge、Lasso 和 Elastic Net 正则化中出现的系数。

  • 在停止训练之前的时代数量。

  • 数据分割成训练、验证和测试子集的大小。

  • 随机梯度下降及其变体中的小批量大小。

  • 动量方法中的加速系数。

  • 神经网络的架构:层数、每层神经元数量、每层发生的情况(批量归一化、激活函数类型)、正则化类型(dropout、ridge、lasso)、网络类型(前馈、稠密、卷积、对抗、循环)、损失函数类型等。

链式法则和反向传播:计算 L ( ω i )

现在是时候动手计算一些重要的东西了:损失函数的梯度,即, L ( ω i ) 。无论我们决定使用梯度下降、随机梯度下降、小批量梯度下降或任何其他梯度下降的变体来找到最佳权重,都无法避免计算这个量。请记住,损失函数在其公式中包含了神经网络的训练函数,而训练函数又由后续的线性组合和激活函数组成。这意味着我们必须使用链式法则。聪明地使用。在微积分中,我们只使用了单变量的导数链式法则,但现在,我们不得不过渡到多变量的链式法则:有时是数十亿个变量。

神经网络的分层架构迫使我们停下来思考:我们究竟如何计算损失函数的导数。这里的工作马是反向传播算法(也称为反向模式自动微分),它是一个强大的算法。

在写出公式之前,让我们总结一下训练神经网络时遵循的步骤:

  • 训练函数是一个关于 ω 的函数,因此数据点通过它后神经网络的结果,也就是在数据点上评估训练函数,是: o u t c o m e = f u n c t i o n ( ω ) 。这由节点输出的线性组合和激活函数组成,重复在所有网络层上。输出层可能有或没有激活函数,可能有一个节点或多个节点,取决于网络的最终任务。

  • 损失函数提供了训练函数的结果与真实值偏离的程度的度量。

  • 我们使用一个随机的权重集 ω 0 来初始化我们的学习函数,根据前几节中规定的首选初始化规则。然后我们计算损失,或者因为使用这些特定权重值而导致的错误。这是数据点通过网络的前向传递

  • 我们希望移动到下一个给出更低错误的权重集 ω 1 。我们沿着损失函数的梯度向量的相反方向移动。

  • 但是:训练函数内置于损失函数中,考虑到神经网络的架构以及其高维度,我们如何有效地执行多变量链式法则,以找到梯度并在当前权重集上评估它呢?

答案是我们将数据点发送回网络,从输出层一直向输入层计算梯度向后,在途中评估每个节点如何导致错误。实质上,我们计算∂L/∂node functions,然后相应地调整权重,从ω⁰更新到ω¹。随着我们将更多数据点传递到网络中,这个过程会继续进行,通常是批量进行。每当网络看到完整的训练集时,就会计算一个epoch

反向传播与我们大脑学习的方式并没有太大不同

当我们遇到一个新的数学概念时,我们大脑中的神经元会建立某些连接。下次我们再次看到相同的概念时,相同的神经元连接得更好。对于我们的神经网络的类比是,连接神经元的边的值ω增加。当我们一遍又一遍地看到相同的概念时,它成为我们大脑模型的一部分。除非我们学到了撤销先前信息的新信息,否则这个模型不会改变。在这种情况下,神经元之间的连接会减弱。对于我们的神经网络,连接神经元的ω值会减少。通过最小化损失函数来微调ω,正是为了建立神经元之间的正确连接

神经科学家唐纳德·赫布在他 1949 年的著作中提到(paraphrased):当一个生物神经元经常触发另一个神经元时,这两个神经元之间的连接会变得更加牢固。换句话说,一起激活的细胞会一起连接。

同样,神经网络的计算模型考虑了网络产生结果时所产生的错误:由于计算机只能理解数字,如果节点有助于降低错误,则边的ω会增加,如果节点有助于增加错误函数,则ω会减少。因此,神经网络的学习规则通过增加相应的ω来加强减少错误的连接,并通过减少相应的ω来削弱增加错误的连接。

为什么反向传播更好?

反向传播计算训练函数对每个节点的导数,通过网络向移动。这衡量了每个节点对训练函数和损失函数的贡献。

这里要记住的最重要的公式是:微积分中的链式法则。这计算了链式函数(或函数组合)的导数。微积分的链式法则主要处理只依赖于一个变量ω的函数,例如,对于三个链式函数,关于ω的导数是:

d dω f 3 ( f 2 ( f 1 ( ω ) ) ) = { d dω f 1 ( ω ) } { d df 1 f 2 ( f 1 ( ω ) ) } { d f 2 f 3 ( f 2 ( f 1 ( ω ) ) ) }

对于神经网络,我们必须将链式法则应用于依赖于变量Wω 0 的矩阵和向量的损失函数。因此,我们必须将上述规则推广到许多变量的链式法则。这样做的最简单方法是按照网络的结构计算导数,从输出层一直回溯到输入层。

如果我们决定通过网络向前计算导数,我们将不知道这些导数对每个变量的影响是否最终会对我们的最终结果产生影响,因为我们不知道它们是否会通过网络的图连接。即使图是完全连接的,深层的权重也不会出现在较早的层中,因此在早期层中计算它们的导数是一种巨大的浪费。

当我们通过网络向后计算导数时,我们从输出开始,沿着网络的图向后计算导数,计算每个节点的导数。每个节点的贡献仅从指向它的边和从它出去的边计算。这在计算上要便宜得多,因为现在我们确切知道这些节点如何以及何时对网络的结果产生影响。

在线性代数中,计算矩阵与向量的乘积要比计算两个矩阵的乘积便宜得多。我们必须始终避免将两个矩阵相乘:计算A ( B 𝐯 )比计算( A B ) 𝐯要便宜,尽管从理论上讲,这两者完全相同。对于大型矩阵和向量,这个简单的观察提供了巨大的成本节约。

反向传播详细说明

让我们停下来感谢软件包的存在,这样我们就永远不必自己实现以下计算。我们也不要忘记感谢这些软件包的创造者。现在我们开始计算。

对于具有h个隐藏层的神经网络,我们可以将损失函数写成训练函数的函数,而训练函数又是网络中出现的所有权重的函数:

L = L ( g ( W 1 , ω 0 1 , W 2 , ω 0 2 , , W h , ω 0 h , W h+1 , ω 0 h+1 ) )

我们将反向计算L的偏导数,从L W h+1开始,并从L ω 0 h+1开始,逐步回溯到L W 1L ω 0 1。它们的导数是相对于相应矩阵或向量中的每个条目进行的。

假设为简单起见,但不失一般性,网络是一个回归网络,预测单个数值,因此训练函数g是标量(不是向量)。假设我们在整个网络中使用相同的激活函数f。输出神经元没有激活,因为这是一个回归问题。

对指向输出层的权重的导数:

L = L ( W h+1 s h + ω 0 h+1 )

因此

L ω 0 h+1 = 1 × L ' ( W h+1 s h + ω 0 h+1 )

L W h+1 = (s h ) t L ' ( W h+1 s h + ω 0 h+1 ) .

回想一下,s h 是最后一层的输出,因此它取决于前几层的所有权重,即,( W 1 , ω 0 1 , W 2 , ω 0 2 , , W h , ω 0 h )

对指向最后隐藏层的权重的导数

要计算这些导数,我们在损失函数的公式中明确显示它们:

L = L ( W h+1 ( f ( W h s h-1 + ω 0 h ) ) + ω 0 h+1 )

因此

L ω 0 h = 1 ( W h+1 f ' ( W h s h-1 + ω 0 h ) ) L ' ( W h+1 ( f ( W h s h-1 + ω 0 h ) ) + ω 0 h+1 )

L W h = s h-1 ( W h+1 f ' ( W h s h-1 + ω 0 h ) ) L ' ( W h+1 ( f ( W h s h-1 + ω 0 h ) ) + ω 0 h+1 )

回想一下s h-1是倒数第二个隐藏层的输出,因此它取决于前几层的所有权重,即( W 1 , ω 0 1 , W 2 , ω 0 2 , , W h-1 , ω 0 h-1 )

我们系统地继续这个过程,直到达到输入层。

评估输入数据特征的重要性

数据分析师的一个目标是评估输入变量(数据特征)与输出或目标变量之间的相关性。

这里要回答的主要问题是:如果我们调整某个输入变量的值,输出的相对变化是多少?

例如,如果在给定的公交线路上增加一辆公交车,是否会影响整体的公交车乘客量?

我们所问的数学问题是一个导数问题:找到关于所讨论的输入变量的输出的偏导数。

在模型是线性的时候(敏感性分析),我们在统计学上有大量关于变量重要性的文献。当模型是非线性的,比如我们的神经网络模型时,相关文献就不那么多了。我们不能基于非线性模型做出预测,然后使用为线性模型设计的变量重要性分析。许多数据分析师在他们的分析中使用内置软件包时会陷入这种陷阱。这是另一个寻求深入理解我们基于业务决策的模型假设的原因。

总结和展望

这一章代表了我们正式进入人工智能领域的深度学习时代。虽然第三章介绍了传统但仍然非常有用的机器学习模型,第四章将神经网络添加到我们的机器学习模型库中。这两章都建立在训练函数、损失函数和优化的一般数学结构上,其中每个都针对特定任务和手头的模型进行了定制。

通过在神经网络的每个神经元上使用非线性激活函数,跨多个层,我们的训练函数能够捕捉到数据中复杂的特征,这些特征很难用非线性函数的显式公式描述。数学分析,特别是神经网络的通用逼近定理,支持这种直觉,并提供了一个理论背景,证明了神经网络的巨大成功。然而,这些定理仍然缺乏能力为我们提供一个构建特定任务和数据集的特殊网络的地图,因此我们必须尝试各种架构、正则化、超参数,直到我们获得一个在新的和未知数据上表现良好的神经网络模型。

神经网络非常适合处理具有大数据集的大问题。对于这样的大问题,优化任务需要高效且计算成本低廉的方法,尽管在这种规模下的所有计算都可以被视为昂贵的。随机梯度下降是流行的优化方法选择,而反向传播算法是这种方法的核心。更具体地说,反向传播算法计算当前权重选择下损失函数的梯度(或者当我们添加权重衰减正则化时的目标函数)。理解目标函数的景观对于任何优化任务都是至关重要的,作为一个经验法则,凸问题比非凸问题更容易优化。神经网络模型中涉及的损失函数通常是非凸的。

第四章是本书中最后一个基础(且较长)的章节。我们最终可以讨论更专门的人工智能模型,以及在需要时更深入的数学知识。接下来的章节彼此独立,所以按照对您当前应用领域更相关的顺序阅读它们。

最后,让我们总结一下本章中出现的数学内容,随着我们在这个领域的进展,我们必须更详细地阐述:

概率和测度

这是证明通用逼近类型定理所需的,将在概率章节中讨论。这也与与 Dropout 相关的不确定性分析有关。

统计学

在神经网络的每一层进行批量归一化时的输入标准化步骤,以及相关分布的重塑。

优化

梯度下降,随机梯度下降,凸和非凸景观。

线性代数上的微积分

反向传播算法:这是在矩阵函数上应用的微积分链式法则。

第五章:卷积神经网络和计算机视觉

他们。能。看见。

H.

卷积神经网络已经彻底改变了计算机视觉和自然语言处理领域。应用领域,不论与之相关的伦理问题如何,都是无限的:自动驾驶汽车,智能无人机,人脸识别,语音识别,医学影像,生成音频,生成图像,机器人等。

在这一章中,我们从卷积互相关的简单定义和解释开始,并强调这两种略有不同的数学运算在机器学习术语中被混淆的事实。我们也犯了同样的错误,将它们混为一谈,但有一个很好的理由。

然后,我们将卷积操作应用于过滤类似网格的信号,这非常适合,比如时间序列数据(一维)、音频数据(一维)和图像(如果图像是灰度的,则为二维,如果是彩色图像,则为三维,额外的维度对应于红色、绿色和蓝色通道)。当数据是一维时,我们使用一维卷积,当数据是二维时,我们使用二维卷积(为了简单和简洁起见,在本章中我们不会进行三维卷积,对应于三维彩色图像,称为张量)。换句话说,我们使网络适应数据的形状,这个过程极大地促成了卷积神经网络的成功。这与强制数据适应网络输入形状的做法形成鲜明对比,比如将二维图像展平成一个长向量,以使其适应只接受一维数据作为输入的网络。在后面的章节中,我们将看到同样适用于图神经网络成功的原因是相同的。

接下来,我们将卷积操作融入到前馈神经网络的架构中。卷积操作使网络变得“局部连接”,而不是完全连接。从数学上讲,包含每一层权重的矩阵并不是“密集的”(因此卷积层的大部分权重为零)。此外,权重具有相似的值(权重共享),不像完全连接的神经网络,其中每个输入都分配了不同的权重。因此,包含卷积层权重的矩阵大部分为零,非零部分是“局部化的并且具有相似的值”。对于图像数据或音频数据来说,这是很好的,因为大部分信息都是局部的。此外,这显著减少了我们在优化步骤中需要存储和计算的权重数量,使卷积神经网络成为具有大量输入特征的数据的理想选择(回想一下,对于图像来说,每个像素都是一个特征)。

接着我们讨论池化,这是卷积神经网络架构中常见的另一层。与上一章类似,多层结构和每一层的非线性使我们能够从图像中提取越来越复杂的特征,显著增强计算机视觉任务。

一旦我们理解了卷积神经网络的基本解剖结构,就可以直接将相同的数学应用于涉及自然语言处理的任务,比如情感分析、语音识别、音频生成等。相同的数学在计算机视觉和自然语言处理中起作用的事实类似于我们大脑对环境、经历和思维的物理变化能力(大脑的虚拟模拟版本)。即使大脑的某些部分受损,其他部分也可以接管并执行新的功能。例如,致力于视觉的大脑部分在视力受损时可以开始执行听觉或记忆任务。在神经科学中,这被称为神经可塑性。我们离完全理解大脑及其工作原理还有很长的路要走,但对这种现象的最简单解释是大脑中的每个神经元执行相同的基本功能,类似于神经网络中的神经元执行一种基本数学计算(实际上是两种,线性组合然后激活),而是多层次的各种神经连接产生了感知和行为中观察到的复杂性。卷积神经网络实际上受到了大脑视觉新皮层的启发。正是它们在 2012 年在图像分类方面的成功(AlexNet2012)将人工智能重新推回主流,激励了许多人并带领我们走到了这里。如果你有额外的时间,这一章节的一个很好的睡前阅读是关于大脑视觉新皮层功能及其与为计算机视觉设计的卷积神经网络的类比。

卷积和互相关

卷积和互相关是稍有不同的操作,测量信号中的不同内容,可以是数字图像、数字音频信号或其他内容。如果我们使用对称函数 k,称为滤波器,它们就完全相同。简而言之,卷积翻转滤波器然后沿函数滑动,而互相关在不翻转的情况下沿函数滑动滤波器。自然地,如果滤波器恰好是对称的,那么卷积和互相关就完全相同。翻转核的优势在于使卷积操作可交换,这反过来有利于编写理论证明。也就是说,从神经网络的角度来看,可交换性并不重要,有三个原因:

  1. 首先,卷积操作通常不会单独出现在神经网络中,而是与其他非线性函数组合在一起,因此无论我们是否翻转内核,我们都会失去交换律。

  2. 其次,在训练过程中,神经网络通常会学习核中条目的值,因此,它会学习正确位置的正确值,翻转变得无关紧要。

  3. 第三,对于实际实现而言,卷积网络通常使用多通道卷积,例如,输入可以是一个带有红绿蓝通道的彩色图像,甚至是一个视频,带有红绿蓝空间通道和一个时间通道。此外,它们使用批处理模式卷积,意味着它们以批量方式接受输入向量、图像、视频或其他数据类型,并同时应用并行卷积操作。即使进行了卷积核翻转,这些操作也不能保证是可交换的,除非每个操作的输出通道数与输入通道数相同。通常情况下并非如此,因为多个通道的输出通常被整体或部分地相加在一起,产生的输出通道数与输入通道数不同。

因此,许多机器学习库在实现卷积时不会翻转核,实质上是实现了互相关,并将其称为卷积。我们在这里也是这样做的。

两个实值函数 k(滤波器)和 f 之间的卷积运算定义为:

( k f ) ( t ) = - f ( s ) k ( - s + t ) d s = - f ( - s + t ) k ( s ) d s ,

离散函数的离散模拟为:

( k f ) ( n ) = s=- f ( s ) k ( - s + n ) = s=- f ( - s + n ) k ( s ) .

两个实值函数k(滤波器)和f之间的交叉相关操作被定义为:

( k * f ) ( t ) = - f ( s ) k ( s + t ) d s = - f ( s - t ) k ( s ) d s ,

离散函数的离散模拟是:

( k * f ) ( n ) = s=- f ( s ) k ( s + n ) = s=- f ( s - n ) k ( s ) .

请注意,定义卷积和互相关的公式看起来完全相同,只是对于卷积,我们使用-s而不是s。这对应于翻转所涉及的函数(在移位之前)。还要注意,卷积积分和求和中涉及的索引相加得到 t 或 n,而对于互相关则不是这样。这使得卷积是可交换的,即( f k ) ( n ) = ( k f ) ( n ),而互相关不一定是可交换的。我们稍后会进一步讨论可交换性。

每当我们遇到一个新的数学对象时,最好停下来问自己几个问题,然后再深入研究。这样,我们可以建立坚实的数学基础,同时避免深不见底的技术和复杂数学的海洋。

我们手头有什么样的数学对象?

对于卷积和互相关,我们在离散情况下考虑无限和,而在连续情况下考虑无限域上的积分。这引导了我们的下一个问题:

由于我们正在对无限域求和,我们可以允许哪种函数,而不会导致我们的计算无限增长?

换句话说,这些无限和积分对于什么样的函数存在并且是明确定义的?在这里,从简单的答案开始,比如当fk是紧支持的(在定义域的有限部分以外都是零),或者当fk衰减得足够快,使得无限和或积分收敛。大多数情况下,这些简单情况已经足够适用于我们的应用,比如图像和音频数据,以及我们陪伴它们的滤波器。只有当我们发现我们的简单答案不适用于我们特定的用例时,我们才寻求更一般的答案。这些答案以定理和证明的形式出现。不要首先寻求最一般的答案,因为这些答案通常是建立在一个历经数个世纪、无数问题和寻找答案的数学理论之上的。首先选择最一般的道路是令人不知所措的,违反直觉的,违反历史的,而且会耗费时间和资源。这不是数学和分析自然演变的方式。此外,如果我们碰巧遇到某人用最一般和技术性的语言谈论,却没有提供任何背景或动机说明为什么需要这种广泛和复杂程度,我们只会将他们调整出去,平静地继续我们的生活,否则他们可能会让我们困惑不已。

这个数学对象用来做什么?

卷积运算具有广泛的应用,涵盖了从纯理论数学到应用科学再到工程和系统设计领域。在数学中,它出现在许多领域,如:微分方程、测度论、概率、统计学、分析和数值线性代数。在应用科学和工程中,它被用于声学、光谱学、图像处理和计算机视觉,以及在信号处理中有限冲激响应滤波器的设计和实现中。

这个数学对象在我的特定研究领域中有什么用处,它如何应用于我的特定兴趣或使用案例?

为了我们的人工智能目的,我们将使用卷积操作来构建一维文本和音频数据以及二维图像数据的卷积神经网络。相同的思想可以推广到大多数信息局部化的高维数据类型。我们在两个情境中使用卷积神经网络:理解图像、文本和音频数据,以及生成图像、文本和音频数据。

此外,在数据和数据分布的背景下,我们使用以下与两个独立随机变量的概率分布有关的结果:如果μ和ν是拓扑群上的概率测度,并且 X 和 Y 是两个独立随机变量,它们各自的分布是μ和ν,则卷积μ☆ν是随机变量 X + Y 的概率分布。我们在概率和测度章节中详细阐述这一点。

这个数学对象是如何产生的?

值得投入一点额外的时间来学习一些历史和时间顺序,了解我们关心的对象首次出现的时间、方式和原因,以及与之相关的主要结果。换句话说,与其通过一系列干燥的引理、命题和定理来研究我们的数学对象,这些通常缺乏所有背景信息,我们通过它自己的故事学习,以及数学家在尝试发展它时遇到的起起落落。我们在这里学到的最有价值的见解之一是,数学是随着我们探索各种问题、建立联系以及更深入地理解我们需要使用的东西而有机地发展的。现代数学分析是在尝试回答与傅里叶正弦和余弦级数相关的非常简单的问题时发展起来的(将一个函数分解为其组成频率),结果对于许多类型的函数来说并不那么简单,例如:我们何时可以交换积分和无穷和?积分是什么,dx又是什么?

对许多人来说,尤其是那些感到被数学吓到或感到害怕的人,令人惊讶的是,在追求理解的过程中,一些数学界最重要的人物,包括某些领域的奠基人,都曾在路上犯过多次错误,并在以后的时间里加以纠正,或者被他人纠正,直到理论最终成形。

卷积积分的最早应用之一出现在 1754 年,是在达朗贝尔推导泰勒定理中。后来在 1797 年至 1800 年间,西尔维斯特·弗朗索瓦·拉克罗瓦在他的著作《差分与级数论》中使用了这个概念,这是他百科全书系列《微积分和积分微积分论》的一部分。此后不久,卷积运算出现在数学界非常著名的人物的作品中,如拉普拉斯、傅立叶、泊松和沃尔特拉。这里的共同点是所有这些研究都与函数的积分、导数和级数有关。换句话说,微积分,再次将函数分解为其组成频率(傅立叶级数和变换)。

在深入研究之前,我们必须了解与这个数学对象相关的最重要的操作、操纵和/或定理是什么?

事物不会在没有对许多人极其有益的情况下突然成名或走红。卷积运算虽然简单,但非常有用,并且可以很好地推广到更复杂的数学实体,如测度和分布。它是可交换的,可结合的,对加法和标量乘法具有分配性,其积分变为乘积,其导数变为仅对其组成函数之一进行微分。

  • 平移不变性和平移等变性:卷积神经网络的这些特性使我们能够在图像的不同部分检测相似的特征。也就是说,在图像的一个位置出现的模式很容易在图像的其他位置被识别出来。主要原因是在神经网络的卷积层中,我们在整个图像上使用相同的滤波器(也称为卷积核或模板),捕捉相同的模式(如边缘或水平、垂直和对角方向)。这个滤波器有一组固定的权重。回想一下,这在全连接神经网络中并不适用,因为我们需要为图像的不同像素使用不同的权重。由于我们使用卷积而不是矩阵乘法来执行图像滤波,我们可以获得平移不变性的好处,因为通常我们只关心模式的存在,而不关心其位置。从数学上讲,平移不变性看起来像:

t r a n s a ( k ) f = k t r a n s a ( f ) = t r a n s a ( k f ) ( t )

其中t r a n s a是通过a函数进行的翻译。对于我们的 AI 目的,这意味着给定一个设计用于在图像中捕捉某些特征的滤波器,将其与平移图像(在水平或垂直方向)卷积等同于过滤图像然后翻译它。这种性质有时被称为平移等变性,而平移不变性则归因于经常内置在卷积神经网络架构中的池化层。我们将在本章后面讨论这一点。无论如何,在每一层我们在整个图像上使用一个滤波器(一组权重)的事实意味着当存在时我们在图像的各个位置检测到一个模式。相同的原理适用于音频数据或任何其他类型的类似网格的数据。

  • 在常规空间中的卷积是频率空间中的乘积:两个函数的卷积的傅里叶变换是每个函数的傅里叶变换的乘积,只是有一个缩放因子。换句话说,卷积操作不会产生新的频率,卷积函数中存在的频率只是组成函数的频率的乘积。

在数学中,我们不断更新我们用来解决不同问题的有用工具,因此,根据我们的专业领域,我们在这一点上会拓展研究相关但更复杂的结果,比如周期函数的循环卷积,计算卷积的首选算法等。对于我们以一种对 AI 目的有用的方式深入研究卷积的最佳途径是通过信号和系统设计,这是下一节的主题。

从系统设计的角度看卷积

我们被系统包围着,每个系统与其环境互动,并被设计用来完成特定任务。例如我们建筑中的暖通空调系统,汽车中的自适应巡航控制系统,城市交通系统,灌溉系统,各种通信系统,安全系统,导航系统,数据中心等。一些系统彼此互动,而另一些则不互动。有些系统非常庞大,而另一些则像一个恒温器这样小而简单的设备,通过传感器接收来自环境的信号,处理它们,并输出其他信号,例如给致动器。

当设计和分析这样的简单系统时,卷积运算会出现,这些系统处理输入信号并产生输出信号,如果我们强加两个特殊约束:线性和时不变性。如果我们处理空间相关信号,如图像,而不是时间相关信号,如电信号或音频信号,线性和时不变性变为线性和平移或移位不变性。请注意,视频既是空间(两个或三个空间维度)又是时间相关的。在这种情况下,线性性与缩放信号(放大或缩小)的输出以及两个叠加信号的输出有关。时间和平移不变性与延迟(时间相关)信号的输出或平移或移位(空间相关)信号的输出有关。我们将在下一节详细介绍这些内容。线性性和时间或平移不变性结合起来非常强大。它们使我们能够找到任何信号的系统输出,只要我们知道一个简单脉冲信号,称为系统的脉冲响应的输出。系统对任何输入信号的输出仅通过将信号与系统的脉冲响应进行卷积即可获得。因此,强加线性和时间或平移不变性的条件极大简化了信号处理系统的分析。

那么困扰人的问题是:这些创造奇迹的条件有多现实?换句话说,线性和时/平移不变系统有多普遍,甚至只是近似线性和近似时/平移不变系统?大多数现实系统不是非线性和复杂的吗?幸运的是,我们可以控制系统的设计,所以我们可以决定设计具有这些特性的系统。一个例子是由电容器、电阻器、电感器和线性放大器组成的任何电路。事实上,这在数学上等同于一个理想的机械弹簧、质量和阻尼器系统。对我们来说相关的其他例子包括处理和过滤各种类型的信号和图像。我们将在接下来的几节中讨论这些内容。

卷积和冲激响应对于线性和平移不变系统

让我们形式化线性系统和时/平移不变系统的概念,然后理解当试图量化具有这些特性的系统对任何信号的响应时,卷积运算是如何自然产生的。从数学角度来看,一个系统是一个函数H,它接受一个输入信号x并产生一个输出信号y。信号xy可以依赖于时间、空间(单个或多个维度)或两者都可以。如果我们在这样的函数上强制线性性,那么我们在声称两件事情:

  1. 一个经过缩放的输入信号的输出仅仅是原始输出的缩放:H ( a x ) = a H ( x ) = a y

  2. 两个叠加信号的输出只是两个原始输出的叠加:上 H(x1 + x2)= 上 H(x1)+ 上 H(x2)= y1 + y2.

如果我们强制时间/平移不变性,那么我们声称延迟/平移/移位信号的输出只是延迟/平移/移位的原始输出:H ( x ( t - t 0 ) ) = y ( t - t 0 ) .

当我们考虑任意信号时,无论是离散的还是连续的,我们可以利用上述条件,将其看作是各种幅度的冲激信号的叠加。这样,如果我们能够测量系统对单个冲激信号的输出,称为系统的冲激响应,那么这就足以测量系统对任何其他信号的响应。这成为一个非常丰富的理论基础。在本章中,我们只讨论离散情况,因为在人工智能中我们关心的信号(例如自然语言处理、人机交互和计算机视觉)是离散的,无论是一维音频信号还是二维或三维图像。连续情况是类似的,只是我们考虑无穷小步长而不是离散步长,我们使用积分而不是求和,并且我们强制执行连续性条件(或者我们需要的任何其他条件,以便使所涉及的积分定义良好)。实际上,连续情况带来了一点额外的复杂性:必须以数学上合理的方式正确定义冲激,因为它不是以通常意义上的函数。幸运的是,有多种数学方法可以使其定义良好,例如分布理论,或将其定义为作用于通常函数的算子,或作为测度并利用勒贝格积分的帮助。然而,我一直在避免测度、勒贝格积分和任何深入的数学理论,直到我们真正需要它们的额外功能,因此目前,离散情况是非常充分的。

我们定义一个单位冲激δ ( k ),对于每个非零的 k 都为零,当 k=0 时为 1,并定义其响应为H ( δ ( k ) ) = h ( k )。然后δ ( n - k )对于每个 k 都为零,当 k=n 时为 1。这代表了一个位于 k=n 处的单位冲激。因此,x ( k ) δ ( n - k )是一个幅度为 x(k)的冲激,位于 k=n 处。现在我们可以将输入信号 x(n)写成:

x ( n ) = k=- x ( k ) δ ( n - k )

上面的总和可能看起来像是一种复杂的信号写法,但实际上它非常有用,因为它表明任何离散信号都可以被表达为在正确位置按比例缩放的无限脉冲的总和。现在,利用 H 的线性和平移不变性假设,很容易看出系统对信号 x(n)的响应是:

H ( x ( n ) ) = H ( k=- x ( k ) δ ( n - k ) ) = k=- x ( k ) H ( δ ( n - k ) ) = k=- x ( k ) h ( n - k ) = ( x h ) ( n ) = y ( n )

因此,一个线性和平移不变系统完全由其冲激响应 h(n)描述。但还有另一种看待这个问题的方式,这种方式与线性和平移不变系统无关,对我们接下来几节的目的非常有用。这种说法

y ( n ) = ( x h ) ( n )

信号 x(n)经过与滤波器h(n)卷积后可以转换为信号 y(n)。因此,精心设计滤波器 h(n)可以产生具有一些期望特性的 y(n),或者可以从信号 x(n)中提取特定特征,例如所有的边缘。此外,使用不同的滤波器 h(n)可以从相同的信号 x(n)中提取不同的特征。我们将在接下来的几节中详细阐述这些概念,同时请记住以下内容:当信息,如信号或图像,通过卷积神经网络流动时,不同的特征会在每个卷积层中被提取(映射)。

在离开线性和时不变系统之前,我们必须提到这样的系统对正弦输入有非常简单的响应:如果系统的输入是具有特定频率的正弦波,那么输出也是具有相同频率的正弦波,但可能具有不同的幅度和相位。此外,了解系统的冲激响应使我们能够计算其频率响应,即系统对所有频率的正弦波的响应,反之亦然。也就是说,确定系统的冲激响应使我们能够计算其频率响应,确定频率响应使我们能够计算其冲激响应,从而完全确定系统对任意信号的响应。这种联系在理论和应用角度都非常有用,并与傅立叶变换和信号的频域表示密切相关。简而言之,线性和时不变系统的频率响应简单地是其冲激响应的傅立叶变换。我们在这里不详细介绍计算细节,因为这些概念对本书的其余部分并不重要,然而,了解这些联系并理解看似不同领域的事物如何联系并相互关联是很重要的。

卷积和一维离散信号

让我们解剖卷积操作,并理解它是如何通过将滤波器(卷积核)滑动到输入信号上来创建一个新信号的。接下来我们不会翻转卷积核,因为我们已经确定了从神经网络的角度来看,翻转卷积核是无关紧要的。我们从一个一维离散信号 x(n) 开始,然后将其与滤波器(卷积核)k(n) 进行卷积,产生一个新信号 z(n)。我们展示如何通过沿着 x(n) 滑动 k(n) 逐个获取 z(n) 的条目。为简单起见,设 x ( n ) = ( x 0 , x 1 , x 2 , x 3 , x 4 )k ( n ) = ( k 0 , k 1 , k 2 ) 。在这个例子中,输入信号 x(n) 只有五个条目,而卷积核有三个条目。在实践中,比如在信号处理、图像滤波或人工智能的神经网络中,输入信号 x(n) 的规模比滤波器 k(n) 大几个数量级。我们很快就会看到这一点,但这里的例子仅供说明。回想一下离散互相关的公式,即卷积而不翻转卷积核的情况:

( k * x ) ( n ) = s=- x ( s ) k ( s + n ) = + x ( - 1 ) k ( - 1 + n ) + x ( 0 ) k ( n ) + x ( 1 ) k ( 1 + n ) + x ( 2 ) k ( 2 + n ) +

由于*x(n)k(n)*都没有无限多个条目,并且总和是无限的,我们假装当索引未定义时,条目为零。由卷积产生的新滤波信号只有具有索引的非平凡条目:-4,-3,-2,-1,0,1,2。让我们写下每个条目:

( k x ) ( - 4 ) = x 4 k 0 ( k x ) ( - 3 ) = x 3 k 0 + x 4 k 1 ( k x ) ( - 2 ) = x 2 k 0 + x 3 k 1 + x 4 k 2 ( k x ) ( - 1 ) = x 1 k 0 + x 2 k 1 + x 3 k 2 ( k x ) ( 0 ) = x 0 k 0 + x 1 k 1 + x 2 k 2 ( k x ) ( 1 ) = x 0 k 1 + x 1 k 2 ( k * x ) ( 2 ) = x 0 k 2

上述操作更容易通过一个心理图像来理解:固定信号 x ( n ) = ( x 0 , x 1 , x 2 , x 3 , x 4 ),然后从右向左滑动滤波器 k ( n ) = ( k 0 , k 1 , k 2 )。这也可以用线性代数符号简洁地总结,我们将输入向量 x(n) 乘以一种特殊的矩阵,称为包含滤波器权重的 Teoplitz 矩阵。我们将在本章后面详细介绍这一点。

当我们在信号上滑动滤波器时,输出信号将在*x(n)k(n)匹配的索引处达到峰值,因此我们可以设计滤波器以捕捉x(n)*中的某些模式。这样,卷积(未翻转)提供了信号和核之间相似性的度量。

我们还可以以不同的方式查看交叉相关性,或未翻转的卷积:输出信号的每个条目都是输入信号条目的加权平均值。这样,我们强调了这种转换的线性性,以及我们可以选择内核中的权重以突出某些特征而不是其他特征的事实。我们将在接下来讨论的图像处理中更清楚地看到这一点,但为此我们必须在二维中写出卷积(未翻转)的公式。在线性代数符号中,离散二维卷积相当于将二维信号乘以另一种特殊类型的矩阵,称为双重块循环矩阵,也将在本章后面出现。请记住,矩阵乘法是一种线性变换。

卷积和二维离散信号

在二维中,卷积(未翻转)操作如下:

( k * x ) ( m , n ) = q=- s=- x ( m + q , n + s ) k ( q , s )

例如,矩阵 A 和卷积核 K 之间的(2,1)项的卷积(未翻转)如下:4 × 4矩阵和3 × 3卷积核。

A K = a 00 a 01 a 02 a 03 a 10 a 11 a 12 a 13 a 20 a 21 a 22 a 23 a 30 a 31 a 32 a 33 k 00 k 01 k 02 k 10 k 11 k 12 k 20 k 21 k 22

这是一个数学公式,描述了如何计算卷积操作。要理解这一点,想象将卷积核 K 准确放置在矩阵 A 的中心位置,然后将重叠的部分相乘并将所有结果相加。请注意,这里我们只计算了输出信号的一个条目,这意味着如果我们处理图像,它将是滤波后图像的一个像素值。我们需要所有其他像素的值!为此,我们需要知道哪些索引是有效的卷积。有效的意思是完整,即在计算过程中考虑所有卷积核条目。找到考虑完整卷积核的索引,回想一下我们将 K 准确放置在 A 上的心理图像,K 的中心位于我们要计算的索引位置。根据这种放置方式,K 的其余部分不应超出 A 的边界,因此对于我们的示例,好的索引将是(1,1),(1,2),(2,1)和(2,2),产生输出:

Z = z 11 z 12 z 21 z 22 .

这意味着如果我们在处理图像,经过滤的图像 Z 的尺寸会比原始图像 A 小。如果我们想要生成与原始图像相同尺寸的图像,那么在应用滤波器之前,我们必须用零填充原始图像。对于我们的示例,我们需要在 A 的完整边界周围填充一层零,但如果 K 更大,那么我们需要更多层的零。以下是用一层零填充的 A:

A padded = 0 0 0 0 0 0 0 a 00 a 01 a 02 a 03 0 0 a 10 a 11 a 12 a 13 0 0 a 20 a 21 a 22 a 23 0 0 a 30 a 31 a 32 a 33 0 0 0 0 0 0 0 .

除了零填充之外,还有其他方法可以保持输出图像的大小,尽管零填充是最简单和最流行的方法。这些方法包括:

  • 反射: 不要添加一层或多层零值,而是添加一层或多层与图像边界像素相同的值,以及它们下面的像素,如果需要更多的话。也就是说,不要关闭图像边界外的像素,而是使用已经存在或接近边界的相同像素来扩展图像。

  • 环绕:这用于周期信号。数学上,这是循环卷积、循环矩阵、离散傅里叶变换产生循环矩阵的特征值,以及傅里叶矩阵包含其特征向量作为列的地方。我们不会在这里深入讨论,但要记住周期性通常会简化事情,并让我们想到周期波,进而让我们想到傅里叶相关的东西。

  • 多通道:应用多个独立滤波器(权重矩阵)的通道,每个通道对原始输入进行下采样,然后将它们的输出组合起来。

图像滤波

图 5-1 展示了使用不同卷积核对同一图像进行卷积,提取图像不同特征的示例。

300

图 5-1。将各种滤镜应用于图像(图片来源)。

例如,表中的第三个核心在其中心有 8,其余的条目都是-1。这意味着这个核心使当前像素的强度增加了 8 倍,然后减去周围所有像素的值。如果我们在图像的一个均匀区域,意味着所有像素的值相等或非常接近,那么这个过程将得到零,返回一个黑色或关闭的像素。另一方面,如果这个像素位于边界上,例如眼睛的边界,或者鹿的脸部边界,那么卷积的输出将具有非零值,因此它将是一个明亮的像素。当我们将这个过程应用于整个图像时,结果是一个新图像,其中许多边缘都用明亮的像素描绘,而图像的其余部分则是黑暗的。正如我们在表中看到的,能够检测边缘、模糊等的核心的选择并不是唯一的。同一表格包括用于模糊的二维离散高斯滤波器。当我们离散化一维高斯函数时,我们不会失去其对称性,但是当我们离散化二维高斯函数时,我们会失去其径向对称性,因为我们必须用一个方形矩阵来近似其自然的圆形或椭圆形状。请注意,高斯在中心处达到峰值,随着远离中心的扩散而衰减。此外,其曲线下的面积(在二维中是曲面)为 1。这具有平均和平滑(去除噪音)的整体效果,当我们将其与另一个信号卷积时。我们付出的代价是去除尖锐的边缘,这正是模糊的作用(想象一下,尖锐的边缘被自身和中心几个标准偏差距离内所有周围像素的平滑衰减平均值所取代)。标准偏差(或方差的平方)越小,我们就能从图像中保留更多的细节。

另一个很好的例子显示在图 5-2 中。在这里,每个图像是顶部图像与每个子图的左下角所示的滤波器(核)之间的卷积结果。这些滤波器被称为Gabor 滤波器。它们被设计用来捕捉图像中的某些模式/纹理/特征,并且它们的工作方式类似于人类视觉系统中发现的滤波器。

emai 0502

图 5-2. Gabor 滤波器

我们的眼睛检测图像中事物变化的部分,即对比度。它们捕捉到边缘(水平、垂直、对角线)和梯度(测量变化的陡峭程度)。我们设计数学上执行相同操作的滤波器,通过卷积将它们滑过信号。当信号中没有变化时,这些产生平滑和无事件的结果(零或接近的数字),当检测到与核对齐的边缘或梯度时,会产生尖峰。

特征图

卷积神经网络通过优化损失函数来从数据中学习卷积核,就像全连接网络一样。训练函数的未知权重是每个卷积层中每个卷积核的条目、偏差以及与网络架构中涉及的任何全连接层相关的权重。卷积层的输出(包括非线性激活函数)称为特征图,学习到的卷积核是特征检测器。神经网络中的一个常见观察是,网络中较早的层(靠近输入层)学习低级特征,如边缘,而后续层学习更高级别的特征,如形状。这是自然而然的,因为在每个新层中,我们都会与非线性激活函数组合,所以复杂度会随着多个层的增加而增加,网络表达更复杂特征的能力也会增强。

我们如何绘制特征图?

特征图帮助我们打开黑匣子,直接观察训练网络在每个卷积层上检测到的内容。如果网络仍在训练过程中,特征图可以帮助我们找出错误的来源,然后相应地调整模型。假设我们将一幅图像输入到一个经过训练的卷积神经网络中。在第一层,通过卷积操作,一个核在整个图像上滑动并产生一个新的滤波图像。然后,这个滤波图像通过一个非线性激活函数,产生另一个图像。最后,这个图像通过一个池化层,很快会解释,产生卷积层的最终输出。这个输出是一个不同于我们开始的图像的图像,可能具有不同的尺寸,但如果网络训练得好,输出图像将突出显示原始图像的一些重要特征,如边缘、纹理等。这个输出图像通常是一个数字矩阵或数字张量(对于彩色图像是三维的,或者如果我们在批量图像或视频数据中工作,则是四维的,其中有一个额外的维度用于时间序列)。可以使用 Python 中的 matplotlib 库将这些可视化为特征图,其中矩阵或张量中的每个条目都映射到与矩阵条目相同位置的像素的强度。图 5-3 显示了卷积神经网络的各个卷积层中的各种特征图。

emai 0503

图 5-3. 卷积神经网络中的特征图

线性代数符号

现在我们知道,在卷积神经网络中最基本的操作是卷积。给定一个滤波器k(可以是一维、二维或三维或更高维),卷积操作将输入信号应用到k上,通过在信号上滑动k。这个操作是线性的,意味着每个输出是输入组件的线性组合(通过k中的权重),因此可以高效地表示为矩阵乘法。我们需要这种效率,因为我们仍然必须以一种易于评估和区分的方式编写代表卷积神经网络的训练函数。问题的数学结构仍然与许多机器学习模型的情况相同,我们现在非常熟悉:

  • 训练函数:对于卷积神经网络,这通常包括输入的组件的线性组合,与激活函数组合,然后是一个池化函数(即将讨论),在多个不同大小和连接的层上,最后顶部是一个逻辑函数、支持向量机函数,或者根据网络的最终目的(分类、图像分割、数据生成等)而定的其他函数。与全连接神经网络的不同之处在于,线性组合现在是与滤波器相关联的权重进行的,这意味着它们彼此之间并非完全不同(除非我们只进行局部连接层而不是卷积层)。此外,滤波器的大小通常比输入信号的数量级小得多,因此当我们用矩阵表示卷积运算时,矩阵中的大多数权重实际上将为零。请记住,网络的每一层每个输入特征都有一个权重。例如,如果输入是彩色图像,则每个通道中的每个像素都有一个不同的权重,除非我们决定实现一个卷积层,那么只会有少量独特的权重,以及许多零。这极大地简化了存储要求和计算时间,同时捕捉了重要的局部交互作用。也就是说,在卷积神经网络的架构中,通常在输出层附近有全连接层(每个连接分配一个不同的权重)。可以将这解释为特征的提炼:在捕获了随着每一层复杂度增加的重要且局部相关的特征之后,这些特征被组合在一起进行预测。也就是说,当信息到达全连接层时,它将被提炼为最重要的组件,这些组件反过来作为独特的特征对最终预测做出贡献。

  • 损失函数:这类似于我们在前几章中讨论过的所有损失函数,始终提供网络预测和实际值之间误差的度量。

  • 优化:由于问题规模庞大且涉及的变量数量巨大,因此再次使用随机梯度下降。在这里,和往常一样,我们需要评估损失函数的一个导数,其中包括训练函数的一个导数。我们计算与网络所有层和通道的滤波器中涉及的所有未知权重以及相关偏差有关的导数。在计算上,反向传播算法仍然是区分过程的主要工具。

线性代数和计算线性代数拥有我们需要生产可训练的卷积神经网络的所有工具。一般来说,在我们的计算中涉及的最糟糕的矩阵是一个密集的(大部分非零元素)矩阵,其条目没有明显的结构或模式(如果它是不可对角化的,等等)。但是当我们有一个稀疏矩阵(大部分为零),或者具有某种模式的矩阵(如对角线、三对角线、循环等),或者两者兼有时,我们就处于一个计算友好的世界中,只要我们学会如何利用特殊的矩阵结构来获得优势。研究大型矩阵计算和算法的研究人员是这种必要利用的国王和皇后,没有他们的工作,我们将只剩下在实践和规模上非常难以实现的理论。

在一维中,卷积操作可以用一种特殊类型的矩阵来表示,称为Toeplitz矩阵,在二维中,可以用另一种特殊类型的矩阵来表示,称为双重块循环矩阵。让我们只关注这两种,但带着这个教训:矩阵表示法,总的来说,是最好的方法,我们愚蠢地不去发现和充分利用矩阵内在的结构。换句话说,首先攻击最一般的情况可能只是一种悲哀的时间浪费,而时间在这个生活中是一种稀缺资源。在使用最一般的矩阵和最具体的矩阵之间找到一个很好的折衷方案是伴随结果进行复杂性分析:这种方法的顺序是n 3 , n log n等等,这样利益相关者就能意识到在实施某些方法与其他方法之间的权衡。

我们从在线免费书籍《深度学习书籍 2016(第九章第 334 页)》中借用一个简单的例子,以展示在检测图像中的垂直边缘时,使用卷积或利用矩阵中的许多零与使用常规矩阵乘法的效率。卷积是一种非常高效的描述变换的方式,它在整个输入中应用相同的线性变换于一个小的局部区域。

右侧的图像是通过将原始图像中的每个像素减去其左侧相邻像素的值而形成的。这显示了输入图像中所有垂直边缘的强度,这对于目标检测可能是一个有用的操作。

300

图 5-4。检测图像中的垂直边缘(图像来源)。

两幅图像都是 280 像素高。输入图像宽度为 320 像素,而输出图像宽度为 319 像素。这种转换可以用包含两个元素的卷积核来描述,并且需要进行 267,960 次浮点运算(每个输出像素两次乘法和一次加法)才能使用卷积计算。

用矩阵乘法描述相同的转换需要在矩阵中有 320×280×319×280,或者超过 80 亿个条目,使得卷积在表示这种转换时效率提高了四十亿倍。直接的矩阵乘法算法执行了超过 160 亿次浮点运算,使得卷积在计算上大约高效了 6 万倍。当然,矩阵的大部分条目将是零。如果我们只存储矩阵的非零条目,那么矩阵乘法和卷积都需要相同数量的浮点运算来计算。矩阵仍然需要包含 2×319×280 = 178,640 个条目。

一维情况:乘以一个特普利茨矩阵

一个带状的特普利茨矩阵看起来像:

T e o p l i t z = k 0 k 1 k 2 0 0 0 0 0 k 0 k 1 k 2 0 0 0 0 0 k 0 k 1 k 2 0 0 0 0 0 k 0 k 1 k 2 0 0 0 0 0 k 0 k 1 k 2

将这个 Toeplitz 矩阵乘以一个一维信号,得到一个一维滤波器与信号x的卷积的确切结果,即,( T e o p l i t z ) x t = k x。进行乘法运算,我们可以看到滤波器在信号上的滑动效果*。

二维情况:由双重块循环矩阵进行乘法

二维模拟涉及二维卷积运算和图像滤波。在这里,我们不是与一个特普利茨矩阵相乘,而是实际上与一个双循环矩阵相乘,其中每一行都是给定向量的循环移位。将这个矩阵写下来并与二维卷积的等效性一起写下来是线性代数的一个很好的练习。在深度学习中,我们最终学习到这些矩阵的条目,也就是权重。这种线性代数符号(以特普利茨或循环矩阵的形式)帮助我们找到关于这些权重的损失函数导数的紧凑公式。

汇集

几乎所有卷积神经网络都会经历一个步骤,即池化。通常在输入经过卷积滤波后,通过非线性激活函数后实现。池化有多种类型,但其思想是相同的:用周围输出的汇总统计数据替换特定位置的当前输出。例如,对于图像,可以用包含原始四个像素最大值的一个像素替换四个像素(最大池化),或者用它们的平均值,加权平均值,或者它们平方和的平方根,等等

图 5-5 显示了最大池化的工作原理。

300

图 5-5. 最大池化。

实际上,这减少了维度并总结了整个输出的邻域,但以牺牲细节为代价。因此,池化不适用于细节对于进行预测至关重要的用例。尽管如此,池化有许多优点:

  1. 它对输入的小空间平移提供了近似不变性。如果我们更关心某个特征是否存在而不是其确切位置,这将非常有用。

  2. 它可以极大地提高网络的统计效率。

  3. 它提高了网络的计算效率和内存需求,因为它减少了输入到下一层的数量。

  4. 这有助于处理不同大小的输入,因为我们可以控制池化邻域的大小,以及池化后的输出大小。

用于图像分类的卷积神经网络

在不偏离书本主旨——理解支撑不同模型的数学原理的情况下,要列出所有涉及神经网络中不同架构和变体的详尽清单是不可能的。然而,可以讨论基本组件以及它们如何共同完成人工智能任务,比如计算机视觉中的图像分类。在训练过程中,前一章的步骤仍然适用:

  1. 初始化随机权重(根据我们在上一章中描述的初始化过程)。

  2. 通过卷积网络前向传播一批图像,并为图像输出一个类别。

  3. 评估这组权重的损失函数。

  4. 通过网络反向传播错误。

  5. 调整导致错误的权重(随机梯度下降)。

  6. 重复直到达到一定数量的迭代次数,或者直到收敛。

值得庆幸的是,我们不必独自完成这些工作。Python 的库 Keras 有许多预训练模型,这意味着它们的权重已经固定,我们只需要在我们特定的数据集上评估训练好的模型。

我们可以做的,也应该做的,是观察和学习成功和获胜网络的架构。图 5-6 展示了 Le Cun 等人(1989 年)提出的 LeNet1 的简单架构,图 5-7 展示了 AlexNet(2012 年)的架构。

300

图 5-6. LeNet1 的架构(1989 年)。

300

图 5-7. AlexNet 的架构,拥有惊人的 6230 万个权重(2012 年)。

一个很好的练习是计算 LeNet1 和 AlexNet 训练函数中的权重数量。请注意,每一层(特征图)中的单元越多,权重就越多。当我尝试根据图图 5-6 中的架构计算 LeNet1 中涉及的权重时,我得到了 9484 个权重,但原始论文提到了 9760 个权重,所以我不知道其余的权重在哪里。如果您找到了它们,请告诉我。无论如何,重点是我们需要在 9760中解决一个优化问题。现在对 AlexNet 在图 5-7 中进行相同的计算:我们大约有 6230 万个权重,因此优化问题最终在 62.3million中。另一个惊人的数字:我们需要 11 亿个计算单元进行一次前向传递。

图 5-8 展示了一个精彩的插图,展示了手写数字 8 经过预训练的 LeNet1 并最终被正确分类为 8。

300

图 5-8。通过预训练的 LeNet1 传递手写数字 8 的图像(图像来源)。

最后,如果你觉得架构的选择对你来说似乎是随意的,也就是说,如果你在想:我们能否用更简单的架构实现类似的性能?那么欢迎加入这个俱乐部。整个社区都在思考同样的问题。

总结与展望

在这一章中,我们定义了卷积操作:卷积神经网络最重要的组成部分。卷积神经网络对于计算机视觉、机器音频处理和其他人工智能应用至关重要。

我们从系统设计的角度介绍了卷积,然后通过对一维和二维信号进行滤波。我们强调了卷积操作的线性代数等价物(通过特殊结构的矩阵相乘),最后以图像分类的示例结束。

在本书中,我们经常会遇到卷积神经网络,因为它们已经成为许多包括视觉和/或自然语言在内的人工智能系统中的重要组成部分。

第六章:奇异值分解:图像处理、自然语言处理和社交媒体

奇异值分解是线性代数中的数学运算,在数据科学、机器学习和人工智能领域广泛适用。它是主成分分析(在数据分析中)和潜在语义分析(在自然语言处理中)背后的数学。这个操作将一个密集矩阵转换为一个对角矩阵。在线性代数中,对角矩阵非常特殊且非常理想。当我们乘以它们时,它们就像标量一样,只会在某些方向上拉伸或挤压。

当计算矩阵的奇异值分解时,我们额外获得了揭示和量化矩阵对空间本身的作用的奖励:旋转、反射、拉伸和/或挤压。空间没有扭曲(弯曲),因为这个操作是线性的(毕竟,它被称为线性代数)。在一个方向上的极端拉伸或挤压与其他方向的影响稳定性,这会影响涉及我们矩阵的任何计算的敏感性,因此有一个度量可以让我们直接控制我们的计算对各种扰动的敏感性,例如,嘈杂的测量。

奇异值分解的威力在于它可以应用于任何矩阵。这一点以及它在人工智能领域的广泛应用使得它在本书中有了自己的章节。在接下来的章节中,我们将探讨奇异值分解,重点放在整体图景而不是细节上,并应用于图像处理、自然语言处理和社交媒体。

给定一个矩阵C(一幅图像,一个数据矩阵等),我们省略了计算其奇异值分解的细节。大多数线性代数书籍都会这样做,提出一种基于计算对称矩阵C t CC C t的特征向量和特征值的理论方法,对我们来说,这些是数据的协方差矩阵(如果数据已居中)。虽然理解理论仍然非常重要,但它提供的计算奇异值分解的方法对于高效计算并且尤其是对于许多现实问题中涉及的大矩阵来说是不可行的。此外,我们生活在一个软件包帮助我们轻松计算它的时代。在 Python 中,我们只需要从numpy库中调用numpy.linalg.svd方法。我们稍后在本章中简要了解进入这些软件包的数值算法。然而,我们的主要重点是理解奇异值分解的工作原理以及为什么这种分解对于减少给定问题的存储和计算需求而不丢失其基本信息是重要的。我们还将理解它在聚类数据中的作用。

矩阵分解

我们可以用多种方式因式分解一个标量数,例如,我们可以写出数字 12 = 4 × 312 = 2 × 2 × 312 = 0 . 5 × 24 。哪种因式分解更好取决于我们的用例。对于数字矩阵也可以做同样的事情。线性代数为我们提供了各种有用的矩阵因式分解。这个想法是我们想要将一个对象分解成更小的组件,这些组件让我们了解对象本身的功能和作用。这种分解也让我们对哪些组件包含了最多信息有一个很好的概念,因此比其他组件更重要。在这种情况下,我们可能会受益于丢弃不太重要的组件,并构建一个具有类似功能的更小的对象。这个更小的对象可能不像我们最初开始的包含所有组件的对象那样详细,但它包含了原始对象的足够重要的信息,使用它的更小尺寸会带来好处。奇异值分解就是一个正好做到这一点的矩阵因式分解。它的公式如下:

C m×n = U m×m Σ m×n V n×n t ,

其中我们将矩阵C分解为三个组件矩阵:UΣ,和V tUV是具有正交行和列的方阵。 Σ 是一个对角矩阵,其形状与C相同(见图 6-1)。

让我们从矩阵乘法开始。假设A是一个有3行和3列的矩阵:

A = 123456789 3×3 ,

B是一个有3行和2列的矩阵:

B = 134-201 3×2 .

然后C=AB是一个有3行和2列的矩阵:

C 3×2 = A 3×3 B 3×2 = 123456789 3×3 134-201 3×2 = 922483914 3×2 .

我们可以将C看作是AB的乘积,就像数字12 = 4 × 3一样。上述C的因式分解没有意义,因为AB都不是特殊类型的矩阵。C的一个非常重要的因式分解是其奇异值分解。任何矩阵都有奇异值分解。我们使用 Python 计算它(请参阅相关的 Jupyter 笔记本以获取代码):

C 3×2 = U 3×3 Σ 3×2 V 2×2 t = - 0 . 1853757 0 . 8938507 0 . 4082482 - 0 . 5120459 0 . 2667251 - 0 . 8164965 - 0 . 8387161 - 0 . 3604005 0 . 4082482 49 . 402266 0 0 1 . 189980 0 0 - 0 . 9446411 - 0 . 3281052 0 . 3281052 - 0 . 9446411 .

观察上述分解中的以下内容: V t的行是右奇异向量(这些恰好是V的列),U的列是左奇异向量Σ的对角线条目是奇异值。奇异值始终为正,并始终按照Σ的对角线上的递减顺序排列。最大奇异值与最小奇异值的比值是矩阵的条件数κ。在我们的情况下,只有两个奇异值和κ = 49.402266 1.189980 = 41 . 515207。这个数字在涉及我们的矩阵的计算稳定性中起着重要作用。条件良好的矩阵是那些条件数不是很大的矩阵。

左奇异向量是正交的(彼此正交且长度为 1)。同样,右奇异向量也是正交的。

对于定性特性,图像比无尽的数字数组更容易评估。使用 Python 可以轻松将矩阵可视化为图像(反之亦然,图像存储为数字矩阵):矩阵条目的值对应于相应像素的强度。数字越大,像素越亮。矩阵中较小的数字显示为较暗的像素,较大的数字显示为较亮的像素。图 6-1 展示了上述奇异值分解。我们观察到对角矩阵ΣC具有相同的形状,其对角线条目按递减顺序排列,最亮的像素对应于左上角的最大奇异值

400

图 6-1。可视化奇异值分解。对角矩阵ΣC具有相同的形状,其对角线条目按递减顺序排列,最亮的像素对应于左上角的最大奇异值。

图 6-2 和图 6-3 展示了两个矩形矩阵AB的奇异值分解,其中A是宽的,B是高的:

B = 5440710-18 4×2 = U 4×4 Σ 4×2 V 2×2 t

A = -13-54181-240-7204-3-8 3×5 = U 3×3 Σ 3×5 V 5×5 t

400

在图 6-2 中,我们注意到 Σ 的最后两列都是零(黑色像素),因此我们可以节省存储空间,丢弃这两列以及 V t 的最后两行(请参见下一节关于从左侧乘以对角矩阵)。类似地,在图 6-3 中,我们注意到 Σ 的最后两行都是零(黑色像素),因此我们可以节省存储空间,丢弃这两行以及 U 的最后两列(请参见下一节关于从右侧乘以对角矩阵)。奇异值分解已经为我们节省了一些空间(请注意,我们通常只存储 Σ 的对角元素,而不是整个带有所有零的矩阵)。

图 6-2。可视化宽矩形矩阵的奇异值分解。 Σ 的最后两列都是零(黑色像素),可以减少存储空间:丢弃 Σ 的最后两列以及 V t 的最后两行。

图 6-3。可视化一个高矩形矩阵的奇异值分解。Σ的最后两行都是零(黑色像素),允许减少存储:丢弃Σ的最后两行以及U的最后两列。

对角矩阵

当我们将一个向量乘以一个标量,比如 3,我们得到一个沿着相同方向的新向量,具有相同的方向,但长度被拉伸了三倍。当我们将相同的向量乘以另一个标量,比如-0.5,我们得到另一个向量,同样沿着相同方向,但这次长度减半,方向翻转。乘以一个标量是一个如此简单的操作,如果我们有矩阵在应用到(换句话说,乘以)向量时同样容易,那将是很好的。如果我们的生活是一维的,那么我们只需要处理标量,但由于我们的生活和感兴趣的应用是更高维的,所以我们必须满足对角矩阵(图 6-4)。这些是好的。

200

图 6-4。一个5 × 4对角矩阵的图像,对角线条目为:10(最亮的像素),6,3 和 1(除了零之外最暗的像素)。

通过对角矩阵进行乘法相当于在空间中的某些方向进行拉伸或挤压,方向翻转对应于对角线上的任何负数。正如我们非常清楚的,大多数矩阵远非对角矩阵。奇异值分解的力量在于它为我们提供了空间中的方向,沿着这些方向矩阵表现得像(虽然在广义上)对角矩阵。对角矩阵通常在与向量坐标相同的方向上进行拉伸/挤压。另一方面,如果矩阵不是对角的,它通常不会在与坐标相同的方向上进行拉伸/挤压。它会在其他方向上进行,在坐标变换后。奇异值分解给出了我们所需的坐标变换(右奇异向量),向量将被拉伸/挤压的方向(左奇异向量),以及拉伸/挤压的幅度(奇异值)。我们将在下一节详细介绍这一点,但首先我们澄清一下从左边和从右边乘以对角矩阵的乘法。

通过对角矩阵Σ进行乘法:

  1. 如果我们从右边将矩阵A乘以对角矩阵Σ,即A Σ,那么我们将A的列按σ进行缩放,例如:

    A Σ = a 11 a 12 a 21 a 22 a 31 a 32 σ 1 0 0 σ 2 = σ 1 a 11 σ 2 a 12 σ 1 a 21 σ 2 a 22 σ 1 a 31 σ 2 a 32

  2. 如果我们从左边将A乘以Σ,即Σ A,那么我们将A的行按σ进行缩放,例如:

    Σ A = σ 1 0 0 0 σ 2 0 0 0 σ 3 a 11 a 12 a 21 a 22 a 31 a 32 = σ 1 a 11 σ 1 a 12 σ 2 a 21 σ 2 a 22 σ 3 a 31 σ 3 a 32

矩阵作为作用于空间的线性变换

我们可以将矩阵视为对空间中的向量和空间本身进行线性变换(无扭曲)。如果不允许扭曲,因为那会使操作非线性化,那么哪些操作是允许的?答案是旋转、反射、拉伸和/或挤压,这些都是非扭曲操作。奇异值分解A = U Σ V t捕捉了这个概念。当A作用于一个向量v 时,让我们逐步进行乘法A v = U Σ V t v

  1. 首先v 由于正交矩阵V t而被旋转/反射。

  2. 然后,由于对角矩阵Σ,它沿着特定方向被拉伸/挤压。

  3. 最后,由于另一个正交矩阵U,它再次被旋转/反射。

反射和旋转实际上不会改变空间,因为它们保持大小和对称性(想象旋转一个物体或看它在镜子中的倒影)。对角矩阵Σ中编码的拉伸和/或挤压量(通过其对角线上的奇异值)对A的作用非常有信息量。

注意:正交矩阵

正交矩阵具有正交行和正交列。它永远不会拉伸或挤压,只会旋转和/或反射,这意味着在作用于对象时不会改变对象的大小和形状,只会改变它们的方向和/或方向。像数学中的许多事物一样,这些名称很令人困惑。它被称为正交矩阵,即使它的行和列是正交的,这意味着正交长度等于一。还有一个有用的事实:如果C是一个正交矩阵,那么C C t = C t C = I,也就是说,这个矩阵的逆矩阵是它的转置。计算矩阵的逆通常是一个非常昂贵的操作,但对于正交矩阵,我们只需要将其行与列互换。

我们使用二维矩阵来说明上述概念,因为这些很容易可视化。在接下来的小节中,我们探讨:

  1. 矩阵A对右奇异向量的作用,这些是矩阵V的列v 1v 2。这些被发送到左奇异向量u 1u 2的倍数,这些是矩阵U的列。

  2. A 对标准单位向量e 1e 2的作用。我们还注意到单位正方形被转换为平行四边形。

  3. A 对一个一般向量x 的作用。这将帮助我们理解矩阵UV作为空间中的旋转或反射。

  4. A 对单位圆的作用。我们看到A将单位圆变换为椭圆,其主轴沿着左奇异向量(u )方向,并且其主轴的长度是奇异值(σ)的长度。由于奇异值从大到小排序,因此u 1定义了具有最大变化的方向,u 2定义了具有第二大变化的方向,依此类推。

A 对右奇异向量的作用

A2 × 2矩阵:

A = 1 5 - 1 2

其奇异值分解为:A = U Σ V t如下所示:

A = 0 . 93788501 0 . 34694625 0 . 34694625 - 0 . 93788501 5 . 41565478 0 0 1 . 29254915 0 . 10911677 0 . 99402894 0 . 99402894 - 0 . 10911677

表达式A = U Σ V t等价于

A V = U Σ ,

因为我们只需要将A = U Σ V t从右边乘以V,并利用V t V = I的事实,由于V的正交性。

我们可以将AV看作矩阵A作用于矩阵V的每一列。由于A V = U Σ,则AV的正交列的作用等同于通过奇异值拉伸/挤压U的列。

A v 1 = σ 1 u 1

A v 2 = σ 2 u 2

这在图 6-5 中有所展示。

200

图 6-5。矩阵A将右奇异向量发送到左奇异向量的倍数:A v 1 = σ 1 u 1A v 2 = σ 2 u 2

A 对标准单位向量和由它们确定的单位正方形的作用

200

图 6-6。矩阵A将标准单位向量发送到其自身的列,并将单位正方形转换为平行四边形。空间没有扭曲(弯曲)。

矩阵A对单位圆的作用

图 6-7 显示矩阵A将单位圆发送到椭圆:主轴沿着u的方向,主轴的长度等于σ。再次,由于矩阵代表线性变换,所以有空间的反射/旋转和拉伸/挤压,但没有扭曲。

300

图 6-7。矩阵A将单位圆发送到椭圆,主轴沿着左奇异向量,主轴的长度等于奇异值。

我们可以从奇异值分解中轻松看到上述操作。

极分解

A = Q S

是一个非常简单的几何方式,展示了圆如何被转换为椭圆。

根据奇异值分解将圆到椭圆的转换分解

图 6-8 显示了将圆转换为椭圆的步骤的四个子图:

  1. 首先我们将单位圆和向量v 1v 2乘以V t。由于V t V = I,我们有V t v 1 = e 1V t v 2 = e 2。因此,起初,右奇异向量被“拉直”,与标准单位向量正确对齐。

  2. 然后我们乘以Σ:这里发生的一切只是通过σ 1σ 2(拉伸或挤压取决于奇异值的大小是大于还是小于一)来拉伸/挤压标准单位向量。

  3. 最后我们乘以U:这要么将椭圆反射到一条线上,要么将其顺时针或逆时针旋转一定角度。下一小节将详细解释这一点。

400

图 6-8。使用奇异值分解的单位圆到椭圆转换步骤。

旋转和反射矩阵

在奇异值分解A = U Σ V t中出现的矩阵UV t是正交矩阵。它们的行和列是正交的,它们的逆矩阵与转置矩阵相同。在二维空间中,UV可以是旋转或反射(关于一条直线)矩阵。

旋转矩阵

顺时针旋转一个角度θ的矩阵如下:

cos θ sin θ - sin θ cos θ

旋转矩阵的转置是一个相反方向的旋转。因此,如果一个矩阵顺时针旋转一个角度θ,那么它的转置就会逆时针旋转θ,如下所示:

cos θ - sin θ sin θ cos θ

反射矩阵

关于与x-轴成角度θ的直线L的反射矩阵如下:

cos 2 θ sin 2 θ sin 2 θ - cos 2 θ

直线L的斜率为tan θ,它经过原点,因此它的方程为y = ( tan θ ) x。这条直线就像反射操作的镜子。图 6-9 展示了矩阵V tU反射的两条直线,以及一个向量x 及其随后的变换。

旋转矩阵的行列式为 1,反射矩阵的行列式为- 1

在更高维度中,反射和旋转矩阵看起来不同。始终确保您理解正在处理的对象:如果我们在三维空间中进行旋转,那么围绕哪个轴?如果我们进行反射,那么围绕哪个平面?如果您想深入了解,那么现在是阅读正交矩阵及其性质的好时机。

对一般向量x 的作用

我们已经探讨了矩阵A对右奇异向量的作用(它们被映射到左奇异向量)、标准单位向量(它们被映射到矩阵A的列)、单位正方形(它被映射到平行四边形)、单位圆(它被映射到一个椭圆,其主轴沿着左奇异向量,长度等于奇异值)。最后,我们探讨了矩阵A对一个一般的非特殊向量x 的作用。这被映射到另一个非特殊向量A x 。然而,使用奇异值分解将这个转换分解成步骤是具有信息性的。

回想一下我们的矩阵A及其奇异值分解:

A = 1 5 - 1 2 = U Σ V t = 0 . 93788501 0 . 34694625 0 . 34694625 - 0 . 93788501 5 . 41565478 0 0 1 . 29254915 0 . 10911677 0 . 99402894 0 . 99402894 - 0 . 10911677

在上述奇异值分解中,UV t都是反射矩阵。作为这些反射镜的直线L UL V t在图 6-9 中绘制出来,它们的方程很容易从各自的矩阵中找到:cos ( 2 θ )sin ( 2 θ )在第一行,因此我们可以使用这些来找到斜率tan ( θ )。然后,V t反射的直线方程是y = ( tan θ V t ) x = 0 . 8962347008436108 xU反射的直线方程是y = ( tan θ U ) x = 0 . 17903345403184898 x。由于A x = U Σ V t x ,首先x 被反射到直线L V t上,到达V t x 。然后,当我们从左边乘以Σ时,V t x 的第一个坐标被第一个奇异值水平拉伸,第二个坐标被第二个奇异值拉伸,得到Σ V t x 。最后,当我们乘以U时,向量Σ V t x 被反射到直线L U上,到达A x = U Σ V t x 。图 6-9 说明了这个过程。

400

图 6-9。矩阵 A 对一个一般向量x 的作用。使用奇异值分解逐步进行变换。

矩阵相乘的三种方法

在大数据时代,矩阵乘法的高效算法是如此令人渴望。理论上,有三种方法可以将两个矩阵A m×nB n×s相乘:

  1. 行-列方法:通过将A的第i行与B的第j列进行点积,逐个生成一个条目(ab) ij

    (ab) ij = A row i B col j = k=1 n a ik b kj

  2. 列-列方法:通过线性组合A的列,使用B的第i列的条目,逐个生成一个列(AB) col i

    (AB) col i = b 1i A col 1 + b 2i A col 2 + + b ni A col n

  3. 列-行方法:逐个生成乘积的秩一片段,通过将A的第一列与B的第一行相乘,将A的第二列与B的第二行相乘,依此类推。然后将所有这些秩一矩阵相加以获得最终乘积AB

    A B = A col 1 B row 1 + A col 2 B row 2 + + A col n B row n

这如何帮助我们理解奇异值分解的有用性?

我们可以将奇异值分解的乘积A = U Σ V t扩展为一系列秩为一的矩阵之和,使用列-行方法进行矩阵乘法。在这里,我们将矩阵U Σ(它将U的每一列U col i乘以σ i)与V t相乘:

A = U Σ V t = σ 1 U col 1 V row 1 t + σ 2 U col 2 V row 2 t + + σ r U col r V row r t

其中rA的非零奇异值的数量(也称为A)。

上述表达式的伟大之处在于,它将A分解为按重要性顺序排列的秩一矩阵之和,因为σ按降序排列。此外,它提供了一种简单的方法来通过低秩矩阵近似A:舍弃较低的奇异值。Eckart–Young–Mirsky 定理断言,这实际上是找到A的低秩近似的最佳方法,当使用Frobenius 范数(矩阵奇异值的平方和的平方根)来衡量近似的接近度时。在本章的后面,我们利用A的秩一分解进行数字图像压缩。

大局观

到目前为止,我们已经专注于矩阵的奇异值分解,以A对空间的作用和使用低秩矩阵近似A。在转向与 AI 相关的应用之前,让我们以鹰眼视角看待并解决大局。

给定一个实数矩阵,我们想根据我们的用例了解以下内容:

  1. 如果矩阵代表我们关心的数据,如图像或表格数据,那么这个矩阵(数据)的最重要组成部分是什么?

  2. 数据主要沿着哪些重要方向传播(数据中变化最大的方向)?

  3. 如果我将矩阵视为从初始空间到目标空间的转换,那么这个矩阵对空间中的向量有什么影响?它们被发送到哪些向量?

  4. 这个矩阵对空间本身的影响是什么?由于这是一个线性变换,我们知道没有空间扭曲,但有空间拉伸、挤压、旋转、反射。

  5. 许多物理系统可以表示为线性方程组的系统?我们如何解决这个系统(找到)?根据A的属性,最有效的方法是什么?如果没有解,是否有一个满足我们目的的近似解?请注意,这里我们正在寻找未知向量,当A作用于它时,它被转换为。

奇异值分解可用于回答上述所有问题。前两个问题是矩阵本身固有的,而后两个问题与将矩阵与向量相乘的效果有关(矩阵作用于空间和空间中的向量)。第五个问题涉及解决线性方程组的非常重要问题,并出现在各种应用中。

因此,我们可以以两种方式研究数字矩阵:

  1. 它的固有属性是什么?

  2. 将其视为转换时的属性是什么?

这两者相关,因为矩阵的固有属性影响它对向量和空间的作用。

要牢记的属性

  1. A将其初始空间的标准正交向量(右奇异向量)发送到其目标空间的标准正交向量(左奇异向量)的标量倍数:

    A v i = σ i u i

  2. 方阵的行列式:如果我们的矩阵是方阵,那么它的行列式等于所有奇异值的乘积:σ 1 σ 2 σ r

  3. 矩阵的条件数,相对于l 2范数,即欧几里德空间中的常规距离,是最大奇异值与最小奇异值的比值:

    κ = σ 1 σ r .

条件数对计算稳定性非常重要

  • 它衡量了A对空间的拉伸程度。如果条件数太大,那么它在一个方向相对于另一个方向过度拉伸空间,在这种极端拉伸的空间中进行计算可能是危险的:当A的条件数很大时,解A x = b 会使解x 不稳定,因为它对b的扰动非常敏感。在b 中的一个小错误将导致解x 与没有b 错误的解截然不同。这种不稳定性在几何上很容易想象。

  • 通过数值方法解A x = b (比如通过高斯消元)和迭代方法在涉及的矩阵具有合理(不是很大)条件数时可以很好地工作。

  • 关于具有特别大条件数的矩阵的一件事:它拉伸空间太多,几乎将其压缩到较低维度的空间中。有趣的部分是,如果我们决定放弃那个非常小的奇异值,因此在较低维度的压缩空间中工作,我们的计算变得完全正常。因此,在极端性的边界处是正常性,只是这种正常性现在位于较低维度。

  • 许多迭代数值方法,包括非常有用的梯度下降,都涉及到它们的分析中的矩阵。如果这些矩阵的条件数太大,那么迭代方法可能无法收敛到解。条件数控制着这些迭代方法收敛的速度。

奇异值分解的成分

在这一章中,我们只解剖了一个公式:A = U Σ V t。我们使用 Python 来计算UΣV的条目,但这些条目究竟是什么?答案很简单,如果我们知道什么是特征向量和特征值,我们将在下一节中澄清。现在,我们列出UΣV的成分:

  1. V的列(右奇异向量)是对称矩阵A的正交特征向量。

  2. U的列(左奇异向量)是对称矩阵A的正交特征向量。

  3. 奇异值σ1σ2,⋯,σr是对称矩阵A的特征值的平方根,排列为非负并按降序排列。奇异值可以为零。

  4. A v i = σ i u i

注意:每个实对称正半定(非负特征值)矩阵都是可对角化的,这意味着当在不同坐标系(P的列)中查看时,它类似于对角矩阵DA的转置乘以AA乘以A的转置都恰好是对称正半定的,因此它们是可对角化的。

奇异值分解vs特征值分解

如果我们想要理解奇异值分解的要素,了解更多关于对称矩阵的知识是很重要的。这也将帮助我们区分奇异值分解和特征值分解,当后者存在时。

注意奇异值分解总是存在的,但特征值分解仅对特殊矩阵(称为可对角化)存在。矩形矩阵永远不可对角化。方阵可能是可对角化的,也可能不可对角化。当方阵可对角化时,SVD 和特征值分解不相等,除非矩阵是对称的并且具有非负特征值。

  1. 最好最简单的矩阵是沿对角线具有相同数字的方阵对角矩阵。

  2. 第二好的是不一定沿对角线具有相同数字的方阵对角矩阵D

  3. 第三好的矩阵是对称矩阵。这些矩阵具有实特征值和正交特征向量。它们是最接近对角矩阵的矩阵类型,因为它们是可对角化的,或者在基变换后类似于对角矩阵。P的列(特征向量)是正交的。

  4. 第四种最佳矩阵是可对角化的方阵,形式为 A=PD(P 的逆)。这些矩阵在基变换后类似于对角矩阵,然而,P 的列(特征向量)不一定正交。

  5. 第五种最佳矩阵是其余所有矩阵。这些矩阵不可对角化,意味着没有基变换可以使它们变为对角矩阵,然而,通过奇异值分解,可以接近地使它们类似于对角矩阵。这里的 U 和 V 是不同的,它们具有正交的列和行。它们的逆矩阵非常容易,因为它们的逆矩阵等于它们的转置矩阵。奇异值分解适用于方阵和非方阵。

  6. 给定一个矩阵 A,A 的转置乘以 A 和 A 乘以 A 的转置都是对称的且半正定的(意味着它们的特征值是非负的),因此,它们可以对角化为两组正交特征向量。当我们除以这些正交特征向量的范数时,它们变为正交的。这些分别是 V 和 U 的列。

  7. A 的转置乘以 A 和 A 乘以 A 的转置具有完全相同的非负特征值,λi=σi²。将这些特征值的平方根按降序排列(保持 U 和 V 中对应特征向量的顺序),我们得到奇异值分解中的对角矩阵Σ。

  8. 如果我们开始的矩阵是对称的呢?它的奇异值分解与对角化有什么关系?对称矩阵 A 的列是正交的特征向量。当我们除以它们的长度时,它们变成正交的。将这些正交特征向量按照对应的特征值绝对值递减的顺序堆叠在一个矩阵中,我们得到奇异值分解的 U 和 V。现在,如果对称矩阵 A 的所有特征值恰好是非负的,那么这个半正定对称矩阵的奇异值分解将与其特征值分解相同,只要你对 P 中的正交特征向量进行归一化,按照非负特征值递减的顺序排列。在这种情况下,U 等于 V。如果一些(或全部)特征值是负的呢?那么,但现在我们必须小心对应的特征向量。这使得奇异值分解中的 U 和 V 不相等。因此,具有一些负特征值的对称矩阵的奇异值分解可以很容易地从其特征值分解中提取出来,但并不完全相同。

  9. 如果我们开始的矩阵不是对称的,但是可对角化呢?它的奇异值分解与对角化有什么关系?在这种情况下,矩阵 A 的特征向量,即 P 的列,通常不是正交的,因此这样一个矩阵的奇异值分解和特征值分解没有关系。

奇异值分解的计算

Python 和其他如何数值计算矩阵的奇异值分解?底层的数值算法是什么?快速的答案是:QR分解,Householder 反射,以及用于特征值和特征向量的迭代算法

理论上,计算一般矩阵的奇异值分解,或者方阵的特征值和特征向量,需要将一个多项式=0 来解特征值,然后建立一个线性方程组来解特征向量。这对于应用来说远非实际可行。找到多项式的零点的问题对多项式系数的任何变化都非常敏感,因此计算问题容易受到系数中存在的舍入误差的影响。我们需要稳定的数值方法来找到特征向量和特征值,而不必数值计算多项式的零点。此外,我们需要确保涉及线性方程组的矩阵是良好条件的,否则流行的方法如高斯消元(L U分解)将无法工作。

大多数奇异值分解的数值实现都试图避免计算A A tA t A。这与本书的一个主题一致:避免矩阵相乘,而是将矩阵与向量相乘。奇异值分解的流行数值方法使用一种称为Householder 反射的算法将矩阵转换为一个双对角矩阵(有时在QR分解之前),然后使用迭代算法来找到特征值和特征向量。数值线性代数领域开发了这样的方法,并将它们适应于应用中出现的矩阵的类型和大小。在下一小节中,我们将介绍一种迭代方法来计算给定矩阵的一个特征值及其对应的特征向量。

找到方阵对应最大特征值的特征向量的简单数值方法

方阵A的特征向量是一个不变方向的非零向量,当乘以A时不改变方向,而只被特征值λ缩放:

A v = λ v .

以下迭代算法是一种简单的数值方法,用于找到矩阵的一个特征向量:

  1. 从一个随机单位向量(长度为 1)v 0开始

  2. 乘以Av i+1 = A v i

  3. 通过v i+1的长度除以,以避免我们的向量大小增长过大。

  4. 当你收敛时停止。

上述迭代方法非常简单,但有一个缺点:它只找到矩阵的一个特征向量,即对应于其最大特征值的特征向量。因此,它找到了当我们应用A时被最大拉伸的方向。

例如,考虑矩阵 A = 1 2 2 - 3。我们从向量 v 0 = 1 0 开始,并应用上述算法。我们注意到在 28 次迭代后,向量变为 v = - 0 . 38268343 0 . 92387953。代码在链接的 Jupyter 笔记本中,输出如下。

**输出:**

[1, 0]
[0.4472136  0.89442719]
[ 0.78086881 -0.62469505]
[-0.1351132   0.99083017]
[ 0.49483862 -0.86898489]
[-0.3266748  0.9451368]
[ 0.40898444 -0.91254136]
[-0.37000749  0.92902877]
[ 0.38871252 -0.92135909]
[-0.37979817  0.92506937]
[ 0.3840601 -0.9233081]
[-0.38202565  0.92415172]
[ 0.38299752 -0.92374937]
[-0.38253341  0.92394166]
[ 0.38275508 -0.92384985]
[-0.38264921  0.92389371]
[ 0.38269977 -0.92387276]
[-0.38267563  0.92388277]
[ 0.38268716 -0.92387799]
[-0.38268165  0.92388027]
[ 0.38268428 -0.92387918]
[-0.38268303  0.9238797 ]
[ 0.38268363 -0.92387945]
[-0.38268334  0.92387957]
[ 0.38268348 -0.92387951]
[-0.38268341  0.92387954]
[ 0.38268344 -0.92387953]
[-0.38268343  0.92387953]
[ 0.38268343 -0.92387953]

 v= [-0.38268343  0.92387953]
Av= [ 1.46507563 -3.53700546]
$\lambda=$ -3.828427140993716

图 6-10 显示了上述迭代。请注意,所有向量的长度均为 1,并且当算法收敛时,向量的方向不会改变,因此捕获了 A 的一个特征向量。在最后几次迭代中,符号保持振荡,因此向量保持翻转方向,因此特征值必须为负。事实上,我们发现它为 λ = - 3 . 828427140993716

400

图 6-10。我们从 v 0 = 1 0 开始,然后我们乘以 A 并归一化,直到收敛到特征向量。

伪逆

许多物理系统可以用(或近似于)线性方程组A x = b 来表示。如果x 是我们关心的未知向量,则我们需要通过矩阵A来找到x 。矩阵除法的等效物是找到逆矩阵A -1,这样解就是x = A -1 b 。具有逆矩阵的矩阵称为可逆矩阵。这些是具有非零行列式的方阵(行列式是特征值的乘积,奇异值的乘积,行列式的绝对值将相同)。但是那些矩阵是长方形的系统呢?那些具有不可逆矩阵的系统呢?那些矩阵是方阵且可逆的,但几乎不可逆(它们的行列式非常接近零)呢?我们仍然关心找到这些系统的。奇异值分解的威力在于它适用于任何矩阵,包括上述提到的那些,它可以帮助我们反转任何矩阵。

给定任何矩阵及其奇异值分解A = U Σ V t,我们可以将其伪逆定义为:

A + = V Σ + U t ,

其中Σ +是通过反转所有对角线条目获得的Σ(除了那些为零的条目(或者如果矩阵恰好病态,则非常接近于零))。

这使我们能够找到任何线性方程组A x = b,即x = A + b

注意 当后者存在时,矩阵的伪逆与其逆矩阵相同。

将奇异值分解应用于图像

我们终于准备好将奇异值分解应用于实际世界中。我们从图像压缩开始。数字图像以数字矩阵的形式存储,其中每个数字对应于像素的强度。我们将使用奇异值分解来减少图像的存储要求,而不会丢失其最基本的信息。我们所要做的就是丢弃不重要的奇异值,以及对应的U的列和V t的行。在这里帮助我们的数学表达式是:

A = U Σ V t = σ 1 U col 1 V row 1 t + σ 2 U col 2 V row 2 t + + σ r U col r V row r t

回想一下,σ按从最大值到最小值排列,因此我们的想法是保留前几个大的σ,丢弃其余的小的σ,反正它们本来就很小。

让我们使用图 6-11 中的图像。代码和详细信息在链接的 Jupyter 笔记本中。每个彩色图像有三个通道,红色、绿色和蓝色(参见图 6-12 和图 6-13)。每个通道都是一个数字矩阵,就像本章中我们一直在处理的那些一样。图 6-11 中图像的每个通道都是一个s i z e = 960 × 714矩阵,因此为了存储完整的图像,我们需要s i z e = 960 × 714 × 3 = 2 , 056 , 320个数字。想象一下流媒体视频的存储需求,其中包含许多图像帧。我们需要一种压缩机制,以免内存不足。我们为每个通道计算奇异值分解(参见图 6-14 中红色通道奇异值分解的图像表示)。然后我们进行大规模的减少,每个通道仅保留前 25 个奇异值(共 714 个)、U的 25 列(共 960 列)和V t的 25 行(共 714 行)。每个通道的存储减少是巨大的:U现在是960 × 25V t25 × 714,我们只需要存储 25 个奇异值(不需要存储对角矩阵Σ的零元素)。每个通道需要存储 41,875 个数字,因此对于所有三个通道,我们需要存储41 , 875 × 3 = 125 , 625个数字,存储需求减少了 93%。

我们通过将减少的U、减少的Σ和减少的V t相乘,逐个通道将图像重新组合:

C h a n n e l reduced = U 960×25 Σ 25×25 (V t ) 25×714

图 6-15 显示了对红色、绿色和蓝色通道进行此乘法的结果。

最后,我们将减少的通道叠加在一起,生成减少的图像(图 6-16)。显然,我们在这个过程中丢失了很多细节,但这是我们不得不接受的权衡。

400

图 6-11。一个大小为s i z e = 960 × 714 × 3的数字彩色图像。

400

图 6-12。数字图像的红色、绿色和蓝色通道。每个通道的大小为s i z e = 960 × 714

400

图 6-13。显示数字图像的三个通道的红色、绿色和蓝色色调。每个通道的大小为s i z e = 960 × 714 × 3

400

图 6-14。红色通道的奇异值分解。我们有 714 个非零奇异值,但只有少数显著的。

400

图 6-15。降秩后的红色、绿色和蓝色通道。对于每个通道,我们仅保留了前 25 个奇异值,U的前 25 列和V t 的前 25 行。

400

图 6-16。具有 714 个奇异值的原始图像vs仅具有 25 个奇异值的降秩图像。两者仍然具有大小s i z e = 960 × 714 × 3,但需要不同的存储空间。

有关高级图像压缩技术,请查看此文章:图像压缩技术:无损和有损算法调查,神经计算(Elsevier)卷 300,2018 年 7 月 26 日,页面 44-69。

主成分分析和降维

主成分分析在数据分析中广受欢迎。它用于无监督机器学习中的降维和聚类。简而言之,它是在数据矩阵X上执行的奇异值分解,之前对数据进行了居中处理,这意味着从每个特征的平均值中减去每个特征列的平均值(X的每一列)。然后主成分是右奇异向量,它们是在现在熟悉的分解X = U Σ V t 中的V t 的行。

统计学家喜欢用方差或数据中的变化以及去相关化数据的语言来描述主成分分析。他们最终会使用数据的协方差矩阵的特征向量进行工作。这是统计学中对主成分分析的熟悉描述:它是一种减少数据集维度的方法,同时尽可能保留更多的变异性或统计信息。尽可能保留更多的变异性意味着找到数据集的线性组合的新特征,这些特征依次最大化方差并且彼此不相关。例如参见主成分分析:回顾和最新发展

两种描述(对数据进行中心化的右奇异向量和协方差矩阵的特征向量)完全相同,因为V t 的行是X centered t X centered 的特征向量,而X centered t X centered ,这反过来是数据的协方差矩阵。此外,统计学中的去相关化术语对应于数学和线性代数中的对角化,奇异值分解表明任何矩阵在新坐标系中(即V t 的行,它们是V的列)中的行为类似于对角矩阵,即Σ

让我们详细解释一下。假设X是一个中心化的数据矩阵,其奇异值分解为X = U Σ V t。这等同于X V = U Σ,或者,当我们逐列解析表达式时:X V col i = σ i U col i。注意X V col i只是使用V的特定列的条目对数据的特征进行线性组合。现在,忠实于本章一直在做的事情,我们可以丢弃较不显著的组件,即对应于较低奇异值的VU的列。

假设我们的数据有 200 个特征,但只有两个奇异值是显著的,因此我们决定只保留V的前两列和U的前两列。因此,我们将特征的维度从 200 降低到 2。第一个新特征是使用V的第一列的条目对所有原始 200 个特征进行线性组合得到的,但这恰好是σ 1 U col 1,第二个新特征是使用V的第二列的条目对所有原始 200 个特征进行线性组合得到的,但这恰好是σ 2 U col 2

现在让我们考虑单个数据点。数据矩阵X中的数据点有 200 个特征。这意味着我们需要 200 个轴来绘制这个数据点。然而,通过上面使用仅前两个主成分进行的降维,这个数据点现在只有两个坐标,即σ 1 U col 1σ 2 U col 2的对应条目。因此,如果这是数据集中的第三个数据点,那么它的新坐标将是σ 1 U col 1的第三个条目和σ 2 U col 2的第三个条目。现在很容易在二维空间中绘制这个数据点,而不是在原始的 200 维空间中绘制它。

我们决定保留多少奇异值(因此主成分)是我们自己选择的。我们保留的越多,我们对原始数据集的忠实度就越高,但当然维度会更高。这种截断决策(找到奇异值截断的最佳阈值)是正在进行的研究课题。常见的方法是提前确定所需的秩,或者保留原始数据中一定量的方差。其他技术绘制所有奇异值,观察图中明显的变化,并决定在该位置截断,希望将数据中的基本模式与噪音分开。

重要的是不仅要对数据进行中心化,还要对其进行标准化:减去每个特征的平均值并除以标准差。原因是奇异值分解对特征测量的尺度敏感。当我们对数据进行标准化时,我们最终会使用相关矩阵而不是协方差矩阵。为了不让自己困惑,要记住的主要观点是我们对标准化数据集执行奇异值分解,然后主成分是V的列,数据点的新坐标是σ i U col i的条目。

主成分分析和聚类

在前一节中,我们看到如何使用主成分分析来减少数据的特征数量,提供一个按照数据变化的层次顺序排列的新特征集。这对于可视化数据非常有用,因为我们只能在二维或三维中进行可视化。能够在高维数据中可视化模式和相关性非常重要,例如在基因数据中。有时,在由主成分确定的降维空间中,数据按其类别固有地聚类。例如,如果数据集既包含患癌症患者又包含无癌症患者,以及它们的基因表达(通常在数千个),我们可能会注意到在前三个主成分空间中绘制数据时,患癌症的患者与无癌症的患者分开聚类。

社交媒体应用

在主成分分析和聚类的同一本质中,Dan Vilenchik 最近的一篇出版物(2020 年 12 月)展示了来自社交媒体的一个精彩应用:一种无监督的方法来描述在线社交媒体平台上的用户。以下是他在这个主题上发表的演讲摘要以及他的出版物的摘要:

理解从在线平台(如在线社交媒体或电子学习平台)自动收集的数据是一项具有挑战性的任务:数据庞大、多维、嘈杂且异构(由行为不同的个体组成)。在这次演讲中,我们专注于所有在线社交平台共同的一个核心任务,即用户描述的任务。例如,自动识别 Twitter 上的垃圾邮件发送者或机器人,或者在电子学习平台上识别一个不参与的学生。

在线社交媒体渠道在我们的生活中扮演着核心角色。对社交网络中的用户进行表征是一个长期存在的问题,可以追溯到上世纪 50 年代,当时 Katz 和 Lazarsfeld 研究了“大众传播”中的影响。在机器学习时代,这个任务通常被视为一个监督学习问题,其中需要预测一个目标变量:年龄、性别、政治倾向、收入等。在这次讨论中,我们探讨了在无监督方式下可以实现什么。具体来说,我们利用主成分分析来理解一些社交媒体平台固有的模式和结构,以及其他平台没有的原因。我们得出了一个类似辛普森悖论的结论,这可能让我们更深入地了解这些平台用户表征的数据驱动过程。

主成分分析的概念用于在数据中创建具有最大方差的聚类将在本书中多次出现。

潜在语义分析

自然语言数据(文档)的潜在语义分析类似于数值数据的主成分分析。

在这里,我们想分析一组文档和它们包含的单词之间的关系。潜在语义分析的分布假设表明具有相似含义的单词出现在相似的文本片段中,因此出现在相似的文档中。计算机只能理解数字,因此在对它们进行任何分析之前,我们必须想出我们的单词文档的数值表示。这样的表示是词频矩阵X:列代表唯一的单词(如苹果,橙子,狗,城市,智能等),行代表每个文档。这样的矩阵非常大但非常稀疏(有很多零)。有太多的单词(这些是特征),所以我们需要降低特征的维度,同时保留文档(数据点)之间的相似性结构。到现在为止,我们知道该怎么做:对词频矩阵执行奇异值分解,X = U Σ V t,然后丢弃较小的奇异值以及对应的U中的列和V t中的行。现在我们可以在较低维度空间中表示每个文档(线性组合的单词),这与主成分分析允许在较低维度特征空间中表示数据的方式完全相同。

一旦我们降低了维度,我们最终可以使用余弦相似度比较文档:计算表示文档的两个向量之间的角度的余弦。如果余弦接近 1,那么文档在词空间中指向相同方向,因此代表非常相似的文档。如果余弦接近 0,则表示文档的向量彼此正交,因此彼此非常不同。

在早期,谷歌搜索更像是一个索引,然后它发展到接受更自然语言搜索。智能手机自动完成也是如此。潜在语义分析将句子或文档的含义压缩成一个向量,当这个向量集成到搜索引擎中时,它显著提高了引擎的质量,检索到我们正在寻找的确切文档。

随机奇异值分解

在本章中,我们故意避免计算奇异值分解,因为这是昂贵的。然而,我们提到常见的算法使用一种称为QR分解的矩阵分解(获得数据矩阵列的正交基),然后使用Householder 反射将其转换为双对角矩阵,最后使用迭代方法计算所需的特征向量和特征值。遗憾的是,对于不断增长的数据集,即使对于这些高效算法,涉及的矩阵也太大了。我们唯一的救赎是通过随机线性代数。这个领域提供了非常高效的矩阵分解方法,依赖于随机抽样理论。随机数值方法奇迹般地工作,提供准确的矩阵分解,同时比确定性方法便宜得多。随机奇异值分解对大数据矩阵X的列空间进行抽样,计算抽样(要小得多)矩阵的QR分解,将X投影到较小的空间(Y = Q t X,因此X Q Y),然后计算Y的奇异值分解(Y = U Σ V t)。矩阵Q是正交的,并且近似于X的列空间,因此矩阵ΣV对于XY是相同的。要找到XU,我们可以从YQU计算得到U X = Q U Y

像所有随机方法一样,它们必须伴随着误差界限,即从原始矩阵X到抽样QY的期望有多远。我们有这样的误差界限,但我们将它们推迟到下一章,专门讨论大型随机矩阵。

总结和展望

本章的焦点是一个公式:

X = U Σ V t = σ 1 U col 1 V row 1 t + σ 2 U col 2 V row 2 t + + σ r U col r V row r t

这等同于X V = U ΣX V col i = σ i U col i

奇异值分解的威力在于它允许在不丢失基本信息的情况下进行秩降低。这使我们能够压缩图像,减少数据集的特征空间的维数,并在自然语言处理中计算文档相似性。

我们讨论了主成分分析、潜在语义分析以及主成分空间中固有的聚类结构。我们讨论了主成分分析被用作根据基因表达对卵巢癌患者进行无监督聚类技术的示例,以及对社交媒体用户进行表征的示例。

我们以随机奇异值分解结束了本章,突出了本书的一个重要主题:当事物太大时,对其进行抽样。随机性通常产生可靠性

对于想深入了解的读者,可以阅读有关张量分解和 N 维数据数组的内容,以及数据对齐对奇异值分解正常工作的重要性。对于对流行示例感兴趣的读者,可以从现代角度了解特征脸。

第七章:自然语言和金融人工智能:向量化和时间序列

他们。能。阅读。

人类智慧的一个标志是我们在很小的时候就掌握了语言:理解书面和口头语言,书面和口头表达思想,两个或更多人之间的对话,从一种语言到另一种语言的翻译,以及使用语言表达同理心、传达情感,并处理从周围环境中感知到的视觉和音频数据。撇开意识的哲学问题不谈,如果机器能够像人类一样或超过人类一样,以类似于人类的水平执行这些语言任务,解读单词的意图,那么这将是通往通用人工智能的重要推动力。这些任务属于自然语言处理计算语言学机器学习和/或概率语言建模的范畴。这些领域广阔,很容易让人们在各种充满大量承诺的模型中徘徊。我们不应迷失方向。本章的目的是一次性展示自然处理领域,以便我们可以一览全局而不深入细节。

以下问题始终指导我们:

  1. 手头上是什么类型的任务?换句话说,我们的目标是什么?

  2. 手头上是什么类型的数据?我们需要收集什么类型的数据?

  3. 有哪些最先进的模型处理类似任务和类似类型的数据?如果没有,那么我们必须自己设计模型。

  4. 我们如何训练这些模型?它们以什么格式消耗数据?它们以什么格式产生输出?它们是否有训练函数、损失函数(或目标函数)和优化结构?

  5. 各种模型相对于其他模型的优缺点是什么?

  6. 是否有 Python 包或库可用于实现它们?幸运的是,如今,大多数模型都伴随着它们的 Python 实现和非常简单的 API(应用程序编程接口)一起发布。更好的是,有许多预训练模型可供下载并准备在应用中使用。

  7. 为了训练和/或部署这些模型,我们需要多少计算基础设施?

  8. 我们能做得更好吗?总有改进的空间。

我们还需要从表现最佳的模型中提取数学。幸运的是,这是容易的部分,因为许多模型都有相似的数学基础,即使涉及不同类型的任务或来自不同的应用领域,比如预测句子中的下一个单词或预测股市行为。

我们打算在本章中介绍的最先进模型有:

  • 变压器或注意力模型(自 2017 年起)。这里的重要数学非常简单:两个向量之间的点积。

  • 递归长短期记忆神经网络(自 1995 年起)。这里的重要数学是时间反向传播。我们在第四章中介绍了反向传播,但对于递归网络,我们要对时间进行导数。

  • 卷积神经网络(自 1989 年起)用于时间序列数据。重要的数学是卷积操作,我们在第五章中介绍过。

这些模型非常适用于时间序列数据,即随时间顺序出现的数据。时间序列数据的例子包括电影、音频文件(如音乐和语音录音)、金融市场数据、气候数据、动态系统数据、文件和书籍。

我们可能会想知道为什么文件和书籍可以被视为时间相关,即使它们已经被写成并且只是存在。为什么图像不是时间相关,但书籍,以及一般来说,阅读和写作是?答案很简单:

  • 当我们阅读一本书时,我们逐个理解我们读到的每个单词,然后逐个理解每个短语,然后逐个理解每个句子,然后逐个理解每个段落,依此类推。这是我们理解书中概念和主题的方式。

  • 当我们写文档时,即使我们尝试表达的整个想法已经编码在那里,我们也是逐个输出一个单词,顺序地在纸上输出。

  • 当我们给图像加标题时,图像本身不是时间相关的,但我们的标题(输出)是。

  • 当我们总结一篇文章、回答一个问题或从一种语言翻译到另一种语言时,输出文本是时间相关的。如果使用循环神经网络处理,输入文本可能是时间相关的,如果使用 transformer 或卷积模型一次处理所有文本,则是静态的。

直到 2017 年,处理时间序列数据的最流行的机器学习模型要么基于卷积神经网络,要么基于具有长短期记忆的循环神经网络。2017 年,transformers取代了它们,在某些应用领域完全放弃了循环。关于循环神经网络是否过时的问题存在,但在人工智能领域每天都在发生变化,谁知道哪些模型会消亡,哪些模型会经受时间的考验。此外,循环神经网络驱动许多人工智能引擎,仍然是积极研究的对象。

在本章中,我们回答以下问题:

  1. 我们如何将自然语言文本转换为保留含义的数值量?我们的机器只能理解数字,我们需要使用这些机器处理自然语言。我们必须向量化我们的文本数据样本,或者将它们嵌入到有限维向量空间中。

  2. 我们如何将最初需要的巨大向量的维度降低到表示自然语言所需的维度?例如,法语有大约 135,000 个不同的单词,我们如何避免使用每个包含 135,000 个条目的向量对法语句子进行独热编码?

  3. 手头的模型是否将我们的自然语言数据(作为输入和/或输出)视为一个接一个地输入的时间相关序列,还是一次消耗所有的静态向量?

  4. 各种自然语言处理模型究竟是如何工作的?

  5. 为什么本章中也涉及金融?

在讨论过程中,我们将讨论我们的模型适用于哪些类型的自然语言和金融应用。我们将重点放在数学上,而不是编程,因为这些模型(特别是语言应用)需要实质性的计算基础设施。例如,DeepL Translator使用冰岛水力发电操作的超级计算机生成翻译,达到 5.1 petaflops。我们还注意到,AI 专用芯片行业正在蓬勃发展,由 Nvidia、谷歌的 Tensor Processing Unit、亚马逊的 Inferentia、AMD 的 Instinct GPU 以及 Cerebras 和 Graphcore 等初创公司领导。尽管传统芯片难以跟上摩尔定律,即每 18 个月处理能力翻倍,但 AI 专用芯片已经远远超过了这一定律。

尽管我们在本章中没有编写代码,但我们注意到大多数编程可以使用 Python 的 TensorFlow 和 Keras 库完成。

在下面的讨论中,我们必须注意我们是在模型的训练阶段还是在预测阶段(使用预先训练的模型执行任务)。此外,重要的是区分我们的模型是否需要标记数据进行训练,例如英语句子以及它们的法语翻译作为标签,或者可以从未标记的数据中学习,例如从上下文中计算单词的含义

自然语言人工智能

自然语言处理应用程序是无处不在的。这项技术已经融入到我们生活的许多方面,当我们在智能手机上使用应用程序、数字日历、数字家庭助手、Siri、Alexa 等时,我们往往认为这是理所当然的。以下列表部分改编自优秀书籍《自然语言处理实战》(Lane、Howard 和 Hapke)。它展示了自然语言处理已经变得不可或缺的程度:

  • 搜索和信息检索:网络,文档,自动完成,聊天机器人

  • 电子邮件:垃圾邮件过滤器,电子邮件分类,电子邮件优先级

  • 编辑:拼写检查,语法检查,风格建议

  • 情感分析:产品评论,客户关怀,社区士气监测

  • 对话:聊天机器人,数字助手如亚马逊的 Alexa,调度

  • 写作:索引,一致性,目录

  • 文本挖掘:摘要,知识提取,如挖掘选举活动的财务和自然语言数据(找到政治捐赠者之间的联系),简历与工作匹配,医学诊断

  • 法律:法律推理,先例搜索,传票分类

  • 新闻:事件检测,事实核查,标题撰写

  • 归因:抄袭检测,文学取证,风格指导

  • 行为预测:金融应用,选举预测,营销

  • 创意写作:电影剧本,诗歌,歌词,机器人驱动的金融和体育新闻报道

  • 字幕:计算机视觉结合自然语言处理

  • 翻译:谷歌翻译和 DeepL 翻译。

尽管过去的十年取得了令人印象深刻的成就,但机器仍然远远没有掌握自然语言。涉及的过程是繁琐的,需要注意的统计记账和实质性的记忆,就像人类需要记忆来掌握语言一样。这里的重点是:在这个领域有很多新的创新和贡献的空间。

语言模型最近已经从手工编码转变为数据驱动。它们不实现硬编码的逻辑和语法规则。相反,它们依赖于检测单词之间的统计关系。尽管在语言学中有一种思想认为语法是人类的固有属性,或者换句话说,硬编码到我们的大脑中,人类有一种惊人的能力,可以掌握新语言,而从未遇到过这些语言的任何语法规则。从个人经验来看,尝试学习一门新语言的语法似乎会妨碍学习过程,但请不要引用我说的话。

一个主要挑战是自然语言数据的维度极高。有数以百万计的单词跨越数千种语言。有大量的文档语料库,如整个作者作品集,数十亿条推特,维基百科文章,新闻文章,Facebook 评论,电影评论等等。第一个目标是减少维度以实现高效存储、处理和计算,同时避免丢失关键信息。这在人工智能领域是一个常见主题,人们不禁要想,如果我们拥有无限的存储和计算基础设施,多少数学创新将永远不会见天日。

为机器处理自然语言数据做准备

对于机器来处理任何自然语言任务,它必须首先对文本进行分解,并将其组织成保留意义、意图、上下文、主题、信息和情感的构建块。为此,它必须建立单词和数字标签之间的对应关系,使用称为标记化词干提取(例如给予单词及其复数变体相同的标记)、词形还原(将意思相近的几个单词关联在一起)、大小写规范化(例如给予拼写相同的大写和小写单词相同的标记)等过程。这种对应关系不是针对构成单词的个别字符,而是针对完整的单词、成对或更多的单词(2-gram 或 n-gram)、标点符号、重要的大写等携带意义的内容。这创建了一个与给定自然语言文档语料库对应的数字标记的词汇表词典。在这种意义上,词汇表或词典类似于 Python 字典:每个单独的自然语言构建块对象都有一个唯一的标记。

一个n-gram是一系列按顺序排列的n个单词,当它们一起保持有序时,其含义与每个单词单独浮动时不同。例如,一个 2-gram 是一对单词,如果我们将它们分开,如冰淇淋不是,它们的含义会发生变化,因此整个 2-gram 会得到一个数字标记,保留两个单词在正确上下文中的含义。类似地,一个 3-gram 是一组有序的三个单词,例如约翰·F·肯尼迪;依此类推。自然语言的解析器与计算机的编译器相同。如果这些新术语让您感到困惑,不要担心。对于我们的数学目的,我们只需要与唯一单词、n-gram、表情符号、标点符号、相关联的数字标记,以及自然语言文档语料库的结果词汇表。这些保存在类似字典的对象中,使我们可以轻松地在文本和数字标记之间来回切换。

我们将标记化、词干提取、词形还原、解析以及其他自然语言数据准备的实际细节留给计算机科学家和他们与语言学家的合作。事实上,随着模型在直接从数据中检测模式的能力成熟,与语言学家的合作变得不那么重要,因此,将手工制作的语言规则编码到自然语言模型中的需求已经减少。还要注意,并非所有自然语言流水线都包括词干提取和词形还原。但它们都涉及到标记化。对文本数据进行标记化的质量对我们自然语言流水线的性能至关重要。这是包含我们输入模型的数据的基本构建块的第一步。数据和标记化方式的质量会影响整个自然语言处理流水线的输出。对于生产应用程序,请使用spaCy解析器,它可以在一次处理中进行句子分割、标记化和多种其他操作。

在对文本进行标记化和拥有丰富的词汇表(数字标记的集合以及它们在自然语言文本中对应的实体)之后,我们需要使用数字向量来表示整个自然语言文档。这些文档可以非常长,比如一本书系列,也可以非常短,比如一条 Twitter 推文或者一个简单的 Google 搜索或 DuckDuckGo 搜索查询。然后,我们可以将一百万个文档的语料库表示为一百万个数字向量的集合,或者一个具有一百万列的矩阵。这些列的长度将与我们选择的词汇表一样长,或者如果我们决定进一步压缩这些文档,则会更短。在线性代数语言中,这些向量的长度是我们的文档所嵌入向量空间的维度。

上述过程的整个目的是获得我们文档的数值向量表示,以便我们可以对其进行数学运算:线性代数带来了一系列线性组合、投影、点积和奇异值分解。然而,有一个警告:对于自然语言应用,表示我们文档的向量的长度,或者我们词汇表的大小,是非常庞大的,无法进行任何有用的计算。维度的诅咒成为了一个真实存在的问题。

注:维度的诅咒

随着维度数量的增加,向量之间的欧几里德距离呈指数增长。一个自然语言的例子是根据它们与另一个文档的距离对文档进行排序,比如搜索查询。当我们超过 20 个维度时,如果使用欧几里德距离来衡量文档的接近程度,这种简单操作就变得不切实际了(有关更多详细信息,请参阅Wikipedia 的维度诅咒)。因此,对于自然语言应用,我们必须使用另一种衡量文档之间距离的方法。我们将很快讨论余弦相似度,它衡量两个文档向量之间的角度,而不是它们的欧几里德距离。

因此,自然语言处理模型的主要驱动因素是使用较短的向量来表示这些文档,传达主要主题并保留含义。想想我们必须使用多少个唯一标记或标记组合来表示这本书,同时又保留其最重要的信息。

总结一下,我们的自然语言处理流程如下:

  1. 从文本到数字标记,然后到整个文档语料库的可接受词汇。

  2. 从标记文档到高维数字向量。

  3. 从高维数字向量到使用直接投影到词汇空间的较小子集(只是丢弃词汇的一部分,使相应的条目为零)、潜在语义分析(投影到由文档向量的特殊线性组合确定的特殊向量)、Word2VecDoc2Vec思维向量Dirichlet 分配等技术生成的主题的较低维向量。我们会简要讨论这些。

通常在数学建模中,有多种方法可以将给定文档表示为一组数字的向量。我们决定我们的文档所在的向量空间,或者被嵌入的向量空间。每种向量表示都有优点和缺点,取决于我们自然语言任务的目标。有些比其他的简单。

统计模型和log函数

当将文档表示为一组数字的向量时,首先要计算文档中某些术语出现的次数,那么我们的文档向量化模型是统计的,因为它是基于频率的。

当处理术语频率时,最好将log函数应用于我们的计数,而不是使用原始计数。当处理可能变得极大、极小或在规模上有极端变化的数量时,log函数是有利的。在对数尺度内查看这些极端计数或变化将它们带回正常范围。

例如,数字10 23是巨大的,但log ( 10 23 ) = 23 log ( 10 )不是。同样,如果术语shark出现在语料库中的两个文档中(2000 万/2=1000 万),而术语whale出现在这个语料库的二十个文档中(2000 万/20=100 万),那么这是一个 900 万的差异,对于分别出现在两个和二十个文档中的术语来说,这似乎过多。在对数尺度上计算相同的数量,我们分别得到7log(10)6log(10)(无论使用哪种对数基数),这看起来不再过多,更符合语料库中术语的出现情况。

在处理特定的词频时,使用对数函数的必要性特别受到齐普夫定律的支持。这个定律说,自然语言语料库中的术语计数自然遵循幂律,因此最好用对数函数来调节,将术语频率的差异转化为线性刻度。接下来我们将讨论这一点。

术语计数的齐普夫定律

齐普夫定律与自然语言中的词频有关。它非常有趣,令人惊讶,以至于我忍不住想尝试看看它是否适用于我的书。很难想象,当我在这本书中写下每个词时,我的独特词频实际上遵循了某种规律。我们连同我们表达思想和观点的方式,是那么可预测吗?事实证明,齐普夫定律适用于我们周围许多事物的计数,不仅仅是文档和语料库中的词语。

齐普夫定律:*对于一个自然语言语料库,其中术语根据它们的频率排序,第一项的频率是第二项的两倍,第三项的三倍,依此类推。*也就是说,一个项目在语料库中出现的频率与其排名有关:f 1 = 2 f 2 = 3 f 3 = . . .

我们可以通过绘制术语的频率与它们各自的排名,并验证幂律来验证齐普夫定律:f r = f ( r ) = f 1 r -1。要验证幂律,最好制作一个对数-对数图,将log ( f r )绘制在log ( r )上。如果我们在对数-对数图中获得一条直线,那么f r = f ( r ) = f 1 r α,其中α是直线的斜率。

自然语言文档的各种向量表示形式

让我们列出最常见的自然语言处理模型的文档向量表示。前两种,词项频率和词项频率乘以逆文档频率,是统计表示,因为它们是基于频率的,依赖于计算文档中单词出现的次数。它们比简单的二进制表示稍微复杂一些,可以检测文档中某些单词的存在或不存在,然而,它们仍然是浅层的,仅仅计算单词。即使有这种浅显性,它们对于垃圾邮件过滤和情感分析等应用非常有用:

文档或词袋的词项频率(TF)向量表示

在这里,我们使用词袋来表示一个文档,忽略单词在文档中出现的顺序。尽管单词顺序编码了关于文档内容的重要信息,但忽略它通常是一个对于短句和短语的良好近似。

假设我们想要将给定的文档嵌入到一个包含 10,000 个标记的词汇空间中。那么代表这个文档的向量将有 10,000 个条目,每个条目计算每个特定标记在文档中出现的次数。出于明显的原因,这被称为文档的词项频率词袋向量表示,其中每个条目是一个非负整数(整数)。

例如,一个谷歌搜索查询:明天的天气如何?将被矢量化为除了代表单词whattheweathertomorrow的标记外,其他地方都是零,如果它们存在于词汇表中。然后我们标准化这个向量,将每个条目除以文档中的总术语数,以便文档的长度不会扭曲我们的分析。也就是说,如果一个文档有 50,000 个术语,术语cat被提及 100 次,另一个文档只有 100 个术语,术语cat被提及 10 次,那么显然单词 cat 对于第二个文档比对于第一个文档更重要,而仅仅计算单词数量而不进行标准化将无法捕捉到这一点。

最后,一些自然语言处理课程对文档向量中的每个术语取对数,原因在前两节中提到。

文档的词项频率乘以逆文档频率(TF-IDF)向量表示

在这里,对于代表文档的向量的每个条目,我们仍然计算标记在文档中出现的次数,但然后我们除以我们语料库中包含该标记的文档的数量

这个想法是,如果一个术语在一个文档中出现很多次,而在其他文档中出现的次数不那么多,那么这个术语对于这个文档必须是重要的,在代表这个文档的向量的相应条目中得到更高的分数。

为了避免除以零,在一个术语不出现在任何文档中的情况下,通常的做法是在分母上加一。例如,标记cat的逆文档频率是:

IDF for cat = numberofdocumentsincorpus numberofdocumentscontainingcat+1

显然,使用 TF-IDF 表示,文档向量的条目将是非负有理数,每个条目提供了该特定标记对文档的重要性的度量。最后,我们对这个向量中的每个条目取对数,原因与前一节中所述相同。

有许多与信息检索系统相关的 TF-IDF 方法,例如 Okapi BM25。参见 Molino 2017。

由潜在语义分析确定的文档主题向量表示

TF-IDF 向量非常高维(与语料库中的标记数量一样多,可能达到百万级),稀疏,并且在相互相加或相减时没有特殊含义。我们需要更紧凑的向量,维度在数百个或更少,这是从百万维度中的大幅压缩。除了降维的优势外,这些向量捕捉了一些含义,不仅仅是词频和统计数据。我们称它们为主题向量。我们不再关注文档中单词的统计数据,而是关注文档内和跨语料库中单词之间的连接统计数据。这里产生的主题将是单词计数的线性组合。

首先,我们处理我们语料库的整个 TF-IDF 矩阵X,产生我们的主题空间。在这种情况下,处理意味着我们计算线性代数中 TF-IDF 矩阵的奇异值分解,即,X = U Σ V t。我们在本书中有一整章关于奇异值分解,所以我们现在不会详细介绍,但我们会解释如何用它来产生我们语料库的主题空间。线性代数中的奇异值分解在自然语言处理中被称为潜在语义分析。我们将两个术语互换使用。

我们必须注意语料库的 TF-IDF 矩阵X的列是代表单词标记还是文档。不同的作者和软件包使用其中一个,因此我们必须小心处理矩阵或其转置以产生我们的主题空间。在本节中,我们遵循这种表示:行是整个语料库的所有单词(标记为单词、n-gram 等),列是语料库中每个文档的 TF-IDF 向量表示。这与数据矩阵的通常表示略有不同,其中特征(每个文档中的单词)在列中,实例(文档)在行中。这种切换的原因很快就会显而易见。然而,这与我们对文档的列向量表示并不相悖。

接下来,给定一个新文档及其 TF-IDF 向量表示,我们通过将其投影到由语料库的 TF-IDF 矩阵的奇异值分解产生的主题空间上,将其转换为一个更紧凑的主题向量。在线性代数中,投影仅仅是计算适当向量之间的点积,并将结果标量数保存到新的投影向量的条目中。以下是步骤:

  • 我们有一个文档的 TF-IDF 向量,条目数量与整个语料库中的标记数量相同;

  • 我们有主题权重向量,它们是通过 TF-IDF 矩阵的奇异值分解产生的矩阵U的列。同样,每个主题权重向量的条目数量与我们的语料库中的标记数量相同。最初,我们的主题权重向量与整个语料库中的标记数量一样多(U的列)。U中的列中的权重告诉我们某个标记对主题的贡献有多大,如果是接近 1 的正数,则贡献很大,如果接近零,则贡献模棱两可,如果是接近-1 的负数,则贡献甚至为负。请注意,U的条目始终是-1 和 1 之间的数字,因此我们将其解释为我们语料库标记的权重因子。

你可能会想:如果我们的语料库中有与标记数量相同的主题权重向量,每个向量的条目数也与标记数量相同,那么节省在哪里,何时会发生压缩或降维?继续阅读。

  • 目标 1:计算我们的文档包含多少特定主题。这只是文档的 TF-IDF 向量与我们关心的主题对应的U列之间的点积。将其记录为第一个标量数字。

  • 目标 2:计算我们的文档包含另一个主题的多少。这是文档的 TF-IDF 向量与与我们关心的另一个主题对应的U列之间的点积。将其记录为第二个标量数字。

  • 目标 3:为我们喜欢的主题(与U的列数相同,也就是语料库中的总标记数)或不喜欢的主题(一个)重复这个过程,记录我们计算的每个点积的标量数字。现在很明显,在这种情况下,一个主题意味着一个包含在语料库中每个标记之间分配的-1 到 1 之间权重的列向量。

  • 目标 4:通过仅保留重要的主题来减少维度。也就是说,如果我们决定只保留两个主题,那么我们文档的压缩向量表示将是包含两个标量数字的二维向量,这两个标量数字是使用文档的 TF-IDF 向量和两个主题权重向量之间的两个点积产生的。这样,我们将把文档的维度从可能的数百万减少到只有两个。非常酷。

  • 目标 5:选择正确的主题来代表我们的文档。这就是奇异值分解发挥作用的地方。U的列按顺序组织,从整个语料库中最重要的主题到最不重要的主题。从统计学的角度来看,列按照在整个语料库中方差最大的主题到方差最小的主题的顺序组织,因此编码更多信息。我们在第十章中解释了方差和奇异值分解的关系。因此,如果我们决定仅将我们的高维文档投影到U的前几个列向量上,我们可以确保在捕捉语料库中可能的主题变化方面不会错过太多,并评估我们的文档包含多少这些内容。

  • 目标 6:了解这仍然是一种用于捕捉文档中主题的统计方法。我们从语料库的 TF-IDF 矩阵开始,简单地计算文档中标记的出现次数。在这种意义上,主题是基于一个前提捕捉的,即涉及相似事物的文档使用相似的词语。这与基于它们使用的词语的含义捕捉主题是不同的。也就是说,如果我们有两篇讨论相同主题但使用完全不同词汇的文档,它们在主题空间中会相距很远。解决这个问题的方法是将具有相似含义的单词与其他单词一起存储,这是后面在本章中讨论的 Word2Vec 方法。

  • 问题 1:如果我们向我们的语料库添加另一个文档会发生什么?幸运的是,我们不必重新处理整个语料库来生成文档的主题向量,我们只需将其投影到语料库现有的主题空间中。当然,如果我们添加一个与我们的语料库没有共同之处的新文档,比如将一篇关于莎士比亚情诗的语料库添加到一篇关于纯数学的文章中,这种方法就会失败。在这种情况下,我们的数学文章将由一堆零或接近零的条目表示,这并不能充分捕捉文章中的思想。

  • 问题 2:在奇异值分解中的矩阵V t在我们语料库的自然语言处理背景下意味着什么?矩阵V t的行数和列数与我们语料库中的文档数量相同。它是文档-文档矩阵,给出了文档之间的共享含义。

  • 问题 3:当我们使用潜在语义分析转移到较低维度的主题空间时,文档之间的大距离会被保留吗?是的,因为奇异值分解侧重于最大化语料库文档之间的方差。

  • 问题 4:小距离被保留吗,即潜在语义分析是否保留了文档的“精细结构”,使其与“并非完全不同”的其他文档区分开来?不。即将讨论的潜在 Dirichlet 分配在这方面做得更好。

  • 问题 5:我们可以改进潜在语义分析以使较低维度主题空间中的文档向量保持接近吗?是的,我们可以通过利用文档的额外信息或元数据,例如具有相同发件人的消息,或通过惩罚使用成本函数来“引导”向量,以便该方法产生保持“接近性”的主题向量。

总结:潜在语义分析以最大化语料库中主题的多样性的最佳方式选择主题。来自 TF-IDF 矩阵奇异值分解的矩阵U对我们非常重要。它返回方差最大的方向。我们通常会摆脱在语料库中文档之间方差最小的主题,丢弃U的最后几列。这类似于在文本准备过程中手动摆脱停用词(和、a、the 等),但潜在语义分析以优化的方式为我们完成了这项工作。矩阵U的行数和列数与我们的词汇量相同。它是基于单词在同一文档中共现的词和主题之间的交叉相关性。当我们将一个新文档乘以U(将其投影到U的列上)时,我们将得到文档中每个主题的数量。我们可以根据需要截断U并丢弃不太重要的主题,将维度减少到我们想要的主题数量。

潜在语义分析存在缺点:它产生的主题空间或U的列只是将标记的线性组合放在一起,以尽可能多地捕捉词汇标记在使用中的方差。这并不一定转化为对人类有意义的词组合。遗憾。稍后将讨论的 Word2Vec 解决了这些缺点。

最后,通过潜在语义分析产生的主题向量只是在 TF-IDF 向量上执行的线性变换。它们应该是语义搜索、文档聚类和基于内容的推荐引擎的首选。所有这些都可以通过测量这些主题向量之间的距离来实现,我们将在本章后面解释。

由潜在 Dirichlet 分配确定的文档的主题向量表示

与使用潜在语义分析的主题向量不同,使用潜在狄利克雷分配时,如果我们向语料库添加新文档以生成其主题向量,则必须重新处理整个语料库。此外,我们使用非线性统计方法将单词捆绑到主题中:我们假设单词频率遵循狄利克雷分布。这使得该方法在将单词分配给主题的统计方面比潜在语义分析更精确。因此,该方法是可解释的:单词如何分配到主题中,基于它们在文档中一起出现的频率,以及主题如何分配到文档中,对我们人类来说是有意义的。

这种非线性方法的训练时间比线性潜在语义分析长。因此,尽管它是可解释的,但对于涉及文档语料库的应用来说是不切实际的。我们可以将其用于总结单个文档,其中文档中的每个句子都成为其自己的文档,而母文档则成为语料库。

潜在狄利克雷分配是在 2000 年由遗传学家发明的,用于推断人口结构,并于 2003 年用于自然语言处理。以下是其假设:

  • 我们从原始单词计数开始(而不是归一化的 TF-IDF 向量),但仍然没有对单词进行排序以理解它们。相反,我们仍然依靠对每个文档的单词统计进行建模,只是这一次我们将单词分布明确地纳入模型。

  • 文档是任意数量主题的线性组合(提前指定此数量,以便该方法将文档的标记分配给此数量的主题)。

  • 我们可以根据单词的词频来表示每个主题的某种分布。

  • 文档中某个主题出现的概率遵循狄利克雷概率分布。

  • 某个单词被分配到某个主题的概率也遵循狄利克雷概率分布。

因此,使用狄利克雷分配获得的主题向量是稀疏的,表明主题在包含哪些单词方面有清晰的分离,这使得它们可以解释。

使用狄利克雷分配,频繁一起出现的单词被分配到相同的主题中。因此,当我们转移到较低维度的主题空间时,该方法会保持靠在一起的标记靠在一起。另一方面,潜在语义分析在我们转移到较低维度的主题空间时会保持分散的标记分散,因此在我们转移到较低维度空间时,这对于保持类别之间的分离更好。

由潜在判别分析确定的文档的主题向量表示

与潜在语义分析和潜在狄利克雷分配将文档分解为我们选择的主题数量不同,潜在判别分析将文档分解为仅一个主题,例如垃圾邮件、情感等。这对于二元分类非常有用,例如将消息分类为垃圾邮件或非垃圾邮件,或将评论分类为积极或消极。与潜在语义分析最大化新主题空间中所有向量之间的分离不同,潜在判别分析仅最大化属于每个类别的向量的质心之间的分离。

但是我们如何确定代表这个主题的向量?给定带标签的垃圾邮件和非垃圾邮件文档的 TF-IDF 向量,我们计算每个类别的质心,然后我们的向量沿着连接两个质心的线(参见图 7-1)。

300

图 7-1. 潜在判别分析。

现在每个新文档都可以投影到这个一维空间中。我们的文档沿着那条线的坐标是其 TF-IDF 和质心线方向向量之间的点积。整个文档(具有数百万维度)现在被压缩成一个数字沿着一个维度(一个轴),其中包含两个质心及其中点。然后我们可以根据文档沿着那条线到每个质心的距离来将文档分类为属于一个类别或另一个类别。请注意,使用这种方法分离类别的决策边界是线性的。

由神经网络嵌入确定的单词和文档的含义向量表示

以前用于将自然语言文本文档向量化的模型只考虑了单词之间的线性关系,或者在潜在狄利克雷分配中,我们必须使用人类判断力来选择模型的参数并提取特征。我们现在知道神经网络的力量在于其捕捉非线性关系、提取特征和自动找到适当的模型参数的能力。我们现在将使用神经网络来创建代表单个单词和术语的向量,并采用类似的方法来创建代表整个段落含义的向量。由于这些向量编码了每个术语的含义、逻辑和上下文使用,我们可以通过简单地进行常规向量加法和减法来进行推理。

Word2Vec 通过整合连续的ness属性来表示单个术语的向量

通过使用 TF 向量或 TF-IDF 向量作为我们主题向量模型的起点,我们忽略了单词附近上下文的影响以及这对单词含义的影响。单词向量解决了这个问题。单词向量是单词含义的数值向量表示,因此语料库中的每个术语都变成了语义向量。这种向量表示,具有浮点数条目,单词的单个词语使得语义查询和逻辑推理成为可能。

单词向量表示是使用神经网络学习的。它们通常具有 100 到 500 个维度,编码一个词在其中携带多少意义维度。在训练单词向量模型时,文本数据是无标签的。一旦训练完成,可以通过比较它们的向量来确定两个术语在意义上是接近的还是相距甚远,通过一些接近度指标。余弦相似度,接下来会讨论,是一种常用的方法。

2013 年,谷歌创建了这个单词到向量模型 Word2Vec,它在包含 1000 亿个单词的谷歌新闻源上进行了训练。结果预训练的 word2vec 模型包含 300 维向量,用于 3 百万个单词和短语。可以在 word2vec 项目的谷歌代码存档页面上免费下载。

Word2Vec 构建的向量捕捉了比本章前面讨论的主题向量更多的单词含义。论文摘要Efficient Estimation of Word Representations in Vector Space (2013)很有启发性:我们提出了两种新颖的模型架构,用于从非常大的数据集计算单词的连续向量表示。这些表示的质量是通过单词相似性任务来衡量的,并且结果与以前基于不同类型的神经网络的表现最佳技术进行了比较。我们观察到在准确性方面取得了很大的改进,而计算成本要低得多,即从一个包含 16 亿个单词的数据集中学习高质量的单词向量不到一天的时间。此外,我们展示这些向量在我们的测试集上提供了最先进的性能,用于测量句法和语义单词相似性。

一个月后发表的论文Distributed Representations of Words and Phrases and their Compositionality讨论了表示与其各个组成部分含义不同的词组,例如Air Canada最近引入的连续 Skip-gram 模型是一种学习高质量分布式向量表示的有效方法,可以捕捉大量精确的句法和语义单词关系。在本文中,我们提出了几种扩展,既提高了向量的质量,又提高了训练速度。通过对频繁单词进行子采样,我们获得了显著的加速,并且学习了更规则的单词表示。我们还描述了一种简单的替代分层 softmax 的负采样。单词表示的固有局限性在于它们对单词顺序的漠不关心以及无法表示习语短语。例如,“Canada”和“Air”的含义不能轻松结合以获得“Air Canada”。受到这个例子的启发,我们提出了一种在文本中找到短语的简单方法,并展示了学习数百万短语的良好向量表示是可能的。

引入 Word2Vec 表示的出版物Linguistic Regularities in Continuous Space Word Representations (2013)演示了这些单词的含义向量如何编码逻辑规律,以及这如何使我们能够回答常规类比问题:连续空间语言模型最近在各种任务中表现出色。在本文中,我们研究了隐式学习的输入层权重所学习的向量空间单词表示。我们发现这些表示在捕捉语言中的句法和语义规律方面出奇地好,并且每个关系都由一个特定关系向量偏移所表征。这允许基于单词之间的偏移进行向量定向推理。例如,男性/女性关系是自动学习的,通过诱导的向量表示,“国王 - 男人 + 女人”得到的向量非常接近“女王”。我们通过句法类比问题(本文提供)演示了单词向量捕捉句法规律的能力,并且能够正确回答近 40%的问题。我们通过使用向量偏移方法回答 SemEval-2012 任务 2 问题来演示单词向量捕捉语义规律的能力。值得注意的是,这种方法胜过了以前最好的系统。

自 2013 年以来,word2vec 的性能显著提高,通过在更大的语料库上进行训练。

Word2Vec 将一个单词分配给一个属性向量,例如:地点性,动物性,城市性,积极性(情感),明亮度,性别,等等。每个属性都是一个维度,捕捉单词含义中包含多少该属性。

这些词义向量和属性并非手动编码,而是在训练过程中学习的,模型从句子中的周围五个左右单词中学习一个词的含义。这与潜在语义分析不同,潜在语义分析仅从出现在同一文档中的单词中学习主题,而不一定是彼此接近的单词。对于涉及短文档和陈述的应用,Word2Vec 嵌入实际上已经取代了通过潜在语义分析获得的主题向量。我们还可以使用单词向量从庞大的数据集中推导出单词簇:在单词向量表示之上执行 K 均值聚类。有关更多信息,请参阅Google Code Archive 页面上的 word2vec 项目

通过用有意义的向量表示单词(而不是计数)的优势是我们可以用它们进行推理。例如,如果我们从代表男人的向量中减去代表国王的向量并加上代表女人的向量,那么我们得到一个非常接近代表女王的向量。另一个例子是捕捉单数和复数单词之间的关系:如果我们从代表单词单数形式的向量中减去代表它们复数形式的向量,我们得到的向量对于所有单词来说大致相同。

下一个问题是:我们如何计算 Word2Vec 嵌入?也就是说,我们如何训练一个 Word2Vec 模型?训练数据、神经网络的架构以及其输入和输出是什么?训练 Word2Vec 模型的神经网络是浅层的,只有一个隐藏层。输入是一个大型文本语料库,输出是语料库中每个唯一术语的几百维向量。共享相同语言环境的单词最终具有接近的向量。

Word2Vec 有两种学习算法,我们暂时不详细介绍[我将在下一轮编辑中详细介绍],但是到目前为止,我们对神经网络的工作原理有了很好的了解,特别是只有一个隐藏层的浅层网络。这两种学习算法是:

  1. 连续词袋:这从周围上下文词的窗口中预测当前单词;上下文词的顺序不影响预测。

  2. 连续跳字:这使用当前单词来预测周围上下文词的窗口;该算法更加重视附近的上下文词而不是更远的上下文词。

这两种算法都学习一个术语的向量表示,这对于预测句子中的其他术语很有用。连续词袋比连续跳字似乎更快,而跳字对于不常见的词更好。

有关更多详细信息,我们参考教程Word Vectors 的惊人力量Word2Vec 的维基百科页面以及关于该主题的三篇原始论文(2013 年):在向量空间中高效估计单词表示单词和短语的分布式表示及其组合性连续空间单词表示中的语言规律性

经过训练的 Google News Word2vec 模型有三百万个单词,每个单词用一个 300 维的向量表示。要下载这个模型,您需要 3GB 的可用内存。如果我们的内存有限或者我们只关心部分单词,那么可以绕过下载整个预训练模型。

如何可视化代表单词的向量?

单词向量是非常高维的(100-500 维),但人类只能可视化二维和三维向量,因此我们需要将我们的高维向量投影到这些极低维度的空间上,并仍然保留它们最基本的特征。到目前为止,我们知道奇异值分解(主成分分析)可以为我们完成这项工作,给出我们投影的向量,按重要性递减的顺序,或者给出一组单词向量变化最大的方向。也就是说,奇异值分解确保这种投影给出单词向量的最佳视图,使它们尽可能远离。

网络上有许多很好的工作示例。在出版物https://www.researchgate.net/publication/338405739_WET_Word_Embedding-Topic_distribution_vectors_for_MOOC_video_lectures_dataset [Word Embedding-Topic distribution vectors for MOOC (Massive Open Online Courses) video lectures dataset]中,作者从教育领域的数据集中生成了两样东西,即来自Coursera收集的 200 门课程中 12,032 个视频讲座的转录:使用 Word2Vec 模型的词向量,以及使用潜在狄利克雷分配的文档主题向量。数据集包含 878 万个句子和超过 7900 万个标记。词汇量超过 68,000 个独特单词。各个视频讲座的转录长度不同,标记数量从 228 到 32,767 个不等,平均每个视频讲座有 6622 个标记。作者在 Python 的 Gensim 包中使用了 Word2Vec 和潜在狄利克雷分配的实现。图 7-2 展示了该出版物使用主成分分析的三维可视化的部分词向量。

280

图 7-2. 使用前三个主成分的三维词向量可视化。此示例突出显示了代表单词“studying”及其邻居的向量:academic, studies, institution, reading, 图片来源)。

请注意,词向量和文档主题向量本身并不是目的,而是达到目的的手段,通常是自然语言处理任务,例如:特定领域内的分类,例如上面的大规模在线开放课程(MOOCS);现有和新模型的基准测试和性能分析;迁移学习,推荐系统,上下文分析,用主题丰富短文本,个性化学习;以易于搜索和最大可见性的方式组织内容。我们很快会讨论这些任务。

Facebook 的 fastText 对个别 n 字符 gram 的向量表示

Facebook 的 fastText 类似于 Word2Vec,但它不是将完整单词或 n-gram 表示为向量,而是训练为每个n 字符 gram 输出一个向量表示。这使得 fastText 能够处理罕见、拼写错误甚至部分单词,例如社交媒体帖子中经常出现的单词。在训练过程中,Word2Vec 的 skip-gram 算法学习预测给定单词的周围上下文。类似地,fastText 的 n 字符 gram 算法学习预测单词周围的 n 字符 gram,因此提供了更多的细粒度和灵活性。例如,它不仅仅将单词 lovely 表示为一个向量,还会将 2 个和 3 个 gram 也表示为向量:lo, lov, ov, ove, ve, vel, el, ely, ly。

Facebook 发布了他们预训练的 fastText 模型,涵盖了 294 种语言,这些模型是在这些语言的可用维基百科语料库上训练的。这些语言从阿布哈兹语到祖鲁语,包括只有少数人口使用的罕见语言。当然,发布的模型的准确性在不同语言之间有所差异,并取决于训练数据的可用性和质量。

Doc2Vec 或 Par2Vec 文档的向量表示

那么如何在语义上表示文档呢?在前面的部分中,我们能够将整个文档表示为主题向量,但 Word2Vec 只将单个单词或短语表示为向量。那么我们能否将 Word2Vec 模型扩展到将整个文档表示为携带含义的向量?2014 年的论文句子和文档的分布式表示正是这样做的,它使用一种无监督算法从可变长度的文本片段(如句子、段落和文档)中学习固定长度的密集向量。教程使用 Gensim 进行 Doc2Vec 教程通过 Python 实现过程,为给定语料库中的每个完整文档生成固定大小的向量。

全局向量或(GloVe)单词向量表示

还有其他产生表示单词含义的向量的方法。Gobal vector GloVe (2014)是一个使用奇异值分解获得这些向量的模型。它仅在全局单词共现矩阵的非零条目上进行训练,该矩阵记录了整个语料库中单词彼此共现的频率。

GloVe 本质上是一个带有加权最小二乘目标的对数双线性模型。对数双线性模型可能是最简单的神经语言模型。给定前n-1个单词,对数双线性模型通过简单地线性组合这些前n-1个单词的向量表示来计算下一个单词的初始向量表示。然后,基于计算线性组合向量表示与词汇表中所有单词的表示之间的相似性(点积),计算给定这前n-1个单词的下一个单词出现的概率。

P r o b ( w n = w | w 1 , w 2 , , w n-1 ) = exp(w vocab i t w) exp(w vocab 1 t w)+exp(w vocab 2 t w)++exp(w vocab vocab-size t w)

全局向量模型的主要直觉是简单观察到单词共现概率的比值可能编码某种含义。GloVe 项目网站上的示例考虑了目标单词"ice"和"steam"与词汇表中各种探针词的共现概率。图 7-3 显示了来自 60 亿字的语料库的实际概率。

280

图 7-3。显示单词"ice"和"steam"与单词"solid"、"gas"、"water"和"fashion"共现的概率表格(图片来源)。

观察图 7-3 中的表格,我们注意到,如预期,单词"ice"与单词"solid"的共现频率比与单词"gas"的共现频率更高,而单词"steam"与单词"gas"的共现频率比与单词"solid"的共现频率更高。"ice"和"steam"都经常与它们共享的属性"water"共现,而与不相关的单词"fashion"共现的频率较低。计算概率的比值可以消除与非歧视性词语(如"water")相关的噪音,因此大于 1 的大值与"ice"特有的属性相关联,而远小于 1 的小值与"steam"特有的属性相关联。这样,概率的比值编码了与热力学相位这一抽象概念相关的某种粗糙含义。

GloVe 的训练目标是学习单词向量,使它们的点积等于单词共现的概率的对数。由于比值的对数等于对数的差,这个目标考虑了单词向量空间中的向量差异。由于这些比值可以编码某种含义,这些信息也被编码为向量差异。因此,由此产生的单词向量在词类比任务上表现非常出色,例如在 Word2Vec 包中讨论的任务。

由于奇异值分解算法已经经过数十年的优化,GloVe 在训练方面比 Word2Vec 具有优势,后者是一个神经网络,依赖于梯度下降和反向传播来执行其误差最小化。如果我们要从我们关心的某个语料库中训练自己的词向量,我们可能最好使用全局向量模型而不是 Word2Vec,即使 Word2Vec 是第一个用单词实现语义和逻辑推理的模型,因为全局向量训练速度更快,具有更好的 RAM 和 CPU 效率,并且即使在较小的语料库上也比 Word2Vec 给出更准确的结果。

余弦相似度

到目前为止,在本章中,我们只致力于一个目标:将自然语言文本的文档转换为数字向量。我们的文档可以是一个词、一个句子、一个段落、多个段落或更长。我们发现了多种获取向量的方法,其中一些更具语义代表性。

一旦我们有了一个文档的向量表示,我们可以将其输入到机器学习模型中,例如分类算法、聚类算法或其他算法。一个例子是使用一些聚类算法(如k-means)对语料库的文档向量进行聚类,以创建一个文档分类器。我们还可以确定我们的文档在语义上与其他文档有多相似,用于搜索引擎、信息检索系统和其他应用。

我们已经确定,由于维度诅咒,测量两个非常高维文档向量之间的欧氏距离是没有意义的,因为它们会因为所处空间的广阔而相距甚远。那么我们如何确定代表文档的向量是“接近”还是“远”,或者是“相似”还是“不同”?一个成功的方法是使用“余弦相似度”,测量两个文档向量之间的夹角的余弦值。这由向量的点积给出,每个向量都被其长度归一化(如果我们提前归一化文档向量,那么它们的长度已经是一了):

cos ( angle between doc 1 and doc 2 ) = doc 1 t length(doc 1 ) doc 2 length(doc 2 )

图 7-4 展示了在二维向量空间中表示的三个文档。我们关心它们之间的夹角。

300

图 7-4. 在二维向量空间中表示的三个文档。

一个角的余弦值始终在-1 和 1 之间。当两个文档向量完全对齐并沿着所有维度指向相同方向时,它们的余弦相似度为 1;当它们在每个维度上都是完全相反的时,它们的余弦相似度为-1;当它们彼此正交时,它们的余弦相似度为零。

自然语言处理应用

本章的大部分内容是关于将给定的自然语言文本文档转换为数字向量。我们已经确定有多种方法可以获得我们的文档向量,所有这些方法都会导致不同的表示(因此结论也不同),或者强调给定自然语言数据的某些方面而不是其他方面。对于进入人工智能自然语言处理子领域的人来说,这是最难克服的障碍之一,特别是如果他们来自数量背景,那里他们处理的实体本质上是数字,适合数学建模和分析。现在我们已经克服了这个障碍,具备了自然语言数据的具体向量表示,我们可以数学地思考流行的应用。重要的是要意识到每个任务都有多种实现方式。传统方法是硬编码规则,为单词、标点符号、表情符号等分配分数,然后依赖于数据样本中这些元素的存在来产生结果。现代方法依赖于各种机器学习模型,这些模型又依赖于(主要是)标记的训练数据集。要在这个领域取得成功,我们必须抽出时间,尝试在同一个任务上使用不同的模型,比较性能,并深入了解每个模型以及其成功和失败的数学理由。

情感分析

  • 硬编码规则:一个成功的算法是 VADER 或情感推理的 Valence Aware Dictionary。这里的分词器需要正确处理标点符号和表情符号,因为这些传达了很多情感。我们还必须手动编译成千上万个单词以及它们的情感分数,而不是让机器自动完成这个任务。

  • 朴素贝叶斯分类器:这是一组基于贝叶斯定理的分类算法。分类的决策规则是最大似然。这将在概率和测度章节中讨论。

  • 潜在判别分析:在前一节中,我们学习了如何使用潜在判别分析对文档进行分类。

  • 使用潜在语义分析:使用潜在语义分析形成的文档向量集群可以用于分类。理想情况下,在潜在语义分析的主题空间中,正面评价与负面评价会聚集在一起。给定一堆标记为正面或负面的评价,我们首先使用潜在语义分析计算它们的主题向量。现在,为了对新的评价进行分类,我们可以计算其主题向量,然后将该主题向量与正面和负面主题向量的余弦相似度进行比较。最后,如果评价更类似于正面主题向量,则将其分类为正面,如果更类似于负面主题向量,则将其分类为负面。

  • 变压器、卷积神经网络、循环长短期记忆神经网络:所有这些现代机器学习方法都需要将我们的文档以向量形式传递到具有特定架构的神经网络中。我们将很快花时间研究这些最先进的方法。

垃圾邮件过滤器

从数学上讲,垃圾邮件过滤与上述讨论的情感分析是一个类似的分类问题,当文档的情感为正面或负面时。因此,情感分类的相同方法也适用于垃圾邮件过滤。在所有情况下,我们创建文档向量的方式并不重要,我们可以使用它们来预测社交帖子是否是垃圾邮件,预测它有多大可能获得等。

搜索和信息检索

再次,无论我们如何创建代表文档的数值向量,我们都可以将它们用于搜索和信息检索任务。搜索可以基于索引或基于语义,根据它们的含义找到文档。

  • 全文搜索:当我们基于文档中包含的单词或部分单词搜索文档时。搜索引擎将文档分解为可以索引的单词,类似于我们在教科书末尾找到的索引。当然,拼写错误和打字错误需要大量的跟踪和有时猜测。索引,一旦可用,工作得相当不错。

  • 语义搜索:当我们搜索文档时考虑到查询和我们搜索的文档中单词的含义。

  1. 基于文档的 TF-IDF 之间的余弦相似度(对包含数十亿文档的语料库)。任何具有毫秒响应的搜索引擎都利用 TF-IDF 矩阵。

  2. 基于语义:通过潜在语义分析(对包含数百万文档的语料库)或潜在狄利克雷分配(对规模较小的语料库)获得的文档主题向量之间的余弦相似度。这类似于我们如何使用潜在语义分析来分类一条消息是否是垃圾邮件,只是现在我们计算新文档的主题向量与我们数据库中所有主题向量之间的余弦相似度,返回与我们文档最相似的那些。

  3. 基于特征向量迭代

  4. 语义搜索和使用词向量(Word2Vec 或 GloVe)的查询:考虑这样一个搜索(这个例子改编自书籍《自然语言处理实战》):她在 20 世纪初在欧洲发明了与物理有关的东西。当我们将我们的搜索句子输入到 Google 或 Bing 时,我们可能不会直接得到答案玛丽·居里。Google 搜索很可能只会给我们一些著名物理学家的链接,包括男性和女性。在搜索了几页之后,我们找到了玛丽·居里,这就是我们的答案。Google 会注意到这一点,并在下次搜索时优化我们的结果。现在使用词向量,我们可以对代表的单词向量进行简单的算术运算:女人+欧洲+物理+科学家+著名,然后我们会得到一个新的向量,与代表玛丽·居里的向量在余弦相似度上接近,Voila!我们得到了答案。我们甚至可以通过简单地减去代表男人男性等的向量来消除自然科学中的性别偏见,这样我们就可以搜索与女人+欧洲+物理+科学家-男性-2*男最接近的词向量。

  5. 基于类比问题的搜索:要计算这样一个搜索他们对音乐的意义就像玛丽·居里对科学的意义一样,我们只需要对代表的单词向量进行简单的向量算术:玛丽·居里-科学+音乐。

这篇笔记是从书籍《自然语言处理实战》中改编的:传统的索引方法使用二进制词出现向量、离散向量(词袋向量)、稀疏浮点数向量(词频乘以逆文档频率向量)和低维浮点数向量(如三维地理信息系统数据)。但是,高维浮点数向量,如潜在语义分析或潜在狄利克雷分配的主题向量,是具有挑战性的。倒排索引适用于离散向量或二进制向量,因为索引只需要维护每个非零离散维度的条目。被引用的向量或文档中是否存在该维度的值。由于 TF-IDF 向量是稀疏的,大部分为零,我们不需要为大多数文档的大多数维度在我们的索引中添加条目。现在,潜在语义分析和潜在狄利克雷分配产生的主题向量是高维、连续且密集的,零值很少。此外,语义分析算法并不为可扩展搜索生成有效的索引。这受到维度诅咒的影响,使得精确索引变得不可能。解决高维向量挑战的一个方法是使用局部敏感哈希对它们进行索引,类似于 ZIP 代码,指定超空间的区域。这样的哈希类似于常规哈希:它是离散的,只取决于向量中的值。但是,即使在超过大约 12 个维度时,这也不完美。精确的语义搜索对于大语料库,如 Google 搜索或甚至维基百科语义搜索,都不适用。关键是要接受足够好,而不是追求完美的索引或高维向量的潜在哈希算法。现在有几个开源实现了一些高效准确的近似最近邻算法,使用潜在语义哈希来有效实现语义搜索。从技术上讲,这些索引或哈希解决方案不能保证我们会找到语义搜索查询的所有最佳匹配。但是,如果我们愿意放弃一点精度,它们可以几乎与 TF-IDF 向量或词袋向量的常规反向索引一样快地获得一份良好的接近匹配列表。神经网络模型微调主题向量的概念,使与单词相关联的向量更精确和有用,从而增强搜索。

机器翻译

将任意长度的令牌序列(如句子或段落)翻译成不同语言的任意长度序列。下面讨论的编码器-解码器架构,在变压器和循环神经网络的上下文中,已被证明对翻译任务非常成功。编码器-解码器架构与自动编码器架构不同。

图像字幕

这将计算机视觉与自然语言处理相结合。

聊天机器人

这是自然语言处理的终极应用。聊天机器人需要多种处理:解析语言,搜索,分析,生成响应,响应请求并执行它们。此外,它需要一个数据库来维护过去语句和响应的记忆。

其他应用

其他应用包括命名实体识别概念焦点,从文本中提取相关信息(如日期),以及语言生成,我们将在下一章中讨论。

变压器和注意力模型

Transformers 和注意力模型是自然语言处理应用的最新技术,如机器翻译、问答、语言生成、命名实体识别、图像字幕和聊天机器人(截至 2022 年)。目前,它们是大型语言模型的基础,如Google 的 BERT和 OpenAI 的GPT-2GPT-3

Transformer 绕过了直到 2017 年之前自然语言处理应用中常用的循环和卷积架构,当时论文Attention Is All You Need引入了第一个 transformer 模型。

被推翻的循环和卷积神经网络架构仍然在某些自然语言处理应用(以及金融等其他应用)中使用(并且表现良好)。我们稍后在本章中详细介绍这些模型。然而,导致放弃它们用于自然语言处理的原因是:

  1. 对于自然语言标记的短输入序列,transformer 模型中涉及的注意力层比循环层更快。即使对于长序列,我们也可以修改注意力层,只关注输入中的某些邻域。

  2. 循环层所需的顺序操作次数取决于输入序列的长度。对于注意力层,这个数字保持不变。

  3. 在卷积神经网络中,卷积核的宽度直接影响输入和输出对之间的长期依赖关系。跟踪长期依赖关系需要大的卷积核或者卷积层的堆叠,这些都增加了使用它们的自然语言模型的计算成本。

transformer 架构

Transformers 是庞大语言模型的重要组成部分,如 OpenAI 的GPT-2(生成式预训练 transformer)、GPT-3和 Google 的 BERT(双向编码器 transformer 表示,通过从左到右和从右到左查看顺序文本数据来训练语言模型)以及Wu Dao 的 transformer。这些模型非常庞大:GPT-2 在数百万文档上训练了大约 15 亿个参数,这些文档来自互联网上的 800 万个网站。GPT-3 在更大的数据集上训练了 1750 亿个参数。Wu Dao 的 transformer 有 1.75 万亿个参数,为训练和推理消耗更多的计算资源。

Transformers 最初是为语言翻译任务设计的,因此具有编码器-解码器结构。图 7-5 说明了 transformer 模型的架构,最初由论文Attention Is All You Need (2017)引入。然而,编码器和解码器各自是独立的模块,因此可以单独使用来执行各种任务。例如,我们可以仅使用编码器执行分类任务,如词性标注,这意味着我们输入句子:“我喜欢在厨房里做饭”,输出将是每个词的类别:“我”:代词;“喜欢”:动词;“做饭”:[我的语法出问题了,编辑帮帮我]。

280

图 7-5. transformer 模型的简单编码器-解码器架构(图片来源)。

完整 Transformer 模型(包括编码器和解码器)的输入是任意长度的自然语言标记序列,例如对话机器人的问题,需要将英语段落翻译成法语,或者总结成标题。输出是另一个自然语言标记序列,也是任意长度的,例如对话机器人的回答,法语翻译的段落,或标题。

不要混淆模型的训练阶段和推理阶段:

  • 在训练期间,模型同时接收数据和标签,例如英语句子(输入数据样本)以及其法语翻译(标签),模型学习从输入到目标标签的映射,以期望很好地泛化到两种语言的整个词汇和语法。

  • 在推理过程中,模型只接收英语句子,并输出其法语翻译。Transformer 逐个新标记输出法语句子。

编码器位于 Transformer 架构的左半部分(见图 7-5),接收诸如英语句子“你今天过得怎么样?”之类的标记输入,并为该句子的每个标记产生多个数值向量表示,编码标记在句子中的上下文信息。架构的解码器部分接收这些向量作为其输入。

解码器位于架构的右半部分,接收编码器的向量输出以及前一个时间步的解码器输出[解释这个]。最终,它生成标记的输出,例如输入句子的法语翻译“Comme se passe ta journée”(见图 7-6)。解码器实际计算的是法语词汇中每个单词的概率(假设有 50,000 个标记),使用 softmax 函数,然后产生概率最高的标记。实际上,由于计算如此高维度词汇的 softmax 代价高昂,解码器使用采样 softmax,在每个步骤中计算法语词汇中每个标记的概率。在训练期间,必须在此样本中包含目标标记,但在推理期间,没有目标标记。

Transformer 使用一种称为注意力的过程来捕捉标记序列中的长期依赖关系。这里的“序列”一词可能会让人感到困惑,特别是对于数学家来说,他们在“序列”、“级数”、“向量”和“列表”这些术语之间有明确的区分。序列通常是逐个项地处理,意味着一个项被处理,然后是下一个,然后是下一个,依此类推,直到整个输入被消耗。Transformer 不会按顺序处理输入标记。它们一起并行处理。这与递归神经网络处理输入标记的方式不同,后者必须按顺序馈送,实际上禁止了并行计算。如果由我们来纠正这个术语,我们应该称自然语言句子为向量,如果我们使用 Transformer 模型来处理它,或者称为矩阵,因为句子中的每个单词都表示为自己的向量,或者称为张量,如果我们一次处理一批句子,这是 Transformer 的架构允许的。如果我们想使用递归神经网络模型处理完全相同的句子,那么我们应该称之为序列,因为这个模型按顺序消耗其输入数据,逐个标记处理。如果我们使用卷积神经网络处理它,那么我们会再次称之为向量(或矩阵),因为网络将其作为整体消耗,而不是逐个标记拆分。

当模型不需要按顺序处理输入时,这是一个优势,因为这样的架构允许并行处理。尽管并行化使变压器在计算上更有效,但它们无法充分利用自然语言输入的固有顺序性以及在这种顺序性中编码的信息。想想人类如何处理文本。有一些新的变压器模型试图利用这一点。

变压器模型的运行如下[更好地解释这一点]:

  1. 将输入序列中的每个单词表示为一个 d 维向量。

  2. 通过将单词的顺序加入模型中,通过向单词向量添加关于其位置的信息(位置编码):通过将每个单词的向量与相同长度的位置编码向量相伴,将位置信息引入输入。位置编码向量具有与单词向量嵌入相同的维度(这允许将这两个向量相加)。有许多选择的位置编码,一些在训练期间学习,另一些是固定的。具有不同频率的离散正弦和余弦函数是常见的。

  3. 接下来,我们将位置编码的单词向量馈送到编码器块。编码器关注输入序列中的所有单词,无论它们是在考虑的单词之前还是之后,因此变压器编码器是双向的。

  4. 解码器在时间步 t-1 接收到自己预测的输出单词,以及编码器的输出向量。

  5. 解码器的输入也通过位置编码进行增强。

  6. 增强的解码器输入被馈送到三个子层。解码器不能关注后续单词,因此我们在其第一个子层中应用掩码。在第二个子层中,解码器还接收编码器的输出,这样解码器就可以关注输入序列中的所有单词。

  7. 解码器的输出最终通过一个全连接层,然后是一个 softmax 层,以生成输出序列的下一个单词的预测。

注意力机制

变压器的魔力主要归功于其内置的注意力机制。注意力机制带来了一些好处:

  1. 可解释性:指出模型在生成特定输出时关注输入句子(或文档)的哪些部分(参见图 7-6)。

  2. 利用预训练的注意力模型:我们可以将预训练模型调整到特定领域的任务。也就是说,我们可以通过在特定领域的数据上进行额外训练来进一步调整其参数值。

  3. 更准确地对长句建模:注意力机制的另一个价值在于,它们允许对自然语言标记序列中的依赖关系进行建模,而不考虑相关标记在这些序列中相距多远。

图 7-6 展示了从英语到法语的翻译任务中的注意力。

280

图 7-6. 通过翻译任务展示注意力:指示分配给输入标记的权重,显示模型为了生成每个输出标记而更关注哪些标记(图片来源)。

在注意力机制中没有涉及到硬核数学:我们只需要计算一个缩放后的点积。注意力的主要目标是突出输入序列中最相关的部分,它们在输入本身内部之间的关联程度以及它们对输出的某些部分的贡献程度。

自注意力是指一系列向量在其成员内部计算对齐。我们现在熟悉点积测量两个向量之间的兼容性。我们可以通过找到序列向量的所有成员之间的点积来计算最简单的自注意力权重。例如,对于句子I love cooking in my kitchen,我们将计算代表单词Ilovecookinginmykitchen的单词向量之间的所有点积。我们期望Imy之间的点积很高,类似地,cookingkitchen之间也是如此。然而,IIlovelove等之间的点积将最高,因为这些向量与自身完全对齐,但从中无法获得有价值的信息。变压器避免这种浪费的解决方案是多方面的:

  • 首先,对输入序列的每个向量(句子中的每个单词)应用三种不同的转换,将它们分别乘以三个不同的权重矩阵。然后,我们获得与每个输入单词向量w 对应的三组不同的向量:

    1. 查询向量query = W q w ,其目的是成为被关注的向量。

    2. 关键向量key = W k w ,其目的是成为被关注的向量。

    3. 向量value = W v w ,其目的是捕捉正在生成的上下文。

  • 其次,通过计算它们的点积乘以这些向量长度的平方根的倒数来获得句子中所有单词的查询向量和关键向量之间的对齐分数。我们应用这种缩放以保持数值稳定性,以防止点积变得很大(这些点积很快将被传递到 softmax 函数中。由于 softmax 函数在其输入具有很大幅度时具有非常小的梯度,我们通过将每个点积除以 s q r t l 来抵消这种效应。)。此外,两个向量的对齐与这些向量的长度无关。因此,在我们的句子中,cookingkitchen之间的对齐分数将是:

a l i g n m e n t cooking,kitchen = 1 l query cooking t key kitchen

请注意,这与kitchencooking之间的对齐分数不同,因为每个的查询和关键向量都不同。因此,得到的对齐矩阵不是对称的。

  • 第三,将句子中每两个单词之间的对齐分数转换为概率,通过将分数传递到softmax函数中。例如:

ω cooking,kitchen = s o f t m a x ( a l i g n m e n t cooking,kitchen ) = exp(alignment cooking,kitchen ) exp(alignment cooking,I )+exp(alignment cooking,love )+exp(alignment cooking,cooking )+exp(alignment cooking,in )+exp(alignment cooking,my )+exp(alignment cooking,kitchen )

  • 最后,通过线性组合值向量,使用对齐概率作为线性组合的权重来编码每个单词的上下文。例如:

c o n t e x t cooking = ω cooking,I value I + ω cooking,love value love + ω cooking,cooking value cooking + ω cooking,in value in + ω cooking,my value my + ω cooking,kitchen value kitchen

因此,我们已经成功地在一个向量中捕捉了给定句子中每个单词的上下文,对于与句子中大部分对齐的单词赋予了高价值。

好消息是,我们可以同时计算句子(数据样本)中所有单词的上下文向量,因为我们可以将上述向量打包在矩阵中,并使用高效且可并行化的矩阵计算一次性获取所有术语的上下文。

我们在一个注意力头中实现了上述所有内容。也就是说,一个注意力头为数据样本中的每个标记产生一个上下文向量。我们会从为同一标记产生多个上下文向量中受益,因为在生成上下文向量的过程中发生的所有平均化会导致一些信息丢失。这里的想法是能够使用句子(数据样本)术语的不同表示来提取信息,而不是对应于单个注意力头的单个表示。因此,我们实现了多头注意力,为每个头选择新的变换矩阵W qW kW v

请注意,在训练过程中,变换矩阵的条目是必须从训练数据样本中学习的模型参数。想象一下,模型参数的数量会迅速增加多快。

图 7-7 展示了多头注意力机制,实现了h个头部,每个头部接收查询、键和值的不同线性变换版本,为每个标记产生h个上下文向量,然后将它们连接起来以产生模型结构中多头注意力部分的输出。

280

图 7-7。多头注意力机制(图片来源)。

解码器使用类似的自注意机制,但在这里,每个单词只能关注其之前的单词,因为文本是从左到右生成的。此外,解码器还有一个额外的注意机制,关注来自编码器的输出。

变压器远非完美

尽管变压器模型已经彻底改变了自然语言处理领域,但它们远非完美。总的来说,语言模型是无意识的模仿者。它们既不理解它们的输入,也不理解它们的输出这篇这篇等批评文章详细说明了它们的缺点,比如对语言的理解不足,在生成长篇文本时重复等。尽管如此,变压器模型为自然语言带来了一场巨浪,并且正在向生物医学、计算机视觉和图像生成等其他人工智能领域迈进。

卷积神经网络用于时间序列数据

在自然语言处理和金融领域中,“时间序列”一词应该改为“时间序列”。在数学中,“序列”指的是无限序列的项相加。因此,当我们的数据没有被求和时,这适用于所有自然语言数据和大多数金融数据,实际上我们有数字、向量等的序列,而不是系列。哦,词汇冲突是不可避免的,即使在彼此之间严重依赖的不同领域中也是如此。

除了字典中对单词的定义外,它们的含义大多与它们相对于彼此出现的方式相关。这通过单词在句子中的顺序、单词的上下文以及它们在句子中与其他单词的接近程度传达。

我们首先强调我们可以探索文档中单词和术语背后含义的两种方式:

  1. 空间上:将一个句子作为一个标记向量一次性地探索,无论这些标记在数学上如何表示。

  2. 临时:逐个标记地探索一个句子。

卷积神经网络,讨论在第五章中,通过沿着句子的标记滑动一个固定宽度的窗口(卷积核或滤波器)来空间地探索句子。当使用卷积神经网络来分析文本数据时,网络期望输入具有固定的维度。另一方面,当使用循环神经网络(接下来讨论)来分析文本数据时,网络期望标记按顺序,因此,输入不需要具有固定长度。

在第五章中,我们在图像上滑动二维窗口(卷积核或滤波器),而在本章中,我们将在文本标记上滑动一维卷积核。我们现在知道每个标记本身都表示为数字向量。我们可以使用独热编码或 Word2Vec 模型的单词向量。独热编码的标记用一个非常长的向量表示,其中对于我们想要从语料库中包含的每个可能的词汇词,都有一个 0,并且在我们正在编码的标记位置有一个 1。或者,我们可以使用通过 Word2Vec 生成的训练过的单词向量。因此,卷积神经网络的输入数据样本是一个矩阵,由列向量组成,每个列向量对应数据样本中的一个标记。如果我们使用 Word2Vec 表示标记,那么每个列向量将有 100 到 500 个条目,取决于使用的特定 Word2Vec 模型。请记住,对于卷积神经网络,每个数据样本必须具有完全相同数量的标记。

因此,一个数据样本(一个句子或一个段落)用一个二维矩阵表示,其中行数是单词向量的完整长度。在这种情况下,说我们正在在数据样本上滑动一个一维卷积核有点误导,但这里是解释:样本标记的向量表示向延伸,然而,滤波器一次覆盖该维度的整个长度。也就是说,如果滤波器宽度为三个标记,它将是一个具有三列权重的矩阵,行数与我们标记的向量表示一样多。因此,这里的一维卷积是指仅在水平方向上进行卷积。这与图像的二维卷积不同,图像的二维滤波器在图像上水平和垂直方向上移动。

与上一章类似,在前向传播期间,滤波器中的权重值对于一个数据样本是相同的。这意味着我们可以并行化这个过程,这就是为什么卷积神经网络训练高效的原因。

回想一下,卷积神经网络也可以同时处理多个通道的输入,也就是说,三维张量的输入,而不仅仅是数字的二维矩阵。对于图像来说,这是同时处理输入图像的红色、绿色和蓝色通道。对于自然语言,一个输入样本是一堆单词,表示为相邻排列的列向量。我们现在知道有多种方式将同一个单词表示为数字向量,每种方式可能捕捉到同一个单词的不同语义。这些同一个单词的不同向量表示不一定具有相同的长度。如果我们限制它们具有相同的长度,那么这些表示中的每一个可以是一个单词的通道,卷积神经网络可以同时处理同一个数据样本的所有通道。

就像第五章中所述,卷积神经网络由于权重共享、池化层、dropout 和小的过滤器尺寸而高效。我们可以使用多个尺寸的过滤器运行模型,然后将每个尺寸过滤器的输出连接成一个更长的思考向量,然后将其传递到最后一层的全连接层。当然,网络的最后一层是完成所需任务的层,例如情感分类、垃圾邮件过滤、文本生成等。我们在过去的两章中已经讨论过这一点。

递归神经网络用于时间序列数据

考虑以下三个句子:

  1. 她买了电影票去看电影。

  2. 她有空的时候,买了电影票去看电影。

  3. 她连续两周听说了这件事,最终买了电影票去看电影。

在所有三个句子中,谓词“买了电影票去看电影”对应于句子的主语“她”。如果自然语言模型被设计为处理长期依赖关系,它将能够学习到这一点:

  • 卷积神经网络,通过其窄的过滤窗口范围为 3-5 个标记扫描句子,将能够轻松地从第一个句子中学习,并且也许可以从第二个句子中学习,因为谓词的位置只有稍微改变(池化层有助于网络对小变化的抵抗力),但第三个句子将会很困难,除非我们使用更大的过滤器(这会增加计算成本,并使网络更像全连接网络而不是卷积网络),或者我们加深网络,将卷积层堆叠在一起,以便随着句子深入网络,覆盖范围扩大。

  • 一个完全不同的方法是将句子逐个标记地顺序输入到网络中,并保持一个“状态”和一个“记忆”,保存重要信息一段时间。当句子中的所有标记都通过网络时,网络会产生一个结果。如果这是在训练期间,只有在处理完最后一个标记后产生的结果与句子的标签进行比较,然后错误会“通过时间反向传播”来调整权重。将这与我们阅读长句子或段落时保留信息的方式进行比较。带有长短期记忆单元的递归神经网络是按照这种方式设计的。

  • 我们之前讨论过的 Transformer 模型废除了卷积和循环,仅依赖于注意力来捕捉句子的主语“她”和谓词“买了电影票去看电影”之间的关系。

还有一件事可以区分递归模型和卷积以及 Transformer 模型:模型是否期望其输入对于所有数据样本都是相同长度?意味着我们只能输入相同长度的句子吗?对于 Transformer 和卷积网络来说,它们只期望固定长度的数据样本,因此我们必须预处理我们的样本并使它们都具有相同的长度。另一方面,递归神经网络非常适应可变长度的输入,因为它们一次只处理一个标记。

递归神经网络的主要思想是,网络在处理新信息时保留过去的信息。这种保留是如何发生的?在前馈网络中,神经元的输出离开它并永远不会返回。在递归网络中,输出回路返回到神经元中,同时带有新的输入,实质上创建了一个“记忆”。这样的算法非常适合自动完成和语法检查。自 2018 年以来,它们已经集成到 Gmail 的“智能撰写”中。

递归神经网络是如何工作的?

以下是递归在一组带标签的数据样本上进行训练的步骤。每个数据样本由一堆标记和一个标签组成。与往常一样,网络的目标是学习数据中产生某个标签(或输出)与其他标签相比产生的一般特征和模式。当每个样本的标记按顺序输入时,我们的目标是检测特征,跨所有数据样本,当某些标记以相对于彼此的模式出现时产生的特征:

  1. 从数据集中获取一个经过标记和标记的数据样本(例如标记为积极的电影评论,或标记为虚假新闻的推文)。

  2. 将样本的第一个标记t o k e n 0传递到网络中。请记住,标记是矢量化的,因此您实际上是将一组数字传递到网络中。在数学术语中,我们正在评估该标记的矢量处的函数,并产生另一个矢量。到目前为止,我们的网络已经计算了f ( t o k e n 0 )

  3. 现在将样本的第二个标记t o k e n 1传递到网络中,以及第一个标记的输出f ( t o k e n 0 )。网络现在将评估f ( t o k e n 1 + f ( t o k e n 0 ) )。这是循环步骤,这就是网络在处理t o k e n 1时不会忘记t o k e n 0

  4. 现在将样本的第三个标记t o k e n 2传递到网络中,以及上一步的输出f ( t o k e n 1 + f ( t o k e n 0 ) )。网络现在将评估f ( t o k e n 2 + f ( t o k e n 1 + f ( t o k e n 0 ) ) )

  5. 继续进行,直到完成一个样本的所有标记。假设这个样本只有五个标记,那么我们的递归网络将输出f ( t o k e n 4 + f ( t o k e n 3 + f ( t o k e n 2 + f ( t o k e n 1 + f ( t o k e n 0 ) ) ) ) )。请注意,这个输出看起来与我们在第四章讨论的前馈全连接网络的输出非常相似,只是这个输出随着时间展开,当我们逐个将样本的标记输入到一个递归神经元时,而在第四章中,网络的输出随着空间展开,当一个数据样本从神经网络的一层移动到下一层。从数学上讲,当我们写出每个公式时,它们是相同的,所以我们不需要更多的数学知识,超出我们在过去三章中学到的。这就是为什么我们喜欢数学。

  6. 在训练网络以产生正确结果时,样本的最终输出f ( t o k e n 4 + f ( t o k e n 3 + f ( t o k e n 2 + f ( t o k e n 1 + f ( t o k e n 0 ) ) ) ) ),将与样本的真实标签进行比较,通过评估损失函数,就像我们在第 3、4 和 5 章中所做的那样。

  7. 现在逐个将下一个数据样本的标记传递到网络中,并再次执行相同的操作。

  8. 我们通过梯度下降算法来最小化损失函数,从而更新网络的权重,计算所需的梯度(相对于网络所有权重的导数)通过反向传播。正如我们刚才所说的,在第四章学到的反向传播数学,现在当然我们可以说我们正在通过时间进行反向传播

在金融、动力学和反馈控制中,上述过程被称为自回归移动平均(ARMA)模型

训练递归神经网络可能会很昂贵,特别是对于任何长度显著的数据样本,比如 10 个标记或更多,因为要学习的权重数量与数据样本中的标记数量直接相关:标记越多,递归网络的“时间深度”就越大。除了计算成本之外,这种深度带来了与具有许多层的常规前馈网络相同的所有问题:梯度消失或爆炸,特别是对于具有数百个标记的数据样本,这将是数百层全连接前馈神经网络的数学等价物!对于前馈网络的梯度爆炸和消失问题,这里也适用相同的解决方法。

门控循环单元和长短期记忆单元

递归网络中的递归神经元不足以捕捉句子中的长期依赖关系:随着更多标记通过递归神经元,一个标记的影响会被新信息稀释和覆盖。事实上,只有在两个标记经过后,一个标记的信息几乎完全消失。如果我们在网络的架构中添加记忆单元,即长短期记忆单元,则可以解决这个问题。这有助于学习跨整个数据样本的依赖关系。

长短期记忆单元本身包含神经网络,它们可以被训练来找到需要保留以供即将输入的新信息,并忘记或重置为零不再相关于学习的信息。因此,长短期记忆单元学会了保留哪些信息,而网络的其余部分则学会了预测目标标签。

在这里,除了我们在第四章中学到的数学知识外,没有任何新的数学内容,因此我们不会深入研究长短期记忆单元或门控单元的具体架构。总的来说,每个时间步的输入标记通过遗忘和更新门(函数)传递,与权重和掩码相乘,然后存储在记忆单元中。网络的下一个输出取决于输入标记和记忆单元的当前状态的组合。此外,长短期记忆单元共享它们跨样本学习的权重,因此它们不必在通过每个样本的标记时重新学习关于语言的基本信息。

人类能够在潜意识水平上处理语言,而长短期记忆是对此进行建模的一步。它们能够检测语言中的模式,使我们能够处理比简单分类更复杂的任务,如语言生成。我们可以根据学习的概率分布生成新的文本。这是下一章的主题。

自然语言数据的示例

当面对关于不同模型的叙述时,如果我们有具体的实例和真实数据以及模型的超参数,事情总是变得更容易。我们可以在斯坦福人工智能网站上找到IMDB电影评论数据集。每个数据样本都标有 0(负面评论)或 1(正面评论)。如果我们想要练习处理自然语言文本,可以从原始文本数据开始。然后,我们可以使用一个选择的词汇表、Google Word2vec 模型或其他模型对其进行标记化和向量化。不要忘记将数据分割成训练集和测试集。然后选择超参数,例如:单词向量长度约为 300,每个数据样本的标记数约为 400,小批量为 32,迭代次数为 2。我们可以尝试调整这些参数以了解模型的性能。

金融人工智能

AI 模型在金融领域有广泛应用。到目前为止,我们已经了解了大多数 AI 模型的基本结构(除了图形,它们具有不同的数学结构;我们在第九章中讨论图形网络)。此时,仅仅提及金融领域的一个应用领域就足以让我们对如何使用 AI 进行建模有一个很好的想法。此外,许多金融应用与自然语言处理应用自然交织在一起,例如基于客户评论的营销决策,或者使用自然语言处理系统仅基于模型的输出来预测经济趋势并触发大额金融交易。

以下是金融领域中的两个 AI 应用,其中之一。想想我们如何能够将迄今学到的知识应用于对这些问题进行建模:

  • 股票市场:时间序列预测。递归神经网络可以接受一系列输入并产生一系列输出。这对于股票价格所需的时间序列预测非常有用。我们输入过去n天的价格,网络输出过去n-1天的价格以及明天的价格

  • 自回归移动平均(ARMA)模型在金融、动力学和反馈控制中。

股票市场在本书中多次出现。在讨论概率中的随机过程时,请留意第十一章中的内容。

总结和展望

本章几乎没有新的数学知识,但却是最难写的之一。目标是总结整个自然语言处理领域中最重要的思想。从单词转移到携带含义的相对低维数字向量是要克服的主要障碍。一旦我们学会了多种方法来做到这一点,无论是一次一个词的向量化,还是一个长文档或整个语料库中的主要主题的向量化,将这些向量馈送到具有不同架构和目的的不同机器学习模型中就变得司空见惯。

微积分

  • 术语频率和逆文档频率的对数比例尺

统计学

  • Zipf 定律适用于单词计数

  • Dirichlet 概率分布用于将单词分配给主题和主题分配给文档。

线性代数

  • 将自然语言文档向量化

  • 两个向量的点积以及它如何提供向量所代表的实体之间的相似性或兼容性度量。

  • 余弦相似度

  • 奇异值分解,即潜在语义分析

概率

  • 条件概率

  • 双线性对数模型

时间序列数据

  • 含义

  • 如何将其输入到机器学习模型中(作为一个整体,或一次一个项目)

AI 模型每日一题

变压器

第八章:概率生成模型

AI 将我所知道的所有数学联系在一起,我已经学习数学多年了。

如果机器要理解周围的世界,并且能够像我们想象、梦想、绘画、创作歌曲、电影或写书时那样重新创造它,那么生成模型是朝着这个方向迈出的一大步。如果我们要实现通用人工智能,就需要正确地构建这些模型。

生成模型建立在这样一个假设上,即只有当我们的模型学习了数据的潜在统计结构时,我们才能正确解释输入数据。这与我们的梦境过程有些类似,这表明我们的大脑可能学习了一个能够虚拟重现我们环境的模型。

在本章中,我们仍然有训练函数、损失函数和优化的数学结构,这些在整本书中都有提到。然而,与前几章不同的是,我们的目标是学习概率分布,而不是确定性函数。总体主题是有训练数据,我们想要提出一个能够生成类似数据的数学模型。

感兴趣的两个数量是:

  1. 输入数据特征的真实(未知)联合概率分布p data ( x )

  2. 数据特征的模型联合概率分布以及模型参数:p model ( x ; θ )

理想情况下,我们希望这两者尽可能接近。在实践中,我们会接受参数值θ ,使得p model ( x ; θ )能够很好地适用于我们特定的用例。

在整个章节中,我们利用了三条概率分布的规则:

  1. 将多变量联合概率分布分解为单变量条件概率分布的乘积的乘法规则。

  2. 贝叶斯规则允许我们无缝地在变量之间切换。

  3. 特征或潜在(隐藏)变量的独立性或条件独立性假设,使我们能够进一步简化单变量条件概率的乘积。

在之前的章节中,我们在最小化损失函数。在本章中,类似的函数是对数似然函数,优化过程总是试图最大化这个对数似然(注意,我们不是在最小化损失函数,而是在最大化一个目标函数)。很快会详细介绍。

在我们深入讨论之前,让我们注意一下,将我们之前的确定性机器学习模型转换为概率语言:我们之前的模型学习了一个训练函数,将输入数据的特征映射到输出(目标或标签)或 。当我们的目标是分类时,f返回具有最高概率的标签y。也就是说,分类器学习了从输入数据到类别标签y的直接映射,换句话说,它们直接对后验概率进行建模。我们将在本章后面详细阐述这一点。

生成模型有哪些用途?

生成模型使得真实数据和计算机生成数据之间的界限变得模糊。它们一直在改进,并取得了令人印象深刻的成功:机器生成的图像,包括人类的图像,变得越来越逼真。很难判断时尚行业模特的图像是真实人物还是生成机器学习模型的输出。

生成模型的目标是使用机器生成新颖的数据,例如包含语音的音频波形,图像,视频或自然语言文本。生成模型从学习的概率分布中采样数据,其中样本尽可能地模拟现实。这里的假设是存在一些未知的概率分布潜在地支撑着我们想要模仿的真实生活数据(否则我们整个现实将是一种随机混乱的噪音,缺乏任何连贯性或结构),模型的目标是使用训练数据学习这个概率分布的近似值。

在从特定领域收集了大量数据之后,我们训练一个生成模型来生成类似于收集数据的数据。收集的数据可以是数百万张图像或视频,数千个音频录音,或者整个自然语言语料库。

生成模型在许多应用中非常有用,包括在数据稀缺且需要更多数据时进行数据增强,为高分辨率图像填充缺失值,为强化学习模拟新数据,或者在只有少量标签可用时进行半监督学习。另一个应用是图像到图像的转换,例如将航空图像转换为地图或将手绘草图转换为图像。更多的应用包括图像去噪、修补、超分辨率、图像编辑(如使微笑更宽,颧骨更高,脸部更苗条等)。

此外,生成模型是建立在从所需概率分布中抽取多个样本以生成多个可接受输出的基础上的。这与我们的确定性模型不同,确定性模型在训练过程中使用均方误差损失函数或其他平均损失函数对具有不同特征的输出进行平均。这里的缺点是生成模型也可能生成一些不好的样本。

一种生成模型,即生成对抗网络(2014 年由 Ian Goodfellow 等人发明),具有极大的潜力,并且具有广泛的应用,从增加数据集到完成遮蔽的人脸,再到天体物理学和高能物理学,比如模拟类似于 CERN 大型强子对撞机产生的数据集,或模拟暗物质的分布并预测引力透镜效应。生成对抗模型建立了两个神经网络,它们在一个零和博弈中相互竞争(想象数学中的博弈论),直到机器本身无法区分真实图像和计算机生成的图像之间的区别。这就是为什么它们的输出看起来非常接近现实。

前一章,主要针对自然语言处理,涉及到生成模型,但没有明确指出。自然语言处理的大多数应用,不是简单的分类模型(垃圾邮件或非垃圾邮件,积极情绪或消极情绪,词性标注),包括语言生成。这些例子包括:我们智能手机或电子邮件上的自动完成,机器翻译,文本摘要,聊天机器人和图像标题。

生成模型的典型数学

生成模型感知和表征世界的方式是通过概率分布。也就是说,一幅彩色图像是从像素的联合概率分布中取样得到的,这些像素一起形成了一个有意义的图像(尝试计算包括所有红色、绿色和蓝色通道的这种联合概率分布的维度),一段音频波形是从音频信号的联合概率分布中取样得到的,这些信号一起构成了有意义的声音(这些也是极高维度的),一句话是从单词或字符的联合概率分布中取样得到的,这些单词或字符一起构成了连贯的句子。

那么,一个显著的问题是:我们如何计算这些能够捕捉我们周围世界复杂性的惊人代表性联合概率分布,但不幸的是这些分布往往是极高维度的呢?

机器学习的答案在这一点上是可预测的:从我们已知的简单概率分布开始,比如高斯分布,然后找到一种方法将其塑造成另一个很好地近似手头数据的经验分布的分布。但我们如何将一个分布塑造成另一个分布呢?我们可以对其概率密度应用一个确定性函数。因此,我们必须理解以下内容:

  1. 我们如何将确定性函数应用于概率分布,以及由此产生的随机变量的概率分布是什么?我们使用以下转换公式:

p x ( x ) = p z ( g -1 ( x ) ) | det ( g -1 x x ) |

这在许多概率书籍中都有很好的记录,我们很快就会从中提取我们需要的内容。我们必须应用的正确函数是什么?一种方法是训练我们的模型来学习它。我们现在知道神经网络有能力表示各种函数,因此我们可以通过神经网络传递我们开始的简单概率分布(神经网络将是我们正在寻找的确定性函数的公式),然后通过最小化给定数据的经验分布与网络输出的分布之间的误差来学习网络的参数。

  1. 我们如何衡量概率分布之间的误差?概率论为我们提供了一些衡量两个概率分布之间差异的方法,比如 Kullback-Leibler(KL)散度。这也与信息论中的交叉熵有关。

  2. 所有生成模型都是这样工作的吗?是和不是。是指它们都试图学习生成训练数据的联合概率分布。换句话说,生成模型试图学习最大化训练数据的似然性的联合概率分布的公式和参数。不是指我们只概述了一种明确的逼近我们所需的联合概率分布的方法。这是一种思维方式。一般来说,一个定义了明确且可处理的概率密度函数的模型允许我们直接操作训练数据的对数似然性,计算其梯度,并应用可用的优化算法来搜索最大值。还有其他提供明确但难以处理的概率密度函数的模型,这种情况下,我们必须使用逼近方法来最大化似然性。我们如何近似解决优化问题?我们可以使用确定性逼近,依赖于变分方法(变分自动编码器模型),或者使用随机逼近,依赖于马尔可夫链蒙特卡洛方法。最后,还有隐式的方法来逼近我们所需的联合概率分布。隐式模型学习从未明确定义公式的未知分布中抽样。生成对抗网络属于这一类别。

如今,生成建模的三种最流行的方法是:

  • 生成对抗网络,这是隐式密度模型;

  • 变分模型提供明确但难以处理的概率密度函数。我们在概率图模型框架内逼近优化问题的解,其中我们最大化数据对数似然性的下界,因为直接最大化数据的对数似然性是难以处理的;

  • 完全可见信念网络,提供明确且可处理的概率密度函数,如Pixel 卷积神经网络(PixelCNN)2016WaveNet(2016)。这些模型通过将联合概率分布分解为每个单独维度的概率分布的乘积,条件于之前的维度,并逐个学习这些分布来学习。这种分解得益于概率的乘法规则或链规则。例如,PixelCNN 训练一个网络,学习图像中每个单独像素的条件概率分布,给定之前的像素(左侧和顶部),而 WaveNet 训练一个网络,学习声波中每个单独音频信号的条件概率分布,条件于之前的信号。这里的缺点是这些模型只能一次生成一个条目,并且不允许并行化。这显著减慢了生成过程。例如,WaveNet 需要两分钟的计算时间才能生成一秒的音频,因此我们无法用它进行实时的来回对话。

还有其他生成模型属于上述类别,但由于昂贵的计算要求或选择密度函数及/或其变换的困难而不太受欢迎。这些模型包括需要变量变换的模型,例如非线性独立成分估计(显式和可计算密度模型)、玻尔兹曼机模型(显式但不可计算密度模型,通过随机马尔可夫链近似解决最大化问题)、生成随机网络模型(隐式密度模型再次取决于马尔可夫链以达到其近似最大似然)。我们在本章末尾简要调查这些模型。在实践中,远离数学理论和分析,由于计算成本高昂且不愿意迅速收敛,马尔可夫链方法不受青睐。

从确定性思维转变为概率性思维

在这一章中,我们正在慢慢将我们的大脑从确定性思维转变为概率性思维。到目前为止,在这本书中,我们只使用确定性函数来进行预测。训练函数是数据特征的线性组合,有时与非线性激活器组合,损失函数是真实值和预测值之间的确定性鉴别器,优化方法基于确定性梯度下降方法。随机性或随机性仅在我们需要使模型的确定性组件的计算变得更加经济时引入,例如随机梯度下降或随机奇异值分解,当我们将数据集分成训练、验证和测试子集时,当我们选择我们的小批量时,当我们遍历一些超参数空间时,或者当我们将数据样本的分数传递到 softmax 函数中时,这是一个确定性函数,并将结果值解释为概率。在所有这些设置中,随机性和相关的概率分布仅与模型的特定组件相关,仅作为实现和计算确定性模型的手段:从来没有构成模型的核心组成部分。

生成模型与我们在前几章中看到的模型不同,因为它们在本质上是概率性的。然而,我们仍然有训练、损失和优化结构,只是现在模型学习一个概率分布(显式或隐式),而不是学习一个确定性函数。然后,我们的损失函数衡量真实和预测概率分布之间的误差(至少对于显式密度模型),因此我们必须了解如何定义和计算概率之间的某种误差函数,而不是确定性值。我们还必须学习如何在这种概率设置中进行优化和求导。

在数学中,评估给定函数(正向问题)要比找到其逆函数(逆向问题)容易得多,更不用说当我们只能访问少量函数值观测时,比如我们的数据样本。在我们的概率设置中,正向问题看起来是:给定某种概率分布,抽取一些数据。逆向问题是我们关心的问题:给定这个我们不知道的概率分布的有限数量的实现(数据样本),找到最有可能生成它们的概率分布。我们首先想到的一个困难是唯一性的问题:可能有多个分布适合我们的数据。此外,逆向问题通常更难,因为本质上我们必须向后操作并撤消正向函数遵循的过程,以到达给定的观测值。问题在于大多数过程无法撤消,这在某种程度上超出了我们的能力,嵌入在自然法则中:宇宙倾向于增加熵。除了解决逆问题固有的困难之外,我们通常尝试为 AI 应用估计的概率分布是高维的,具有许多变量,并且我们甚至不确定我们的概率模型是否已经考虑了所有变量(但这对确定性模型也是有问题的)。这些困难不应该使我们却步:表示和操作高维概率分布对于许多数学、科学、金融、工程和其他应用都很重要。我们必须深入研究生成模型。

在本章的其余部分,我们将区分估计的概率分布是否具有显式公式的情况,以及当我们没有公式而是从隐式分布中数值生成新数据样本时的情况。请注意,在之前的章节中,对于所有我们的确定性模型,我们总是有明确的公式用于我们的训练函数,包括决策树、全连接神经网络和卷积神经网络给出的公式。那时,一旦我们从数据中估计出这些确定性函数,我们就可以回答问题,比如:目标变量的预测值是多少?在概率模型中,我们回答一个不同的问题:目标变量假定某个值的概率是多少,或者落在某个区间内的概率是多少?不同之处在于我们不知道我们的模型是如何组合变量以产生结果的,就像确定性情况下那样。在概率模型中,我们试图估计的是模型变量与目标变量一起发生的概率(它们的联合概率),理想情况下是对所有变量的所有范围。这将为我们提供目标变量的概率分布,而无需明确制定模型变量如何相互作用以产生这个结果。这完全取决于观察数据。

最大似然估计

许多生成模型直接或间接地依赖于最大似然原则。对于概率模型,目标是学习一个概率分布,该分布近似于观测数据的真实概率分布。一种方法是指定一个明确的概率分布<p_subscript model Baseline left-parenthesis ModifyingAbove x With right-arrow semicolon ModifyingAbove theta With right-arrow right-parenthesis>,其中包含一些未知参数,然后解出使训练数据集尽可能被观察到的参数。也就是说,我们需要找到最大化训练数据的似然性的,为这些样本分配高概率。如果有m个训练数据点,我们假设它们是独立采样的,因此观察它们一起的概率就是所有单个样本概率的乘积。因此我们有:

θ optimal = arg max θ p model ( x 1 ; θ ) p model ( x 2 ; θ ) p model ( x m ; θ )

回想一下,每个概率都是介于零和一之间的数字。如果我们将所有这些概率相乘,我们将得到数量极小的数字,这会引入数值不稳定性,我们面临下溢的风险(当机器将一个非常小的数字存储为零时,实质上删除了所有有效数字)。对数函数总是解决这个问题,将那些数量极大或极小的数字转换回合理的数量范围。好消息是,对我们的概率进行对数转换不会影响最优θ 的值,因为对数函数是一个增函数。也就是说,如果对于所有的θ ,都有f ( θ optimal ) f ( θ ) ,那么对于所有的θ ,也有log ( f ( θ optimal ) ) log ( f ( θ ) ) 。与增函数组合不会改变不等号。关键是,最大似然解变得等价于最大对数似然解。现在回想一下,对数函数将乘积转换为和,我们有:

θ optimal = arg max θ log ( p model ( x 1 ; θ ) ) + log ( p model ( x 2 ; θ ) ) + + log ( p model ( x m ; θ ) )

注意,上述表达式希望增加每个数据样本的 p model ( x , θ )。也就是说,它更喜欢 θ 的值推动 p model ( x , θ ) 在每个数据点 x i 上方。然而,我们不能无限制地向上推动:必须有向下的补偿,因为图形下方区域的超面积必须相加为一,知道 p model ( x , θ ) 是一个概率分布。

我们可以用期望和条件概率的术语重新表达上述表达式:

θ optimal = arg max θ 𝔼 xp data log ( p model ( x | θ ) )

我们在前几章讨论的确定性模型通过最小化衡量模型预测与数据标签提供的真实值之间误差的损失函数来找到模型的参数(或权重),或者换句话说,找到 y modely data 之间的误差。在本章中,我们关心找到最大化数据对数似然的参数。如果有一个类似于最小化衡量概率分布 p modelp data 之间误差的量的公式,那么本章与前几章之间的类比就会很明显。幸运的是,有这样的公式。最大似然估计与最小化Kullback Leibler (KL) 散度之间是相同的,这个散度是生成数据的概率分布和模型的概率分布之间的差异:

θ optimal = arg min θ D i v e r g e n c e KL ( p data ( x ) | | p model ( x ; θ ) )

如果<p_data>恰好是分布家族<p_model Baseline left-parenthesis ModifyingAbove x With right-arrow semicolon ModifyingAbove theta With right-arrow right-parenthesis>的成员,并且如果我们能够精确执行最小化,那么我们将恢复生成数据的确切分布,即<p_data>。然而,在实践中,我们无法访问生成数据的分布,事实上,这是我们试图逼近的分布。我们只能访问<p_data>中的m个样本。这些样本定义了只在这些m个样本上放置质量的经验分布。现在,最大化训练集的对数似然恰好等同于最小化和<p_model Baseline left-parenthesis ModifyingAbove x With right-arrow semicolon ModifyingAbove theta With right-arrow right-parenthesis>之间的 KL 散度:

θ optimal = arg min θ D i v e r g e n c e KL ( p ^ data ( x ) | | p model ( x ; θ ) )

在这一点上,我们可能会在三个优化问题之间感到困惑,实际上它们在数学上是等价的,它们只是来自数学、统计学、自然科学和计算机科学的不同子学科和子文化:

  1. 最大化训练数据的对数似然

  2. 最小化训练数据的经验分布与模型分布之间的 KL 散度

  3. 当我们使用 softmax 函数与多个类别进行组合进行分类时,最小化训练数据标签和模型输出之间的交叉熵损失函数。

不要混淆:最小化 KL 散度的参数与最小化交叉熵和负对数似然的参数相同。

显式和隐式密度模型

最大对数似然估计(或最小 KL 散度)的目标是找到一个概率分布p model ( x ; θ ),最好地解释观察到的数据。生成模型使用这个学习的p model ( x ; θ )来生成新数据。这里有两种方法,一种是显式的,另一种是隐式的:

  1. 显式密度模型:根据x θ 明确地定义概率分布的公式,然后通过沿着梯度向量(相对于θ 的分量的偏导数)向上走,找到最大化训练数据样本的对数似然的值。这里一个明显的困难是提出一个能够捕捉数据复杂性的概率密度公式,同时又能友好地计算对数似然及其梯度。

  2. 隐式密度模型:直接从p model ( x ; θ )进行采样,而无需为这个分布编写公式。生成随机网络基于马尔可夫链框架进行此操作,这种方法收敛速度慢,因此在实际应用中不受欢迎。使用这种方法,模型随机地转换现有样本,以获得来自相同分布的另一个样本。生成对抗网络间接与模型的概率分布交互,而不明确定义它。它们在两个网络之间建立一个零和博弈,其中一个网络生成一个样本,另一个网络充当分类器,确定生成的样本是否来自正确的分布。

显式密度-易处理:完全可见信念网络

这些模型具有明确的概率密度函数,可进行易处理的对数似然优化。它们依赖于概率链规则来将联合概率分布分解为一维概率分布的乘积:

p model ( x ) = i=1 n p model ( x i | x 1 , x 2 , , x i-1 )

这里的主要缺点是样本必须逐个组件生成(图像的一个像素,单词的一个字符,或离散音频波形的一个条目),因此,生成一个样本的成本是 O(n)

示例:通过 PixelCNN 生成图像和通过 WaveNet 生成机器音频。

PixelCNN 训练了一个卷积神经网络,模拟了给定先前像素(左侧和目标像素上方)的每个单独像素的条件分布。图 8-1 说明了这一点。

300

图 8-1. PixelCNN 学习第 n 个像素的条件分布,条件是前 n-1 个像素 (图像来源)

WaveNet 训练了一个卷积神经网络,模拟了音频波形中每个条目的条件分布,给定先前的条目。我们只会详细介绍 WaveNet。它是 PixelCNN 的一维模拟,并捕捉了基本思想。

WaveNet 的目标是生成宽带原始音频波形。因此,我们必须学习音频波形的联合概率分布 x = ( x 1 , x 2 , , x T ) 来自某种类型。

我们使用乘法规则将联合分布分解为单变量分布的乘积,其中我们将音频波形的每个条目条件化为其之前的条目:

p model ( x ) = t=1 T p model ( x t | x 1 , x 2 , , x t-1 )

一个困难是音频波形具有非常高的时间分辨率,每秒至少有 16000 个条目(因此,一分钟长的一个数据样本是一个具有 T=960000 个条目的向量)。这些条目中的每一个代表离散原始音频的一个时间步,并通常存储为 16 位整数。也就是说,每个条目可以假定为介于零和 65535 之间的任何值。如果我们保持这个范围,网络必须学习每个条目的概率,因此输出级别的 softmax 函数必须为每个单个条目输出 65536 个概率分数。我们必须为这些条目的总数以及网络本身的计算复杂性变得非常昂贵。为了使这更易处理,我们必须量化,这在电子学中意味着通过其幅度受限于一组规定值的信号来近似连续变化的信号。WaveNet 将原始数据转换为将条目值限制为每个 256 个选项的选项,范围从 0 到 255,类似于数字图像的像素范围。现在,在训练期间,网络必须学习每个条目在这 256 个值上的概率分布,给定先前的条目,在音频生成期间,它逐个条目从这些学习的分布中采样。

最后一个复杂性是,如果音频信号代表任何有意义的东西,那么表示它的向量在多个时间尺度上具有长距离依赖性。为了捕捉这些长距离依赖性,WaveNet 使用扩张卷积。这些是跳过一些条目以覆盖更广泛范围而不增加参数数量的一维核或滤波器(请参见 图 8-2 进行说明)。

300

图 8-2. 具有核大小为两的扩张卷积。在每一层,核只有两个参数,但它会跳过一些条目以获得更广泛的覆盖范围 (具有漂亮动画的图像来源)

还要注意,网络无法预知未来,因此每个层的滤波器不能使用训练样本中位于目标条目之前的条目。在一维中,我们只是在每个卷积层中较早地停止滤波,因此这是一个简单的时间偏移。在二维中,我们使用掩码滤波器,其右侧和底部的中心条目为零。

WaveNet 学习了总共T个概率分布,每个概率分布对应音频波形的一个条目,条件是前面的条目:p model ( x 1 ) , p model ( x 2 | x 1 ) , p model ( x 3 | x 1 , x 2 ) , d o t sp model ( x T | x 1 , x 2 , , x T-1 ) 。在训练过程中,这些分布可以并行计算。

现在假设我们需要学习第 100 个条目的概率分布,给定前面的 99 个条目。我们从训练数据中输入音频样本批次,卷积网络仅使用每个样本的前 99 个条目,计算线性组合(滤波器进行线性组合),通过非线性激活函数从一层传递到下一层,再到下一层,使用一些跳跃连接和残差层来对抗消失的梯度,最终通过 softmax 函数传递结果,并输出一个长度为 256 的向量,包含第 100 个条目的概率分数。这是模型输出的第 100 个条目的概率分布。将此输出分布与来自训练批次的第 100 个条目的经验分布进行比较后,网络的参数将被调整以减少错误(降低交叉熵或增加可能性)。随着更多数据批次和更多时代通过网络,给定前 99 个条目的第 100 个条目的概率分布将接近训练数据的经验分布。训练后我们在网络中保存的是参数的值。现在我们可以使用训练好的网络逐个生成机器音频条目:

  • 从概率分布中抽取一个值x 1

  • 用零增加( x 1 ),以建立网络输入所需的长度(请检查),并通过网络传递向量。我们将得到一个输出,稍后p model ( x 2 | x 1 ),从中我们可以对x 2进行采样。

  • 用零增加( x 1 , x 2 ),并通过网络传递向量。我们将得到一个输出,稍后p model ( x 3 | x 1 , x 2 ),从中我们可以对x 3进行采样。

  • 继续。

我们可以根据特定的说话者身份来调节 WaveNet,因此我们可以使用一个模型生成不同的声音。

我们可以并行训练 WaveNet,但只能顺序生成音频是一个主要缺点。这已经得到了纠正,Parallel WaveNet已经在线部署在 Google Assistant 上,包括提供多种英语和日语语音。

总结并将上述讨论放在与本章相同的数学背景下,PixelCNN 和 WaveNet 是旨在学习特定类型图像数据或音频数据的联合概率分布的模型。它们通过将联合分布分解为每个数据条目的一维概率分布的乘积,条件于所有先前的条目来实现这一目标。为了找到这些一维条件分布,它们使用卷积网络来学习观察到的条目如何相互作用以产生下一个条目的分布。这样,网络的输入是确定性的,其输出是一个概率质量函数。网络本身也是一个确定性函数。我们可以将网络及其输出视为具有我们调整参数的概率分布。随着训练的进行,输出会进行调整,直到与训练数据的经验分布达成可接受的一致。因此,我们不是将确定性函数应用于概率分布并调整函数的参数,直到我们同意训练数据的分布。相反,我们从一个具有许多参数(网络参数)的显式概率分布的公式开始,然后调整参数,直到这个显式概率分布与训练数据合理一致。我们对应于每个条目的每个条件概率分布都这样做。

密度显式-可计算:变量变换非线性独立分量分析

这里的主要思想是我们有代表观察到的训练数据的随机变量 x→,我们想要学习生成它的源随机变量 s→。我们假设存在一个可逆且可微的确定性转换 g(s→)= x→,将未知的 s→转换为观察到的 x→。然后 s→ = g^-1(x→)。现在我们需要找到一个适当的 g,并找到 s→的概率分布。此外,我们假设 s→具有独立的条目或组件,因此其概率分布仅仅是其组件的分布的乘积。

将随机变量的概率分布与其确定性转换的概率分布相关联的公式是:

p s ( s ) = p x ( x ) × d e t e r m i n a n t ( J a c o b i a n ) = p x ( g ( s ) ) | det ( g(s ) s ) |

乘以转换的雅可比行列式解释了由于转换而导致空间体积的变化。

非线性独立成分估计模型将联合概率分布建模为数据的非线性转换 s→ = g-1(x→)。学习转换 g,使得 g-1 将数据映射到一个潜在空间,其中符合分解分布,即映射导致独立的潜在变量。转换 g-1 的参数化方式允许轻松计算雅可比行列式和逆雅可比。g-1 基于深度神经网络,其参数通过优化对数似然来学习,这是可行的。

请注意,要求变换g必须是可逆的意味着潜在变量s 必须具有与数据特征相同的维度(x 的长度)。这对函数g的选择施加了限制,这是非线性独立成分分析模型的一个缺点。

相比之下,生成对抗网络对 g 的要求很少,特别是允许s x 具有更多维度。

显式密度-难以处理:变分自动编码器-通过变分方法进行近似

确定性自动编码器由一个将数据从 x 空间映射到较低维度的潜在 z 空间的编码器和一个将数据从 z 空间映射到x 空间的解码器组成,其目标是不丢失太多信息,或者减少重构误差,这意味着保持 x 和x 接近,例如在欧几里得距离意义上。在这个意义上,我们可以将基于奇异值分解X = U Σ V t主成分分析视为线性编码器,其中解码器简单地是编码矩阵的转置。编码和解码函数可以是非线性和/或神经网络。

对于确定性自动编码器,我们不能将解码器用作数据生成器。至少,如果我们这样做,那么我们必须从潜在 z 空间中选择一些 z 并将解码器函数应用于它。除非我们选择了一个对应于编码 x 的 z,否则我们不太可能得到任何接近所需数据 x 外观的x ^,由于过拟合。我们需要一种正则化方法,使我们能够对 z 空间进行一定程度的控制,从而避免过拟合并将自动编码器用作数据生成器。我们通过从确定性自动编码转向概率自动编码来实现这一点。

变分自动编码器是概率自动编码器:编码器输出概率分布而不是单个点。此外,在训练过程中,损失函数包括一个额外的正则化项,用于控制潜在空间上的分布。因此,变分自动编码器的损失函数包含一个重构项(如均方距离)和一个正则化项,用于控制编码器输出的概率分布。正则化项可以是与高斯分布的 KL 散度,因为基本假设是简单的概率模型最好地描述训练数据。换句话说,复杂的关系可以在概率上简单描述。在这里我们必须小心,因为这引入了一种偏见:潜变量中对数据分布的简单假设如果太弱可能会有缺陷。也就是说,如果对先验分布或近似后验分布的假设太弱,即使使用完美的优化算法和无限的训练数据,估计值和真实对数似然之间的差距可能导致p model学习到一个与真实p data完全不同的分布。

在数学上,我们最大化数据对数似然的下界。在科学中,变分方法定义我们要最大化的能量泛函的下界,或者我们要最小化的能量泛函的上界。即使对数似然不容易获得,这些界通常更容易获得,并且具有可处理的优化算法。同时,它们为我们正在寻找的最优值提供了良好的估计。

( x , θ ) log p model ( x , θ )

变分方法通常能够获得非常好的似然度,但对样本的主观评价认为它们生成的样本质量较低。人们认为它们比完全可见的信念网络更难优化。此外,人们发现它们的数学比完全可见的信念网络和生成对抗网络更难理解(即将讨论)。

显式密度-难以处理:Boltzman 机器-通过马尔可夫链近似

Boltzmann 机器(1980 年代)是一类依赖于马尔可夫链训练生成模型的家族。这是一种采样技术,比起从数据集中简单采样一个小批量来估计损失函数更昂贵。我们将在第十四章中讨论马尔可夫链在强化学习中的上下文。在数据生成的背景下,它们有许多缺点导致它们不受青睐:计算成本高,难以扩展到更高维度,收敛速度慢,甚至在理论上必须收敛时也没有明确的方法知道模型是否已经收敛。马尔可夫链方法尚未扩展到像 ImageNet 生成这样的问题规模。

马尔可夫链具有一个转移算子q,编码系统从一个状态过渡到另一个状态的概率。这个转移算子q需要明确定义。我们可以通过重复抽取样本x ' q ( x ' | x ),根据转移算子q依次更新x '。与单步生成相比,这种顺序生成的性质是另一个缺点。马尔可夫链方法有时可以保证 x'最终会收敛到从p model ( x )中抽取的样本,尽管收敛可能很慢。

一些模型,如深度玻尔兹曼机,同时使用马尔可夫链和变分逼近。

隐密度-马尔可夫链:生成随机网络

生成随机网络(Bengio 等人,2014)不明确定义密度函数,而是使用马尔可夫链转移算子与p model ( x )间接交互,通过从训练数据中抽样。必须多次运行这个马尔可夫链算子才能获得从p model ( x )中抽取的样本。这些方法仍然存在前一节提到的马尔可夫链方法的缺点。

隐密度-直接:生成对抗网络

目前最流行的生成模型有:

  • 完全可见的深度信念网络,如 PixelCNN,WaveNet 及其变体。

  • 变分自动编码器,由概率编码器-解码器架构组成。

  • 生成对抗网络,由于其概念简单和生成样本质量好,受到科学界的关注。我们现在讨论它们。

生成对抗网络由 Ian Goodfellow 等人于 2014 年提出。涉及的数学是概率和博弈论之间的美妙混合。生成对抗网络避免了与其他生成模型相关的一些缺点:

  • 一次性并行生成样本,而不是将新像素馈送回网络以预测像素,如 PixelCNN。

  • 生成函数的限制很少。这是与玻尔兹曼机相比的优势,对于玻尔兹曼机,很少有概率分布适合可计算的马尔可夫链抽样,相对于非线性独立成分分析,生成器必须是可逆的,潜在变量 z 必须与样本 x 具有相同的维度。

  • 生成对抗网络不需要马尔可夫链。这是与玻尔兹曼机和生成随机网络相比的优势。

  • 虽然变分自动编码器可能永远无法收敛到真实数据生成分布,如果它们假设的先验或后验分布太弱,生成对抗网络会收敛到真实

    ,假设我们有无限的训练数据和足够大的模型。此外,生成对抗网络不需要变分界限,而且在生成对抗网络框架内使用的特定模型族已知是通用逼近器。因此,生成对抗网络已知是渐近一致的。另一方面,一些变分自动编码器被推测为渐近一致,但这仍然需要证明(请检查)。

生成对抗网络的缺点在于训练它们需要找到博弈的纳什均衡,这比仅仅优化一个目标函数更困难。此外,解决方案往往在数值上不稳定。2015 年,Alec Radford 等人改进了这一点,深度卷积生成对抗网络。这种方法导致了更稳定的模型。

在训练过程中,生成对抗网络构建了两个独立网络之间的博弈:一个生成器网络和一个鉴别器网络,鉴别器试图将生成器样本分类为来自真实分布

或来自模型

。这两个网络的损失函数是相关的,因此鉴别器传达了两个分布之间的差异,生成器相应地调整其参数,直到生成器完全复制真实数据分布(理论上),使得鉴别器的分类不比随机猜测更好。

生成器网络希望最大化鉴别器在分类中分配错误标签的概率,无论样本是来自训练数据还是模型,而鉴别器网络希望最小化该概率。这是一个两人零和博弈,其中一方的收益是另一方的损失。我们最终解决了一个极小极大问题,而不是一个纯粹的最大化或最小化问题。存在唯一的解决方案。

生成对抗网络是如何工作的?

为了学习生成器的概率分布

,这里是生成对抗网络学习过程的进展:

  • 从先验概率分布

    中随机抽取一个样本

    ,对于

    的每个分量,这可能只是均匀随机噪声。

  • 同时从训练数据中随机抽取一个样本x ,使其成为生成器试图学习的概率分布p data ( x )的样本。

  • 将确定性函数应用于z ,表示生成神经网络的函数G ( z , θ g )。参数θ g是我们需要通过反向传播调整的参数,直到输出G ( z , θ g )看起来类似于训练数据集中的样本。

  • 将输出G ( z , θ g )传递到另一个确定性函数D,代表判别性神经网络。现在我们有新的输出D (G(z ,θ g ),( θ) d ),这只是一个接近一或零的数字,表示这个样本是来自生成器还是训练数据。因此,对于来自生成器的这个输入D (G(z ,θ g ),( θ) d )必须返回接近一的数字。参数θ d是我们需要通过反向传播调整的,直到D返回错误分类约一半的时间。

  • 还将来自训练数据的样本x 传递给D,以便我们评估D ( x , θ d )。对于这个输入,D ( x , θ d )必须返回接近零的数字。

  • 这两个网络的损失函数是什么,其中的公式中包含两组参数θ gθ d,以及采样向量x z ?鉴别器函数D希望对两种类型的输入x G ( z , θ g )做出正确判断。因此,它的参数θ d必须被选择,以便在输入为G ( z , θ g )时,接近 1 的数字被赋予较大的分数,而在输入为x 时,接近 0 的数字被赋予较大的值。在这两种情况下,我们可以使用log函数的负值,因为它在接近零时较大,在接近 1 时较小。因此,D需要最大化的参数θ d是:

𝔼 x p data (x ) [ log D ( x , θ d ) ] + 𝔼 z p z (z ) [ log ( 1 - D ( G ( z , θ g ) , θ d ) ) ]

同时,G需要最小化的参数θ g,使得log ( 1 - D ( G ( z , θ g ) , θ d ) )DG一起参与一个具有值函数 V(G, D)的两人零和博弈:

min G max D V ( D , G ) = 𝔼 x p data (x ) [ log D ( x ) ] + 𝔼 z p z (z ) [ log ( 1 - D ( G ( z ) ) ) ]

这是一个非常简单的数学结构,通过设置鉴别器网络,我们可以更接近真实数据分布,而无需明确定义它或假设任何关于它的内容。

最后,我们注意到生成对抗网络在许多应用中具有很高的潜力。一个例子是它们对半监督学习的显著增强,其中NIPS 2016 教程:生成对抗网络报告:我们引入了一种半监督学习的方法,使用生成对抗网络,其中鉴别器产生一个额外的输出,指示输入的标签。这种方法使我们能够在 MNIST、SVHN 和 CIFAR-10 上获得最先进的结果,即使只有很少的标记示例。例如,在 MNIST 上,我们只使用每类 10 个标记示例就实现了 99.14%的准确率,使用全连接神经网络——这个结果非常接近使用所有 60,000 个标记示例的全监督方法的最佳已知结果。这是非常有希望的,因为在实践中获得标记示例可能非常昂贵。

生成对抗网络(以及机器学习一般)的另一个广泛应用是模拟高能物理数据。我们接下来讨论这个。

示例:机器学习和生成网络用于高能物理

以下讨论受到并借鉴了2020 年强子物理机器学习研讨会和两篇文章深度学习及其在大型强子对撞机物理中的应用用于高能物理中稀疏数据生成的图生成对抗网络

在 2012 年之前的深度学习革命之前,高能物理领域传统上依赖于物理考虑和人类直觉、增强决策树、手工制作的数据特征工程和降维、传统统计分析进行分析和计算。这些技术虽然具有洞察力,但自然远非最佳,难以自动化或扩展到更高维度。多项研究表明,基于物理启发的工程化高级特征的传统浅层网络被基于接受较少预处理的更高维度低级特征的深层网络超越。大型强子对撞机数据分析的许多领域长期以来一直受到次优特征工程的困扰,值得重新审视。因此,高能物理领域是机器学习应用的肥沃土壤。在这方面正在取得很多进展。该领域正在应用多种机器学习技术,包括人工神经网络、核密度估计、支持向量机、遗传算法、增强决策树、随机森林和生成网络。

大型强子对撞机的实验计划探索现代物理学中最基本的问题:质量的本质、空间的维度、基本力的统一、暗物质的粒子性质以及标准模型的微调。一个驱动目标是理解物质的最基本结构。其中一部分包括搜索和研究异域粒子,如在大型强子对撞机等加速器中产生的顶夸克和希格斯玻色子。具体的基准和挑战包括:质量重建、喷注亚结构和喷注味道分类。例如,可以识别来自重*(c、b、t)或轻(u、d、s)夸克、胶子以及W*、ZH玻色子的喷注。

进行高能粒子实验并收集所得数据是非常昂贵的。所收集的数据在碰撞数量和每次碰撞的复杂性方面都是巨大的。此外,大部分加速器事件并不产生有趣的粒子(信号粒子与背景粒子)。信号粒子很少,因此需要高数据速率。例如,大型强子对撞机探测器有 O(108)个传感器用于记录每次碰撞后产生的大量粒子。因此,从实验数据中提取最大信息(考虑回归和分类模型),准确选择和识别事件以进行有效测量,并为模拟新数据(考虑生成模型)产生可靠方法至关重要。高能物理数据的特点是其高维度,以及许多信号事件的复杂拓扑结构。

这种讨论与我们的章节的联系在于碰撞的性质以及其产物与大型强子对撞机探测器的相互作用:它们是量子力学的,因此,由特定相互作用产生的观察结果基本上是概率性的。因此,随后的数据分析必须以统计和概率术语来构建。

在我们的章节中,我们的目标是学习模型参数的概率分布

θ|x)给定观察到的数据。如果数据是相当低维的,例如小于五维,那么从模拟样本中估计未知的统计模型的问题并不困难,可以使用直方图或基于核的密度估计。然而,我们无法轻易将这些简单方法扩展到更高维度,这是由于维度诅咒。在单个维度中,我们需要 N 个样本来估计源概率密度函数,但在 d 个维度中,我们需要 O(N^d)。其结果是,如果数据的维度大于十左右,使用朴素方法估计概率分布是不切实际甚至不可能的,需要大量的计算资源。

高能物理学家传统上通过一系列步骤来降低数据的维度,既对单个碰撞事件进行操作,也对事件集合进行操作,以应对维度诅咒。这些已建立的方法基于数据中的特定手工设计特征,将数据的维度降低到足够小的数量,以允许使用模拟工具生成的样本来估计未知概率分布p ( x | θ )。显然,由于数据的复杂性和潜在新物理的罕见性以及其微妙的特征,这种传统方法可能不是最佳选择。机器学习消除了手工设计特征和手动降维的需求,这可能会错过较低级别高维数据中的关键信息。此外,直接从传感器获得的较低级别数据的结构非常适合于已经建立的神经网络模型,例如卷积神经网络和图神经网络:例如,几乎所有现代高能物理探测器中存在的量能器的投影塔结构类似于图像的像素。

然而需要注意的是,虽然基于图像的方法取得了成功,但实际探测器的几何形状并不完全规则,因此需要一些数据预处理来表示喷流图像。此外,喷流图像通常非常稀疏。不规则的几何形状和稀疏性可以使用基于图的卷积网络来解决,而不是通常用于粒子数据建模的卷积网络。图卷积网络将卷积神经网络的应用扩展到不规则采样的数据。它们能够处理稀疏、置换不变的数据和复杂几何形状。我们将在下一章讨论图网络。它们始终带有节点、边和编码图中关系的矩阵,称为邻接矩阵。在高能物理的背景下,喷流的粒子代表图的节点,边编码了粒子在学习的邻接矩阵中的接近程度。在高能物理中,基于图的网络已成功应用于分类、重建和生成任务。

我们章节的主题是生成模型,或者生成类似给定数据集的数据。在高能物理中生成或模拟与实验数据相符的数据是非常重要的。在用于高能物理中稀疏数据生成的图生成对抗网络中,作者们开发了基于图的生成模型,使用生成对抗网络框架,用于模拟类似于CERN大型强子对撞机产生的稀疏数据集。

作者们通过对 MNIST 手写数字图像和质子-质子碰撞中产生的粒子喷流等稀疏表示进行训练和生成来说明他们的方法,这些类似于大型强子对撞机中的情况。该模型成功生成了稀疏的 MNIST 数字和粒子喷流数据。作者们使用两个指标来量化真实数据和生成数据之间的一致性:基于图的Fréchet Inception 距离,以及粒子和喷流特征级别的1-Wasserstein 距离

其他生成模型

我们已经讨论了最先进的生成模型(截至 2022 年),但如果我们不介绍朴素贝叶斯、高斯混合和玻尔兹曼机模型,这一章节将是不完整的。还有许多其他模型。话虽如此,Meta 的副总裁兼首席人工智能科学家 Yann LeCun 在一些模型上提供了他的观点:

在 2000 年代,语音识别、计算机视觉和自然语言处理领域的研究人员着迷于准确表示不确定性。这导致了大量关于概率生成模型的工作,如语音中的隐马尔可夫模型,视觉中的马尔可夫随机场和星座模型,以及自然语言处理中的概率主题模型,例如潜在狄利克雷分析。在计算机视觉研讨会上有关生成模型与判别模型的辩论。曾经有英勇而徒劳的尝试使用非参数贝叶斯方法构建物体识别系统。这在之前的贝叶斯网络、因子图和其他图形模型的基础上进行。这就是人们了解指数族、信念传播、循环信念传播、变分推断等的方式,中国餐馆过程、印度自助餐过程等。但几乎没有这项工作关注学习表示的问题。特征被认为是已知的。图形模型的结构,以及其中的潜在变量,被认为是已知的。人们所要做的就是通过线性组合特征计算某种对数似然,然后使用上述提到的一种复杂推断方法之一来生成未知变量的边际分布,其中之一就是答案,例如一个类别。事实上,指数族几乎意味着浅层:对数似然可以表示为特征(或其简单组合)的线性参数化函数。学习模型的参数被视为另一个变分推断问题。有趣的是,几乎没有这些内容与今天顶尖的语音、视觉和自然语言处理系统相关。事实证明,解决学习分层表示和复杂功能依赖的问题比能够使用浅层模型进行准确的概率推断更为重要。这并不是说准确的概率推断没有用处。

在同样的思路下,他继续说:生成对抗网络对于生成漂亮的图片很好(尽管它们正被扩散模型或“多步去噪自动编码器”所取代),但对于识别和表示学习,GANs 是一个巨大的失望。

尽管如此,从所有这些模型中可以学到很多数学知识。根据我的经验,当我们看到数学被开发和用于特定目的时,我们对数学的理解和保留会更加深入,而不仅仅是训练大脑的神经元。许多数学家声称在证明尚未找到应用的理论时会感到愉悦。我从来不是其中之一。

朴素贝叶斯分类模型

朴素贝叶斯模型是一个非常简单的分类模型,我们也可以将其用作生成模型,因为最终会计算数据的联合概率分布p ( x , y k ),以确定其分类。训练数据具有特征x 和标签y k。因此,我们可以使用朴素贝叶斯模型从这个联合概率分布中抽样生成新的数据点和标签。

朴素贝叶斯模型的目标是计算给定数据特征x 的类别y k的概率,即条件概率p ( y k | x )。对于具有许多特征(高维x )的数据,这种计算是昂贵的,因此我们使用贝叶斯规则并利用逆条件概率,从而导致联合概率分布。也就是说:

p ( y k | x ) = p(y k )p(x |y k ) p(x ) = p(x ,y k ) p(x )

朴素贝叶斯模型做出了非常强烈和天真的假设,实际上比人们预期的效果更好,即在给定类别标签y k时,数据特征是相互独立的。这种假设有助于极大地简化分子中的联合概率分布,特别是当我们将其扩展为单变量条件概率的乘积时。在给定类别标签y k的特征独立假设意味着:

p ( x i | x i+1 , x i+2 , , x n , y k ) = p ( x i | y k )

因此,联合概率分布分解为:

p ( x , y k ) = p ( x 1 | x 2 , , x n , y k ) p ( x 2 | x 3 , , x n , y k ) p ( x n | y k ) p ( y k ) = p ( x 1 | y k ) p ( x 2 | y k ) p ( x n | y k ) p ( y k )

现在我们可以从训练数据中轻松估计这些单个特征概率,条件是每个数据类别。我们也可以从训练数据中估计每个类别p ( y k )的概率,或者我们可以假设类别是等可能的,因此p ( y k ) = 1 类别数

请注意,一般来说,生成模型找到标签y k和数据x 之间的联合概率分布p ( x , y k )。另一方面,分类模型计算条件概率p ( y k | x )。它们专注于通过返回具有最高概率的类y k来计算数据中不同类之间的决策边界。因此,对于朴素贝叶斯分类器,它返回具有y 的最高值的标签y ,该值与p ( y k | x )的最高值相同,这与p ( x 1 | y k ) p ( x 2 | y k ) p ( x n | y k ) p ( y k )的最高值相同。

高斯混合模型

在高斯混合模型中,我们假设所有数据点都是从具有未知参数(均值和协方差矩阵)的有限数量的高斯分布混合中生成的。我们可以将混合模型视为类似于 k 均值聚类,但在这里我们包括有关聚类中心(高斯的均值)以及每个聚类中数据传播形状(由高斯的协方差确定)的信息。为了确定数据中的聚类数量,高斯混合模型有时会实现贝叶斯信息准则。我们还可以限制我们的模型以控制混合物中不同高斯的协方差:完全、绑定、对角线、绑定对角线和球形(参见图 8-3 以进行说明)。

250

图 8-3. 高斯混合协方差类型(图片来源)。

最终我们需要最大化数据的似然以估计混合物的未知参数(均值和协方差矩阵的条目)。

当数据中存在潜在或隐藏变量(即未直接测量或观察的变量)时,最大似然变得难以处理。解决这个问题的方法是使用期望最大化(EM)算法来估计最大似然。期望最大化算法的工作原理如下:

  1. 通过创建一个关于当前未知参数估计的期望对数似然的函数,估计潜在变量的值。

  2. 优化:计算新参数,使得在前一步中评估的期望对数似然最大化。

  3. 重复上述两个步骤直至收敛。

我们可以看到高斯混合模型可以用作聚类、生成或分类模型。对于聚类:这是模型构建的主要部分。对于生成:通过期望最大化计算未知参数后,从混合中抽样新数据点。对于分类:给定一个新数据点,模型将其分配给它最有可能属于的高斯分布。

生成模型的演变

在本节中,我们讲述了导致神经网络冬天结束的故事,最终导致了现代概率深度学习模型的出现,如变分自动编码器、完全可见深度信念网络和生成对抗网络。我们经历了从 Hopfield 网络到 Boltzmann 机器再到受限 Boltzmann 机器的发展过程。我对这些模型有特殊的偏爱:除了它们的历史价值外,通过组装基本计算单元网络来学习数据特征的联合概率分布,它们还利用了极其整洁和发展完善的统计力学领域的数学机制,这是我最初的研究领域。

在统计力学中,我们通过能量函数来定义概率分布。我们找到系统处于某种状态x 的概率取决于该状态的能量E ( x )。更准确地说,高能态的概率较低,这在以下公式中的指数的负号中体现:

p ( x ) = exp(-E(x )) Z .

指数函数确保p为正,分区函数Z在分母中确保对所有状态x 的和(如果x是连续的,则是积分)为一,使p成为有效的概率分布。以这种方式定义联合概率分布的机器学习模型被称为基于能量的模型,原因显而易见。它们在如何分配每个状态的能量上有所不同,这意味着它们在E ( x ) 的具体公式中使用的公式不同,这反过来影响了分区函数Z的公式。E ( x ) 的公式包含模型参数θ ,我们需要使用最大似然估计从数据中计算出这些参数。事实上,如果我们在联合概率分布公式中明确地考虑pEZθ 的依赖性会更好:

p ( x , θ ) = exp(-E(x ,θ )) Z(θ ) .

在大多数情况下,计算分区函数Z的闭合公式是不可能的,这使得最大似然估计变得棘手。更确切地说,当我们最大化对数似然时,我们需要计算其梯度,其中包括计算其对参数θ 的梯度,这反过来又迫使我们计算分区函数Zθ 的梯度。在这些计算中,以下数量经常出现:

θ log Z ( θ ) = 𝔼 x p(x ) ( θ log ( n u m e r a t o r ( x , θ ) )

在我们的情况下,基于能量的联合概率分布公式中的分子是e x p ( - E ( x , θ ) ),但这在模型之间也可能有所不同。

分区函数难以计算的情况促使我们求助于近似方法,如随机最大似然和对比散度。其他方法则避免近似计算分区函数,而是在不了解分区函数的情况下计算条件概率。它们利用条件概率的比率定义以及基于能量的联合概率分布定义中的比率,有效地消除了分区函数。这些方法包括得分匹配、比率匹配和去噪得分匹配。

其他方法,如噪声对比估计、退火重要性采样、桥接采样,或者结合这些方法的优势,直接近似计算分区函数,而不是其梯度的对数。

我们不会在这里讨论任何这些方法。相反,我们建议感兴趣的读者参考Ian Goodfellow(2016)的《深度学习书》

回到霍普菲尔德网络和玻尔兹曼机:这些是深度神经网络的基石,通过反向传播进行训练,最近的确定性和概率深度学习模型都依赖于这种方法。这些方法构成了学习任意概率分布的原始连接主义(神经元)方法,最初只针对二进制零和一的向量,后来扩展到具有任意实数值的向量。

霍普菲尔德网络

霍普菲尔德网络利用统计力学的优雅数学,通过将人工神经网络的神经元状态与物理系统中元素的状态进行对应。尽管霍普菲尔德网络最终被证明计算昂贵且实用性有限,但它们是现代神经网络时代的奠基人,值得探索,即使只是为了衡量人工智能领域的历史演变。霍普菲尔德网络没有隐藏单元,所有(可见)单元都彼此连接。每个单元可以处于状态(一或零),并且它们共同编码关于整个网络(或系统)的信息。

玻尔兹曼机

玻尔兹曼机是霍普菲尔德网络,但增加了隐藏单元。我们已经熟悉神经网络中输入单元和隐藏单元的结构,所以不需要解释它们,但这是它们的起点。与霍普菲尔德网络类似,输入和隐藏单元都是二进制的,状态为 0 或 1(现代版本实现了不仅是二进制值而且是实数值的单元)。

所有玻尔兹曼机都有一个难以处理的分区函数,因此我们使用在本节介绍中调查的技术来近似最大似然梯度。

玻尔兹曼机仅依赖计算密集的吉布斯抽样进行训练。吉布斯是在统计力学领域中反复出现的名字。吉布斯抽样提供了网络权重的无偏估计,但这些估计具有很高的方差。一般来说,偏差和方差之间存在权衡,这种权衡突出了依赖于每种方法的优缺点。

限制玻尔兹曼机(显式密度和难以处理)

玻尔兹曼机由于可见层内部和隐藏层内部之间的许多相互连接而具有非常缓慢的学习速率(想象一下非常混乱的反向传播)。这使得它们的训练非常缓慢,并且阻碍了它们在实际问题中的应用。限制玻尔兹曼机将连接仅限制在不同层之间,解决了这个问题。也就是说,在限制玻尔兹曼机的每一层内部没有连接,允许每一层的所有单元同时更新。因此,对于两个连接的层,我们可以通过交替更新每一层的所有单元来收集共现统计数据。在实践中,由于最小化抽样程序(如对比散度),可以实现更大的节省。

条件独立性

每一层内部缺乏连接意味着隐藏层中所有单元的状态不相互依赖,但它们确实依赖于前一层单元的状态。换句话说,给定前一层单元的状态,每个隐藏单元的状态与隐藏层中其他单元的状态是独立的。这种条件独立性使我们能够将隐藏层状态的联合概率因子化为各个隐藏单元状态的条件概率的乘积。例如,如果我们在隐藏层中有三个单元,则等于 。另一种方式也成立,即前一层单元的状态在给定当前层状态的情况下是条件独立的。这种条件独立性意味着我们可以对单元状态进行采样,而不是长时间迭代更新它们。

通用逼近

受限玻尔兹曼机中的受限连接允许它们堆叠,即具有一系列能够提取更复杂特征的多个隐藏层。我们现在可以看到现代多层人工神经网络的架构是如何逐渐出现的。回想一下,在第四章中,我们讨论了神经网络对各种确定性函数的通用逼近。在本章中,我们希望我们的网络代表(或学习)联合概率分布,而不是确定性函数。2008 年,Le Roux 和 Bengio 证明了玻尔兹曼机可以以任意精度逼近任何离散概率分布。这个结果也适用于受限玻尔兹曼机。此外,在某些温和条件下,每个额外的隐藏层都会增加对数似然函数的值,从而使模型分布更接近训练集的真实联合概率分布。

2015 年,Eldan 和 Shamir 经验性地验证了增加神经网络层数的价值远远超过增加网络层宽度中每层单元的数量(深度与宽度)。我们也从实践中知道(没有证明),可以训练一个具有数百个隐藏层的网络,其中更深层代表更高阶特征。从历史上看,必须克服梯度消失问题才能训练深度网络。

原始自动编码器

自动编码器架构旨在将输入的信息压缩到其较低维度的隐藏层中。隐藏层应该保留与输入层相同数量的信息,即使它们的单元数少于输入层。我们已经讨论了现代变分自动编码器,为训练自动编码器网络提供了一种高效的方法。在训练过程中,每个向量应该被映射到自身(无监督),网络试图学习最佳的编码。然后输入层和输出层必须具有相同数量的单元。一个玻尔兹曼机设置了一定数量的输入单元,较少数量的隐藏单元,以及一个具有与输入层相同数量的单元的输出层,解释了原始网络自动编码器架构。从历史的角度来看,这是重要的:自动编码器是网络成功学习代码的第一个例子,隐含在隐藏单元的状态中,以表示其输入。这使得网络能够强制将其输入压缩到一个隐藏层中,而最小化信息损失。这现在是神经网络中我们理所当然的一个重要部分。自动编码器架构,无论是否使用玻尔兹曼机(是否使用基于能量的联合概率分布),在深度学习领域仍然具有很大影响力。

在本章的前面,我们讨论了变分自动编码器。从历史的角度来看,这些综合了玻尔兹曼机自动编码器、深度自动编码器网络、去噪自动编码器和信息瓶颈(Tishby 等人,2000)的思想,这些思想源于分析合成的概念(Selfridge,1958)。变分自动编码器使用快速变分方法进行学习。在偏差-方差权衡的背景下,变分方法为网络的权重提供了偏差估计,具有较低的方差。

概率语言建模

这一章与第六章之间的自然联系,第六章几乎专注于自然语言处理以及从自然语言数据中提取含义的各种方法,这一章是调查概率语言模型背后的基本原理,然后强调前一章中遵循这些基本原理的模型。

本章以最大似然估计开始。当我们需要估计概率分布时,这种方法无处不在的原因之一是,通过最大似然估计获得的概率分布受到数学理论的支持,在一些条件下:最大似然估计会收敛到生成数据的真实分布,当数据样本数量趋于无穷大时(也就是,假设我们有大量数据),并且假设模型概率分布已经包含了真实的概率分布。也就是说,当样本数量趋于无穷大时,最大化数据似然性的模型参数将满足:

在语言模型中,训练数据是来自某个语料库和/或流派的文本样本,我们希望学习其概率分布,以便生成类似的文本。重要的是要记住,真实的数据分布很可能包含在由提供的分布族中,因此前一段中的理论结果在实践中可能永远不会成立,然而,这并不会阻止我们,我们通常会满足于对我们的目的足够有用的模型。我们的目标是构建一个能够为语言片段分配概率的模型。如果我们随机组合一些语言片段,我们很可能最终得到一些无意义的话。我们实际上想要找到那些有意义的句子的分布。一个好的语言模型是那种为有意义的句子分配高概率的模型,即使这些句子不在训练数据中。人们通常计算语言模型在训练数据集上的困惑度来评估其性能。

语言模型基于这样一个假设,即下一个单词的概率分布取决于前面的n-1个单词,对于某个固定的n,因此我们关心计算p model ( x n | x 1 , x 2 , , x n-1 )。如果我们使用一个 word2vec 模型,它将每个单词的含义嵌入到向量中,那么这些x中的每一个都由一个向量表示。那些有意义或在类似上下文中经常使用的单词往往具有相似的向量值。我们可以使用前一章的 transformer 模型来基于前面的单词向量预测下一个单词向量。

基于频率的语言模型通过计算训练语料库中单词一起出现的次数来构建条件概率表。例如,我们可以通过计算语料库中good morning出现的次数除以语料库中good出现的次数来估计单词morning在单词good之后出现的条件概率 p(morning|good)。即:

p ( m o r n i n g | g o o d ) = p(good,morning) p(good)

这在非常大的语料库或非结构化文本数据(如推特、Facebook 评论或短信消息)中会出现问题,因为这些数据通常不完全遵循语法/拼写等规则。

我们可以这样形式化概率语言模型的概念:

  1. 指定您语言的词汇表V。这可以是一组字符、空格、标点符号、符号、独特单词和/或 n-gram。从数学上讲,它是一个包括一个停止符号的有限离散集合,该符号表示思想或句子的结束,就像英语中的句号(尽管句号并不总是表示句子的结束,比如在缩写中使用时)。

  2. 将一个句子(可能有意义也可能没有)定义为一个以词汇表V结束的符号有限序列x = ( x 1 , x 2 , , x m )。每个x i可以从词汇表V中任意取值。我们可以将m指定为我们句子的最大长度。

  3. 将我们的语言空间l m = { ( x 1 , x 2 , , x m ) , x i V }定义为所有长度小于或等于m的句子集合。这些句子中绝大多数将毫无意义,我们需要定义一个语言模型,只捕捉那些有意义的句子:对有意义句子的高概率和对无意义句子的低概率。

  4. 表示l m的所有子集的集合。这涵盖了所有最大长度为m的有意义和无意义句子的集合。

  5. 在严格的概率理论中,我们通常从概率三元组开始:一个空间,包含该空间一些子集的sigma 代数,以及分配给所选 sigma 代数的概率测度(在本章中不必担心这些细节)。在这种情况下,语言模型是概率三元组:语言空间l m,由语言空间的所有子集组成的 sigma 代数,以及我们需要分配给的每个成员的概率测度P。由于我们的语言空间是离散且有限的,更容易为l m的每个成员分配一个概率p,即为每个句子x = ( x 1 , x 2 , , x m )分配一个概率(因为这将进而在所有子集的集合上引入一个概率测度P,所以我们永远不会为语言模型担心这一点)。我们需要从训练数据中学习的就是这个p。通常的方法是选择一个由θ 参数化的概率分布的完整系列p ( x ; θ )

  6. 最后,我们需要通过最大化包含许多来自l m的句子样本的训练数据集的似然性来估计参数θ 。由于有意义的句子的概率非常小,我们使用这些概率的对数来避免下溢的风险。

为了保持一致性,在这一部分的背景下,检查对数线性模型和对数双线性模型(GloVe)以及来自第七章的潜在狄利克雷分配是一个不错的练习。

总结和展望

这是我们在寻找最先进人工智能模型所需的数学基础的旅程中的又一个基础章节。我们从早期章节中学习确定性函数转向学习数据特征的联合概率分布。目标是利用这些数据生成类似于训练数据的新数据。我们学到了很多关于概率分布的性质和规则,尽管还没有正式化。我们调查了最相关的模型,以及一些历史演变,导致我们到达这里。我们区分了提供其联合分布的显式公式的模型和间接与底层分布交互而不明确写出公式的模型。对于具有显式公式的模型,计算对数似然及其梯度可能是可行的或不可行的,每种情况都需要自己的方法。目标始终相同:通过找到最大化其对数似然的模型来捕捉数据的潜在真实联合概率分布。

如果我们的数据是低维的,只有一个或两个特征,那么这一切都是不必要的。直方图和核密度估计器很好地估计了低维数据的概率分布。机器学习中最重要的成就之一是能够从大量数据中建模高维联合概率分布。

本章中我们介绍的所有方法都有其优缺点。例如,变分自动编码器允许我们在具有隐藏(潜在)变量的概率图模型中执行学习和高效的贝叶斯推断。然而,它们生成的样本质量较低。生成对抗网络生成更好的样本,但由于其不稳定的训练动态,更难优化。它们寻找一个不稳定的鞍点,而不是一个稳定的最大值或最小值。像 PixelCNN 和 WaveNet 这样的深度信念网络具有稳定的训练过程,优化 softmax 损失函数。然而,在采样过程中效率低下,不像自动编码器那样有机地将数据嵌入到较低维度。

本章中出现的博弈论中的两人零和游戏是由生成对抗网络的设置自然产生的。

展望下一章关于图形建模,我们注意到神经网络图中的连接决定了我们如何编写条件概率,轻松指出各种依赖关系和条件独立性。我们在本章讨论受限玻尔兹曼机时看到了这一点。在下一章中,我们将专注于图形建模,这是我们在本书的三分之三中设法避免的。

第九章:图模型

图表和网络无处不在:城市和路线图,机场和连接航班,电力网络,电网,全球网络,分子网络,生物网络,如我们的神经系统,社交网络,恐怖组织网络,数学模型的图表表示,人工神经网络等等。它们很容易被识别,具有明显的节点代表我们关心的某些实体,然后由有向或无向边连接,表示连接节点之间存在某种关系。

具有自然图结构的数据通过利用和保留该结构的机制更容易理解,构建直接在图上操作的函数(无论它们如何在数学上表示),而不是将图数据输入到机器学习模型中,然后再分析它。这不可避免地导致有价值信息的丢失。这也是卷积神经网络在图像数据上成功的原因,循环神经网络在序列数据上成功的原因,等等。

基于图的模型对数据科学家和工程师非常有吸引力:图结构提供了一种在具有固定底层坐标系统的空间中无法提供的灵活性,例如在欧几里得空间或关系数据库中,数据及其特征被迫遵循严格和预定的形式。此外,图是一种自然的设置,允许我们研究数据集中点之间的关系。到目前为止,我们的机器学习模型消耗的数据表示为孤立的数据点。另一方面,图模型消耗孤立的数据点,以及它们之间的连接,从而实现更深入的理解和更具表现力的模型。

人类大脑自然内化了图形结构:它能够对实体及其连接进行建模。它也足够灵活,可以生成新的网络,或者扩展和增强现有的网络,例如在城市规划、项目规划或持续更新交通网络时。此外,人类可以无缝地从自然语言文本过渡到图模型,反之亦然:当我们阅读新内容时,我们自然会制定图形表示以更好地理解它或向其他人说明。相反,当我们看到图表时,我们能够通过自然语言描述它。目前有一些模型可以基于知识图生成自然语言文本,反之亦然。这被称为在知识图上推理。

此时,我们对神经网络的构建模块以及它们通常适用于的数据类型和任务已经非常熟悉:

  1. 多层感知器或全连接神经网络(第四章)

  2. 卷积层(第五章)

  3. 循环层(第七章)

  4. 编码器-解码器组件(第七章)

  5. 对抗组件和两人零和博弈(第八章)

  6. 变分组件(第八章)

主要任务主要是:分类、回归、聚类、编码和解码,或新数据生成,其中模型学习数据特征的联合概率分布。

我们也熟悉这样一个事实,即我们可以混合和匹配神经网络的一些组件,以构建针对特定任务的新模型。好消息是,图神经网络使用完全相同的组件,因此我们不需要在本章中介绍任何新的机器学习概念。一旦我们了解了如何数学表示图数据及其特征,以一种可以输入到神经网络中进行分析或生成新网络(图)数据的方式,我们就可以开始了。因此,我们将避免深入研究所有图神经网络。相反,我们专注于简单的数学公式、流行的应用程序、图模型的常见任务、可用的数据集和模型评估方法。我们的目标是对这一主题的工作原理有一个深刻的直觉。主要挑战再次是以一种使问题降维并易于计算和分析的方式,同时保留最多信息。换句话说,对于拥有数百万用户的网络,我们不能期望我们的模型以数百万维的向量或矩阵作为输入。我们需要有效的图数据表示方法。

对于希望深入了解和快速掌握图神经网络的读者,2019 年的调查报告:关于图神经网络的综合调查 是一个很好的起点(当然,在仔细阅读本章之后)。

图:节点、边和每个节点的特征

图自然适合模拟任何目标是通过它们之间的关系来理解离散对象集合(重点是离散而不是连续)的问题。图论是离散数学和计算机科学中一个相对年轻的学科,具有几乎无限的应用。这个领域需要更多的头脑来解决其许多未解决的问题。

一个图(见图 9-1)由以下组成:

  1. 节点或顶点:捆绑在一个集合中 N o d e s = { n o d e 1 , n o d e 2 , , n o d e n } 。这可以是少数节点(甚至一个节点),也可以是数十亿个节点。

  2. 边:以有向(从一个节点指向另一个节点)或无向方式(边没有从任一节点指向另一个节点的方向)连接任意两个节点(这可以包括从一个节点到自身的边,或连接相同两个节点的多条边)。边的集合为E d g e s = { e d g e ij = ( n o d e i , n o d e j ) such that there is an edge pointing from n o d e i to n o d e j }

  3. 节点特征:我们可以为每个n o d e i分配一个包含d个特征的列表(例如社交媒体用户的年龄、性别和收入水平),这些特征捆绑在一个向量features node i 中。然后,我们可以将图的所有n个节点的所有特征向量捆绑在一个大小为d × n的矩阵F e a t u r e s Nodes中。

  4. 边特征:类似地,我们可以为每个e d g e ij分配一个包含c个特征的列表(例如道路长度、速度限制以及是否是收费道路),这些特征捆绑在一个向量features edge ij 中。然后,我们可以将图的所有m条边的所有特征向量捆绑在一个大小为c × m的矩阵F e a t u r e s Edges中。

300

图 9-1。一个图由连接节点的有向或无向边和节点组成。

图模型很强大,因为它们灵活,不一定要遵循严格的网格结构。我们可以将它们的节点想象为在空间中漂浮,根本没有任何坐标。它们只是通过连接它们的边保持在一起。然而,我们需要一种方法来表示它们的内在结构。有一些软件包可以根据它们的节点和边的集合来可视化图形,但我们不能在这些漂亮(和信息丰富)的图片上进行分析和计算。有两种流行的图表示可以作为机器学习模型的输入:图的邻接矩阵关联矩阵。还有其他对于图论算法有用的表示,比如边列表两个线性数组后继列表。所有这些表示传达相同的信息,但在存储需求和图的检索、搜索和操作的效率方面有所不同。大多数图神经网络将邻接矩阵与节点和边的特征矩阵一起作为输入。许多时候,它们必须在将图数据输入模型之前进行维度缩减(称为图表示或图嵌入)。其他时候,维度缩减步骤是模型本身的一部分。

  1. 邻接矩阵:在计算机上存储图的结构并研究其属性的一种代数方法是通过邻接矩阵,它是一个n × n,如果从n o d e in o d e j有一条边,则其条目a d j a c e n c y ij = 1,如果从n o d e in o d e j没有边,则其条目a d j a c e n c y ij = 0。请注意,此定义可以容纳自环,即从一个顶点到自身的边,但不包括两个不同节点之间的多条边,除非我们决定在邻接矩阵中包含数字 2、3,作为条目。然而,这可能会破坏一些图论学家使用邻接矩阵建立的结果。

  2. 关联矩阵:这是另一种代数方式来存储图的结构并保留其完整信息。在这里,我们列出节点和边,然后制定一个矩阵,其行对应于顶点,列对应于边。如果矩阵的条目i n c i d e n c e ij为 1,则e d g e j连接n o d e i到其他节点,否则为零。请注意,此定义能够容纳两个不同节点之间的多条边,但不能容纳节点自身到自身的自环。由于许多图的边远多于顶点,因此这个矩阵往往非常宽,比邻接矩阵更大。

Laplacian 矩阵是与无向图相关联的另一个矩阵。它是一个对称矩阵,大小为n × n,其中每个节点都有对应的行和列。Laplacian 矩阵的对角线条目等于每个节点的度,非对角线条目为零,如果两个节点之间没有边相连,则为-1。这是从微积分和偏微分方程中的连续拉普拉斯算子离散化的过程,其中离散化发生在图的节点上。Laplacian 考虑了连续(且两次可微)函数的二阶导数,这些导数测量函数的凹凸性,或者函数在某一点的值与周围点的值有多大差异。与连续拉普拉斯算子类似,Laplacian 矩阵提供了一个度量,衡量图中一个节点与其附近节点的值有多大差异。当我们研究图上的随机游走以及电网络和电阻时,图的 Laplacian 矩阵会出现。我们将在本章后面看到这些内容。

我们可以从邻接矩阵和关联矩阵中轻松推断出简单的节点和边统计信息,例如节点的度数(节点的度数是连接到该节点的边的数量)。度分布 P(k)反映了所有节点的度数的变异性。P(k)是节点恰好有 k 条边的经验概率。这对于许多网络都很重要,比如网络连接和生物网络。例如,如果图中度为k的节点的分布遵循形式为P ( k ) = k -α的幂律分布,则这样的图具有少量高连通性的节点,或者中心节点,这些节点对网络拓扑结构至关重要,它们与许多低连通性的节点连接在一起。

我们还可以添加时间依赖性,并考虑随着时间演变而改变的动态图的属性。目前,有一些模型将时间依赖性添加到节点和/或边特征向量中(因此这些向量的每个条目都变得与时间有关)。例如,对于预测旅行路线的 GPS 系统,连接地图上一点到另一点的边特征会随着时间根据交通情况而改变。

现在我们已经有了一个数学框架,用于图对象以及它们的节点和边特征,我们可以将这些代表性向量、矩阵(以及用于监督模型的标签)输入到机器学习模型中,然后像往常一样进行业务。大多数时候,故事的一半是拥有一个良好的对象表示。另一半故事是机器学习模型的表达能力,我们可以在不编码(甚至不需要学习)导致这些结果的规则的情况下获得良好的结果。对于本章的目的,这意味着我们可以在学习适当的图论之前直接跳入图神经网络。

有向图

对于有向图,一方面,我们对于无向图感兴趣的属性也是一样的,比如它们的生成树、基本回路、割集、平面性、厚度等。另一方面,有向图有它们自己独特的属性,这些属性与无向图不同,比如强连通性、树形结构(根树的有向形式)、去环化等。

示例:PageRank 算法

PageRank是谷歌用于排名其搜索引擎结果中网页的一种当前已停用的算法(2019 年过期)。它根据有多少其他页面链接到它来衡量网页的重要性。在图语言中,节点是网页,有向边是从一个页面指向另一个页面的链接。根据 PageRank,当一个节点有许多其他网页指向它时,即其入度较大时,该节点是重要的(参见图 9-2)。

250

图 9-2. PageRank 为指向(或链接)到它们的页面给出更高的分数(图片来源)。

作为涉及图、邻接矩阵、线性代数和网络的具体示例,让我们通过 PageRank 算法来走一遍一个仅包含四个索引网页的荒谬简化全球网络,如图 9-3 中所示,而不是数十亿个。

250

图 9-3. 一个仅包含四个索引网页的虚构全球网络。

在图 9-3 的图中,只有 B 链接到 A;A 和 D 链接到 B;A 和 D 链接到 C;A、B 和 C 链接到 D;A 链接到 B、C 和 D;B 链接到 A 和 D;C 链接到 D;D 链接到 B 和 C。

让我们想象一个从某个页面开始然后随机点击该页面的链接,然后从这个新页面点击一个链接,依此类推的网络冲浪者。这个冲浪者模拟了网络图上的随机游走

一般来说,在代表全球网络的图上,这样一个随机冲浪者从某个节点遍历图到其邻居之一(或者如果有指向页面本身的链接,则返回到自身)。我们将在本章中再次遇到全球网络,并探讨我们想要了解有关其图性质的问题。我们需要一个用于随机游走的矩阵,对于这个应用我们称之为链接矩阵,但实际上它是由每个顶点的度加权的邻接矩阵。我们使用这个随机游走矩阵,或链接矩阵,来理解图上随机游走的长期行为。本章将在整个章节中出现图上的随机游走。

回到图 9-3 的四页全球网络。如果网络冲浪者在页面 A,有三分之一的机会冲浪者将移动到页面 B,三分之一的机会移动到 C,三分之一的机会移动到 D。因此,页面 A 的外向链接向量是

linking A = 0 1 / 3 1 / 3 1 / 3

如果网络冲浪者在页面 B,有一半的机会他们会移动到页面 A,一半的机会他们会移动到页面 D。因此,页面 B 的外向链接向量是

linking B = 1 / 2 0 0 1 / 2

类似地,页面 C 和 D 的外向链接向量是

linking C = 0 0 0 1 and linking D = 0 1 / 2 1 / 2 0

我们将所有网页的链接向量捆绑在一起,创建一个链接矩阵:

L i n k i n g = 0 1 / 2 0 0 1 / 3 0 0 1 / 2 1 / 3 0 0 1 / 2 1 / 3 1 / 2 1 0

请注意,链接矩阵的列是外向链接概率,A 的行是内向链接概率:冲浪者如何到达页面 A?他们只能在 B,从那里只有 0.5 的概率他们最终会到达 A。

现在我们可以通过将指向 A 的所有页面的排名加起来,每个页面的排名都加权,权重是冲浪者从该页面最终到达页面 A 的概率,也就是说,一个有许多高排名页面指向它的页面也会排名较高。因此,四个页面的排名是:

r a n k A = 0 r a n k A + 1 / 2 r a n k B + 0 r a n k C + 0 r a n k D r a n k B = 1 / 3 r a n k A + 0 r a n k B + 0 r a n k C + 1 / 2 r a n k D r a n k C = 1 / 3 r a n k A + 0 r a n k B + 0 r a n k C + 1 / 2 r a n k D r a n k D = 1 / 3 r a n k A + 1 / 2 r a n k B + 1 r a n k C + 0 r a n k D

要找到每个网页排名的数值,我们必须解决上述线性方程组,这是线性代数的领域。在矩阵向量表示中,我们将上述系统写为:

ranks = L i n k i n g ranks

因此,包含所有网页排名的向量是网页图的链接矩阵的特征向量(其中节点是网页,有向边是它们之间的链接)的特征值为 1。请记住,实际上,网络的图是巨大的,这意味着链接矩阵是巨大的,设计有效的方法来找到它的特征向量变得非常重要。

计算给定矩阵的特征向量和特征值是数值线性代数的最重要贡献之一,具有许多领域的直接应用。许多用于找到特征向量和特征值的数值方法涉及反复将矩阵与向量相乘。当处理巨大矩阵时,这是昂贵的,我们必须使用书中的每一个技巧来使操作更便宜:我们利用矩阵的稀疏性(许多条目为零,因此与这些条目相乘是浪费,然后发现它们只是零);我们引入随机化或随机性,并涉足高维概率和大型随机矩阵领域(我们将在第十一章中尝试这些)。目前,我们重申了我们在第六章中介绍的迭代方法:我们从一个随机向量ranks 0开始,然后通过乘以链接矩阵迭代产生一系列向量:

ranks i+1 = L i n k i n g ranks i

对于我们的四页全球网络,这收敛到向量

ranks = 0 . 12 0 . 24 0 . 24 0 . 4

这意味着页面 D 排名最高,在具有相似内容的搜索引擎查询中,它将是返回的第一个页面。然后,我们可以重新绘制图 9-3 中的图表,其中每个圆的大小对应页面的重要性。

当 PageRank 算法在使用时,真正的实现包括一个阻尼因子d,它是介于零和一之间的数字,通常约为 0.85,它考虑了只有 85%的机会,网络冲浪者点击当前所在页面的链接,以及 15%的机会,他们从当前所在页面开始访问一个完全新的页面,该页面没有从当前所在页面链接过来。这修改了找到网页排名的迭代过程的方式:

ranks i+1 = d ( L i n k i n g ranks i ) + 1-d totalnumberofpages ones

最后,如果你想知道谷歌是否一直在搜索网络上的新网页并对其进行索引,并且是否一直在检查所有已索引的网页是否有新链接?答案是肯定的,以下摘录来自谷歌搜索工作原理谷歌搜索是一个完全自动化的搜索引擎,使用称为网络爬虫的软件定期探索网络以找到要添加到我们索引中的页面。事实上,我们结果中列出的绝大多数页面并非手动提交以进行包含,而是在我们的网络爬虫探索网络时自动发现并添加的。[...]并没有所有网页的中央注册表,因此谷歌必须不断寻找新的和更新的页面,并将它们添加到已知页面列表中。这个过程称为“URL 发现”。有些页面是已知的,因为谷歌已经访问过它们。当谷歌从已知页面跟踪到新页面时,例如,一个中心页面,比如一个类别页面,链接到一个新的博客文章时,就会发现其他页面。当您提交一个页面列表(站点地图)供谷歌爬取时,也会发现其他页面。[...]当用户输入查询时,我们的机器在索引中搜索匹配的页面,并返回我们认为对用户最有价值和最相关的结果。相关性由数百个因素决定,这些因素可能包括用户的位置、语言和设备(台式机或手机)等信息。例如,搜索“自行车修理店”会向巴黎用户显示与向香港用户显示不同的结果。

我们收集的数据越多,搜索就变得越复杂。谷歌在 2015 年推出了 RankBrain。它使用机器学习来对网页上的文本进行向量化,类似于我们在第七章中所做的。这个过程为索引页面添加了上下文和含义,使搜索结果更准确。这个过程增加的不好之处是与含义向量相关联的维度更高。为了避免在返回与查询最接近的网页之前检查每个维度上的每个向量的困难,谷歌使用了近似最近邻算法,帮助在毫秒内返回优秀的结果,这就是我们现在的体验。

使用图来求逆矩阵

应用科学中的许多问题涉及编写一个离散线性系统 A x = b 并解决它,这等同于求矩阵 A 的逆并找到解 x = A -1 b 。但对于大矩阵来说,这是一个计算昂贵的操作,加上高存储要求和低精度。我们一直在寻找有效的方法来求逆矩阵,有时利用手头特定矩阵的特殊特性。

以下是一个图论方法,用于计算一个相当大的矩阵(例如,一百行一百列)的逆:

  1. 用 1 替换矩阵 A 中的每个非零元素。我们得到一个二进制矩阵。

  2. 重新排列得到的二进制矩阵的行和相应的列,使所有对角线条目为 1。

  3. 我们将得到的矩阵视为一个有向图的邻接矩阵(在图中删除对应于对角线上的 1 的自环)。

  4. 得到的有向图被分成了片段。

  5. 如果一个片段太大,那么我们通过删除适当的边将其进一步分解为更小的片段。

  6. 我们反转较小的矩阵。

  7. 显然,这导致了原始矩阵的逆。

我们不会解释为什么和如何,但这种方法非常可爱,所以它进入了这一章节。

群的凯莱图:纯代数和并行计算

群的图,也称为凯莱图或凯莱图表,对于设计和分析并行计算机的网络架构、路由问题以及互连网络的路由算法都是有帮助的。论文Processor Interconnection Networks From Cayley Graphs是一篇有趣且易读的早期设计应用凯莱图进行并行计算网络的论文,解释了如何构建符合特定设计参数的凯莱图。凯莱图也被应用于数据分类

我们可以将具有 n 个元素的每个群表示为具有 n 个节点的连接有向图,其中每个节点对应于群中的一个元素,每条边代表由群中的一个生成器相乘。边根据我们要乘以的群中的生成器进行标记(或着色)(参见图 9-4)。这个有向图唯一定义了群:群中元素的每个乘积对应于在图上遵循一系列有向边。例如,具有 n 个元素的循环群的图是一个由 n 个节点组成的有向电路,其中每条边代表群的一个生成器的乘法。

从纯数学的角度来看,凯莱图对于可视化和研究抽象群是有用的,它在视觉图表中编码了它们的完整抽象结构和所有元素。凯莱图的对称性使它们对于构建更复杂的抽象对象很有用。这些是组合和几何群论的中心工具。要了解更多凯莱图,请查看此页面

250

图 9-4。自由群 a 和 b 的凯莱图:每个节点代表自由群的一个元素,每条边代表乘以 a 或 b。(图片来源)。

图中的消息传递在图内传递

一种用于模拟图中信息传播的有用方法,以及将节点、边和图结构传达的信息整齐地聚合到特定维度的向量中的方法是消息传递框架。在这个框架内,我们从相邻节点和连接到它们的边的特征向量中更新每个节点的信息。图神经网络执行多轮消息传递,每一轮传播一个节点的信息。最后,我们结合每个单独节点的潜在特征来获得其统一的向量表示,并表示整个图。

更具体地说,对于一个特定的节点,我们选择一个函数,该函数以节点的特征向量、其中一个相邻节点的特征向量(通过边连接到它的节点)以及连接它到这个相邻节点的边的特征向量作为输入,并输出一个包含来自节点、相邻节点和它们连接的边的信息的新向量。我们将同样的函数应用于所有节点的相邻节点,然后将生成的向量相加,产生一个消息向量。最后,我们通过将原始特征向量与消息向量结合在一起的更新函数来更新我们节点的特征向量,这也是我们选择的。当我们对图中的每个节点都这样做时,每个节点的新特征向量将包含来自它自身、所有相邻节点和所有连接的边的信息。现在当我们再次重复这个过程时,节点的最新特征向量将包含来自它自身、所有相邻节点及其相邻节点,以及所有相应的连接边的信息。因此,我们进行的消息传递轮数越多,每个节点的特征向量就包含了来自图中更远节点的信息,每次移动一个边的距离。信息逐渐在整个网络中传播。

图的无限应用

图神经网络和图模型的应用普遍且重要,以至于我有点后悔没有从图开始这本书。在任何图模型中,我们首先回答以下问题:

  • 节点是什么?

  • 是什么关系连接了两个节点,建立了它们之间的有向或无向边?

  • 模型是否应该包括节点和/或边的特征向量?

  • 我们的模型是动态的吗,其中节点、边和它们的特征随时间演变,还是静态的?

  • 我们感兴趣的是什么?分类(例如癌细胞或非癌细胞;虚假新闻传播者或非虚假新闻传播者)?生成新的图(例如用于药物发现)?聚类?将图嵌入到一个更低维度和结构化的空间中?

  • 可用或需要的数据是什么,数据是否组织和/或标记?是否需要预处理?

在本节中我们调查了一些应用,但还有许多应用真正适合图模型结构。阅读链接出版物的摘要是很好的,因为它们有助于捕捉这些模型的共同主题和思考方式。以下列表提供了图神经网络的常见任务的一个很好的概念,包括:

  • 节点分类

  • 图分类

  • 聚类和社区检测

  • 生成新的图

  • 影响最大化

  • 链接预测

图像数据作为图

我们可能会遇到在手写数字 MNIST 数据集上测试的图神经网络,这是计算机视觉的基准数据集之一。如果你想知道图像数据(存储为每个通道上的像素强度的三维张量)如何适应图结构,这里是它的工作原理:每个像素是一个节点,其特征是其三个通道的相应强度(如果是彩色图像,则只有一个特征)。边连接每个像素到其周围的三个、五个或八个像素,取决于像素是位于角落、边缘还是图像中间。

大脑网络

神经科学中的主要追求之一是理解大脑的网络组织。图模型为分析大脑的复杂网络提供了一个自然的框架和许多工具,无论是从解剖学还是功能学的角度。

要创建与人类智能相媲美的人工智能,我们必须在许多层面上了解人类大脑。其中一个方面是大脑的网络连接性,连接性如何影响大脑的功能,以及如何复制这一点,从小的计算单元逐步构建到模块化组件,最终形成一个完全独立和功能完善的系统。

人类大脑解剖网络展示了短路径长度(保持布线成本)以及高度皮层中枢,即高聚类。这既在细胞尺度上,也在整个大脑尺度上。换句话说,大脑网络似乎以一种最大化信息传输效率和最小化连接成本的方式组织自己。该网络还展示了模块化和分层的拓扑结构和功能。大脑网络的拓扑结构和功能在短时间尺度和长时间尺度上是相互依存的:网络的动态特性受其结构连接的影响,而在更长的时间尺度上,动态特性影响网络的拓扑结构。

最重要的问题是:大脑的网络属性与其认知行为之间的关系是什么?网络属性与大脑和精神障碍之间的关系是什么?例如,我们可以将神经精神障碍视为失连接综合征,图论可以帮助量化网络结构中的弱点、对损伤的脆弱性和异常。事实上,图论已被应用于研究精神分裂症、阿尔茨海默病和其他疾病中的结构和功能网络属性。

疾病传播

正如我们从 Covid19 大流行中学到的那样,准确可靠地预测疾病事件对于减轻目的、隔离措施、政策和许多其他决策因素至关重要。图模型可以将个体或整个地理区块视为节点,将这些个体或区块之间的接触事件视为边。最近用于预测 Covid19 传播的模型,例如文章结合图神经网络和时空疾病模型以改善对德国每周 COVID-19 病例的预测(2022),将来自 Facebook、Apple 和 Google 的人类流动数据纳入模型中,以模拟节点之间的相互作用。

这里有大量数据可以加以利用:Facebook 的Data For Good资源拥有大量关于人口密度、社会流动和旅行模式、社会联系等数据。谷歌的Covid 19 社区流动报告从谷歌地图和其他产品中获取见解,形成一个数据集,通过地理位置和不同类别的地点(如零售和娱乐、杂货店和药店、公园、交通站、工作场所和居住区)跟踪随时间变化的移动趋势。同样,苹果和亚马逊的流动数据也具有类似的目的,旨在帮助限制 Covid19 的传播。

信息传播

我们可以使用图形来模拟信息、疾病、谣言、八卦、计算机病毒、创新想法或其他事物的传播。这样的模型通常是一个有向图,其中每个节点对应一个个体,边缘带有关于个体之间互动的信息。边缘标签或权重通常是概率:连接n o d e in o d e j 的边缘的权重w ij 是某种效应(疾病、谣言、计算机病毒)从n o d e i 传播到n o d e j 的概率。

检测和跟踪假新闻传播

图神经网络在检测假新闻的任务中表现比基于内容的自然语言处理方法更好(见图 9-5)。2019 年论文《在社交媒体上使用几何深度学习检测假新闻》的摘要很有信息量:社交媒体如今是全球数百万人的主要新闻来源之一,因为它们成本低、易于访问且传播迅速。然而,这也带来了可疑的信任度和暴露于“假新闻”的风险,这些新闻是有意编写以误导读者的。自动检测假新闻面临挑战,这挑战超越了现有基于内容的分析方法。其中一个主要原因是,新闻的解释通常需要政治或社会背景知识或“常识”,而当前的自然语言处理算法仍然缺乏。最近的研究实证表明,假新闻和真实新闻在社交媒体上传播方式不同,形成了传播模式,这些模式可以用于自动检测假新闻。基于传播的方法与基于内容的方法相比具有多个优势,其中包括语言独立性和更好的抵抗对抗性攻击。在本文中,我们展示了一种基于几何深度学习的新型自动假新闻检测模型。底层核心算法是将经典卷积神经网络推广到图形,允许融合异构数据,如内容、用户资料和活动、社交图和新闻传播。我们的模型在 Twitter 上传播的经专业事实核查组织验证的新闻报道上进行了训练和测试。我们的实验表明,社交网络结构和传播是重要特征,允许高度准确(92.7% ROC AUC)的假新闻检测。其次,我们观察到假新闻可以在传播几小时后可靠地检测出来。第三,我们测试了我们模型在时间上分开的训练和测试数据的老化情况。我们的结果指向基于传播的方法对于假新闻检测的潜力,作为基于内容的方法的替代或补充策略。

250

图 9-5。传播假新闻的节点标记为红色。思想相似的人在社交网络中聚集在一起(图片来源)。

Web-Scale Recommendation Systems

自 2018 年以来,Pinterest 一直在使用PinSage 图卷积网络。这个网络整理用户的主页并为新的相关的图钉提供建议。作者在他们的模型中使用了图上的随机游走,我们将在本章后面讨论。以下是完整的摘要:针对图结构数据的深度神经网络的最新进展已经在推荐系统基准测试中取得了最先进的性能。然而,使这些方法实用并可扩展到拥有数十亿个项目和数亿用户的网络规模推荐任务仍然是一个挑战。在这里,我们描述了一个我们在 Pinterest 开发和部署的大规模深度推荐引擎。我们开发了一种数据高效的图卷积网络(GCN)算法 PinSage,它结合了高效的随机游走和图卷积,生成了结合了图结构和节点特征信息的节点(即项目)嵌入。与先前的 GCN 方法相比,我们开发了一种基于高效随机游走的新方法来构造卷积,并设计了一种依赖于越来越难的训练示例来改善模型的鲁棒性和收敛性的新型训练策略。我们在 Pinterest 部署了 PinSage,并在拥有 30 亿个代表图钉和画板的节点和 180 亿条边的图上对其进行了 750 亿个示例的训练。根据离线指标、用户研究和 A/B 测试,PinSage 生成的推荐比可比的深度学习和基于图的替代方法具有更高的质量。据我们所知,这是迄今为止最大规模的深度图嵌入应用,并为基于图卷积架构的新一代网络规模推荐系统铺平了道路。

对抗癌症

在 2019 年的文章HyperFoods: 机器智能映射食物中的抗癌分子中,作者利用蛋白质、基因和药物相互作用数据来识别有助于预防和战胜癌症的分子。他们还绘制了富含抗癌分子的食物(见图 9-6)。作者再次利用图上的随机游走。以下是论文的摘要:最近的数据表明,30-40%的癌症可以仅通过饮食和生活方式措施来预防。在这里,我们介绍了一种独特的基于网络的机器学习平台,用于识别可能的基于食物的抗癌分子。这些分子是通过它们与临床批准的抗癌疗法的分子生物学网络共同性来识别的。使用图上的随机游走机器学习算法(在超级计算 DreamLab 平台内运行),模拟药物在人类相互作用网络上的作用,以获得 1962 种批准的药物的全基因组活性概况(其中 199 种被分类为“抗癌”并具有它们的主要适应症)。采用监督方法来预测抗癌分子,使用这些‘学习’相互作用活性概况。经验证的模型性能预测抗癌治疗药物的分类准确率为 84-90%。7962 种食物中的生物活性分子的全面数据库被输入模型,预测出 110 种抗癌分子(通过抗癌药物相似性阈值定义为>70%),其预期能力与来自各种化学类别的临床批准的抗癌药物相当。这反过来被用来构建一个‘食物地图’,其中每种成分的抗癌潜力由其中发现的抗癌分子数量来定义。我们的分析支持下一代癌症预防和治疗营养策略的设计。

250

图 9-6. 超级食物:食物中癌症抗击分子的机器智能映射。节点越大,癌症抗击分子集合越多样化。(图片来源)。

生化图

我们可以将分子和化合物表示为图,其中节点是原子,边是它们之间的化学键。来自化学信息学领域的数据集对于评估分类模型的性能很有用。例如,包含约 4100 种化合物的NCI-1数据集,对于抗癌筛选非常有用,其中化学品被标记为阻碍肺癌细胞的阳性或阴性。同一网站上还提供了蛋白质和其他化合物的类似标记图数据集,以及使用它们的论文以及不同模型在这些数据集上的性能。

药物和蛋白质结构发现的分子图生成

在上一章中,我们学习了生成网络如变分自动编码器和对抗网络如何从数据中学习联合概率分布,以便为各种目的生成外观相似的数据。生成图网络建立在类似的思想基础上,但是比单纯生成图像的网络更复杂。生成图网络以顺序方式生成新图,逐步输出节点和边,或者以全局方式一次性输出整个图的邻接矩阵。有关该主题的详细信息,请参见调查报告生成图网络(2020)

引文网络

在引文网络中,节点可以是作者,边是他们的合著关系,或者节点是论文,(有向)边是它们之间的引用:每篇论文都有指向它引用的论文的有向边。每篇论文的特征包括其摘要、作者、年份、会议、标题、研究领域等。任务包括节点聚类、节点分类和链接预测。用于论文引文网络的流行数据集包括 Cora、Citeseer 和 Pubmed。Cora 数据集包含约三千篇机器学习出版物,分为七个类别。引文网络中的每篇论文都由一个独热向量表示,指示预定字典中单词的存在或不存在,或者由词频-逆文档频率(TF-IDF)向量表示。随着更多论文加入网络,这些数据集将不断更新。

社交媒体网络和社交影响预测

社交媒体网络如 Facebook、Twitter、Instagram 和 Reddit 是我们这个时代(2010 年后)的一个独特特征。Reddit 数据集是可用数据集的一个例子:这是一个图,其中节点是帖子,边是两个帖子之间的评论来自同一用户。这些帖子还标有它们所属的社区。

社交媒体网络及其社会影响对我们的社会产生了重大影响,从广告到赢得总统选举再到推翻政治制度。代表社交网络的图模型的一个重要任务是预测网络中节点的社会影响。在这里,节点是用户,他们的互动是边缘。特征包括用户的性别、年龄、性别、位置、活动水平等。量化社会影响的一种方法是通过预测用户在网络中的邻近邻居的行为来预测目标变量。例如,如果用户的朋友购买了一个产品,那么在一段时间后他们购买相同产品的概率是多少?图上的随机游走有助于预测网络中某些节点的社会影响。

社会结构

社会图是代表社会中个人或个人群体之间关系的有向图。节点是社会成员或群体,有向边是这些成员之间的关系,如钦佩、联合、影响等。我们对这些社会图中的连通性、可分离性、片段大小等感兴趣。一个例子来自人类学研究,根据他们的亲属结构对一些部落进行分类。

贝叶斯网络

很快在本章中我们将讨论贝叶斯网络。这些是概率图模型,其目标是我们在人工智能领域非常熟悉的目标:学习数据集特征的联合概率分布。贝叶斯网络将这个联合概率分布视为表示数据特征之间关系的图中仅条件于节点的父节点的单变量分布的乘积。也就是说,节点是特征变量,边缘是我们认为相连的特征之间的边缘。应用包括垃圾邮件过滤、语音识别、编码和解码等。

交通预测

交通预测是使用历史道路地图、道路速度和交通量数据来预测交通量的任务。有基准交通数据集,我们可以用来跟踪进展并比较模型。例如,METR-LA是一个时空图数据集,包含洛杉矶县高速公路上 207 个传感器收集的四个月的交通数据。交通网络是一个图,其中节点是传感器,边缘是这些传感器之间的道路段。在某个时间t,特征是交通参数,如速度和量。图神经网络的任务是在经过一定时间后预测图的特征。

其他交通预测模型采用贝叶斯网络:相邻道路链接之间的交通流量。该模型利用相邻道路链接的信息来分析焦点链接的趋势。

物流与运营研究

我们可以使用图来建模和解决运筹学中的许多问题,例如运输问题和活动网络。涉及的图通常是加权有向图。运筹学问题具有组合性质,如果网络很小,问题总是微不足道的。然而,对于大型现实世界网络,挑战在于找到能够快速筛选出大部分搜索空间并迅速排除其中大部分内容的高效算法。研究文献的很大一部分涉及估计这些算法的计算复杂性。这被称为组合优化。典型问题包括“旅行推销员问题”、“供应链优化”、“共享乘车路线和票价”、“工作匹配”等。用于解决这些问题的一些图方法和算法包括最小生成树、最短路径、最大流最小割以及图中的匹配。我们将在本书的后面讨论运筹学示例。

语言模型

图模型与各种自然语言任务相关。这些任务在表面上看起来不同,但许多任务归结为聚类,而图模型非常适合这种任务。

对于任何应用程序,我们必须首先选择节点、边以及每个节点代表的特征。对于自然语言,这些选择揭示了语言和语言语料库中的隐藏结构和规律。

与将自然语言句子表示为递归模型的令牌序列或变压器的令牌向量不同,在图模型中,我们将句子嵌入到图中,然后使用图深度学习(或图神经网络)。

计算语言学中的一个例子是构建解析语言的图表图 9-7。

300

图 9-7。解析后的句子。

节点可以是单词、n-gram 或短语,边是它们之间的关系,这取决于语言的语法或语法(冠词、名词、动词等)。语言被定义为根据其语法规则从语言词汇表中正确生成的所有字符串的集合。在这个意义上,计算机语言易于解析(它们是这样构建的),而自然语言由于其复杂性而很难完全指定。

解析

解析意味着将输入流转换为结构化或正式表示,以便可以自动处理。解析器的输入可以是句子、单词,甚至字符。输出是包含有关输入每个部分功能的信息的树形图。我们的大脑是语言输入的出色解析器。计算机解析编程语言。

另一个例子是新闻聚类或文章推荐。在这里,我们使用文本数据的图嵌入来确定文本相似性:节点可以是单词,边可以是单词之间的语义关系,或者只是它们的共现关系。或者节点可以是单词和文档,边可以再次是语义或共现关系。节点和边的特征可以包括作者、主题、时间段等。在这样的图中,聚类自然而然地出现。

另一种不依赖于语言的语法或语法的解析类型是抽象意义表示(AMR)。它依赖于语义表示,即意义相似的句子应该被分配相同的抽象意义表示,即使它们的措辞不完全相同。抽象意义表示图是根据完整句子构建的有根、标记、有向、无环图。这对于机器翻译和自然语言理解非常有用。有用于抽象意义表示解析、可视化和表面生成的软件包和库,以及公开可用的数据集。

对于其他自然语言应用,以下调查论文是一个很好的参考,易于阅读并了解更多有关主题的信息:自然语言处理中的图调查

网络的图结构

自 1989 年万维网(www)的诞生以来,它已经得到了巨大的发展,并已成为全球数十亿人不可或缺的工具。它允许使用互联网浏览器访问数十亿个网页、文档和其他资源。由于数十亿个页面相互链接,研究网络的图结构具有极大的兴趣。从数学上讲,这个广阔而庞大的图本身就是迷人的。但理解这个图对于更多原因至关重要,它提供了对爬取、索引和排名网络的算法(如我们在本章前面看到的 PageRank 算法)、搜索社区以及发现表征其增长或衰退的社会和其他现象的洞察。

全球网络图具有:

  • 节点:网页,数量达数十亿。

  • 边:从一个页面指向另一个页面,数量达数百亿。

我们感兴趣的是:

  • 节点的平均度是多少?

  • 节点的度分布(对于入度和出度,可能非常不同)。它们是否符合幂律?其他一些规律?

  • 图的连通性:连接对的百分比是多少?

  • 节点之间的平均距离。

  • 观察到的网络结构是否依赖于特定的爬取?

  • 弱连接组件和强连接组件的特定结构。

  • 是否存在一个巨大的强连通分量?可以到达或可以从这个巨大分量到达的节点的比例是多少?

自动分析计算机程序

我们可以使用图来验证计算机程序、程序推理、可靠性理论、计算机故障诊断以及研究计算机内存的结构。文章程序分析中的图神经网络是一个例子:程序分析旨在确定程序的行为是否符合某些规范。通常,程序分析需要由人类定义和调整。这是一个昂贵的过程。最近,机器学习方法已经显示出在概率上实现各种程序分析的潜力。鉴于程序的结构化特性,以及程序分析中图表示的普遍性,图神经网络(GNN)提供了一种优雅的方式来表示、学习和推理程序,并广泛用于基于机器学习的程序分析。本文讨论了图神经网络在程序分析中的应用,重点介绍了两个实际用例:变量误用检测和类型推断。

计算机科学中的数据结构

在计算机科学中,数据结构是一种存储、管理和组织数据的结构。有不同的数据结构,它们通常被选择为使访问数据更有效(读取、写入、附加、推断或存储关系等)。

一些数据结构使用图来组织数据,计算设备在一个集群中,并表示数据和计算或通信网络的流动。还有一些面向存储和查询图数据的图数据库。其他数据库将图数据转换为更结构化的格式(如关系格式)。

以下是一些图数据结构的示例:

  1. 我们已经遇到了 PageRank 算法,以及网站的链接结构表示为有向图,其中节点是网页,边表示从一个页面到另一个页面的链接。一个数据库保存所有网页以及它们的链接结构可以是图结构化的,其中图以链接矩阵或邻接矩阵的形式存储,无需进行任何转换,或者可以转换以适应其他非图形数据库的结构。

  2. 用于组织数据库中文件的二叉搜索树:二叉搜索树是有序的数据结构,对于随机和顺序访问记录以及文件的修改都很高效。二叉搜索树的固有顺序加快了搜索时间:在树的每个级别,我们将要排序的数据量减少了一半。它还加快了插入时间:与数组不同,当我们向二叉树数据结构添加一个节点时,我们在内存中创建一个新的部分并链接到它。这比创建一个新的大数组然后将数据从较小的数组插入到新的更大数组要快。

  3. 基于图的信息检索系统:在一些信息检索系统中,我们为每个文档分配一定数量的索引项。我们可以将这些视为文档的指示符、描述符或关键词。这些索引项将被表示为图的节点。如果两个索引项密切相关,例如索引网络,我们用无向边连接这两个索引项。结果的相似性图非常庞大,可能是不连通的。该图的最大连接子图是其组件,它们自然地对该系统中的文档进行分类。对于信息检索,我们的查询指定了一些索引项,即图的某些节点,系统返回包含相应节点的最大完整子图。这给出了指定我们正在搜索的文档的完整索引项列表。

在分布式网络中的负载均衡

计算世界已经从摩尔定律发展到并行计算再到云计算。在云计算中,我们的数据、文件以及执行我们文件和对我们数据进行计算的机器都不在我们附近。它们甚至不彼此靠近。随着应用程序变得更加复杂,网络流量增加,我们需要软件或硬件的网络流量分配器,将网络流量分配到多个服务器上,以便没有单个服务器承担沉重负载,从而提高应用程序响应时间、最终用户体验等性能。随着流量增加,需要添加更多的设备或节点来处理体积。在保护数据安全和隐私的同时,需要进行网络流量分配,并且应该能够在发生之前预测流量瓶颈。这正是负载均衡器所做的。可以将分布式网络想象成一个图,其中节点是连接的服务器和设备。然后负载均衡是在给定图上的流量问题,有各种算法用于分配负载。所有算法都在网络的图上运行。有些是静态的,分配负载而不更新网络的当前状态,有些是动态的,但需要网络内关于节点状态的持续通信。以下是一些算法:

  1. 最少连接算法:这种方法将流量引导到具有最少活动连接的服务器。

  2. 最小响应时间算法:这种方法将流量引导到具有最少活动连接和最低平均响应时间的服务器。

  3. 轮询算法:该算法在服务器上轮流分配负载:首先将流量引导到第一个可用的服务器,然后将该服务器移动到队列的底部。

  4. IP 哈希:这种方法根据客户端的 IP 地址分配服务器。

人工神经网络

最后,人工神经网络本身是图,其中节点是计算单元,边是这些单元的输入和输出。图 9-8 总结了流行的人工神经网络模型作为图。

250

图 9-8. 神经网络作为图(图片来源)。

图上的随机行走

图上的随机行走(图 9-9)的意思就是:一系列步骤从某个节点开始,每个时间步骤选择一个相邻节点(使用邻接矩阵),概率与边的权重成比例,并移动到那里。

300

图 9-9. 无向图上的随机行走者。

如果边没有权重,那么相邻节点被选择作为行走移动的概率是相等的。在任何时间步骤中,如果存在自环,行走可以停留在同一节点,或者在进行懒惰随机行走时,行走者有一定概率停留在一个节点而不是移动到其邻居之一。我们感兴趣的是以下内容:

  1. 随机行走访问的节点列表,按访问顺序排列是什么?在这里,起点和图的结构对行走者覆盖范围或行走是否能到达图的某些区域有影响。在图神经网络中,人们希望根据邻居的特征学习给定节点的表示。在大图中,节点的邻居比可计算的要多,我们使用随机行走。然而,我们必须小心,图的不同部分具有不同的随机行走扩展速度,因此如果我们不根据子图结构调整随机行走的步数,我们可能会得到节点的低质量表示,并且随着这些表示进入工作流程,可能会产生不良后果。

  2. 随机行走的预期行为是什么,即在一定步数后访问节点的概率分布。我们可以通过使用图的谱,即其邻接矩阵的特征值集合,来研究随机行走的基本属性,比如其长期行为。一般来说,运算符的谱帮助我们理解当我们重复应用运算符时会发生什么。在图上随机行走等同于重复应用邻接矩阵的归一化版本到我们开始的图的节点上。每次应用这个随机行走矩阵,我们在图上向前走一步。

  3. 随机行走在不同类型的图上的行为如何,比如路径、树、两个完全连接的图通过一条边连接、无限图等?

  4. 对于给定的图,行走是否会回到起点?如果是,我们需要走多久才能回到?

  5. 我们需要走多久才能到达特定节点?

  6. 我们需要走多久才能访问所有节点?

  7. 随机行走如何扩展?也就是说,属于图中某些区域的特定节点的影响分布是什么?他们的影响大小是多少?

  8. 我们能否设计基于随机行走的算法,能够到达大图的隐秘部分?

随机行走和布朗运动

当随机行走的步长大小趋近于零时,我们得到布朗运动。布朗运动通常模拟悬浮在介质中的粒子的随机波动,比如液体中的粒子或者金融市场中衍生品的价格波动。我们经常将布朗运动与维纳过程一起提及,维纳过程是一个连续随机过程,对于运动(粒子或金融中价格波动)的开始(从零开始)、下一步的采样(从正态分布中采样并具有独立增量)以及关于其时间连续性的假设(几乎肯定是连续的)有明确的数学定义。另一个相关的术语是。我们将在第十一章中的概率部分看到这些内容。

我们在本章中讨论 PageRank 算法时曾遇到过随机行走,其中一个随机网页浏览者随机选择从当前页面移动到网络中的相邻页面。我们注意到当我们反复应用图的链接矩阵时,随机行走的长期行为会被发现,这与每个节点的度数归一化的邻接矩阵相同。在下一节中,我们将看到更多关于图神经网络中随机行走的用途。

我们可以利用随机行走(在有向或无向图、加权或非加权图上)进行社区检测和影响最大化,其中我们只需要图的邻接矩阵(而不是将节点嵌入到特征向量中然后进行聚类)。

节点表示学习

在机器上实现任何图任务之前,我们必须能够将图的节点表示为包含有关其在图中位置和相对于图中局部性的特征的向量。节点的表示向量通常是从节点自身的特征和周围节点的特征聚合而来的。

有不同的方法来聚合特征、转换特征,甚至选择哪些邻居节点对给定节点的特征表示有贡献。让我们看看一些方法:

  • 传统的节点表示方法依赖于子图摘要统计。

  • 在其他方法中,一起出现在短随机行走中的节点将具有相似的向量表示。

  • 其他方法考虑到随机行走在不同的图子结构上传播方式不同,因此节点的表示方法会根据节点所属的局部子结构进行调整,根据所属子图的拓扑结构决定每个节点的适当影响半径。

  • 其他方法通过将节点的特征向量与随机行走矩阵的幂相乘来产生多尺度表示。

  • 其他方法允许对节点及其邻居的特征向量进行非线性聚合。

确定节点从多大范围的邻域中获取信息(影响分布)也很重要,也就是找到哪些节点的特征会影响给定节点的表示。这类似于统计学中的敏感性分析,但在这里我们需要确定节点的表示对周围节点特征变化的敏感性。

创建节点表示向量后,在训练期间将其输入到另一个机器学习模型中,例如支持向量机模型进行分类,就像将数据的其他特征输入模型一样。例如,我们可以学习社交网络中每个用户的特征向量,然后将这些向量与其他特征一起传递到分类模型中,以预测用户是否是虚假新闻传播者。但是,我们不必依赖下游的机器学习模型来对节点进行分类。我们可以直接从图结构数据中进行分类,在那里我们可以根据其与其他局部节点的关联来预测节点的类别。图可能只有部分标记,任务是预测其余标签。此外,节点表示步骤可以是预处理步骤,也可以是端到端模型的一部分,例如图神经网络。

图神经网络的任务

经过线性代数图形式化、图模型应用、图上的随机游走以及编码节点特征及其在图中影响区域的向量节点表示,我们应该对图神经网络可以执行的任务有一个良好的了解。让我们来看看其中一些。

节点分类

  • 在文章引用网络中,比如在 Citeseer 或 Cora 中,其中节点是学术论文(表示为词袋向量),有向边是论文之间的引用,将每篇论文分类到特定学科中。

  • 在 Reddit 数据集中,其中节点是评论帖子(表示为词向量),无向边是由同一用户发布的评论之间的关系,根据其所属社区对每个帖子进行分类。

  • 蛋白质相互作用网络数据集包含 24 个图,其中节点标记有基因本体集(不用担心医学技术名称,专注于数学。这是数学建模的好处,它对来自各种领域的各种应用都起作用,这证实了它作为潜在的宇宙基础语言)。通常从蛋白质相互作用网络数据集中选取 20 个图用于训练,2 个图用于验证,其余用于测试,每个对应一个人类组织。与节点相关的特征包括位置基因集、模体基因集和免疫特征。根据其基因本体集对每个节点进行分类。

  • 有野生动物贸易监测网络,比如Trade.org,分析动态的野生动物贸易趋势,并使用和更新数据集,比如CITES 野生动物贸易数据库USADA 美国农业部数据共享(该数据集包括超过一百万个野生动物或野生动物产品运输,代表超过 60 个生物类别和超过 32 亿个活体生物)。贸易网络上的一个分类任务是将每个节点分类为从事非法贸易活动的交易者(买方或卖方)或不从事。网络中的边表示这些买方和卖方之间的交易。节点的特征包括交易者的个人信息、银行账号、位置等,边的特征包括交易标识号、日期、价格标签、购买或出售的物种等。如果我们已经有一部分交易者标记为非法交易者,那么我们模型的任务将是根据它们与网络中其他节点(及其特征)的连接来预测网络中其他节点的标签。

节点分类示例自然适合半监督学习,其中数据集中只有少数节点带有标签,任务是为其余节点标记。干净标记的数据是我们所有人都应该倡导的,这样我们的系统才能更准确、可靠和透明。

图分类

有时我们关心将整个图标记为与标记图的个别节点相对。例如,在 PROTEINS 数据集中,我们有一组化合物,每个化合物都表示为一个图,并标记为酶或非酶。对于图学习模型,我们将输入数据集中每个图的节点、边、它们的特征、图结构和标签,创建整个图表示或嵌入,而不是单个节点表示。

聚类和社区检测

图中的聚类是一个重要的任务,它在网络中发现社区或群组,比如恐怖组织。一种方法是创建节点和图表示,然后将它们输入传统的聚类方法,如k均值聚类。其他方法产生节点和图表示,考虑到聚类目标在其设计中。这些方法可以包括编码器解码器设计和类似于我们在之前章节中遇到的方法的注意机制。其他方法是谱方法,这意味着它们依赖于图的拉普拉斯矩阵的特征值。请注意,对于非图数据,主成分分析是我们用于聚类的一种方法,也是谱方法,依赖于数据表的奇异值。计算任何东西的特征值总是一个昂贵的操作,所以目标是找到避免这样做的方法。对于图,我们可以采用图论方法,如最大流最小割(我们将在本章后面看到)。不同的方法有各自的优势和缺点,例如一些采用经过时间验证的图论结果,但未包括节点或边的特征,因为该理论并未考虑任何特征,更不用说一大堆特征了。重要的是要始终诚实地说明我们的模型考虑了什么,没有考虑什么。

图生成

图生成对于药物发现、材料设计和其他应用非常重要。传统上,图生成方法使用手工制作的随机图模型系列,使用简单的随机生成过程。由于它们的简单属性,这些模型在数学上是很容易理解的。然而,由于同样的原因,它们在捕捉具有更复杂依赖关系的真实世界图,甚至是许多真实世界网络所展示的正确统计属性,如节点度的重尾分布方面存在局限性。更近期的方法,如生成图神经网络,将图和节点表示与我们在前一章中介绍的生成模型相结合。这些方法具有更大的能力从数据中学习结构信息,并生成复杂的图,如分子和化合物。

影响最大化

影响最大化是网络扩散的一个子领域,其目标是通过网络最大化某种东西(如信息或疫苗)的扩散,同时只将该东西给予少数初始节点或种子。因此,目标是找到具有整体最大影响力的少数节点。应用包括信息传播,如职位空缺、新闻、广告和疫苗接种。传统方法选择种子节点的方式是基于最高度、接近度、介数和其他图结构属性。其他方法采用离散优化领域,获得良好结果并证明近似优化器的存在。最近的方法采用图神经网络和对抗网络,当存在其他与最大化节点影响力目标竞争的目标时,例如达到特定人口部分,如某个少数群体,他们不一定与图的自然中心紧密连接。

链接预测

给定图中的两个节点,它们之间存在边的概率是多少?请注意,在共享共同邻居的意义上的接近性并不一定是连接(或互动)的指标。在社交网络中,人们倾向于在同一个圈子里活动,因此共享许多共同朋友的两个人很可能互动,因此它们也很可能相连,但在某些生物系统中,例如研究蛋白质相互作用时,情况恰恰相反:共享更多共同邻居的蛋白质更不可能相互作用。因此,基于基本属性(如图距离、度、共同邻居等)计算相似性分数并不总是产生正确结果。我们需要神经网络来学习节点和图的嵌入,并分类两个节点是否相连。这篇论文中有一个这样的网络示例:Link Prediction with Graph Neural Networks and Knowledge Extraction

动态图模型

本章讨论的许多应用都将受益于在我们的图模型中包含时间依赖性,因为它们具有动态性质。示例包括交通预测、分布式网络的负载平衡、模拟各种相互作用的粒子系统以及非法野生动物贸易监测。在动态图模型中,节点和边的特征允许随时间演变,一些节点或边可以被添加或移除。这种建模捕捉了市场中最新贸易趋势、波动、某些网络中的新犯罪活动以及交通系统中的新路线或连接等信息。

思考如何建模动态图并从中提取信息并不是新鲜事,例如可以参考 1997 年的文章Dynamic graph models,然而,深度学习的引入使得从这些系统中提取知识更加简单。目前用于动态图的方法将图卷积与循环神经网络或卷积神经网络相结合,以捕获空间依赖性并建模时间依赖性。

这篇论文Learning to Simulate Complex Physics with Graph Networks (2020)是一个很好的例子,展示了出色的高分辨率结果,利用动态图神经网络在更大的尺度上模拟任何相互作用粒子系统,无论是涉及的粒子数量还是系统允许(数值上)演化的时间,都比以前做的要多。粒子,如沙子或水粒子,是图的节点,具有属性如位置、速度、压力、外部力等,边连接允许相互作用的粒子。神经网络的输入是一个图,输出是一个具有相同节点和边的图,但具有更新后的粒子位置和属性。网络通过消息传递学习动态,或者说每个时间步的更新规则。更新规则取决于当前时间步系统的状态,以及一个参数化函数,其参数针对某个训练目标进行优化,该目标取决于特定应用,这是任何神经网络的主要步骤。监督学习的预测目标是每个粒子的平均加速度。

贝叶斯网络

贝叶斯网络是完全适合处理不确定性的图形,以数学上合理的方式编码概率。图 9-10 和图 9-11 是两个贝叶斯网络的示例。

300

图 9-10. 贝叶斯网络

300

图 9-11. 另一个贝叶斯网络

在贝叶斯网络中,我们有:

  1. 节点是我们认为模型应该包含的变量。

  2. 边是有向的,从节点指向节点,或者从更高的神经元指向更低的神经元,意思是:我们知道在观察到父变量的情况下子变量的概率。

  3. 网络图中不允许循环。

  4. 它们严重依赖于贝叶斯规则:如果从 A 到 B 有一个箭头,那么 P(B|A)是正向概率,P(A|B)是逆向概率。可以将其视为 P(证据|假设)或 P(症状|疾病)。我们可以根据贝叶斯规则计算逆向概率:

P ( A | B ) = P(B|A)P(A) P(B) .

  1. 如果没有箭头指向一个变量(如果它没有父节点),那么我们只需要该变量的先验概率,我们可以从数据或专家知识中计算,比如:美国有百分之十三的女性患乳腺癌。

  2. 如果我们在模型中的某个变量或更多证据上获得更多数据,那么我们更新对应于该变量的节点(条件概率),然后沿着网络中的连接传播该信息,更新每个节点的条件概率,有两种不同的方式,取决于信息是从父节点传播到子节点,还是从子节点传播到父节点。每个方向的更新非常简单:遵守贝叶斯规则。

贝叶斯网络代表的是一个紧凑的条件概率表。

贝叶斯网络代表的是一个紧凑的条件概率表。通常,当我们建模一个真实世界的场景时,每个离散变量可以假定某些离散值或类别,每个连续变量可以假定在给定连续范围内的任何值。理论上,我们可以构建一个巨大的条件概率表,该表给出了每个变量在固定其他变量值的情况下假定某个状态的概率。实际上,即使对于一个相对较小的变量数量,这也是不可行且昂贵的,无论是对于存储还是计算。此外,我们没有访问构建表所需的所有信息。贝叶斯网络克服这一障碍的方法是允许变量只与少数相邻变量交互,因此我们只需计算网络图中直接连接到它的变量的概率,无论是向前还是向后。如果网络中任何变量的新证据到达,那么网络的图结构,连同贝叶斯规则,将引导我们以系统化、可解释和透明的方式更新网络中所有变量的概率。以这种方式稀疏化网络是贝叶斯网络成功的一个特征。

总之,贝叶斯网络的图表明了模型变量(或数据特征)的联合概率分布,作为局部条件概率分布的乘积,每个节点一个:

P ( x 1 , x 2 , , x n ) = i=1 n P ( x i | parents of x i )

使用贝叶斯网络进行预测

一旦贝叶斯网络设置并初始化条件概率(并持续使用更多数据进行更新),我们可以通过沿着贝叶斯规则或乘积规则搜索这些条件概率分布表来快速获得结果,具体取决于查询,比如:给定邮件包含的单词、发件人位置、一天中的时间、包含的链接、发件人和收件人之间的互动历史以及垃圾邮件检测变量的其他值,这封电子邮件是垃圾邮件的概率是多少?给定患者的乳腺癌概率是多少,考虑到她的乳腺 X 光检查结果、家族史、症状、血液检测等?这里最好的部分是我们不需要执行大型程序或使用大型计算机集群来获得结果。也就是说,我们的手机和平板电脑的电池将持续更长时间,因为它们不需要花费大量计算能力来编码和解码消息,而是应用贝叶斯网络来使用turbo code前向纠错算法。

贝叶斯网络是信念网络,而不是因果网络

在贝叶斯网络中,尽管从父变量指向子变量的箭头最好是因果关系,但一般来说并不是因果关系。这只是意味着我们可以模拟子变量的概率分布,考虑到其父变量的状态,我们可以使用贝叶斯规则找到逆概率:父变量给定子变量的概率分布。这通常是更困难的方向,因为它不太直观,更难观察。一种思考这个问题的方法是,在知道孩子的父母特征之前,计算孩子特征的概率分布更容易,P(孩子|母亲,父亲),甚至在有孩子之前,而推断出父母特征,P(父亲|孩子)P(母亲|孩子)。这个例子中的贝叶斯网络图 9-12 有三个节点,母亲、父亲和孩子,从母亲指向孩子的边,从父亲指向孩子的另一条边。

300

图 9-12。在这个贝叶斯网络中,孩子变量是一个碰撞器。

母亲和父亲之间没有边,因为他们的特征之间没有关联。知道母亲的特征不会给我们关于父亲的特征提供任何信息,然而,知道母亲的特征和孩子的特征可以让我们稍微了解更多关于父亲的特征,或者分布 P(父亲|母亲,孩子)。这意味着母亲和父亲的特征,最初是独立的,但在知道孩子的特征的情况下是有条件相关的。因此,贝叶斯网络模拟了图结构中变量之间的依赖关系,提供了一个关于这些变量之间关系的地图:它们的条件依赖和独立性。这就是为什么贝叶斯网络也被称为信念网络。

关于贝叶斯网络,请记住以下内容

让我们记住关于贝叶斯网络的以下内容:

  • 贝叶斯网络没有因果方向,并且在回答因果问题或为什么问题方面受到限制,比如:是什么导致了某种疾病的发作?也就是说,我们很快将会了解到,我们可以使用贝叶斯网络进行因果推理,并预测干预的后果。无论是用于因果推理还是其他用途,我们更新贝叶斯网络的方式,或者传播信念的方式,总是一样的。

  • 如果一些变量有缺失数据,贝叶斯网络可以处理,因为它们被设计成有效地从具有关于它们的丰富信息的变量向具有较少信息的变量传播信息。

链、分叉和碰撞器

贝叶斯网络的构建模块(具有三个或更多节点)是三种类型的连接:链、分叉和碰撞器,如图 9-13 所示。

300

图 9-13。贝叶斯网络中的三种连接类型。
  1. :A B C。在这个链中,B 是一个中介者。如果我们知道 B 的值,那么了解 A 不会增加或减少我们对 C 的信念。因此,在我们知道中介者 B 的值的情况下,A 和 C 是有条件独立的。条件独立性使我们和使用贝叶斯网络的机器只需关注相关信息。

  2. 分叉:B A 和 B C,也就是说,B 是 A 和 C 的共同父节点或混杂因素。数据将显示,即使它们之间没有因果关系,A 和 C 在统计上是相关的。我们可以通过对混杂因素 B 进行条件处理来暴露这种虚假相关性。

  3. 碰撞器:A B 和 C B。当我们对中间变量进行条件处理时,碰撞器与链或分叉是不同的。我们在上面父母指向孩子的例子中看到了这一点。如果 A 和 C 最初是独立的,那么对 B 进行条件处理会使它们变得相关!这种意外的、非因果关系的信息传递是贝叶斯网络条件处理的一个特征:对碰撞器进行条件处理会打开其父节点之间的依赖路径。

另一件我们需要小心的事情是:当结果和中介者混淆时。在这种情况下,对中介者进行条件处理与将其保持恒定是不同的。

给定一个数据集,我们如何为涉及的变量建立一个贝叶斯网络?

贝叶斯网络的图结构可以由我们手动决定,也可以通过算法从数据中学习。贝叶斯网络的算法非常成熟,而且有商业化。一旦网络的结构确定,如果有关网络中某个变量的新信息到达,只需按照图表更新每个节点的条件概率,通过网络传播信息,更新对网络中每个变量的信念。贝叶斯网络的发明者朱迪亚·珀尔将这个更新过程比作生物有机组织,比作神经元的生物网络,如果激发一个神经元,整个网络会做出反应,将信息从一个神经元传播到其邻居。

最后,我们可以将神经网络视为贝叶斯网络。

从数据中学习模式

需要注意的是,贝叶斯网络以及学习给定数据特征的联合概率分布的任何其他模型,比如我们在前一章中遇到的生成模型以及早期章节中的确定性模型,只是从数据中检测模式并学习关联,而不是学习这些模式最初是如何产生的。要使 AI 代理真正智能并像人类一样推理,他们必须询问关于他们所看到的和他们所做的事情的“如何”、“为什么”和“如果”等问题,并且必须寻找答案,就像人类在很小的时候那样。事实上,对于人类来说,在他们的发展早期有一个“为什么”的年龄:那就是孩子们让他们的父母因为询问一切事情的“为什么”而发疯的年龄。AI 代理应该有一个“因果模型”。这个概念对于获得通用人工智能非常重要。我们将在下一节和第十一章中再次讨论这个问题。

概率因果建模的图表

自从我们在统计学中迈出第一步以来,我们听到的一直是:“相关不意味着因果关系”。然后我们继续谈论数据、更多数据和数据中的相关性。好吧,我们明白了,但是因果关系呢?它是什么?我们如何量化它?作为人类,我们清楚知道“为什么”是什么意思?我们直观地概念化因果关系,即使是八个月大的婴儿也是如此。我实际上认为我们在“为什么”的世界中更多地依靠自然和直觉水平运作,而不是在关联的世界中。那么,我们期望有一天能像我们一样推理的机器,为什么只在关联和回归水平上运作?这是数学家和哲学家朱迪亚·珀尔在人工智能领域提出的观点,也是他在他出色的著作《为什么之书(2020)》中提出的观点。我从这本书中最喜欢的一句话是:“非因果关系违反了我们的常识”。这个想法是我们需要明确并量化哪些相关性是由因果关系引起的,哪些是由其他因素引起的。

珀尔使用图表(图)构建他的数学因果模型,这些图表类似于贝叶斯网络图,但具有基于“do 演算”的概率推理方案,或者计算概率“给定 do”运算符,而不是计算概率“给定观察”运算符,这在非因果统计模型中非常熟悉。主要观点是:

  • 观察并不等同于行动。在数学符号中,P r o b ( number of bus riders | color coded routes ) 不同于 P r o b ( number of bus riders | do color coded routes )

我们可以从数据中推断第一个问题:查看某个城市的公交路线采用彩色编码时的乘客量。这种概率并不能告诉我们彩色编码路线对乘客数量的影响。第二种概率,带有 do 运算符,是不同的,仅凭数据,没有因果图,我们无法得出答案。区别在于当我们调用 do 运算符时,我们故意改变了公交路线为彩色编码,并且我们想评估这种改变对乘客量的影响。如果在这种故意的行动之后乘客量增加了,并且考虑到我们绘制了正确的图表包括变量及它们之间的关系,那么我们可以断言:使用彩色编码的公交路线导致了乘客量的增加。当我们行动而不是观察时,我们手动阻止了所有可能导致公交路线变为彩色的道路,比如领导层的变化,或者一年中的某个时间,同时可能影响乘客量。如果我们仅仅观察数据,我们无法阻止这些道路。此外,当我们使用 do 运算符时,我们故意和手动地设置了公交路线为彩色编码(而不是编号、等等)。

实际上,公交路线的例子并非虚构。我目前正在与弗吉尼亚州哈里森堡市的公共交通部门合作,旨在增加他们的乘客量,提高他们的效率,并在资源有限且大学不在开学期间市内人口急剧减少的情况下优化他们的运营。2019 年,交通部门故意将他们的路线从编号系统改为彩色编码系统,同时故意将他们的时间表从适应大学课程时间表改为固定时间表。结果如下:他们的乘客量增加了惊人的 18%。可以肯定,我今年夏天正在参与该项目的学生们很快将绘制因果图并编写概率,看起来像:

P ( r i d e r s h i p | do color coded routes , do fixed schedules ) .

一台机器如果擅长发现模式并采取行动,就像蜥蜴观察一只昆虫飞来飞去,学习它的模式,然后捕捉并吃掉它,那么它的智力水平就与一台能够在两个比简单模式检测更高层次上推理的机器有很大不同:

  1. 如果我故意采取这个行动,[在此插入变量]会发生什么?

  2. 如果我不采取这个行动,[变量取某个值]是否仍然会发生? 如果哈里森堡市没有转向彩色编码路线和固定时间表,乘客量是否仍然会增加?如果只有这两个变量中的一个改变而不是两者同时改变呢?

单凭数据无法回答这些问题。事实上,精心构建的因果图帮助我们区分何时可以仅凭数据回答上述问题,以及何时无论我们收集多少数据都无法回答这些问题。直到我们的机器被赋予代表因果推理的图表之前,我们的机器的智力水平与蜥蜴相同。令人惊讶的是,人类可以即时进行所有这些计算,尽管很多时候会得出错误的结论,并且几十年来争论起因和结果。我们仍然需要数学和图表来解决问题。事实上,图表指导我们,告诉我们必须寻找和收集哪些数据,对哪些变量进行条件设置,以及对哪些变量应用 do 运算符。这种有意识的设计和推理与积累大量数据或毫无目的地对各种变量进行条件设置的文化非常不同。

现在我们知道这一点,我们可以绘制图表和设计模型,帮助我们解决各种因果问题:我是因为医生的治疗而康复,还是因为时间过去了,生活平静下来了?我们仍然需要收集和整理数据,但这个过程现在将是有意识和有指导性的。一个具有这些推理方式的机器:一个因果图模型,以及与因果图模型配套的(非常简短的)有效操作列表,将能够回答所有三个层面的因果问题:

  • 变量 A 和 B 是否相关?乘客量和公交路线的标记是否相关?

  • 如果我将变量 A 设置为特定值,变量 B 会如何变化?如果我故意设置颜色编码的路线,乘客量会增加吗?

  • 如果变量 A 没有取某个值,变量 B 会发生变化吗?如果我没有改变颜色编码的公交路线,乘客量是否仍然会增加?

我们仍然需要学习如何处理涉及do运算符的概率表达式。我们已经确定看到和做不是一回事:看到是在数据中,而是有意地进行实验来评估某个变量对另一个变量的因果效应。这比仅仅计算数据中看到的比例更昂贵。Pearl 建立了三条关于操纵涉及do运算符的概率表达式的规则。这些规则帮助我们从涉及的表达式转移到仅涉及看到的表达式,从中我们可以从数据中得到答案。这些规则很有价值,因为它们使我们能够通过看到来量化因果效应,绕过。我们将在第十一章中详细介绍这些内容。

图论简史

我们不能在没有对图论和该领域当前状态进行良好概述的情况下结束本章。这个领域建立在如此简单的基础上,但它是美丽的、刺激的,并且具有广泛的应用,这使我重新评估了我的整个数学职业道路并试图迅速转变。

图论的词汇包括:图、节点、边、度、连通性、树、生成树、回路、基本回路、图的向量空间、秩和零度(类似于线性代数)、对偶、路径、行走、欧拉线、哈密顿回路、切割、网络流、遍历、着色、枚举、链接和脆弱性。

图论发展的时间线是启发性的,它的根源在于交通系统、地图和地理、电路和化学中的分子结构:

  • 1736 年,欧拉发表了图论的第一篇论文,解决了Königsberg 桥问题。然后在这个领域里一百多年没有发生任何事情。

  • 1847 年,基希霍夫在研究电网络时发展了树的理论。

  • 不久之后,在 1850 年代,凯利在尝试列举饱和烃异构体时发现了树。亚瑟·凯利(1821-1895)是图论的奠基人之一。无论何时涉及图数据,我们都会看到他的名字。最近,CayleyNet 使用称为凯利多项式的复有理函数,用于图数据的深度学习的谱域方法。

  • 在同一时间段内,1850 年,威廉·汉密尔顿爵士发明了成为汉密尔顿回路基础的游戏,并在都柏林出售:我们有一个木制的正多面体,有 12 个面和 20 个角,每个面都是一个正五边形,每个角有三条边相交。20 个角上有 20 个城市的名字,如伦敦、罗马、纽约、孟买、德里、巴黎等。我们必须找到一条路径沿着多面体的边,确保每个城市只经过一次(汉密尔顿回路)。这个特定问题的解决方案很容易,但到目前为止,我们还没有任意图中存在这样一条路径的必要和充分条件。

  • 在同一时间段内,莫比乌斯(1840 年代)在一次讲座中,德摩根(1850 年代)的一封信,以及凯利在皇家地理学会第一卷会议记录(1879 年)中的一篇文章中,图论中最著名的问题(在 1970 年解决),即四色定理,开始引起人们的关注。自那时以来,这一问题一直困扰着许多数学家,导致了许多有趣的发现。四色定理指出,四种颜色足以为平面上的任何地图着色,使具有共同边界的国家使用不同的颜色。有趣的是,如果我们通过离开平面,例如到球面的表面,为自己提供更多的空间,那么我们确实可以找到这个猜想的解决方案。

  • 不幸的是,接下来的 70 年左右没有发生任何事情,直到 20 世纪 20 年代,König 写了第一本关于这个主题的书,并于 1936 年出版。

  • 随着计算机的出现和它们越来越能够探索组合性质的大问题,情况发生了变化。这激发了纯粹和应用图论的激烈活动。现在有成千上万篇论文和数十本书籍涉及这一主题,重要的贡献者包括克劳德·贝尔热、奥斯坦·奥尔、保罗·埃尔德什、威廉·图特和弗兰克·哈拉里。

图论的主要考虑因素

让我们组织图论的主要主题,力求以鸟瞰的方式进行总览,而不深入细节:

生成树和最短生成树

这些都非常重要,并且在网络路由协议、最短路径算法和搜索算法中使用。图的生成树是一个子图,是一棵树(任意两个顶点可以使用唯一路径连接),包括图的所有顶点。也就是说,生成树将图的顶点保持在一起。同一个图可以有许多生成树。

割集和割点

我们可以通过切割足够多的边或者有时移除足够多的顶点,将任何连通图分开,使其断开连接。如果我们能够在给定的图中找到这些切割集合,比如在通信网络、电网、交通网络或其他网络中,我们可以切断其断开连接部分之间的所有通信方式。通常我们对最小或最小切割集感兴趣,这将通过移除最少数量的边或顶点来完成断开图的任务。这有助于我们识别网络中的最薄弱环节。与生成树相反,切割集将顶点分开,而不是将它们全部保持在一起。因此,我们可以合理地期望生成树和切割集之间存在密切关系。此外,如果图表示具有某种来源(如流体、交通、电力或信息)和汇点的网络,并且每条边只允许通过一定数量的流量,那么源到汇的最大流量与切割图的边之间存在密切关系,切割将源与汇断开,切割边的总容量最小。这就是最大流最小切割定理,它表明在流网络中,从源到汇的最大流量等于最小切割中边的总权重。在数学中,当最大化问题(最大流)以一种非平凡的方式等同于最小化问题(最小切割)时(例如不仅仅是改变目标函数的符号),这表明存在对偶性。事实上,图的最大流最小切割定理是线性优化对偶定理的一个特例。

平面性

图的几何表示是平面的还是三维的?也就是说,我们能否在同一平面上绘制图的顶点并连接其边,而不让边相互交叉?这对于技术应用如复杂系统的自动布线、印刷电路和大规模集成电路非常有趣。对于非平面图,我们对这些图的厚度和边之间的交叉数量等属性感兴趣。对于平面图的等价条件是存在对偶图,在图的向量空间的背景下,图与其对偶之间的关系变得清晰。线性代数和图论在这里相结合,代数和组合表示回答了关于几何图形的问题,反之亦然。对于平面性问题,我们只需要考虑所有顶点的度数均为三或更高的简单、不可分离图。此外,任何边数大于其顶点数减去六的三倍的图都是非平面的。在这个研究领域中有许多未解决的问题。

图作为向量空间

重要的是要理解图既作为几何对象又作为代数对象,以及两种表示之间的对应关系。这对于图来说是成立的。每个图对应于整数模 2 的一个e维向量空间,其中e是图的边数。因此,如果图只有三条边e d g e 1 , e d g e 2 , e d g e 3,那么它对应于包含向量的三维向量空间( 0 , 0 , 0 ) , ( 1 , 0 , 0 ) , ( 0 , 1 , 0 ) , ( 1 , 1 , 0 ) , ( 1 , 0 , 1 ) , ( 0 , 1 , 1 ) , ( 0 , 0 , 1 ) , ( 1 , 1 , 1 )。这里( 0 , 0 , 0 )对应于不包含这三条边的空子图,( 1 , 1 , 1 )对应于包含所有三条边的完整图,( 0 , 1 , 1 )对应于只包含e d g e 2的子图,以及e d g e 3,等等。

整数模 2 的领域

整数模 2 的领域只包含两个元素 0 和 1,加法和×运算都是模 2 进行的。实际上,这等同于布尔逻辑中的异或(异或运算符)和操作。向量空间必须在一个领域上定义,并且必须对该领域的标量的向量乘法封闭。在这种情况下,标量只有 0 和 1,乘法是模 2 进行的。因此,图是有限域上向量空间的良好示例,这与通常的实数或复数不同。图的向量空间的维数是图的边数e,这个向量空间中的向量总数是 2^(e)。我们可以看到图论如何立即适用于开关电路(带有开关和关闭开关)、数字系统和信号,因为它们都在整数模 2 的领域中运行。

通过这种简单的对应关系,并倚靠整个线性代数领域,自然而然地尝试理解切割集、回路、基本回路、生成树以及其他重要的图子结构,以及它们之间的关系,这些都是在向量子空间、基、交点、正交性以及这些子空间的维度的背景下进行的。

可实现性

我们已经使用邻接矩阵和关联矩阵作为完全描述图的矩阵表示。其他矩阵描述了图的重要特征,比如回路矩阵、割集矩阵和路径矩阵。然后当然相关研究必须涉及这些矩阵之间以及它们之间的相互关系和交互。

另一个非常重要的主题是可实现性:给定矩阵必须满足什么条件,以便它是某个图的回路矩阵?

着色和匹配

在许多情况下,我们有兴趣为图的节点、边缘甚至平面图中的区域分配标签或颜色。著名的图着色问题是指我们要为每个节点分配的颜色是这样的,即相邻的顶点不会得到相同的颜色,而且我们希望使用最少的颜色来实现这一点。着色图所需的最少颜色数称为其色数。与着色相关的主题包括节点分区、覆盖和色多项式。

匹配是一组边,使得任意两条边都不相邻。最大匹配是一组边的最大集合,其中任意两条边都不相邻。在一般图和二部图中的匹配有许多应用,比如匹配最小的一组课程以满足毕业要求,或者匹配工作分配给员工的偏好(这最终成为一个最大流最小割问题)。我们可以使用基于随机游走的算法来在大型二部图上找到完美匹配。

枚举

1857 年,Cayley 对饱和烃异构体C n H 2n+2的数量进行了计数,这使他开始计算具有 n 个节点的不同树的数量,并为他在图论方面的贡献。有许多类型的图需要枚举,许多都有自己的研究论文。例如,枚举所有根树、简单图、简单有向图以及具有特定属性的其他图。枚举是图论中的一个重要领域。一个重要的枚举技术是 Pólya 计数定理,其中需要找到一个适当的置换群,然后获得其循环指数,这是非平凡的。

图的算法和计算方面

对于任何从事图模型工作的人来说,算法和计算机实现具有巨大的价值。存在用于传统图论任务的算法,例如:

  • 找出图是否可分。

  • 找出图是否连通。

  • 找出图的组件。

  • 寻找图的生成树。

  • 找到一组基本回路。

  • 找到割集。

  • 从给定节点到另一个节点找到最短路径。

  • 测试图是否是平面的。

  • 构建具有特定属性的图。

如今,图神经网络已经有了自己的开源软件包。对于任何算法来说,要想实际应用,它必须是高效的:其运行时间不能随着图的节点数量的增加而阶乘甚至指数增长。它应该是多项式时间,与n k成正比,其中k最好是一个较低的数字。

对于希望进入图模型领域的任何人来说,熟悉图的理论和计算方面是非常有用的。

总结和展望

这一章节总结了图形建模的各个方面,重点放在示例、应用和直觉上。对于希望深入了解的读者,有许多参考资料。主要信息是不要在没有目标或对大局、领域当前状态以及与人工智能的关系的理解的情况下迷失在细节中(而这些细节非常复杂)。

我们还介绍了图上的随机游走、贝叶斯网络和概率因果模型,这进一步引导我们的大脑朝着概率思维的方向发展,这也是第十一章的主题。在进入关于概率的数学章节之前,我一直打算讨论人工智能中概率的各种用途。

我们结束这一章节时推荐阅读这篇文章:《关系归纳偏差、深度学习和图网络》,该文章提出了深度学习社区应采用图网络的理由:我们提出了一种具有强关系归纳偏差的人工智能工具包的新构建模块——图网络,它推广和扩展了各种在图上操作的神经网络方法,并提供了一个直观的界面来操作结构化知识和产生结构化行为。我们讨论了图网络如何支持关系推理和组合泛化,为更复杂、可解释和灵活的推理模式奠定了基础。

第十章:运筹学

许多科学家之所以伟大,不是因为他们解决问题的技能,而是因为他们选择问题的智慧

E.布赖特·威尔逊(1908-1992),美国化学家

在本章中,我们探讨了将人工智能整合到运筹学领域中,利用两者的优势进行更高效和更明智的决策。尽管这个介绍性陈述听起来像是一则广告,但这正是运筹学的全部意义。机器学习的进步只能帮助推动该领域的发展。

运筹学是应用数学中最具吸引力和刺激性的领域之一。它是在最节约时间和成本的方式中平衡不同需求和可用资源的科学。运筹学中的许多问题都归结为寻找最佳点,即一切运行顺畅和高效的圣杯:没有备份,没有中断及时服务,没有浪费,平衡成本,对所有参与者都有良好的收入。许多应用永远找不到圣杯,但许多运筹学方法使我们能够至少接近,至少对于复杂现实的简化模型来说是如此。受限的数学优化渗透到每个行业、每个网络和我们生活的方方面面。做得正确,我们享受其好处;做得不当,我们承受其影响:全球和地方经济仍在经历 covid19、乌克兰战争以及对供应链的最终中断的后果。

在探讨机器学习如何开始进入运筹学之前,我们强调了一些有兴趣的人必须内化的想法,如果他们想参与这个领域。由于我们只有一个章节来探讨这个美妙的主题,我们必须将其提炼到其本质:

  • 没有免费午餐定理:这使我们将注意力转向设计和分析最适合特定情况的方法,而不是寻找最通用和最广泛适用的方法,就像许多数学家天生倾向于做的那样。它基本上要求所有这些数学家基本上放松,并对特定类型问题的专业解决方案感到满意。

  • 问题的复杂性分析和算法的渐近分析渐近分析告诉我们,即使算法非常创新和高明,如果其计算需求随问题规模的增大而急剧增加,那么它就是无用的。运筹学解决方案需要适应具有许多变量的大型场景。另一方面,复杂性分析则处理问题本身的难度级别,而不是为解决它们而设计的算法。组合问题,即O ( n ! ),是极其糟糕的:n !对于足够大的 n 来说比k n要大,但指数k n的复杂度已经非常糟糕!

  • 运筹学中的重要主题和应用:这些内容可以在任何一本好的运筹学书籍中找到。我们总是需要随身携带一本。从特定应用和业务目标到数学公式的转化是必须强调的技能,以便在这个领域取得成功。

  • 各种类型的优化方法和算法:这是运筹学解决方案和软件包的工作马。

  • 软件包:这些软件包的广泛可用性,以及有限的页面数量,是我不详细讨论本章中任何算法或计算内容的借口。

用六个词总结运筹学:数学建模、优化、算法、软件和决策

阅读本章时,有助于将概念置于我们日常生活中与之互动的公司如何管理其运营的背景中。例如考虑亚马逊的物流。亚马逊是世界上最大的电子商务公司。2022 年,其在美国电子商务市场的份额为 45%,每天销售和交付数百万件商品,每秒约 5000 美元的销售额。他们是如何成功做到这一点的?他们如何管理他们的库存、仓库、运输和极其高效的交付系统?他们如何制定子问题,以及如何将它们整合成一个成功的大型运营?交通物流也是如此,比如 Uber:每天,Uber 在全球提供多达 1500 万次共享乘车服务,将可用司机与附近乘客匹配,安排和计时接送和送达,定价行程,预测司机收入、供需模式,并进行无数分析。

允许这些庞大系统相对顺利运行的复杂且高度相互关联的优化问题是运筹学的典型特征。此外,许多涉及的问题都是 NP 难题(在计算复杂性中,这意味着它们具有非确定性多项式时间级别的难度-用英语来说,计算成本非常高)。再加上它们的随机性质,我们有一些有趣的数学问题需要解决。

总的来说,运筹学的数学方法和算法每年为世界节省数十亿美元。对美国最大的 500 家公司进行的一项调查显示,其中 85%使用线性规划(这是线性优化的另一个名称,是运筹学的一个重要部分,也是我们在本章中花费一些时间讨论单纯形法和对偶性的原因)。现在结合 AI 行业的工具,是进入这个领域的绝佳时机。回报将在多个层面上体现:智力、财务和对人类共同利益的有意义贡献。因此,本章中选择的少数主题绝不应减弱该领域中其他同等重要主题的重要性。

深入研究运筹学(当然,在阅读本章之后),最好的方法是向最优秀的人学习:

没有免费午餐

优化的无免费午餐定理表明,没有一种特定的优化算法适用于每个问题。寻找目标函数(成本函数、损失函数、效用函数、似然函数)的优化器的所有算法在所有可能的目标函数上平均时具有类似的性能。因此,如果某个算法在某类目标函数上表现优于另一个算法,则在其他目标函数上,另一个算法表现更好。没有一种适用于所有问题类型的优越算法。因此,选择算法应该依赖于问题(或领域)。根据我们的应用领域,有大量关于从业者使用的算法、他们选择这些算法的理由、与其他算法在高维和合理维度问题上的比较以及他们不断努力实现更好性能的信息,这意味着两件事:更快(计算成本更低)和更准确。

复杂性分析和 O()符号

很多时候,在各种约束条件下有效地分配有限资源的问题归结为为离散优化设计高效算法。线性规划、整数规划、组合优化以及图结构(网络)上的优化,都是相互交织的(有时这些只是同一事物的两个不同名称),并且都涉及一个目标:从离散且有限的有效选项集中找到一个优化器,即可行集。如果初始的可行集不是离散的,有时我们可以将其减少为一个离散集,以便利用为该领域开发的丰富工具。这里的主要问题是:穷举��索通常是不可行的。这意味着如果我们列出可行集中的所有可用选项,并在每个选项上评估目标函数,我们将花费大量时间来找到给出最佳答案的点。没有人说有限的可行意味着它不是巨大的。我们需要专门的算法来有效地排除搜索空间的大片区域。一些算法可以精确定位某些问题的确切解决方案,而其他算法只能找到近似解决方案,我们别无选择,只能接受。

让我们现在提前做出以下区分,因为这会让很多人感到困惑:

  • 复杂性分析是为了我们想要解决的问题(路由、旅行推销员、背包问题等)。问题的固有复杂性与用于解决它的算法无关。事实上,有时它告诉我们对于这种类型的问题,我们不能指望有更有效的算法,或者在其他情况下我们是否能做得更好。无论如何,对于问题的复杂性分析本身就是一个丰富的科学领域,运筹学领域提供了大量复杂问题供我们思考。这就是以下术语出现的地方:多项式问题、非确定性多项式问题、非确定性多项式完全问题、非确定性多项式时间困难问题、补充非确定性多项式问题以及补充非确定性多项式完全问题。上述术语非常令人困惑,有人需要认真重新考虑它们的命名。我们不会在这里定义每一个(主要是因为理论尚未确定这些问题类别之间的界限),但我们会做出以下划分:可以在多项式时间内或更短时间内解决的问题,以及我们无法在多项式时间内找到精确解决方案的问题,无论使用什么算法,这种情况下,我们必须接受近似算法(例如旅行推销员问题)。请注意,有时多项式时间问题可能并不是一件好事,因为例如 O ( n 2 000 ) 终究不是那么快。

  • 渐近分析是为了我们设计的解决这些问题的算法。这是我们试图估计算法所需操作次数并将其与问题规模相对比的地方。我们通常使用大 O 符号,意思是:

大 O()符号

当存在某个常数c,对于所有n n 0,函数*g(n)O(f(n))*时,g ( n ) c f ( n )

例如,2n+1O(n)5 n 3 - 7 n 2 + 1O ( n 3 )n 2 2 n - 55 n 1 00O ( n 2 2 n )15 n l o g ( n ) - 5 nO ( n l o g ( n ) )

不要忘记常数渐近情况O(1),其中算法的操作计数与问题的大小无关(这是一个很棒的事情,因为这意味着它可以轻松地扩展到巨大的问题而不必担心)。

对于一些算法,我们可以计算出确切的操作次数,例如,为了计算长度为n的两个向量的标量积(点积),一个简单的算法需要精确地进行 2n-1 次乘法和加法,这使得它是O(n)。对于乘法两个大小为n × n的矩阵,一个简单的算法计算第一个矩阵的每一行与第二个矩阵的每一列的点积需要精确地( 2 n - 1 ) n 2次操作,因此这将是O ( n 3 )。矩阵求逆通常也是O ( n 3 )

对于对算法渐近分析感兴趣的人来说,很快就会意识到它比操作计数稍微复杂一些,因为有时我们必须对输入的大小进行估计或平均值(n代表什么?),如何计算算法中的操作(按代码的每一行?),我们不能忽视在大数字上进行计算比在小数字上进行操作更耗时和内存。最后,我们更喜欢运行时间为多项式时间或更少的算法,而不是指数时间或更多的算法。让我们用一个非常简单的例子来演示。

多项式算法O ( n k )与指数算法O ( k n )

假设我们正在使用一台每秒能执行10 7次操作(1000 万)的机器。让我们在两种不同的算法上运行它 1000 秒,大约相当于 16 分钟,一个是问题规模指数级增长的算法,比如O ( 2 n ),另一个是多项式O ( n 3 )。在这种情况下,问题的规模是n,指的是输入的维度,例如图的节点数、矩阵的条目数、数据集的特征数或实例数。每种算法在这台机器上运行 16 分钟最大能处理多大规模的问题?

对于指数时间算法,它所需的操作次数最多(最坏情况)为c 2 n = 10 7 1000,其中c*最好是一个较小的值。因此,它可以在每秒 1000 万次操作的情况下运行 1000 秒的问题规模为n = 10 log 2 ( 10 ) - log 2 ( c ) 33

现在将这与多项式时间算法进行对比,其最坏情况是c n 3 = 10 7 * 1000,因此n = 1 3 c 3 10 10 2100。这几乎比指数时间算法大两个数量级。

结论是,在相同的硬件和时间条件下,多项式时间算法O ( n k )可以解决比指数时间算法O ( k n )更大的问题。组合时间算法O ( n ! )是无望的。此外,我们总是希望k越小越好。

一个习惯于在精确领域而不是近似渐近领域操作的人可能会对上面的讨论感到困扰,因为有时,一些高阶算法对于较小规模的问题比低阶算法更好。例如:假设一个O(n)算法的精确操作次数为 20n-99,而一个O ( n 2 )算法的操作次数为n 2 + 1,那么从渐近的角度来看(或者对于足够大的n),O(n)算法比O ( n 2 )算法更好,但如果n小于 10,则情况并非如此,因为在这种情况下,n 2 + 1 < 20 n - 99。这对于足够小的问题是可以接受的,但对于更大的问题则不行。

我们很快将在本章中提到的两种优化方法是单纯形法和内点法,用于线性优化(目标函数和约束均为线性的优化)。内点法是多项式时间算法,而单纯形法是指数时间,因此你可能会期望每个人都使用更便宜的内点法并放弃单纯形法,但事实并非如此。单纯形法(以及对偶单纯形法)仍然广泛用于线性优化,而不是内点法,因为指数时间是最坏情况,而大多数应用并非最坏情况。此外,算法之间通常存在计算量每次迭代、所需迭代次数、更好起始点的影响、算法是否收敛或是否需要在最后阶段额外帮助、这种额外帮助需要多少计算以及算法是否能利用并行处理等方面的权衡。因此,用于线性优化的计算机软件包具有单纯形法和内点法的高效实现(以及许多其他算法)。最终,我们选择最适合我们用例的方法。

优化:运筹学的核心

我们又回到了优化。在机器学习中,优化是关于最小化模型的损失函数,学习确定性函数或最大化学习概率分布的模型的似然函数。我们不希望得到完全匹配数据的解决方案,因为这样无法很好地泛化到未见数据。因此,正则化方法、提前停止等。在机器学习中,我们利用可用数据来学习模型:数据的来源(数据生成规则或过程)的确定性函数或概率分布,然后我们使用这个学习到的函数或分布进行推断。优化只是其中的一步:最小化损失函数,有���没有正则化项。出现在机器学习中的损失函数通常是可微的和非线性的,优化是无约束的。我们可以添加约束来引导过程进入某个期望的领域,具体取决于应用。

优化方法可以包括计算目标函数的导数 f ( x ) ,例如机器学习中喜欢的梯度下降(随机梯度下降、ADAM 等),也可以不包括。有些优化算法是无导数的:当目标函数不可微(如具有角点的函数)或目标函数的公式甚至不可用时,这些方法非常有用。无导数优化方法的示例包括贝叶斯搜索、布谷鸟搜索和遗传算法。

优化,特别是线性优化,自二战以来一直是运筹研究的核心,当时为了协助军事后勤和作战而开发了线性优化方法,如单纯形法。目标始终是在给定一定约束条件(预算、截止日期、容量等)的情况下,最小化目标函数(成本、距离、时间等):

m i n constraints f ( x )

学习运筹优化,一个典型的课程通常会花费大量时间在线性优化、整数优化和网络优化上,因为许多现实生活中的物流和资源分配问题完全符合这些表述。要成为成功的运筹研究者,我们需要学习:

  • 线性优化,其中目标函数和约束条件均为线性:在这里,我们学习了单纯形法、对偶性、拉格朗日松弛和灵敏度分析。在线性问题中,我们的世界边界是平坦的,由线、平面和超平面构成。这个(超)多边形几何,或多面体,通常有角点作为优化器的候选者,因此我们设计系统化的方法来筛选这些点并测试它们是否最优(这就是单纯形法和对偶单纯形法所做的)。

  • 内点法:用于大规模线性优化问题,可能超出单纯形法的范围。简而言之,单纯形法沿着可行搜索空间的边界(多面体的边缘)前进,检查到达的每个角落是否最优,然后移动到边界上的另一个角落。另一方面,内点法穿过可行搜索空间的内部,从内部到达最优角落,而不是从边界到达。

  • 整数规划:优化中,优化向量的条目必须全部为整数。有时它们只能是零或一(将卡车送往俄亥俄州的仓库或不送)。背包问题是一个非常简单的原型示例。在这里,我们学习了用于大整数规划问题的分支定界方法。

  • 网络优化:我们可以将许多网络问题重新表述为线性优化问题,其中单纯形法及其专门版本可以工作,但更好的方法是利用网络结构,并从图论中获取有用的结果,例如最大流最小割定理,以获得更高效的算法。许多网络问题归结为以下之一的优化:网络上的最短路径(从一个节点到另一个节点的最小距离或最小成本路径)、网络的最小生成树(这对于优化网络的设计非常有用)、最大流(从起点到终点或从源到汇的流)、最小成本流;多商品流;或旅行推销员问题:找到通过网络所有节点仅一次的最小成本(或距离或权重)循环路线(哈密顿回路)。

  • 非线性优化:目标函数和/或约束是非线性的:本书中一个经常出现的例子是为机器学习模型最小化非线性损失函数。这些函数总是非线性的,我们通常使用梯度下降类型的算法。对于较小的问题,我们可以使用牛顿类型的算法(二阶导数)。在运筹学中,目标函数和/或约束中的非线性可能出现,因为从一个地点运输货物到另一个地点的成本可能不是固定的(例如取决于距离或数量),或者网络中的流量可能包括损失或增益。我们了解很多的一种特殊类型的非线性优化是带有线性约束的二次优化。这在应用中出现,比如电路网络方程和弹性理论中,我们考虑结构中的位移、应力、应变和力的平衡。想想找到二次函数的最小值有多容易,其中 s 是一个正常数。这种简便性很好地转化到更高维度,其中我们的目标函数看起来像 f ( x ) = x t S x 其中 S 是一个正半定矩阵,在高维度中扮演着与一维中正常数相同的角色。在这里,我们甚至有对偶理论可以利用,类似于线性优化的情况。在优化中,当我们失去线性性时,我们希望我们的函数是二次的,我们的约束是线性的。当我们失去这一点时,我们希望我们的函数和/或可行集是凸的。当我们失去凸性时,我们就只能靠自己了,希望我们的方法不会陷入高维度景观的局部最小值,并以某种方式找到最优解。

  • 动态规划和马尔可夫决策过程:动态规划涉及到具有多个阶段的项目,每个阶段都需要做出决策,每个决策都会产生一些即时成本。每个阶段的决策与当前状态有关,以及一个策略来过渡到下一个状态(通过最小化确定性函数或概率选择下一个状态)。动态规划的核心是设计高效的方法,通常是递归方法,以找到一系列相关决策的最佳顺序以实现某个目标。这个想法是避免为决策过程的每个阶段列出所有选项,然后选择最佳的决策组合。对于具有许多决策阶段且每个阶段具有许多状态的问题,这种详尽搜索是非常昂贵的。现在,如果从一个阶段到另一个阶段的过渡策略是概率性的而不是确定性的,并且如果决策过程的阶段继续无限地重复,也就是说,如果项目具有无限数量的阶段,那么我们手头就有一个马尔可夫决策过程(或马尔可夫链)。这是一个以概率方式随时间演变的过程。马尔可夫决策过程的一个非常特殊的属性是,涉及到过程如何在未来演变的概率与过去事件无关,仅取决于系统的当前状态。离散时间和连续时间马尔可夫链模拟重要系统,例如排队系统,动态交通灯控制以最小化汽车等待时间,以及灵活的呼叫中心人员配备。重要的数学对象是过渡矩阵,人们解出稳态概率。他们最终不得不计算过渡矩阵的特征空间。

  • 随机算法:具有��率性过渡策略和马尔可夫链的动态规划都是随机算法的例子。随机梯度下降和图上的随机游走也是。任何涉及随机元素的算法都是随机的。数学转向概率、期望、稳态状态、收敛等语言。另一个出现随机算法和过程分析的例子是排队论,例如医院急诊室或船舶维修场的队列。这建立在顾客到达时间和服务设施的服务时间的概率分布之上。

  • 元启发式:对于许多优化问题,找到最优解可能是不切实际的,因此人们(仍然需要做出决策)求助于启发式方法,这些方法找到一个答案(我不会称之为解决方案),这个答案不一定是最优的,但对于手头的问题足够好。元启发式是提供策略指导和通用框架的一般解决方法,用于开发适合某些问题族的启发式方法。我们无法保证从启发式方法得到的答案的最优性,但启发式方法加速了找到令人满意的解决方案的过程,其中最优解太昂贵或完全无法计算。还有可满足性的话题:由于运筹学中的问题几乎总是受限的,自然的问题是:约束是否可满足?意味着可行集是否非空?一些运筹学问题被重新制定为可满足性问题。

在现实世界的问题中,运筹学部门的工作的一大部分是以一种适合上述优化框架之一的方式制定他们的具体用例和目标。在这里,重要的是要认识到特殊结构(例如涉及矩阵的稀疏性)或者我们可以利用更高效算法的子结构。这对于复杂和大规模系统至关重要。

思考优化

当我们在数学中遇到一个优化问题时,

min x somefeasibleset f ( x ) ,

在可行集由向量x 必须满足的一些约束定义的情况下(或者它可能完全没有约束),我们通常会停下来进行头脑风暴:

  • f ( x ) 是线性的吗?

  • f ( x )是凸的吗?下界有界吗?

  • 最小值是有限的,还是 -

  • 可行集非空吗?意味着是否有x 实际满足约束?

  • 可行集是凸的吗?

  • 是否存在最小化器?

  • 最小化器是唯一的,还是还有其他的?

  • 我们如何找到最小化器?

  • 最小值是多少?

  • 如果我们的约束或目标函数发生变化,最小化器和最小值会发生多大变化?

根据手头问题的类型,我们可能能够独立回答上述问题,有时候我们只能回答其中一些而不能回答其他问题。这没关系,因为有关优化器和最优值的任何信息都是有价值的。

让我们探讨常见类型的优化问题:

优化-有限维-无约束

这类似于我们在微积分课程中进行的优化,以及我们在训练机器学习模型时进行的优化,即最小化损失函数。目标函数f ( x ) 是可微的:

min x d f ( x ) .

在无约束和可微的优化中,最小化器x 满足 f ( x ) = 0。此外,在x 处,Hessian(二阶导数矩阵)是半正定的。在讨论机器学习的优化时,我们选择了随机梯度下降及其变体来解决非常高维的问题。对于较小的问题,牛顿类型(使用二阶导数而不仅仅是一阶导数)的方法也有效。对于很少的问题,比如线性回归的均方误差损失函数,我们可以得到解析解。通常可以得到解析解的示例通常是精心构造的(例如我们微积分书中的所有示例),并且维度非常低。

优化-有限维-约束-拉格朗日乘数

让我们考虑只有一个约束g ( x ) = b的情况。这相当好地解释了我们需要什么。最小化问题看起来像:

min g(x )=bx d f ( x ) .

如果f ( x )g ( x )是从 d 的可微函数,我们可以引入拉格朗日乘子(一种来自 1797 年的方法)将我们的问题转化为一个无约束问题,但在更高的维度(对应于我们引入到优化问题中的新拉格朗日乘子)。没有免费的午餐。在这种情况下,我们将约束的倍数添加到目标函数中,然后最小化,这意味着寻找梯度为零的点。无约束问题的新目标函数称为拉格朗日函数,它是决策向量x 和我们乘以约束的新变量λ的函数,称为拉格朗日乘子

( x ; λ ) = f ( x ) + λ ( b - g ( x ) ) .

如果我们有多于一个约束条件,比如五个约束条件,那么我们为每个约束引入一个拉格朗日乘子,最终在我们的优化问题中添加五个额外的维度,以将其从受限制的状态移动到无约束状态。

无约束问题的优化器( x , λ )必须满足: ( x ; λ ) = 0。我们寻找它的方式与我们处理一般无约束问题的方式相同(参见前面的情况)。从( x , λ )中的x 是我们最初寻找的受限制问题的解。这意味着它是由约束g ( x ) = b定义的超曲面上的点,其中f的值最小。

如果问题具有我们可以利用的特殊结构,比如f是二次的,约束g是线性的,或者fg都是线性的,那么我们有更方便的方法来进行这种受限优化,无论我们决定使用拉格朗日乘子(引入对偶)还是不使用拉格朗日乘子。幸运的是,具有简单结构的优化问题已经被广泛研究,不仅因为它们使数学和计算更容易,而且因为它们在科学和现实生活应用中经常出现,这证实了我的理论,即自然比数学家认为的要简单。我们将在对偶部分重新讨论受限问题的拉格朗日乘子,在那里我们专注于完全线性问题或具有线性约束的二次问题。

我们应该永久地记住的好事是,拉格朗日乘子λ不是一种毫无价值的辅助标量,它帮助我们将一个受限问题转变为一个无约束问题。它具有非常有用的含义,对于灵敏度分析、金融和运营研究应用以及对偶理论都非常有帮助(它们彼此相关)。从数学上讲,通过观察拉格朗日函数的公式,λ是拉格朗日函数作为b的函数的变化率,如果我们被允许改变b(约束的值;在应用中,我们关心推动或放松约束的影响)。也就是说:

((x ;λ,b)) b = f(x )+λ(b-g(x )) b = f(x ) b + λ(b-g(x )) b = 0 + λ = λ .

此外,我们可以将对应于最优化器的最优值λ解释为b对目标函数 f 的最优可达值的边际效应。因此,如果λ = 2.1,则将b增加一单位(将约束推动一单位)将使f的最优值增加 2.1 单位。这对金融和运营研究中的应用非常有价值。让我们看看为什么会这样。我们想要证明:

df(x (b)) db = λ .

请注意,在优化器x ( b )处发生两件事,当我们将拉格朗日函数的梯度设为零时,我们得到: f ( x ( b ) ) = λ g ( x ( b ) ),和g ( x * ( b ) ) = b。利用这些信息和导数的链式法则(回到您的微积分书中,掌握链式法则,我们经常使用它),我们现在有:

df(x (b)) db = f ( x ( b ) ) . dx (b) db = λ g ( x ( b ) ) dx (b) db = λ dg(x (b)) db = λ db db = λ × 1 = λ * .

换句话说,拉格朗日乘子λ 是最优成本(目标函数的值)由于相应约束的放松而发生变化的速率。在经济学中,λ 被称为与约束相关的边际成本,或者影子价格。当我们在本章后面讨论对偶性时,我们使用字母p表示对偶问题的决策变量,出于价格的原因。

优化-无限维度-变分法

变分法领域是一个优化领域,但我们不是在有限维空间中寻找优化点,而是在无限维空间中寻找优化函数

在有限维度中,优化点(或点)满足一个基于将目标函数的梯度设为零的方程。

在无限维度中,优化函数满足一个基于将目标泛函的梯度(泛函是一个函数,其输入是一个函数,输出是一个实数,例如在区间[0,1]上的连续函数的积分是一个泛函)设为零的微分方程,也就是说,如果我们设法定义一个泛函的梯度。要找到优化器,我们要么解微分方程,要么遵循一些优化方案。数学中的一切都紧密地联系在一起。

最小化的函数满足一个称为欧拉-拉格朗日方程的微分方程。如果您对偏微分方程不感兴趣,可以跳过本节的其余部分,因为这对运筹学并不重要。

示例 1

如果您对偏微分方程有一些了解,这是将谐函数视为能量泛函的最小化器的好方法:狄利克雷能量的最小化器E ( u ( x ) ) = D 1 2 |u(x)| 2 d x,其中*u(x)属于适当的函数空间,且u(x)=h(x)*在边界 D上满足欧拉-拉格朗日方程Δ u = 0,*u=h(x)*在 D上(因此最小化器必须是满足给定边界条件的谐函数)。

此外,热方程u t = Δ u,其中u(x,t)=0 D上,一些初始条件*u(x,0)=g(x)*进行L 2 -最陡下降的狄利克雷能量:这意味着最初从u ( x , 0 ) = g ( x )开始,到达狄利克雷能量景观上的最小化器的最快方式是通过解决热方程。因此,热方程为最小化问题提供了一个最小化方案的想法:

min u=0onD 1 2 D |u(x,t)| 2 d x .

例 2

2中两点之间的最短路径是一条直线。为了做到这一点,我们最小化连接两点( x 1 , y 1 )( x 2 , y 2 )的曲线的弧长,即,

min y(x 1 )=y 1 andy(x 2 )=y 2 x 1 x 2 1 + y ' (x) 2 d x .

然后我们写出欧拉-拉格朗日方程,导致最小化函数y(x)=mx+b,其中mb分别是连接两个给定点的直线的斜率和y-截距。

变分微积分的其他入门示例

最小曲面问题和等周问题是我们可以使用适当的变分原理解决的其他示例。

网络上的优化

我想在线性优化的单纯形法之前从网络优化开始,因为更多的人习惯于以代数形式(方程和函数)思考,而不是以图形或网络结构的形式,尽管自然界和运营研究应用中有大量的网络结构。我们需要对图模型非常熟悉。网络结构上的优化问题往往是组合性质的O ( n ! ) ,这是不好的,因此我们需要一些算法来规避这一点,并有效地筛选搜索空间(请记住问题的顺序通常是最坏情况,而在最坏情况下,我们满足于近似解决方案)。

我们讨论典型的网络问题,这些问题恰好涵盖了各种各样的现实生活应用。旅行推销员问题是最古老和最著名的问题之一,因此我们从那里开始。我们生活在一个有开源软件包和云计算资源的时代,其中包括用于解决本章中提到的所有问题的强大算法,因此在本节中,我们专注于理解网络问题的类型及其应用,而不是为解决这些问题而设计的算法。

旅行推销员问题

这是运筹学中的一个著名问题,适用于许多现实世界的情况:一个推销员在旅途中需要访问多个城市。给定城市之间的距离,他应该以什么顺序旅行,以便精确地访问每个城市一次并返回家中,目标是保持旅行距离最小(图 10-1)?

280

图 10-1。旅行推销员问题(图片来源)

应用非常广泛:一辆离开仓库的送货卡车必须以最经济的方式(以时间或距离衡量)将包裹送到每个地址;在制造电子芯片时找到最有效的孔序列来钻孔印刷电路板。

我们将旅行推销员问题表示为图上的优化问题:城市是节点,每对城市之间有边(使图完全),每条边都有一个权重(或属性或特征),表示两个城市之间的距离。这个图有许多路径通过所有城市仅一次并返回到我们开始的那个城市(一个哈密顿回路),但我们希望找到总距离最小的路径。

让我们来思考这个问题的复杂性:在一个完全图中,n 个节点有(n−1)!/2 个不同的哈密顿回路:从任何一个节点开始,我们有 n-1 条边可供选择,选择下一个要访问的城市,然后从第二个城市有 n−2 个选项,第三个城市有 n−3 个选项,依此类推。这些选择是独立的,所以我们总共有(n−1)!种选择。我们必须除以 2 来考虑对称性,也就是说我们可以沿着相同的哈密顿回路前进或后退,仍然得到完全相同的总行程。这个计数问题是一个具有对称性的循环排列。旅行推销员的详尽解决方案将列出所有(n−1)!/2 个哈密顿回路,计算每个回路中的行程总距离,然后选择最短距离的那个。即使对于一个合理的 n 值,这也是太昂贵的:要访问所有 50 个美国州首府(假设我们想要最小化总旅行成本),我们需要尝试( 50 - 1 ) ! / 2 = 3 . 04 × 10 6 2 个选项!我们没有一个有效的算法来解决任意规模的问题。启发式方法能够提供出色的近似解。此外,基于一种称为分支和剪枝的方法的优秀算法已经为非常大数量的城市解决了这个问题。

最小生成树

我将最小生成树问题放在旅行推销员问题之后,因为有时人们会混淆这两个问题。这是一个澄清混淆的好地方。在这里,我们有一个完全连接的网络,每条边上都有正权重,这些权重可以代表距离、时间、容量或连接基础设施(如水、电或电话线)的成本。与旅行推销员类似,我们希望找到包含图中所有节点并最小化总权重的边的集合。这里与旅行推销员不同的要求是,我们希望确保以一种方式选择边的集合,使得任意两个节点之间都有路径,也就是说我们可以从图中的任何一个节点到达任何其他节点。在旅行推销员中,我们只需要访问每个城市一次然后返回到起始城市,这意味着每个节点不能有超过两条边(对于生成树没有这样的要求)。在旅行推销员中返回到最后一个城市的事实意味着我们有一个额外的闭合边,这在生成树中是不需要的。如果我们移除旅行推销员解决方案的最后一条边,那么我们肯定会得到一个生成树,但不能保证它是成本最小的。图 10-2 展示了相同图的最小生成树和旅行推销员解决方案。

280

图 10-2. 相同图的最小生成树和旅行推销员解决方案

请注意,对于任何网络,如果我们有 n 个节点,那么我们只需要 n-1 条边,这样我们就可以在每两个节点之间有一条路径,因此我们不应该使用超过 n-1 条边来构建最小生成树,因为那会增加我们的成本。我们需要选择最小化成本的边的集合。

我们已经提到了一些应用,比如设计电信网络、路由和运输网络、电网和基础设施网络(管道)。这些网络的开发非常昂贵,通过最佳设计可以节省数百万美元。

最短路径

最简单的最短路径问题版本是,我们在图上有两个节点,我们想要用一组边连接它们,使得边权重(距离、时间)的总和最小。这与旅行推销员和最小生成树问题不同,因为我们不关心覆盖图的所有节点。我们只关心以最经济的方式将自己从起点送到终点。

一个明显的应用是以最小距离、成本、时间等从一个目的地到另一个目的地旅行。其他应用虽然不是立即显而易见,但却非常重要的是活动网络。我们可能没有起点和终点,而是有一个项目的开始和结束。每个节点代表一个活动,每个边的权重代表如果活动 i 邻接活动 j 时所产生的成本或时间(如果我们有一个有向图,那么它将是活动 i 在活动 j 之后发生时所产生的成本或时间)。目标是选择最小化总成本的活动顺序。

最短路径问题的其他版本包括:找到从起点到所有其他节点的最短路径。其他包括找到所有节点对之间的最短路径。

许多车辆路径规划算法和网络设计算法包括最短路径算法作为子程序。

我们也可以将最短路径问题重新表述为线性优化问题,并使用线性优化的方法。

最大流最小割

在这里,我们还有一个起点和一个终点,每个有向边都有某种容量(路线上允许的车辆最大数量,路线上运输的商品最大数量,管道可以处理的最大材料或自然资源量,如石油或水),我们希望找到一组边,使得从起点到终点的最大化。请注意,所有边都指向远离起点的方向,并指向终点。

图论中一个非常重要的定理在确定连接起点和终点的一组边的最优性(最大流)中起着关键作用:

  • 最大流最小割定理:该定理指出,通过有向网络从起点到终点的最大流量等于所需的最小边权重之和,以切断起点和终点之间任何通信。也就是说,我们可以通过网络切断通信,以防止起点和终点之间的通信,有多种方式。切断通信并且具有最小权重的边集是最小割集。这个最小割集的值等于网络中可能的最大流量的值。这个结果非常直观:我们可以通过网络的边发送的最大量是多少?这受到连接起点和终点的关键边的容量的上限约束。

我们可以将最大流问题重新表述为线性优化问题,当然,最小割问题将是其对偶问题,因此它们当然有相同的解!我们将在本章很快看到这一点。

最后,假设我们有多个起点和多个终点,类似于一个分布网络,那么我们仍然可以通过解决完全相同的问题来最大化网络中的流量,只是现在我们添加一个虚构的超级起点指向所有真实起点,另一个虚构的超级终点,所有真实终点指向它,具有无限容量,然后像往常一样进行业务,解决这个新图上的最大流问题,其中有两个新虚构的超级节点

最大流最小成本

这类似于最大流问题,不同之处在于现在我们将每条边发送流量的成本与流量单位数成比例地关联起来。目标显然是在满足所有起点到所有终点的供给的同时最小化成本。我们可以将这个问题表述为一个线性优化问题,并使用针对网络优化的单纯形法来解决它。应用广泛且非常重要:各种分配网络,包括供给节点、中转节点和需求节点,供应链(货物、血液、核材料、食品),固体废物管理网络,协调生产产品的类型或花费资源以满足市场需求,现金流管理,分配问题,如将员工分配到任务、时间段分配到任务或将求职者分配到可用工作岗位。

分配问题

分配问题也称为匹配问题。受让人的数量应与任务数量相同,每个受让人只能分配一个任务,每个任务只能由一个受让人执行。将任务 i 分配给受让人 j 会产生成本。目标是选择任务和受让人之间的匹配,以最小化总成本。这种问题的图是一种特殊类型的图,称为二部图。这样的图可以分为两部分,所有边都从第一部分的一个节点指向第二部分的一个节点。在所有权重相同的分配问题中,这是一个二部图上的最大流问题。我们所要做的就是分配一个虚拟的超级起点和另一个虚拟的超级终点,并以解决最大流问题的方式解决这个问题,即在即将介绍的线性优化和对偶性部分中解决最大流问题。对于这些问题有许多高效的算法。

项目设计的关键路径法(CPM)

关键路径法是一种优化方法,用于表示项目中涉及的所有活动、总预算、总时间限制,哪些活动需要在其他活动之前发生,每个活动需要多少时间和成本,以及哪些活动可以同时进行的网络。例如,考虑一个从开始到结束的房屋建设项目。关键路径法用于时间和成本的权衡是一个很好的工具,有助于设计一个项目,其中包含时间和成本之间的权衡,确保项目以最小总成本满足其截止日期。类似于关键路径法的是项目评估审查技术(PERT),它是一种项目管理规划工具,用于计算完成项目所需的时间。该方法提供三个时间表:最短可能的时间表、最长可能的时间表和最有可能的时间表。

n 皇后问题

在继续线性优化、单纯形法和对偶之前,我们先稍微绕个弯,提到一个有趣的组合问题,这个问题困扰数学家已经 150 年了,主要是因为它完全没有结构:n 皇后问题,比如图 10-3 中的那个。迈克尔·西姆金终于(2021 年 7 月)回答了这个有关攻击皇后的 150 年历史的国际象棋问题。以下是他解决方案论文的摘要的编辑部分,标题为n-皇后配置的数量n 皇后问题是确定如何在一个 n×n 的[国际象棋]棋盘上放置 n 个互不威胁的皇后的方式的数量。我们证明存在一个常数α=1.942±3×10-3,使得[在棋盘上放置互不威胁的皇后的方式的数量为](1±o(1)n e-αn)n((1±o(1)n e^-αn)n)。常数α被描述为 P([-1/2,1/2]的 Borel 概率测度空间中一个凸优化问题的解。

300

图 10-3。8 个皇后在一个 8×8 的国际象棋棋盘上互不威胁的位置。

以下页面有一个简单的回溯算法来解决 n 皇后问题。请注意,西姆金的解决方案量化了可行皇后配置的总数,而算法只能找到其中一个或一些配置。

线性优化

有限维度中的任何优化问题,无论是线性还是非线性,看起来都像:

min g 1 (x )0g 2 (x )0g m (x )0 f ( x ) .

我们有以下情况:

  1. 存在一个唯一的最优解:认为盆地有一个最低点。

  2. 存在多个最优解:在这种情况下,最优解集可以是有界的或无界的。

  3. 最优成本趋于负无穷大,没有可行解是最优的:目标函数的景观无限下降。

  4. 可行集为空,最小化问题没有解:这里没有人关心目标函数及其低值,因为没有同时满足所有约束的点!

  5. 最优成本是有限的但不可达到:即使可行集非空,也没有优化器。例如 inf x≥0 1/x 等于零,但没有有限的 x 使得 1/x=0。这种情况在线性问题中永远不会发生。

要使优化问题是线性的,目标函数f和所有约束g必须是线性函数。线性优化在运筹学中占据很大比重,因为我们可以将许多运筹学问题建模为线性约束下线性函数的最小化,这些约束可以是相等关系或不等式。

线性是一件很好的事情。我们可以用线性代数语言(向量和矩阵)来表达任何线性优化问题,人们通常使用两种形式:

  1. 一般形式:这对于发展线性规划理论很方便。向量x 的条目的符号没有限制,决策变量:

min Ax b c . x

可行集A x b 是一个多面体(添加一个多面体的图片),我们可以将其看作是有限数量半空间的交集。这个多面体可以是有界的或无界的(添加一个图片)。

  1. 标准形式:这对于计算和开发算法很方便,比如单纯形和内点方法。决策变量必须是非负的,所以我们只在第一象限中搜索,这是第一象限的高维类比,其中所有坐标都是非负的。此外,约束必须始终是相等关系,而不是不等式,因此我们必须在半空间的边界上,而不是在内部。这就是标准形式的线性优化问题的样子:

min Ax =b ,x 0 c . x

标准形式的线性问题有一个简单的内化方法:以最小化成本c . x 的方式从A的列中合成向量b

我们可以轻松地在标准形式和一般形式之间来回转换线性优化问题(例如,通过引入剩余和松弛变量将一般线性优化问题转换为标准形式),但请注意,我们最终解决的是不同维度的相同问题:如果我们引入一个变量来将不等式转换为等式,例如引入s 1将不等式x 1 - 3 x 2 4转换为等式x 1 - 3 x 2 - s 1 = 4,那么我们会增加维度(在这个例子中从二维到三维)。这没问题。这实际上是数学的一个好处,我们可以模拟无限维度,即使我们只生活在一个三维世界中。

例子:二维线性优化问题的图形表示

图 10-4 显示了线性优化问题的图形表示。

min x+2y32x+y3x0y0 - x - y .

这个问题是二维的(既不是一般形式也不是标准形式,但我们可以轻松转换为任何一个)。

请注意,-x-y 的最优值为-2,取得于点(1,1),这是可行集的一个角点。如果这是一个无约束问题,那么下确界将是- 。约束会产生巨大的影响。最优值在多边形(二维多面体)的一个角点上并非偶然。如果我们画一条直线-x-y=c,其中 c 使得直线的一部分在可行集内,然后沿着负梯度向量的方向移动(回想一下这是最快下降的方向),直线将沿着向量- ( - x - y ) = - ( - 1 , - 1 ) = ( 1 , 1 )的方向移动(这里梯度向量与优化点具有相同的坐标是巧合,这两者完全无关)。只要直线的部分在可行集内,我们就可以继续推进并使c变小,直到无法再推进,因为如果这样做,我们将离开可行集,变得不可行,并且失去所有推进的工作。这正好发生在整条直线都在可行集外部并且勉强悬挂在点(1,1)时,而这个点仍然在可行集内。我们找到了我们的优化器,使得-x-y 的值最小的点。很快我们将回到线性问题的可行集的角落中,因为那里是优化器所在的地方。

280

图 10-4. 可行集和-x-y 的最优值为-2,取得于角点(1,1)。

凸到线性

即使目标函数是非线性的,在许多情况下我们可以将问题重新表述为一个线性问题,并使用线性优化技术来获得精确解或接近精确解的近似解。我们可以通过分段线性凸函数来近似凸(且可微)函数图 10-5。我们可以将具有分段线性目标函数的优化问题转化为具有线性目标函数的问题。然而,这会使我们失去可微性(函数不再平滑)。没有免费的午餐。在优化问题中,线性之后,凸性是下一个理想的特性,因为我们不会担心陷入局部最小值。对于凸函数来说,局部最小值就是全局最小值。

280

图 10-5. 通过分段线性函数逼近凸函数

一个凸优化问题具有凸目标函数和凸可行集。凸优化是一个完整的领域。

凸函数

一个函数 f : n 是凸函数当且仅当 f ( λ x + ( 1 - λ ) y ) λ f ( x ) + ( 1 - λ ) f ( y ) ,对于所有 x , y n0 λ 1 。这意味着连接f图上任意两点的线段位于f的图形之上(画个图)。

关于凸函数的一些有用事实:

  • 凸函数不可能有一个局部最小值,而不是全局最小值。

  • 如果函数 f 1 , f 2 , ... , f m : n 是凸函数,那么函数 f ( x ) = max i f i ( x ) 也是凸函数。在这种情况下,f 可能会失去平滑性,因此优化方法无法使用导数。

  • 函数f ( x ) = max { m 1 x + d 1 , m 2 x + d 2 , , m n x + d n }或更简洁地f ( x ) = max i=1,2,n { m i x + d i }是分段线性的图 10-6。这是一个凸函数,因为每个m i x + d i是凸的(线性函数同时是凸和凹的),凸函数的最大值也是凸的。

280

图 10-6。线性函数的最大值是分段线性和凸的

例如,绝对值函数 f(x)=|x|=max{x,-x}是分段线性和凸的(画个图)。

  • 我们可以将具有分段线性凸目标函数的优化问题重新表述为线性优化问题:

min Axb max i m i . x + d i min zm i .x+d i Axb z

  • 特别是,一个优化问题,其中目标函数具有决策变量的绝对值,可以通过两种方式重新表述为线性优化问题(这里目标函数中的c i是非负的,否则目标函数可能是非凸的):

min Axb i=1 n c i | x i | min Axbx i z i -x i z i i=1 n c i z i min Ax + -Ax - bx + ,x - 0 i=1 n c i ( x i + + x i - )

线性优化的几何形态

让我们来思考标准形式线性优化问题的几何形态。不失一般性,我们假设A的行是线性无关的。换句话说,没有冗余约束。这保证了至少存在一个A的线性无关列集(或rank(A)=m):

min Ax =b x 0 c . x

正如我们之前提到的,如果我们从一般形式转换为标准形式,那么我们会在维度上跳跃。因此,即使一个多面体在一般形式中没有角,它在更高维度的标准形式中总会有角:由于标准形式中坐标的正性条件,多面体位于第一超八面体中,因此不可能有完整的线。现在我们有定理保证,对于线性优化问题,要么最优成本是- ,要么存在一个有限的最优成本发生在多面体的一个角(在一个基本可行解处)。

单纯形算法

我们的目标是构建一个算法,找到标准形式线性优化问题的最优解:

min Ax =b x 0 c . x

Am × n,其中 m 个线性无关的行(因此 m n),b m × 1c x n × 1

单纯形法的主要思想

从多面体的一个顶点(一个角,也称为基本可行解)开始,沿着保证减少目标函数或成本(减少成本 c ¯)的方向移动到另一个顶点,直到达到最优解,或发现问题是无界的,并且最优成本是 - (这些您可以使用最优性条件知道,并成为算法的终止标准)。在退化问题的情况下可能会出现循环的机会,但可以通过在过程中出现平局时做出明智选择(选择的系统化方式)来避免这种情况。

示例:跟踪单纯形法在多面体图形上所采取的路径

图 10-7 显示了三维线性优化问题的多面体。我们从一个基本可行解开始,然后跟踪单纯形法所经过的路径,从多面体的一个顶点移动到下一个顶点,在每一步中减少成本(目标函数的值),直到到达具有最小成本的顶点。

min x 1 +x 2 +x 3 4x 1 2x 3 33x 2 +x 3 6x 1 ,x 2 ,x 3 0 - x 1 + 5 x 2 - x 3250

图 10-7。单纯形法从多面体的一个顶点移动到下一个顶点,直到找到一个优化的顶点。

您可以跳过本小节的其余部分,直接查看有关运输和分配问题的示例,除非您对单纯形法及其不同实现的细节感兴趣。

  1. 从多面体的一个顶点开始(基本可行解 x:零个非基本坐标和 x B = B -1 b )。这需要一个由 Am 个线性无关列组成的基础矩阵 B

    例如,如果 A = 1 1 2 1 0 0 0 0 1 6 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 ,以及 b = 8 12 4 6 ,那么我们可以选择 a 4 , a 5 , a 6 , a 7 作为一组基本列,给出 x=(0,0,0,8,12,4,6) 作为基本可行解(多面体的一个顶点的坐标)。我们也可以选择 a 3 , a 5 , a 6 , a 7 作为另一组基本列,给出 x=(0,0,4,0,-12,4,6) 作为基本解但不是基本可行解,因为它有一个负坐标。

  2. 移动到另一个顶点y = x + θ d,在一个可行方向d中,只增加一个非基本变量x j,并将其他非基本变量保持在零水平(d的坐标:d j = 1d i = 0如果i ji非基本,并且d B = - B -1 A j),这是保证会降低成本的(引入x j相关的减少成本为c ¯ j = c j - c B . B -1 A j,因此选择一个j*,使得这个数量为负)。θ *的值

    θ * = min allbasicindicesforwhichd B(i) <0 - x B(i) d B(i) : = - x B(l) d B(l) ;

  3. A B(l)退出基础B,并替换为A j

  4. 重复直到我们要么达到有限的最优解(当所有可用列的A中没有一个A j给出负c j),要么发现问题是无界的,最优成本是负无穷大(当我们有d 0,所以y = x + θ d 0,无论θ取多大,这都是可行的,因此将θ推到将不断降低成本c . y = c . x + θ ( c j - c B . B -1 A j )一直到- )。

上述单纯形法的注记

  1. 上述最后一项给出了单纯形算法的两个终止标准:没有负的降低成本c ¯ j或所有可行降低成本方向d的坐标都是非负的。

  2. 如果可行集非空且每个基本可行解都是非退化的,则单纯形法在有限次迭代后保证终止,要么得到有限最优解,要么得到一个有限的最优成本为负无穷的解。

  3. 假设一些基本可行解是退化的(一些基本变量也为零),我们最终停留在其中一个。在这种情况下,当我们通过引入A j并使A B(l)退出来改变基础时,有可能停留在同一点y=x+0d(当x B(l) = 0时,θ = - x B(l) d B(l) = 0)!在这种情况下,选择一个新的A j,直到实际从x移动到y = x + θ dθ > 0。这里可能发生的一个非常糟糕的事情是:在我们停在x并不断改变基础(在x处稍作停顿)直到找到一个实际将我们从x移开到y = x + θ d的成本降低方向时,我们可能最终得到与算法开始时相同的基础!这将导致循环,并且算法可能无限循环。通过在A的哪些列将进入和退出基础上做出明智选择,可以避免循环:在过程中选择A j和后来的*B(l)的系统方法θ ,当在过程中存在并列时。

  4. 在过程中出现平局时(我们有多个减少成本选项 A j,使得 c ¯ j < 0,和/或有多个最小化索引 B(l)θ ),我们可以制定规则来选择在这种平局步骤中进入 A j 和/或退出 A B(l)。当出现这种平局时,我们决定遵循的选择规则称为枢轴*规则。

  5. 布兰德规则是一种非常简单且计算成本低廉的枢轴规则:选择索引最小的 A j,其中 c ¯ j < 0,以进入基础,并选择具有最小合格索引 B(l)A B(l) 以退出基础。这种最小下标枢轴规则有助于避免循环。另一种枢轴规则是词典排序:见书页 108。

  6. 如果 n-m=2(因此 A 的列数比行数多 2 列),那么无论使用哪种枢轴规则,单纯形法都不会循环。

  7. 选择初始基础以开始单纯形法:对于没有起源于一般形式问题的问题,特别是那些具有大量变量的问题,可能并不总是明显如何选择初始基础 B 和相关的基本可行解 x(因为不清楚 Am 列是线性独立的哪些列)。在这种情况下,我们引入人工变量并解决辅助线性规划问题,以确定原始问题是否不可行,因此没有解决方案;或者,如果问题是可行的,将人工变量驱使出基础,并为我们的原始问题获得初始基础和相关的基本可行解。这个过程称为单纯形法的第一阶段

  8. 有一种结合了单纯形法的第一阶段和第二阶段的方法称为大 M 法。在这里我们使用单纯形法来解决

min Ax+b=0x0,y0 c . x + M ( y 1 + y 2 + . . . + y m )

对于足够大的 M 选择,如果原始问题是可行的且其最优成本是有限的,所有人工变量 y 1 , y 2 , , y m 最终会被驱使为零,这将使我们回到原始问题。M 可以被视为一个未确定的参数,并让减少的成本成为 M 的函数,并在确定减少的成本是否为负时将 M 视为一个非常大的数。

修订的单纯形法

修订后的单纯形法是一种计算成本较低的实现。它提供了一种更便宜的计算方法来计算B ¯ -1,通过利用旧基础B和新基础B ¯之间的关系:它们只有一个不同的列(涉及的两个顶点是相邻的)。因此,我们可以从先前的B -1获得新的B ¯ -1

这是修订后单纯形算法的典型迭代:

  1. A中包含m个基本列的B和相关的基本可行解x开始,其中x B = B -1 b,否则x i = 0

  2. 计算B -1(在单纯形法计算中出现的是B -1而不是B)。

  3. 对于非基本的j,计算减少成本c ¯ j = c j - c B . B -1 A j(这将给出n-m个减少成本)。

  4. 如果所有的c ¯ j都是非负的,则当前的基本可行解x是最优的,算法以x作为优化器和c.x作为最优成本终止(没有A j可以进入基础并进一步降低成本)。

  5. 否则,选择一个j,使得c ¯ j < 0(Bland 的枢轴规则告诉我们选择最小的j)。注意:这会使A j进入基础。

  6. 计算可行方向dd j = 1d B = - B -1 A j,否则d i = 0

    • 如果d B的所有分量都是非负的,则算法以最优成本- 终止,没有优化器。

    • 否则(选择 d B 中为负数的分量),让

θ * = min allbasicindicesforwhichd B(i) <0 - x B(i) d B(i) : = - x B(l) d B(l)

这一步计算 θ * 并将 B(l) 分配为退出列的索引。

  1. 计算新的基本可行解 y = x + θ * d(这个新的基本可行解对应于具有 B ¯ 的新基 A j 替换 B 中的 A B(l))。

  2. 这一步计算下一次迭代的新 B ¯ -1,而不形成新的基 B ¯ 然后对其进行求逆。

形成 m × m + 1 增广矩阵 ( B -1 | B -1 A j )。使用 l 行执行行操作(向每行添加 l 行的倍数),使最后一列成为单位向量 e l,除了 l 坐标处为 1 外,其他地方都是零。结果的前 m 列是你的新 B ¯ -1

理由

等于上 B 的逆乘以上 A 的第 j 列,注意到<上 B 的逆乘以上 B 横线等于(e1 e2 ... u ... em)>,其中是单位列向量,第 i 个元素为 1,其他位置为 0,u 是第 l 列。如果我们使用第 l 行进行行操作,并将 u 转换为,上述矩阵将变为单位矩阵。所有行操作可以打包在一个可逆矩阵 Q 中,从左边应用:<Q 上 B 的逆乘以上 B 横线等于上 I>。现在右乘以<上 B 横线的逆>,我们得到<Q 上 B 的逆等于上 B 横线的逆>。这意味着要获得<上 B 横线的逆>,在<上 B 的逆>上执行相同的行操作,将 u 转换为

使用修正单纯形法计算<上 B 横线的逆>使用<上 B 的逆>

这种方法不是从原始 A 的 m 列开始找逆,而是在先前计算的<上 B 的逆>上进行行操作,这可能包括舍入误差。在许多迭代中这样做会积累这些错误,因此最好偶尔直接从 A 的列计算<上 B 横线的逆>,以避免错误积累。

单纯形法的完整表格实现

单纯形法的完整表格实现具有只存储和更新一个矩阵的优势:

这里,不再维护和更新B -1,而是维护和更新m × n + 1矩阵x B | B -1 A ) = ( B -1 b | B -1 A。与进入基础的变量对应的列u = B -1 A j被称为pivot column。如果第l个基本变量退出基础,那么第l行被称为pivot row。属于 pivot row 和 pivot column 的元素被称为pivot element。现在在你的tableau顶部添加一个zeroth row,用于跟踪当前成本的负值- c . x = - c B . x B = c B . B -1 b和减少的成本c - c B . B -1 A。因此,tableau 看起来像:

- c B . B -1 b c - c B . B -1 A B -1 b B -1 A

或者更详细:

- c B . x B c ¯ 1 c ¯ n x B(1) | | B -1 A 1 B -1 A n x B(m) | |

这是完整 tableau 实现的典型迭代:

  1. 从与基础矩阵B和相应的基本可行解x相关联的 tableau 开始(其中x B = B -1 b和其余坐标为零)。

  2. 检查 tableau 的零行中的减少成本。如果它们都不是负数,则当前的基本可行解x是最优的,算法终止。否则,选择一些j,使得c ¯ j < 0(这个j告诉您哪个A j进入了基础,您有了 pivot columnu = B -1 A j)。

  3. 检查主列 u = B -1 A j。如果u的所有分量都是负数,则最优成本为 - ,算法终止。否则,对于每个正分量 u i,计算 x B(i) u i,选择最小比率,让l成为对应最小比率的行的索引。这就是你的主行。(所以现在发生的是 A B(l) 离开基础,A j 进入基础,但这里没有明确显示,因为表的列在所有步骤中保持不变,这只是一个心理提示。)

  4. 现在使用主行执行行操作,以将主列更改为 e l(主元变为一,主列中的所有其他条目变为零)。

  5. 现在你有一个新的表,新的 x B 在第零列,新的最优成本的负值在左上角,新的基础 B ¯ 没有明确写出,而是用 B ¯ -1 A 的形式给出在表的正文中。所以回到步骤(a)直到算法终止。

  6. 最有效的实现是修正单纯形法(内存使用为 O ( m 2 ),单次迭代的最坏情况时间为 O ( m n ),单次迭代的最佳情况时间为 O ( m 2 ),而全表法的上述所有度量都是 O ( m n )),但这也取决于矩阵的稀疏程度。

一个有用的技巧是很好掌握的:从给定的单纯形表中提取 B -1B(就像在电影中:黑客帝国)。

示例:运输和分配问题

在网络部分我们提到了运输和分配问题,因为它们是线性优化问题,可以将其制定为最小成本网络流问题。

运输问题:将产品分配给仓库,最小化成本。分配问题:将被分配者分配给任务,被分配者的数量等于任务的数量,并且每个被分配者执行一个任务。当被分配者 i 执行任务 j 时会产生成本。目标是选择一种分配方式以最小化成本。一个例子是将 Uber 司机分配给顾客,或将机器分配给任务。

我们利用所涉及的矩阵是稀疏的这一事实,因此我们不必完全实现单纯形算法,只需一个特殊的简化版本,可以同时解决分配和运输问题。这与网络单纯形方法有关,它解决任何最小成本流问题,包括运输和分配问题。运输和分配问题是最小流问题的特例。匈牙利方法是分配问题的特例。由于它专门为此而设计,因此更有效率。这些专用算法包含在一些线性规划软件包中。

对偶性,拉格朗日松弛,影子价格,最大最小值,最小最大值,以及其他一切

在本章早些时候讨论有限维约束优化和使用拉格朗日乘数放松约束时,我们已经暗示并围绕对偶性的概念打转。当我们的约束问题是线性的,或者具有线性约束的二次型时,对偶性真的很有帮助。它给了我们两种选择:要么解决手头的优化问题(原始),要么解决另一个相关的问题(对偶),无论哪个更容易或更便宜,都会得到相同的解决方案。通常,对于算法来说,拥有更多的决策变量(问题的维度)不像拥有更多的约束那样费力。由于对偶问题颠倒了决策变量和约束的角色,所以当我们有太多约束时,解决对偶问题而不是原始问题更有意义(另一种方法是使用对偶单纯形方法来解决我们即将讨论的原始问题)。对偶问题有助于解决原始问题的另一种方式是,它有时提供了解决原始问题的捷径。如果原始问题存在一个可行向量x ,那么如果对偶问题存在一个可行向量p ,使得c . x = p . b ,那么这个向量将成为优化器。

在接下来的几段中学习对偶性时,将其视为您在图 10-8 中看到的方式:在原始领域中发生了某种事情,在对偶领域中发生了某种相关的影子或回声(某种替代宇宙),两者在优化器处相遇,就像两个宇宙相遇的门。

250

图 10-8。对偶性,影子问题,影子价格(我想要一个看起来像这个的未受版权保护的图形)。

因此,如果我们在一个宇宙中最大化,那么在另一个宇宙中我们在最小化,如果我们在一个宇宙中对约束进行某些操作,那么我们在另一个宇宙中对决策变量进行某些操作,反之亦然。

对偶性的动机-拉格朗日乘数

对于任何优化问题(线性或非线性)

min x feasibleset f ( x ) ,

不要通过将梯度设为零来找到最小化器x ,而是寻找f ( x )的上界(通过将可行集合的任意元素代入f ( x )很容易),以及f ( x )的下界(这是一个更难的不等式,通常需要巧妙的想法)。现在我们会有下界* f ( x ) 上界,所以我们收紧这些界限以接近实际解f ( x )。我们通过最小化上界(这将使我们回到原始的最小化问题)和最大化下界(这建立了对偶问题)来收紧界限。

现在对于任何形式的线性最小化问题(标准形式、一般形式或其他形式),

min linearconstraintsonx c . x

给我们 f ( x ) = c . x 的下界是什么聪明的想法?我们寻找由问题约束的 线性组合 组成的 f ( x ) = c . x 的下界。因此,我们通过乘以每个约束的乘数 p i(拉格朗日乘数)来加强它们,选择它们的符号,使约束不等式朝着 方向。为什么?线性约束是 x 的条目的线性组合,目标函数 c . x 也是 x 的条目的线性组合,线性组合的线性组合仍然是线性组合,所以我们完全可以选择约束的线性组合,将其与 c . x 进行比较。

换句话说,如果我们有 m 个线性约束,则我们需要

p 1 b 1 + p 2 b 2 + + p m b m c . x

如果约束条件是相等的,乘数 p i 的符号将是自由的。一旦我们有了这些下界,我们通过最大化 p i 来加强它们,这给我们了对偶问题。

从原始线性优化问题中找到对偶线性优化问题

将线性优化问题的输入大小设置正确是很重要的。输入包括:A,它是 m × nc ,它是 n × 1b ,它是 m × 1。原始问题中的决策变量在向量 x 中,它是 n × 1。对偶问题中的决策变量在向量 p 中,它是 m × 1

一般来说,如果A出现在原始问题中,则A t出现在对偶问题中。因此,在原始问题中,我们有Ax 的行的点积。在对偶问题中,我们有Ap 的列的点积。如果线性优化问题以任何形式出现,按照这个过程很容易写出它的对偶问题:

  • 如果原始问题是最小化,则对偶问题是最大化,反之亦然。

  • 原始成本函数为c · x ,对偶成本函数为p · b

  • 最小化原始问题中,我们将约束分为两种类型:

    类型一

    约束告诉我们关于决策变量符号的信息,例如:

  • x 3 0。然后在对偶中,这将对应于A 3 · p c 3其中A 3A的第三列,c 3c 的第三个条目。

  • x 12 0。然后在对偶中,这将对应于A 12 · p c 12其中A 12A的第十二列,c 12c 的第十二个条目。

  • x 5是自由的,意味着没有指定的符号。然后在对偶中,这将对应于A 5 · p = c 5其中A 5A的第五列,c 5c 的第五个条目。

    类型二

    形式约束为a i · x = b i其中a i是 A 的第 i 行。在对偶中,这些将对应于对p i符号的约束,例如:

  • a 2 . x b 2。那么在对偶中,这将对应于p 2 0

  • a 7 . x b 7。那么在对偶中,这将对应于p 5 0

  • a 8 . x = b 8。那么p 8的符号是自由的。

特别是如果线性优化问题处于标准形式:

min Ax =b x 0 c . x ,

然后它的对偶是:

max p isfreeA T p c p . b .

如果线性优化问题处于一般形式:

min Ax b x isfree c . x

然后它的对偶是

max p 0 A T p =c p . b

如何解决对偶问题?单纯形法解决对偶问题,但现在您移动到增加成本而不是减少成本的基本可行解。

标准形式线性优化问题的对偶推导

推导对偶问题的另一种思考方式,但是对于这种情况,线性问题必须处于标准形式。这是它的想法:我们放松约束A x = b ,但引入拉格朗日乘数p (当约束违反时支付惩罚p )。因此

min Ax =b x 0 c . x

变成

min x 0 c . x + p . ( b - A x ) = g ( p ) .

现在证明g ( p )是原始c . x 的下界(这是弱对偶定理),然后最大化p*。对偶问题出现在这个过程中(我关于对偶的讲义中有完整的推导)。

强对偶定理表明原始问题的最小值和对偶问题的最大值相等。请注意,如果原始问题无界,则对偶问题不可行,如果对偶问题无界,则原始问题不可行。

Farkas 引理是对偶理论的核心,具有许多经济和金融应用。

对偶单纯形法

对偶单纯形法解决原始问题(而不是对偶问题)使用对偶理论。单纯形法和对偶单纯形法的主要区别在于:常规单纯形法从不是最优的基本可行解开始,并朝向最优解,而对偶单纯形法从最优的不可行解开始,并朝向可行性。对偶单纯形法就像单纯形法的镜像。

首先,注意当我们使用单纯形法解决原始问题时,我们可以免费获得对偶问题的最优成本(等于原始问题的最优成本),而且,我们可以从原始问题的最终表中读取出对偶问题的解(优化器)。一个最优对偶变量只有在其对应的原始约束是约束时才为非零。这应该直观地清楚,因为最优对偶变量是与约束相关的影子价格(拉格朗日乘数)。我们可以将这些影子价格解释为分配给稀缺资源(约束)的值,以便这些资源的价值等于原始目标函数的价值。最优对偶变量满足单纯形法的最优性条件。在单纯形法的最终表中,基本变量的降低成本必须为零。最优对偶变量必须是与最优解相关的影子价格。

另一种方法是将对偶单纯形法视为解决对偶问题的伪装单纯形法。但是,我们这样做时没有明确地写出对偶问题,并应用单纯形法进行最大化。

此外,单纯形法产生一系列原始基本可行解(多面体的角点),一旦找到一个也是对偶可行的解,方法就终止。另一方面,对偶单纯形法产生一系列对偶基本可行解,一旦找到一个也是原始可行的解,方法就终止。

例子:网络、线性优化和对偶性

考虑图 10-9 中的网络。数字表示边的容量,即每条边可以处理的最大流量。最大流问题是将最大流从起始节点发送到目标节点。直观地说,网络中的最大流量将受到边缘可以传输的容量的限制。事实上,这一观察结果构成了一个对偶问题:通过网络的最大流量等同于最小化那些如果我们切断就无法从起点到终点的边的总容量。这就是最大流最小割定理

250

图 10-9. 对偶性:网络中的最大流量等于最小割容量。

图 10-9 显示了通过网络的所有割(如果我们一起切割,就无法从起点到达目的地的边的集合)的值,以及最小总边容量的割,为 16。根据最大流最小割定理,我们可以通过网络发送的最大流量为 16:通过容量为 19 的边发送y 1 = 12单位,通过容量为 4 的边发送y 2 = 4单位。其中,y 3 = 1单位将通过容量为 1 的边流过,y 4 = 11单位将通过容量为 11 的边流过,y 5 = 1 + 4 = 5单位将通过容量为 6 的底部边流过。所有 12 个单位将通过连接到它的最后两条边到达目的地,其中y 6 = 0(不需要通过容量为 7 的垂直边流过),y 7 = 11单位通过容量为 12 的最右边流过,y 8 = 5单位通过容量为 6 的最右边流过。现在最大流问题的解为( y 1 , y 2 , y 3 , y 4 , y 5 , y 6 , y 7 , y 8 ) = ( 12 , 4 , 1 , 11 , 5 , 0 , 11 , 5 )

为了将这个网络问题制定为线性优化问题(我们刚刚使用对偶问题的解来图形化解决了它,即最小割的值),我们需要添加一条流量值为y 9的虚构边,将目的地连接到起点,并假设到达目的地的流量虚拟地回到起点。换句话说,我们闭合电路,并应用Kirchhoff 电流定律,即在相遇于一点的导体网络中的电流之和为零,或者节点的流入等于流出。线性最大化问题现在变为:

max Ay =0 |y i |M i y 9

其中A(图 10-10)是我们网络的关联矩阵,y = (y 1 ,y 2 ,y 3 ,y 4 ,y 5 ,y 6 ,y 7 ,y 8 ,y 9 ) t有符号最大流向量(我们允许y值为负,以便流入的流量抵消流出的流量),我们需要解决这个问题(我们刚刚通过最小割直觉找到了它的解,不考虑符号),M i 是网络中每条边的最大容量,条件A y = 0 保证了流入节点的流量等于流出节点的流量。当然,在这种情况下,网络将具有显示最佳流通过每条边的方向的有向边。

250

图 10-10。图 10-9 中网络的关联矩阵。

现在我们已经对最大流问题有了线性表述,我们可以使用本章学到的方法(最小割问题)轻松地编写其对偶,并解决原问题或对偶问题。请注意,这个表述所需的仅仅是网络的关联矩阵、边的容量和基尔霍夫条件,即流入节点的流量等于流出节点的流量。

示例:两人零和游戏、线性优化和对偶。

另一个相关的设置是博弈论中的两人零和博弈,其中包含对偶性和线性优化。对一个玩家的收益就是另一个玩家的损失(提示:对偶性)。为了在数学上表达这个问题,我们需要为每个玩家p l a y e r 1p l a y e r 2 的游戏中的所有选项建立收益矩阵。每个玩家都希望制定一种策略,以最大化他们的收益(没有人说游戏的收益矩阵必须是公平的)。我们需要为每个玩家解决最佳策略。如果我们为p l a y e r 1 设置优化问题,我们不需要从头开始得到p l a y e r 2 的策略的优化问题:我们只需编写其对偶。假设两个玩家都理性行事并遵循他们的最佳策略,游戏的总预期收益对于两个玩家来说是相同的。

考虑例如图 10-11 中的收益矩阵。游戏进行如下:p l a y e r 1选择一行,p l a y e r 2同时选择一列。p l a y e r 1支付所选行和列中的数字给p l a y e r 2。因此,p l a y e r 1希望最小化,p l a y e r 2希望最大化。玩家重复游戏多次。

对于每个p l a y e r 1p l a y e r 2的最佳策略是什么,游戏的预期收益是多少?

250

图 10-11. 收益矩阵。

为了找到最优策略,假设p l a y e r 1选择r o w 1的概率为x 1,选择r o w 2的概率为x 2。那么x 1 + x 2 = 10 x 1 1,以及0 x 2 1p l a y e r 1推断,如果他使用一个( x 1 , x 2 )混合策略,那么支付矩阵中会有另一行对应于这个新策略(见图 10-11)。现在p l a y e r 1知道p l a y e r 2想要选择最大化他们的支付的列,所以p l a y e r 1必须选择使最差支付(第三行的最大值)尽可能小的( x 1 , x 2 )。因此,p l a y e r 1必须解决min max问题

min 0x 1 10x 2 1x 1 +x 2 =1 max x 1 + 3 x 2 , - x 2 , 4 x 1 + 2 x 2

回想一下,线性函数的最大值是一个凸分段线性函数。我们可以很容易地将这样一个*min max(线性函数)*问题转化为线性最小化问题:

min zx 1 +3x 2 z-x 2 z4x 1 +2x 2 0x 1 10x 2 1x 1 +x 2 =1 z

图 10-12 展示了上述问题的对偶形式,而图 10-13 则显示这正是p l a y e r 2试图解决的问题。

250

图 10-12. p l a y e r 1 的问题的对偶形式。

250

图 10-13. p l a y e r 1min max问题的对偶与p l a y e r 2max min问题相同。

请注意,约束条件y 1 1y 2 1y 3 1是多余的,因为我们知道所有的 y 都是非负的且它们加起来等于 1。同样,对于约束条件x 1 1x 2 1也是如此。在制定线性优化问题时,这种情况经常发生。

解决原始问题或对偶问题,我们找到每个玩家的最佳策略:p l a y e r 1必须选择第一行x 1 = 0 . 25的时间和第二行x 2 = 0 . 75的时间,预期收益为 2.5,这意味着p l a y e r 1预计使用这种策略不会损失超过 2.5。p l a y e r 2必须选择第一列y 1 = 0 . 5的时间和第三列y 3 = 0 . 5的时间(不会选择第二列y 2 = 0),预期收益为 2.5,这意味着p l a y e r 2预计使用这种策略不会获得少于 2.5。

具有线性约束、拉格朗日、极小极大定理和对偶性的二次优化

一个具有良好结构的非线性优化问题,在各种应用中都会出现,并且可以教会我们很多关于事物如何联系在一起的知识,就是一个具有线性约束的二次问题:

min Ax =b 1 2 x t S x

在这里,S是一个对称且半正定矩阵,这意味着它的特征值是非负的。对于高维空间,这起到了使目标函数凸且下界有界,或者形状像一维函数的碗状的作用。

例如,这是一个具有一个线性约束的二维二次优化问题:

min a 1 x 1 +a 2 x 2 =b 1 2 ( s 1 x 1 2 + s 2 x 2 2 )

这里,S = s 1 0 0 s 2,其中 s 的条目是非负的,而 A = a 1 a 2。检查这个问题,我们正在寻找直线 a 1 x 1 + a 2 x 2 = b 上使得量 f ( x ) = s 1 x 1 2 + s 2 x 2 2 最小化的点 ( x 1 , x 2 ),目标函数的等高线是同心椭圆,覆盖整个 2 平面。获胜的椭圆(具有最小等高线值的椭圆)是在获胜点处与直线相切的椭圆(图 10-14)。在这一点上,椭圆的梯度向量和约束的梯度向量是对齐的,这正是拉格朗日乘数公式给我们的:制定拉格朗日函数,放宽约束,但在目标函数中支付一个等于拉格朗日乘数 p 乘以我们在目标函数中放松的量的惩罚,从而最小化无约束问题。

( x ; p ) = f ( x ) + p ( b - g ( x ) ) = s 1 x 1 2 + s 2 x 2 2 + p ( b - a 1 x 1 - a 2 x 2 )

当我们最小化拉格朗日函数时,我们将其梯度设为零,这导致 f ( x ) = p g ( x )。这意味着目标函数的梯度向量与优化点处约束的梯度向量平行。由于任何函数的梯度向量垂直于其等高线,这意味着约束实际上与最小化点处的目标函数的等高线相切。因此,要找到优化点,我们寻找目标函数的等高线,看它何时恰好与约束相切。

150

图 10-14。二次函数的水平集是同心椭圆,每个椭圆都有一个恒定值。当我们施加线性约束x 1 + x 2 = 2 . 5时,我们得到优化器(2,0.5),恰好在一个水平集与约束相切的点。最优水平集的值为x 1 2 + 4 x 2 = 5

另一个帮助我们可视化拉格朗日和即将到来的极小极大定理的例子是一个简单的一维例子:

min x=1 x 2

拉格朗日是 ( x ; p ) = x 2 - p ( 1 - x )。我们使用这个玩具例子,其优化器显然是x = 1,最小值为 1,以便我们可以可视化拉格朗日。回想一下,拉格朗日公式使维度跳跃,这种情况下我们有一个约束,所以维度从一维增加到二维,在我们有限的三维世界中,我们只能可视化两个变量(xp)的函数。图 10-15 展示了我们简单拉格朗日函数的景观,现在代表了具有线性约束的二次优化问题的拉格朗日公式。在图 10-15 中需要注意的主要事项是这类问题的优化器( x ; p )发生在拉格朗日的鞍点处:这些点是拉格朗日函数在一个变量中是正的,而在另一个变量中是负的二阶导数,因此拉格朗日函数的景观在一个变量(x)中是凸的,在另一个变量(p)中是凹的。

150

图 10-15。约束问题的优化器发生在拉格朗日的鞍点(请注意,拉格朗日本身的最小值是- ,但这不是我们关心的,因为我们关心的是具有线性约束的二次函数的优化器)。

定位拉格朗日的鞍点(给出相应约束问题的优化器)的一种方法是解 ( x ; p ) = 0 得到xp,但这是对简单问题(如手头的简单问题)或小规模问题有效的蛮力方法。另一种找到这些鞍点的方法是先在x中最小化,然后在p中最大化(图 10-16)。另一种方法是先在p中最大化,然后在x中最小化。极小极大定理表明这两条路径是相同的。

150

图 10-16。在 x 上最小化然后在 p 上最大化得到max p x ( p ) = x ( p ) =鞍点。这将得到与先在p上最大化然后在x*上最小化相同的答案。

因此,在鞍点( x , p )处,我们有 ( x ; p ) = 0(与(x;p) x = 0(x;p) p = 0),以及

min x max p,holdxfixed ( x ; p ) = max p min x,holdpfixed ( x ; p )

我们已经完整地展示了,在x中的受约束最小化问题中,我们有另一个在 Lagrange 乘子p中的受约束最大化问题。Lagrange 乘子、对偶性和受约束优化之间的相互作用得到了充分展示。

现在我们已经讨论了重要的思想,让我们回过头来将它们放在我们开始这个小节的具有线性约束的高维二次问题的背景中:

min Ax =b 1 2 x t S x ,

其中S是对称且正定的矩阵。带有放松约束的 Lagrange 公式是:

min ( x ; p ) = min 1 2 x t S x + p . ( b - A x ) .

解决这个无约束问题,无论是通过设置 ( x ; p ) = 0 ,或者通过在 x 上最小化然后在 p 上最大化,或者通过在 p 上最大化然后在 x 上最小化,我们得到相同的解 ( x ; p ),这发生在我们高维拉格朗日函数的鞍点处,并给出了目标函数的最优值(这个问题的简单结构的优势是我们可以手动解决):

minimum cost f = 1 2 b . (AS -1 A t ) -1 b

此外,最优的影子价格是:p * = df db = (AS -1 A t ) -1 b

我们需要在这里学习的最后一件事是在更高维度中对鞍点的表征。对于一维约束问题,标志是拉格朗日函数的二阶导数(这是一个关于xp的函数)在一个变量中为负,在另一个变量中为正。高维度的类比是:Hessian 矩阵(二阶导数矩阵)的特征值在一组变量中为负,在另一组变量中为正,因此在一组变量中是凹的,在另一组变量中是凸的。我们的讨论适用于优化任何高维目标函数,该函数在一组变量中是凸的,在另一组变量中是凹的。这是表明景观具有鞍点的标志。对于拉格朗日函数,鞍点恰好是约束问题达到最小值的地方。

这是否适用于线性约束的线性优化问题,在运筹学中随处可见?是的,只要我们在问题中所有系数的符号正确,例如我们在前面子节中看到的最大流最小割和两人零和博弈的例子。

敏感性

在这里,我们关心优化问题及其解决方案对其输入数据变化的敏感性。也就是说,如果我们稍微改变c 、或A、或b ,那么最优解x 和最优成本c . x 会发生什么?我们能否从旧解中获得新的最优解?在什么条件下我们可以这样做?这些是敏感性分析所涉及的一些重要情况:

  1. 我们已经将对偶问题中的最优p 解释为边际价格的向量。这与敏感性分析有关:最优成本相对于约束值的变化率。

  2. 如果我们添加一个新的决策变量,我们会检查它的降低成本,如果是负的,我们会向表中添加一个新列并从那里继续。

  3. 如果b c 的一个元素改变了δ,我们会得到一个δ值的区间,使得相同的基础仍然是最优的。

  4. 如果A的一个元素改变了δ,类似的分析是可能的。然而,如果这种改变影响了基本列的一个元素,情况就有些复杂了。

一般来说,如果我们有一个函数,我们想要了解它对其中一个输入的变化的敏感性,那就类似于询问关于该输入的一阶导数(在某个状态下),或者在该状态下的离散一阶导数(有限差分)。这里使得敏感性问题更有趣的是,我们正在处理受限问题,并检查问题的各种输入的小变化的影响。

博弈论和多智能体

博弈论对经济学、政治、军事行动、多智能体人工智能以及基本上对建模任何存在对手或竞争者的环境都非常重要,我们必须在这些条件下做出决策或制定策略。我们的最优策略受到我们对手策略的严重影响,无论我们是否了解它们或只是在猜测。

最简单和最容易理解的博弈论设置是两人零和博弈,我们在讨论对偶性时看到了这一点。在这里,有两个竞争实体,其中一个实体的损失是另一个实体的获胜,例如,两个政治竞选活动或两个竞争公司。将理论扩展到更复杂的现实生活情况,有许多竞争对手相互之间具有不同的优势和劣势,合作程度不同,以及许多相互关联的策略,一直是一个挑战。理论能够准确描绘和分析的情况与现实生活情况之间仍然存在差距。进展正在发生,许多研究人员正在研究这个问题,因为这样一个完整的理论将给世界带来难以置信的好处。想象一下能够从上方查看对手的整个网络,了解他们的动向、联系、可能的策略及其后果。

对于多智体环境,博弈论模型了每个涉及智体(玩家、公司、国家、军队、政治活动等)的理性行为或决策过程。在这个意义上,多智体的博弈论类似于单一智体的决策理论。

对于非合作博弈论(智体独立做出决策)最重要的概念是Nash 均衡:游戏的策略大纲,其中每个智体没有动机偏离大纲规定的策略。也就是说,如果他们偏离策略,智体将变得更糟,当然,假设每个人都是理性行事。

正如我们在对偶性部分看到的那样,对于两人零和博弈,我们可以将其建模为一个极小极大问题,并使用极小极大定理。我们也可以将其建模为一个线性优化问题,其中一个玩家解决原始问题,另一个解决对偶问题。这意味着我们可以为第一个玩家或第二个玩家设置优化问题。这两个问题最终会得到相同的解决方案。在这里,我们为两个玩家的游戏中所有策略的收益表提供了,目标是找到最大化每个玩家的收益(或最小化损失)的策略组合。直观地说,我们可以看到为什么对偶性内置在这个问题中。两个玩家互相推动,每个玩家的最佳策略解决了原始问题和对偶问题。

我们还可以使用图和图论的结果来分析两人博弈。这类似于我们如何将网络中的最大流量问题制定为线性优化问题。最终,数学中的许多事物都能很好地连接在一起,其中最令人满意的感觉之一就是当我们理解这些联系时。

对于多智体,有一些可用于决策的技术,包括:投票程序、用于分配稀缺资源的拍卖、用于达成协议的讨价还价,以及用于任务共享的合同网络协议。在数学建模多智体博弈方面,我们将在第十三章(人工智能和偏微分方程)中讨论哈密尔顿-雅可比-贝尔曼偏微分方程。在这里,为了找到每个玩家的最佳策略,我们必须解决一个高维的哈密尔顿-雅可比-贝尔曼类型的偏微分方程,用于游戏的价值函数。在深度学习之前,这些类型的高维偏微分方程是难以处理的,人们不得不进行许多近似,或者不考虑所有参与实体。最近(2018 年),一种深度学习技术已被应用于解决这些高维偏微分方程,一旦重新制定为带有终端条件的反向随机微分方程(如果您不知道这意味着什么,不用担心。这对本章不重要)。

我们在本书中早些时候遇到了另一个两人对抗性博弈理论设置,当时讨论生成对抗网络时,在第八章中,关于概率生成模型。

排队。

队列无处不在:为机器计算作业、船厂的服务队列、急诊室的队列、机场办理登机手续的队列,以及当地星巴克店的队列。设计良好的队列系统将为不同的设施和整个经济节省大量的时间、精力和金钱。它们将提高我们整体的幸福感。

队列的数学建模的目标是确定适当的服务水平,以最小化等待时间。该模型可能包括优先级规则,这意味着有优先级组,成员接受服务的顺序取决于其优先级组。它可能还包括按顺序或并行发生的不同类型的服务,或者一些按顺序进行,另一些并行进行(例如,在船舶维护设施中)。一些模型包括多个服务设施,一个排队网络。

关于排队理论有成千上万篇论文。重要的是要认识到排队数学模型的基本要素:

  • 队列的成员(顾客、船只、工作、患者)以一定的到达时间到达。如果到达过程是随机的,那么数学模型必须决定这种到达时间遵循的概率分布,要么来自数据,要么来自已知用于建模此类时间的数学分布。一些模型假设到达时间恒定。其他模型假设指数分布(马尔可夫过程),因为它便于数学分析并更好地模拟实际过程。其他模型假设Erlang分布,允许不同时间间隔的不同指数分布。其他模型假设更一般的分布。分布越一般,数学分析就越困难。数值模拟是我们永远的好朋友。

  • 可用的服务器数量(并行和顺序):一个整数。

  • 服务时间也遵循某种概率分布,我们必须决定。常见的分布类似于用于到达时间的分布。

此外,数学模型还必须跟踪以下内容:

  • 完整排队系统中初始成员的数量(等待和当前正在接受服务的成员)。

  • 在给定的后续时间点,完整排队系统中有n个成员的概率。

最后,该模型希望计算排队系统的稳态

  • 在完整排队系统中有n个成员的概率。

  • 每单位时间到达的新成员的预期数量。

  • 每单位时间完成服务的成员的预期数量。

  • 系统中每个成员的预期等待时间。

成员以一定的平均速率进入队列,等待接受服务,以一定的平均速率接受服务,然后离开设施。数学模型必须量化这些并平衡它们。

库存

随着供应链中目前的短缺,超市货架上空空如也,汽车维修零件短缺,新车、家庭装修材料等物资短缺,显然供需之间存在差距。商店补充货物之间的时间间隔增加,导致积压、低生产率和整体经济放缓。库存管理的数学模型量化了供应(随机或确定性)、需求,并制定了一个最佳的库存策略,用于确定何时补充和决定每次补充所需的数量。理想情况下,该模型必须能够访问一个信息处理系统,收集有关当前库存水平的数据,并在何时以及以多少数量补充它们时发出信号。

运营研究的机器学习

首先,与十年前相比,当今运营研究中非常令人兴奋的是,能够解决庞大的运营研究问题,有时涉及数千万个约束和决策变量。我们要感谢计算能力的爆炸和运营研究算法的计算机实现的持续改进。

此外,机器学习可以帮助预测进入运筹学模型的许多参数的值,利用大量可用数据。如果这些参数难以测量,建模者必须将它们从模型中移除或对其值进行假设。由于更准确的机器学习模型能够考虑成千上万的变量,这种情况不再存在。

最后,机器学习可以通过学习哪些空间部分值得关注或哪些子问题应优先考虑,加快在组合性大的搜索空间中搜索的速度。这正是文章《学习委派大规模车辆路径规划(2021)》所做的,比现有的路径规划算法提高了 10 到 100 倍的车辆路径规划速度。

在机器学习和运筹学交叉领域的类似研究正在取得巨大进展和可扩展解决方案。来自会议《运筹学遇见机器学习》的摘要列表提供了许多相关项目,例如实时数据综合和处理,从废物箱传感器中获取数据(跟踪容量)以实现更高效的废物收集操作(由于这依赖于实时数据,团队依赖于动态路由)。另一个很好的例子是自行车共享系统,其目标是预测每个位置所需的自行车数量,并分配团队以有效地分配所需数量的自行车。以下是摘要:*自行车共享系统控制室的运营商不断重新分配自行车到最有可能需要的地方,这需要对每个站点所需自行车数量的最佳洞察,并计划有效的路线以帮助相应地重新分配自行车。预测引擎和决策优化被用来计算每个站点在任何给定时间所需的最佳自行车数量,并计划有效的路线以帮助相应地重新分配自行车。DecisionBrain 和 IBM 为伦敦的自行车共享系统提供的解决方案是第一个利用优化和机器学习来解决自行车租赁库存、分配和维护问题的应用,可以轻松地重新部署到世界各地的其他自行车共享系统中。*实际上,DecisionBrain 的项目值得浏览和深思。

目前,我的团队和我正在解决我所在城市公共交通部门的一个问题。这是一个完美的场景,机器学习与运筹学相遇:利用历史乘客数据,特别是城市每个公交车站的日常上下车人数,以及人口密度、人口统计数据、脆弱性、城市分区数据、汽车拥有量、大学入学率和停车数据,我们使用神经网络来预测每个站点的供需模式,然后我们利用这些数据和运筹学中的最佳网络设计来重新设计公交路线,以便公交车站,特别是城市中最社会脆弱地区的车站,得到充分和高效的服务。

哈密尔顿-雅各比-贝尔曼方程

运筹学、博弈论和偏微分方程领域通过动态规划和哈密尔顿-雅可比-贝尔曼偏微分方程相交。首次在动态规划的背景下提出维度诅咒这个术语的是理查德·贝尔曼(数学家,1920-1984 年)。现在,维度诅咒使得这个非常有用的方程在现实生活中的应用受到限制,无法涵盖游戏中的所有参与者(或竞争对手、国家、军队),并解决他们的最佳策略,或者在运筹学问题中涉及的数千个变量,比如最佳资源分配问题。随着深度学习的发展,情况已经发生了变化。论文使用深度学习解决高维偏微分方程(2018)提出了一种解决这个方程和其他高维问题的方法。我们将在第十三章中讨论作者是如何做到的,关于人工智能和偏微分方程。

人工智能的运筹学

运筹学是基于最优解的决策科学。人类总是试图根据可用情况做出决策。人工智能旨在复制人类智能的所有方面,包括决策制定。在这个意义上,运筹学采用的决策制定方法自然地适用于人工智能。动态规划、马尔可夫链、最优控制和哈密尔顿-雅可比-贝尔曼方程、博弈论和多智能体游戏、网络优化等思想,随着几十年来人工智能的发展而不断进步。事实上,许多初创公司将自己打造成人工智能公司,而实际上他们在做的是古老的(而且很棒的)运筹学。

总结和展望

运筹学是在当前知识和情况下做出最佳决策的领域。它总是要找到在非常高维空间中搜索优化器的巧妙方法。

本书贯穿始终的一个主题是维度诅咒,以及研究人员为找到绕过它的方法所做的所有努力。在没有哪个领域像运筹学那样广泛地出现这种诅咒。在这里,随着特定问题中参与者数量的增加,搜索空间与组合增长:路线上的城市数量、竞争实体数量、人数、商品数量等。有非常强大的精确方法和启发式方法,但在速度和规模方面还有很大的改进空间。

机器学习,特别是深度学习,提供了一种从先前解决的问题、标记数据或模拟数据中学习的方法。如果我们能够确定瓶颈并能够将瓶颈的来源表述为一个机器学习问题,那么这将加快优化搜索的速度。例如,一个瓶颈可能是:我们有太多子问题需要解决,但我们不知道应该优先解决哪些问题以便快速接近最优解。为了使用机器学习来解决这个问题,我们需要一个已解决问题和子问题的数据集,并让机器学习模型学习哪些子问题应该优先解决。一旦模型学会了这一点,我们就可以用它来加速解决新问题。

运筹学中机器学习的其他用途包括业务常规类型的机器学习:从可用数据(实时或历史数据)中预测需求,然后使用运筹学来优化资源分配。在这里,机器学习有助于更好地预测需求,从而提高效率并减少浪费。

在这一章中,我们对运筹学领域及其最重要的问题类型进行了广泛概述。我们特别强调了线性优化、网络和对偶性。针对许多有用问题都有强大的软件包可用。我们希望这些软件包能不断整合该领域的最新进展。

在初级运筹学课程中通常不教授的两个主题是用于最优控制的 Hamilton Jacobi Bellman 偏微分方程和多人游戏的策略,以及使用变分法来优化泛函。这些通常被认为是偏微分方程中的高级主题。我们在这里讨论它们是因为它们都自然地与优化和运筹学联系在一起。此外,在这种背景下观察它们可以揭开它们对应领域的神秘面纱。

在进行运筹学和优化以降低成本、增加收入、提高时间效率等方面时,重要的是我们的优化模型不要忽视人为因素。如果一个调度模型的输出通过不稳定的时间表来保持某个公司的准时表现而扰乱低工资工人的生活,那么这就不是一个好模型,公司依赖的工人的生活质量和生计需要被量化然后纳入模型中。是的,生活质量需要被量化,因为其他一切都被纳入考虑,我们不能忽略这一点。像亚马逊、星巴克、麦当劳等拥有数十万低工资工人的公司有责任确保他们的运筹学算法不会让他们的工人陷入贫困。

我们以这段摘自 1960 年查尔斯·希奇撰写的关于运筹学中的不确定性的论文结束这一章。阅读这篇论文(括号内为我的编辑),人们不禁会思考自 1960 年以来运筹学领域取得了多大进步:

决策过程中没有比不确定性更普遍的特征了。作为运营研究者,当我们试图简化分析时,假设情况可以用确定性等价物来描述,我们可能会歪曲事实,甚至可能造成如此严重的错误,以至于使问题虚假,并给出一个荒谬的解决方案。例如,我们如何帮助军方做出发展决策——比如决定开发哪种飞机或导弹,当问题的本质是没有人能准确预测开发任何竞争装备需要多长时间,或者使其投入运营,它们将花费多少,性能如何,或者在未来的某个不确定日期,世界会是什么样子(如果世界确实还存在的话)?当我说“无法准确预测”时,我并没有夸大。我们通常发现,例如,新设备的生产成本在开发的早期阶段被低估了两到二十倍(不是 2 到 20%,而是两到二十倍)。为什么它们总是被低估,而不是高估,我留给你们丰富的想象力。[...] 另一件[运营研究者]经常可以做的事情,特别是涉及研究和开发的问题,是确定关键的不确定性并推荐减少它们的策略——购买信息。如果你不知道两种不同的导弹制导技术中哪一种会更好,你最好的建议很可能是:让它们都继续开发一段时间,当有更多更好的信息可用时再在它们之间做出选择。不要在意那些称你优柔寡断的人。你可以证明这种优柔寡断可以节省金钱和时间。当然,你不能尝试所有的事情。没有足够的预算。没有足够的资源。你还记得我们曾经说过“如果你给军事部门他们要求的一切,他们会试图加固月球!”(我们将不得不改变这种比喻。)实际上,正是由于资源的限制,运营研究和运营研究者才显得重要。如果没有资源的限制,我们就没有问题。我们的工作和机会是在限制条件下找到或发明一种更好的适应不确定世界的模式,比我们的上级在没有我们的情况下会找到的更好的方式;或者考虑成本和回报,购买信息以减少不确定性。

第十一章:概率

概率论是数学中最美丽的学科之一,它将我们带回到随机和确定性领域之间,这本应该是魔术的事情,但结果却是数学及其奇迹。概率提供了一种系统化的方法来量化随机性,控制不确定性,并将逻辑和推理扩展到在人工智能中至关重要的情况下:当信息和知识包含不确定性时,和/或当代理在不可预测或部分观察的环境中导航时。在这种情况下,代理计算关于某个环境的未观察方面的概率,然后基于这些概率做出决策。

人类对不确定性感到不舒服,但对近似和期望感到舒适。他们不会清楚地知道每一天的每一刻将如何发展,而是在路上做出决定。一个概率智能机器存在于概率世界中,而不是确定性和完全预定的真理和谬误中。

在整本书中,我们在需要时使用了概率论的术语和技术。通过这个过程,我们现在意识到我们需要熟练掌握联合概率分布(例如数据特征的联合概率分布)、条件概率、独立性、贝叶斯定理和马尔可夫过程。我们也意识到我们可以通过计算平均值和期望回到确定性世界。

这本书的每一章都有一个特点,那就是每一章都需要有自己的书来进行深入和全面的讨论。这在概率论的章节中尤为真实,因为其中涉及到成千上万的主题。我不得不做出选择,所以我选择在这一章中涵盖的主题基于三个标准:

  1. 在这本书中我们已经使用了与概率有关的内容。

  2. 作为学生,我在概率论中最困惑的是(比如在计算概率时为什么需要测度论?)。

  3. 我们还需要从概率论中了解哪些内容以应用于人工智能。

概率在这本书中的哪些地方出现了?

让我们快速列出在这本书中使用概率或采用随机方法的地方。我们将这个列表视为人工智能的基本概率。请注意,先验概率是无条件的,因为它们是在观察数据或证据之前的,而后验概率是有条件的,因为它们的值是在观察相关数据后条件化的。在接收到新的和相关的证据后,我们对某事物的信念程度会发生变化是有道理的。通常我们追求的是所有相关变量的联合概率分布,但这通常太大了,而且完全构建它所需的信息并不总是可用的。

以下是列表:

  1. 在最小化确定性机器学习模型(如回归、支持向量机、神经网络等)的损失函数时,我们使用随机梯度下降及其变体,在每个梯度下降步骤中随机选择训练数据实例的子集,而不是使用整个训练数据集,以加快计算速度。

  2. 在图模型的第九章中,我们多次利用了图上的随机游走,通过图的加权邻接矩阵实现这些游走。

  3. 在运筹学的第十章中出现了特定的概率分布,比如排队中顾客的到达和服务时间的概率分布。

  4. 动态决策和马尔可夫过程也出现在第十章的运筹学中,对于人工智能中的强化学习至关重要。它们将在本章中再次出现,然后在第十三章中再次出现,这次是在汉密尔顿雅可比贝尔曼方程的背景下。

  5. 在第十章中的两人零和博弈中,每个玩家都有一定概率采取某种动作,我们利用这一点来计算玩家的最优策略和预期收益。

  6. 蒙特卡洛模拟方法是依赖于重复随机抽样来数值解决确定性问题的计算算法。我们在第十三章中以 AI 和 PDEs 为例进行了说明。

  7. 神经网络的普遍定理:我们多次提到这一点,我们将在本章中证明它。这个证明是本书中唯一的理论部分,它将为我们提供测度论和泛函分析的美妙味道。

  8. 概率机器学习模型学习数据特征的联合概率分布P r o b ( x 1 , x 2 , , x n , y target ),而不是学习这些特征的确定性函数。这个联合概率分布编码了这些特征同时发生的可能性。给定输入数据特征( x 1 , x 2 , , x n ),模型输出目标变量在给定数据特征时的条件概率P r o b ( y predict | x 1 , x 2 , , x n ),而不是输出y predict作为特征的确定性函数:y predict = f ( x 1 , x 2 , , x n )

  9. 随机变量及与之相关的两个最重要的量,即期望(随机变量的期望平均值)和方差(围绕平均值的扩散程度的度量):我们一直在使用它们,但没有正式定义。我们将在本章中定义它们。

  10. 概率的乘法规则或链式规则,即

    P r o b ( x 1 , x 2 ) = P r o b ( x 1 | x 2 ) P r o b ( x 2 ) = P r o b ( x 2 | x 1 ) P r o b ( x 1 )

    或者对于超过两个变量的情况,比如三个,不失一般性:

    P r o b ( x 1 , x 2 , x 3 ) = P r o b ( x 1 | x 2 , x 3 ) P r o b ( x 2 , x 3 ) = P r o b ( x 1 | x 2 , x 3 ) P r o b ( x 2 | x 3 ) P r o b ( x 3 )

  11. 独立性和条件独立性的概念是基础性的。如果一个事件的发生不影响另一个事件发生的概率,则这两个事件是独立的。所考虑特征的独立性极大地简化了问题。它帮助我们解开许多变量的复杂联合分布,将它们简化为更少变量的简单乘积,并使许多以前难以处理的计算变得可行。这极大地简化了世界的概率解释。注意独立性的区别,即仅两个事件的独立性P r o b ( x 1 , x 2 ) = P r o b ( x 1 ) P r o b ( x 2 ))和许多事件的独立性,这是一个强假设,其中每个事件都独立于其他事件的任何交集。

  12. 对于第八章的概率生成模型,我们假设了一个先验概率分布,通过神经网络传递,并调整其参数。

  13. 在讨论联合和条件概率时,贝叶斯定理是至关重要的。它帮助我们量化代理的信念相对于证据。我们在许多情境中使用它,立即展示了它的用处,比如:

    P r o b ( d i s e a s e | s y m p t o m s ) = Prob(symptoms|disease)Prob(disease) Prob(symptoms)

    P r o b ( t a r g e t | d a t a ) = Prob(data|target)Prob(target) Prob(data)

    P r o b ( t a r g e t | e v i d e n c e ) = Prob(evidence|target)Prob(target) Prob(evidence) .

    P r o b ( c a u s e | e f f e c t ) = Prob(effect|cause)Prob(cause) Prob(effect) .

    请注意,在最后一个公式中,P r o b ( c a u s e | e f f e c t ) 量化了对角方向,而P r o b ( e f f e c t | c a u s e ) 量化了因果方向。

  14. 贝叶斯网络是表示变量之间依赖关系的数据结构。在这里,我们总结了有向图中的变量关系,并使用它来确定我们需要跟踪和更新哪些条件概率表,以便根据新证据进行更新:我们跟踪子节点在观察其父节点的条件下的概率。节点的父节点是直接影响该节点的任何变量。在这个意义上,贝叶斯网络是联合概率分布的表示,简化了我们知道涉及变量如何相互关联(哪些变量是哪些变量的父节点):

    P r o b ( x 1 , x 2 , , x n ) = Π i=1 n P r o b ( x i | p a r e n t s ( X i ) )

  15. 在机器学习中,我们可以在回归模型和分类模型之间划清界限。在第八章中的概率生成模型中,我们遇到了一个用于分类的流行概率模型:朴素贝叶斯。在因果效应语言中,朴素假设是一些观察到的多个效应在给定原因的情况下是独立的,因此我们可以写成:

    P r o b ( c a u s e | e f f e c t 1 , e f f e c t 2 , e f f e c t 3 ) = P ( c a u s e ) P ( e f f e c t 1 | c a u s e ) P ( e f f e c t 2 | c a u s e ) P ( e f f e c t 3 | c a u s e )

    当上述公式用于给定数据特征的分类时,原因是类别。此外,我们可以绘制代表这种设置的贝叶斯网络。原因变量是父节点,所有效应都是从一个父节点衍生出来的子节点(图 11-1)。

300

图 11-1. 代表有共同原因的三个效应的贝叶斯网络。

AI 所需的更多基本知识是什么?

我们需要一些在本书中没有得到关注或仅仅是偶尔提到并被推迟到本章进行更详细讨论的额外主题。这些包括:

  • Judea Pearl 的因果建模和 do 计算

  • 一些悖论

  • 大型随机矩阵和高维概率

  • 随机过程,如随机游走,布朗运动等

  • 马尔可夫决策过程和强化学习

  • 概率论及其在 AI 中的应用

本章的其余部分关注上述主题。

因果建模和 do 计算

原则上,贝叶斯网络中相关变量之间的箭头可以指向任何方向。它们最终都导致相同的联合概率分布,尽管有些方式比其他方式更复杂。

相比之下,因果网络是那些特殊的贝叶斯网络,其中图的有向边不能指向除了因果方向以外的任何方向。对于这些网络,在构建连接和它们的方向时,我们必须更加留心。图 11-2 展示了一个因果贝叶斯网络的示例。

300

图 11-2. 因果贝叶斯网络。

请注意,贝叶斯网络和因果网络都对哪些变量听从哪些变量做出了强烈的假设。

具有因果推理能力的代理人,在人类术语中,比那些仅仅观察数据模式然后基于相关模式做出决策的代理人功能更高

以下区别至关重要:

  • 在贝叶斯网络中,我们只需要知道两个变量是否在概率上相关。火和烟在概率上相关吗?

  • 在因果网络中,我们进一步询问哪个变量对哪个变量做出响应:烟对火(因此我们在图中从火到烟画一个箭头);或火对烟(因此我们在图中从烟到火画一个箭头)?

我们需要的是一个数学框架来干预,以量化固定一个变量值的效果。这被称为do 计算(与统计观察和计数计算相对)。让我们介绍do 计算的两个基本公式:

  • 调整公式

  • 背门准则

根据因果推理的发明者Judea Pearl,他的为什么之书(2020 年)激发了本节和下一节的讨论,这些允许研究人员探索和绘制所有可能的干预路径,无论多么曲折,甚至可以节省我们运行随机对照试验的成本和困难,即使这些试验在物理上是可行的并且在法律上是允许的。

另一种选择:do 计算

给定一个因果网络,我们基于常识和专业知识的组合构建,同时为每个变量添加额外的未知原因,以确保我们考虑了一切,总体公式是联合概率分布的公式:

P r o b ( x 1 , x 2 , , x n ) = Π i=1 n P r o b ( x i | p a r e n t s ( X i ) ) .

然后我们干预,应用d o ( X j = x ):这会切断指向X j的任何边,并影响X j的后代的所有条件概率,导致新的联合概率分布,其中不再包括干预变量的条件概率:我们已经将其值设置为X j = x 的概率为一,任何其他值的概率为零。图 11-2 显示了当我们打开洒水器时,原始网络中指向它的所有箭头都被切断。

因此我们有:

P r o b intervened ( x 1 , x 2 , , x n ) = Π ij n P r o b ( x i | p a r e n t s ( X i ) ) if x j = x * 0 otherwise

调整公式

我们真正关心的是设置X j = x *如何影响网络中每个其他变量的概率,并且我们希望从原始未干预的网络中计算这些值:用数学术语来说,没有 do 运算符,因为我们可以观察数据来获取这些值,而不是进行新实验。

为此,我们引入调整公式,或者,控制混杂因素(可能的共同原因):这是X j及其父节点对X i影响的加权平均值。权重是父节点值的先验概率:

P r o b ( x i | d o ( X j = x ) ) = P r o b intervened ( X i = x i ) = parents(X j ) P r o b ( x i | x , p a r e n t s ( X j ) ) P r o b ( p a r e n t s ( X j ) )

注意,上述公式实现了我们消除do运算符的目标,并使我们重新通过观察数据而不是运行一些昂贵的干预实验或随机对照试验来找到我们的条件概率。

背门标准,或控制混杂因素

因果图表的故事还有更多。我们想知道对图表中某个下游变量的干预d o ( X j = x )的效果。我们应该能够对图表中另一个祖先的值进行条件处理:这也导致我们关心的下游变量。在因果建模中,我们称这个过程为阻断背门背门标准*:

P r o b ( x downstream | d o ( X j = x ) ) = P r o b intervened ( X downstream = x downstream ) = anscestor(X downstream ) P r o b ( x downstream | x , a n s c e s t o r ( X downstream ) ) P r o b ( a n s c e s t o r ( X downstream ) )

控制混杂因素

科学家和统计学家预测干预效果的最常见方法,以便他们可以对因果关系进行陈述,是控制可能的共同原因或混杂因素。图 11-3 显示了变量 Z 作为 X 和 Y 之间怀疑的因果关系的混杂因素。

300

图 11-3. Z 是 X 和 Y 之间怀疑的因果关系的混杂因素。

这是因为,一般来说,混杂是观察和干预之间的混淆的主要来源。这也是著名的相关不意味因果的来源。在这里,我们看到一些奇怪而有趣的例子:高温是冰淇淋销售和鲨鱼袭击的混杂因素(但为什么有人会研究冰淇淋和鲨鱼之间的任何关系呢?)。背门标准和调整公式轻松解决了混杂因素对因果关系的规定的障碍。

如果我们确信已经获得了足够的deconfounder变量集合的数据来阻止干预和结果之间的所有背门路径,我们可以使用调整公式来控制混杂因素。为此,我们从数据中逐层估计因果效应,然后计算这些层的加权平均值,其中每个层根据其在人口中的普遍程度进行加权。

现在没有了背门标准,统计学家和科学家就无法保证任何调整是合法的。换句话说,背门标准保证了 deconfounder 的每个分层中的因果效应实际上是该分层中的观察趋势。

是否有更多的规则可以消除 do 运算符?

能够将我们从具有 do 运算符(干预)的表达式转换为没有 do 运算符(观察)的表达式的规则非常可取,因为它们消除了干预的需要:它们使我们能够通过纯粹的数据观察来估计因果效应。调整公式和背门标准确实为我们做到了这一点。

是否有更多的规则?更雄心勃勃的问题是:是否有一种方法可以事先决定某个因果模型是否适合于消除 do 运算符,以便我们知道模型的假设是否足以从观测数据中揭示因果效应而无需任何干预?了解这一点是巨大的!例如,如果模型的假设不足以消除 do 运算符,那么无论我们多聪明,都无法避免进行干预实验。另一方面,如果我们不必干预就能估计因果效应,那么节省是惊人的。这些本身就值得更深入地研究概率因果建模和 do 微积分。

为了理解朱迪亚·珀尔的 do 微积分,我们总是从因果图开始,考虑导致删除指向或指出感兴趣变量的边缘的条件。珀尔的三条规则给出了以下条件:

  1. 我们可以插入或删除观察:

    P r o b ( y | d o ( x ) , z , w ) = P r o b ( y | d o ( x ) , w )

  2. 我们可以插入或删除干预:

    P r o b ( y | d o ( x ) , d o ( z ) , w ) = P r o b ( y | d o ( x ) , w )

  3. 我们可以用观察替换干预:

    P r o b ( y | d o ( x ) , d o ( z ) , w ) = P r o b ( y | d o ( x ) , z , w )

有关 do 微积分的更多详细信息,请参见例如《重新审视 do 微积分,朱迪亚·珀尔,主题演讲,2012 年 8 月 17 日》

悖论和图表解释

人工智能代理需要能够处理悖论。我们都看过卡通片,其中一个机器人陷入疯狂的循环,甚至在逻辑遇到悖论时自行拆卸,螺丝和弹簧四处飞溅。我们不能让这种事情发生。此外,悖论经常出现在非常重要的领域,比如制药和医学领域,因此我们必须在数学的视角下仔细审视它们,并仔细揭开它们的神秘面纱。

让我们来看看三个著名的悖论:蒙蒂霍尔、伯克森和辛普森。我们将通过图表和因果模型来看待它们:蒙蒂霍尔和伯克森类型的悖论由于碰撞器而导致混淆,而辛普森类型的悖论由于混杂因素而导致混淆。人工智能代理应该配备这些图表作为其数据结构的一部分(或具有构建和调整它们的能力),以便进行正确推理。

朱迪亚·珀尔的《为什么之书(2020)》完美地表达了以下观点:

悖论反映了因果和关联之间的紧张关系。这种紧张关系始于它们站在因果阶梯的两个不同梯级上[观察、干预、反事实],并且由于人类直觉遵循因果逻辑,而数据符合概率和比例逻辑,这种紧张关系变得更加严重。当我们将在一个领域学到的规则错误地应用到另一个领域时,悖论就会产生。

蒙提霍尔问题

假设你参加一个游戏节目,有三扇门供你选择。其中一扇门后面是一辆汽车,其他的是山羊。你选择了一扇门,比如#1,主持人知道门后面是什么,打开了另一扇门,比如#3,里面有一只山羊。他对你说:“你想换门选#2 吗?”你改变选择门有利吗?

答案是是的,换门,因为如果不换门,你得到汽车的概率是 1/3,而换门后,概率就跳到了 2/3!这里需要注意的主要事情是主持人知道汽车在哪里,并选择打开一个他知道里面没有汽车的门。

那么,如果我们从最初的选择中换门,为什么赢得的概率会翻倍呢?因为主持人提供了新信息,只有在我们从最初没有信息的选择中换门时才会利用这些信息:

在不换门策略下

  • 如果我们最初选择了赢得的门(概率为 1/3),并且不换,那么我们就赢了。

  • 如果我们最初选择了一个失败的门(概率为 2/3),并且不换,那么我们就输了。

这意味着在不换门策略下,我们只会赢得 1/3 的时间。

在换门策略下

  • 如果我们最初选择了赢得的门(概率为 1/3),并且从中换门,那么我们就输了。

  • 如果我们最初选择了一个失败的门(概率为 2/3),新信息指向另一扇失败的门,我们换门,那么我们会赢,因为剩下的唯一一扇门就是赢得的门。

这意味着在换门策略下,我们会赢得 2/3 的时间。

当我们在图 11-4 中绘制这个游戏的图表时,我们意识到主持人选择打开的门有两个指向它的父母:你选择的门和汽车的位置。

300

图 11-4。蒙提霍尔悖论涉及的变量的因果图。

在这个碰撞器上进行条件处理会改变父母的概率。它在最初独立的父母之间创建了一种虚假的依赖关系!这类似于我们在遇到他们的孩子后改变对父母遗传特征的信念。这些是无因果关系的相关性,在我们对碰撞器进行条件处理时引起。

现在假设主持人在不知道自己选择的门是赢得还是失败的门的情况下选择了门。那么换门或不换门都不会改变赢得汽车的几率,因为在这种情况下,你和主持人都有相等的机会,1/3 的时间赢得,2/3 的时间输掉。现在当我们为这个完全随机且没有先验知识的游戏绘制图表时,汽车的位置和主持人选择打开的门之间没有箭头,因此在主持人的选择条件下,你选择的门和汽车的位置仍然是独立的

伯克森悖论

*1946 年,梅奥诊所的生物统计学家约瑟夫·伯克森指出了在医院环境中进行的观察性研究的一个特殊之处:即使两种疾病在整体人群中没有关联,它们在医院患者中可能会出现关联。1979 年,麦克马斯特大学的大卫·萨克特,一个各种统计偏差的专家,提供了强有力的证据证明伯克森悖论是真实的。在一个例子中,他研究了两组疾病:呼吸系统和骨骼。大约 7.5%的人口患有骨骼疾病,这个百分比与他们是否患有呼吸系统疾病无关。但对于住院患有呼吸系统疾病的人来说,骨骼疾病的发生率跃升至 25%!萨克特称这种现象为“入院率偏差”或“伯克森偏差”。

与蒙蒂·霍尔案例类似,导致伯克森悖论出现的罪魁祸首是一个碰撞器图,原本独立的两种疾病都指向了住院:患有这两种疾病的患者比只患有其中一种疾病的患者更有可能住院。当我们以住院为条件,也就是碰撞器时,最初独立变量之间出现了无因果相关的情况。我们现在已经习惯了碰撞器偏差。

辛普森悖论

想象一个悖论,如果让其自行发展,其结论是荒谬的:*当我们知道患者的性别时,我们不应该开药,因为数据显示这种药对男性和女性都有害;但如果性别未知,那么我们应该开药,因为数据显示这种药对整体人群有益!*这显然是荒谬的,我们的第一反应应该是抗议:给我看数据!

当人群的几个组合中出现趋势,但在合并这些组合时消失或反转时,我们认识到辛普森悖论。

让我们首先揭穿这个悖论。这是一个简单的分数(或比例)相加的数值错误。总之,当我们相加分数时,我们不能简单地将各自的分子和分母相加:

A B > a b and C D > c d A+C B+D > a+c b+d

例如,假设数据显示:

  • 服用药物的女性中有 3/40 患心脏病,而没有服用药物的女性中只有 1/20 患心脏病(3/40 > 1/20);

  • 服用药物的男性中有 8/20 患心脏病,而没有服用药物的男性中有 12/40 患心脏病(8/20 > 12/40)。

现在当我们合并女性和男性的数据时,不平等的方向发生了逆转:3/40 > 1/20 和 8/20 > 12/40 但是合理地 (3 + 8)/(40 + 20) < (1 + 12)/(20 + 40)。换句话说:在服用药物的 60 名男性和女性中,有 11 人患心脏病,而在没有服用药物的 60 名男性和女性中,有 13 人患心脏病。

然而,当我们以这种方式合并数据时,我们犯了一个简单的分数错误。换句话说,为了解决辛普森悖论,我们不应该简单地将分子和分母相加,然后期望不等式成立。请注意,服用药物的 60 人中,有 40 名女性和 20 名男性;而没有服用药物的 60 人中,有 20 名女性和 40 名男性。我们正在比较苹果和橙子,并且与性别混淆:性别影响是否给药和是否发生心脏病。图 11-5 中的图表说明了这种混淆关系。

250

图 11-5. 性别是服用药物和心脏病的混杂因素。

如果我们天真地合并比例时感觉有些不对劲,那是正确的:如果在每个地方都是公平的,那么全局也是公平的,或者如果在每个地方都是某种方式,那么我们应该期望全局也是这样。

这种错误经常发生并不奇怪,因为人类直到相对较近的时候才能正确理解分数。在领域如继承和贸易中,有古代文本中处理分数的错误。我们的大脑对分数的抵抗似乎仍然存在:我们在七年级学习分数,这也是许多人传说中对数学的憎恶的起源。

那么正确的数据合并方式是什么呢?我们七年级的智慧告诉我们使用公共分母 40,并根据性别进行条件判断:对于女性,3/40>2/40,对于男性,16/40>12/40。现在由于在一般人口中男性和女性的分布是相等的,我们应该取平均值,并得出结论(3/40+16/40)/2>(2/40+12/40)/2,也就是说,在一般人口中服用药物的心脏病发作率为 23.75%,不服用药物的为 17.5%。这里没有发生任何神奇和不合逻辑的逆转。此外,这种药物相当糟糕!

大型随机矩阵

大多数人工智能应用处理大量高维数据(大数据),这些数据以高维向量、矩阵或张量的形式组织,代表数据表、图像、自然语言、图网络等。这些数据中很多是嘈杂的或具有固有的随机性质。为了处理这样的数据,我们需要一个数学框架,结合了通常处理标量随机变量的概率和统计学,以及处理向量和矩阵的线性代数。

均值和方差仍然是核心概念,因此我们会发现许多关于所涉及的高维随机变量的期望和方差(不确定性)的陈述和结果。与标量情况类似,棘手的部分是控制方差,因此文献中的许多工作都会找到随机变量分布尾部(不等式)的界限,或者从均值一定距离内找到随机变量的可能性。

由于我们现在有了矩阵值随机变量,许多结果旨在了解它们的谱的行为(分布):特征值和特征向量。

随机向量和随机矩阵的例子

不足为奇的是,对大型随机矩阵的研究演变成了自己的理论。它们出现在各种重要应用中,从金融到神经科学再到物理学和技术设备的制造。以下仅是一些例子。这些具有重大影响,因此每个领域都有大量的数学社区。

量化金融

一个随机向量的例子是量化金融中的投资组合。我们经常需要决定如何在大量股票中进行投资,这些股票的价格波动是随机的,以实现最佳表现。投资组合本身是一个随时间演变的大型随机向量。同样,纳斯达克股票的每日回报率(纳斯达克包含 2500 多只股票)是一个随时间演变的大型随机向量。

神经科学

另一个例子来自神经科学:在大脑中建模神经元之间的突触连接网络时,随机矩阵会出现。在一定长度的t个连续时间间隔内,n个神经元发射的脉冲数是一个n × t随机矩阵。

数学物理学:维格纳矩阵

在数学物理学中,特别是在核物理学中,物理学家尤金·维格纳引入了随机矩阵来模拟重原子核和它们的谱。简而言之,他将重原子核谱线之间的间距与随机矩阵的特征值之间的间距联系起来。

Wigner 最初使用的确定性矩阵是系统的哈密顿量,它是描述核子中中子和质子之间所有相互作用的矩阵。对哈密顿量进行对角化以找到核的能级是不可能的,因此 Wigner 寻找了一种替代方法。他完全放弃了精确性和确定性,从概率的角度来看待问题:不是问能级究竟是什么,而是问类似的问题:

  • 在某个区间内找到一个能级的概率是多少?

  • 两个连续能级之间的距离在某个范围内的概率是多少?

  • 我们能否用具有正确对称性质的纯随机矩阵替换系统的哈密顿量?例如,在时间反演不变的量子系统中,哈密顿量是一个实对称矩阵(无限大)。在存在磁场的情况下,哈密顿量是一个复的厄米矩阵(实对称矩阵的复数对应)。在存在自旋轨道耦合(量子物理术语)的情况下,哈密顿量是辛(另一种特殊类型的对称矩阵)的。

类似地,Wigner 类型的随机矩阵出现在凝聚态物理中,我们在这里使用实对称 Wigner 矩阵模拟原子对或自旋对之间的相互作用。总的来说,Wigner 矩阵在随机矩阵理论中被认为是经典的

多元统计学:Wishart 矩阵和协方差

在多元统计学中,John Wishart 在想要估计大型随机向量的样本协方差矩阵时引入了随机矩阵。Wishart 随机矩阵在随机矩阵理论中也被认为是经典的。请注意,样本协方差矩阵是对总体协方差矩阵的估计。

在处理样本协方差矩阵时,一个常见的情况是观察到n维变量t次,也就是说,原始数据集是一个大小为n × t的矩阵。例如,我们可能需要估计大量资产的回报的协方差矩阵(使用较小的样本),比如:纳斯达克的 2500 只股票的日回报。如果我们使用 5 年的每日数据,考虑到一年有 252 个交易日,那么对于 2500 只股票,我们每只股票有 5×252=1260 个数据点。原始数据集将是一个大小为2500 × 1260的矩阵。这是一个观测次数小于变量数量的情况。我们还有其他情况,观测次数和变量数量相反,以及观测次数和变量数量相差很大的极端情况。在所有情况下,我们对样本协方差矩阵的特征值的概率分布感兴趣。

让我们写出协方差矩阵的条目公式。对于一个变量z 1(比如一只股票)有t次观察,其均值为z ¯ 1,我们有方差

σ 1 2 = (z 1 (1)-z ¯ 1 ) 2 +(z 1 (2)-z ¯ 1 ) 2 ++(z 1 (t)-z ¯ 1 ) 2 t

同样,对于每个变量z i,我们有它们的方差σ i 2。这些位于协方差矩阵的对角线上。现在每个非对角线σ ij条目是相应变量对的协方差:

σ ij = (z i (1)-z ¯ i )(z j (1)-z ¯ j )+(z i (2)-z ¯ i )(z j (2)-z ¯ j )++(z i (t)-z ¯ i )(z j (t)-z ¯ j ) t

协方差矩阵是对称的且正定的(具有正特征值)。协方差矩阵中的随机性通常源于嘈杂的观测。由于测量噪声是不可避免的,确定协方差矩阵在数学上变得更加复杂。另一个常见问题是样本通常不是独立的。相关样本引入了某种冗余,因此我们预期样本协方差矩阵的行为就好像我们观察到的样本比实际少。因此,我们必须在存在相关样本的情况下分析样本协方差矩阵。

动力系统

在平衡点附近的线性化动力系统(dx (t) dt = A x ( t ))。在混沌系统的背景下,我们想要了解初始条件的微小差异如何随着动力学的展开而传播。一种方法是在线性化未受扰动轨迹的附近线性化动力学。扰动会随着矩阵的乘积演化,对应于线性化动力学,作用在初始扰动上。

其他同样重要的例子

还有其他例子。在数论中,我们可以使用某些随机矩阵的特征值分布来建模黎曼 zeta 函数的零点分布。对于关注量子计算的人,这里有一个历史注记:在薛定谔方程之前,海森堡用他所称之为“矩阵力学”的术语制定了量子力学。最后,在第十三章中,我们将遇到“概率演化的主方程”。这涉及从系统的一个状态到另一个状态的转移概率的大矩阵。

随机矩阵理论中的主要考虑因素

根据问题的表述,出现的矩阵可能是确定性的或随机的。对于确定性向量和矩阵,经典的数值线性代数适用,但极高的维度迫使我们使用随机化来有效地进行矩阵乘法(通常为O ( n 3 ))、分解和计算谱(特征值和特征向量)。通过研究这些特征值和特征向量,我们可以了解矩阵的大量性质。在随机领域中,当矩阵是随机的时,它们也是随机的。那么我们如何计算它们并找到它们的概率分布(甚至只是它们的均值和方差或这些值的界限)?这是大型随机矩阵领域(或随机化线性代数,或高维概率)所涉及的问题类型。我们通常关注:

  • 涉及的随机数学对象:随机向量和随机矩阵。随机向量或随机矩阵的每个元素都是一个随机变量。这些随机变量可以是静态的随机变量,也可以随时间演变。当随机变量随时间演变时,它就成为“随机过程”。显然,随机过程在数学上比它们的静态对应物更加复杂。例如,我们可以对随时间演变的方差说些什么?

  • 随机投影:我们总是对投影到一些低维空间并保留基本信息感兴趣。这通常涉及将矩阵与向量相乘或将矩阵分解为更简单矩阵的乘积,例如奇异值分解。当数据不仅很大而且条目是随机的时,我们如何做到这一点?

  • 添加和乘以随机矩阵:请注意,标量随机变量的和与积也是随机变量,并且它们的分布已经得到了深入研究。同样,时间演变标量随机变量的和与积,这是布朗运动和随机微积分的基础,有大量文献支持。这个理论如何过渡到更高维度?

  • 计算随机矩阵的谱,并探索其(随机)特征值和特征向量的性质。

  • 计算随机矩阵的和与积的谱。

  • 乘以许多随机矩阵,而不仅仅是两个。这个问题在技术行业的许多情境中出现,例如,在研究光在一系列具有不同光学指数的板块中的传播时,或者在无序导线中电子的传播,或者位移在颗粒介质中的传播方式。

  • 矩阵的贝叶斯估计(贝叶斯任何事情总是涉及根据某些证据估计某事的概率):在这里,我们开始的矩阵(观测矩阵)是我们关心的真实矩阵的一个带有噪声的版本。噪声可以是加性的,因此观察到的矩阵E=真实矩阵+一个随机噪声矩阵。噪声也可以是乘性的,因此观察到的矩阵E=真实矩阵 × 随机噪声矩阵。一般来说,我们不知道真实矩阵,希望知道在观察到有噪声的矩阵的情况下这个矩阵的概率。也就是说,我们必须计算Prob(真实矩阵|有噪声的矩阵)

随机矩阵集合

在大多数应用中,我们会遇到(随机或确定性的)没有特定结构的大矩阵。随机矩阵理论的主要前提是,我们可以用某个随机矩阵集合的典型元素(期望元素)替换这样一个大复杂矩阵。大部分时间我们将注意力限制在具有实数元素的对称矩阵上,因为这些是数据分析和统计物理中最常见的矩阵。幸运的是,这些矩阵在数学上更容易分析。

谈到数学,我们喜欢多项式函数。它们是非线性的,足够复杂,可以捕捉周围世界中的复杂性,并且易于评估和进行计算。当我们研究大型随机矩阵时,会出现一种特殊类型的经过深入研究的多项式:正交多项式。正交多项式序列是一组多项式,使得序列中的任意两个不同多项式在某种内积下是正交的(它们的内积为零)。最广泛使用的正交多项式序列是:Hermite 多项式,Laguerre 多项式和 Jacobi 多项式(其中包括重要的 Chebyshev 多项式和 Legendre 多项式类)。在正交多项式领域中著名的人物,主要是在 19 世纪末期发展起来的,有 Chebyshev、Markov 和 Stieltjes。难怪这些名字在概率论中随处可见,从 Chebyshev 不等式到 Markov 链和过程再到 Stieltjes 变换。

以下三种基本的随机矩阵集合与正交多项式密切相关:

  1. Wigner: 这是高斯分布的矩阵等价物。一个 1×1 的 Wigner 矩阵是一个单个的高斯随机数。这与厄米特正交多项式密切相关。高斯分布及其相关的厄米特多项式在基础变量无上限和下限的情况下非常自然地出现。Wigner 随机矩阵的特征多项式的平均遵循简单的递归关系,使我们能够将它们表示为厄米特多项式。Wigner 集合是所有随机矩阵集合中最简单的。这些矩阵的所有元素都是高斯随机变量,唯一的约束是矩阵是实对称的(高斯正交集合),复共轭(高斯酉集合)或辛(高斯辛集合)。

  2. Wishart: 这是 gamma 分布的矩阵等价物。一个 1×1 的 Wishart 是一个 gamma 分布的数字。这与拉盖尔正交多项式密切相关。Gamma 分布和拉盖尔多项式出现在变量从下限(例如正变量)受限的问题中。Wishart 随机矩阵的特征多项式的平均遵循简单的递归关系,使我们能够将它们表示为拉盖尔多项式。

  3. Jacobi: 这是 beta 分布的矩阵等价物。一个 1×1 的 Wishart 是一个 beta 分布的数字。这与雅可比正交多项式密切相关。Beta 分布和雅可比多项式出现在变量从上限和下限受限的问题中。雅可比矩阵出现的一个自然情境是样本协方差矩阵。它们还出现在仅具有两个特征值的矩阵的加法或乘法的简单问题中。

与标量随机变量一样,我们研究随机矩阵集合的矩和 Stieltjes 变换。此外,由于我们处于矩阵领域,我们研究这些随机矩阵的特征值的联合概率分布。对于上述提到的集合,特征值之间存在强相关性,我们可以将它们视为通过成对排斥相互作用的粒子。这些被称为库仑排斥特征值,这个想法是从统计物理学中借鉴的(例如,有关矩阵特殊结构的特征值行为的更深入探讨,请参阅特征值模式(2003))。事实证明,在 Wigner 情况下,库仑气体问题的最可能位置与厄米特多项式的零点重合,在 Wishart 情况下与拉盖尔多项式的零点重合。此外,这些集合的特征值在其最可能位置周围波动非常小。

两个大型随机矩阵之和的特征值密度

除了找到随机矩阵集合的特征值的联合概率分布外,我们还关心大型随机矩阵之和的特征值密度(概率分布),以每个矩阵在总和中的情况为基础。戴森布朗运动出现在这个背景下。它是从标量随机变量到随机矩阵的布朗运动的扩展。此外,矩阵的傅立叶变换使我们能够定义标量独立同分布随机变量的生成函数的类比,并使用其对数来找到精心构造的随机矩阵之和的特征值密度。最后,我们可以将 Chernoff、Bernstein 和 Hoeffding 类型的不等式应用于有限个随机厄米矩阵的最大特征值。

大型随机矩阵的基本数学

在离开大型随机矩阵讨论之前,让我们强调一下如果我们想深入研究这一领域的必知内容。我们在本章中涉及了其中一些内容,其余内容留给您的搜索技能:

  • 计算谱:矩阵的特征值和特征向量(A v = λ v

  • 矩阵的特征多项式(d e t ( λ I - A )

  • 埃尔米特、拉盖尔和雅各比正交多项式

  • 高斯、伽玛和贝塔概率分布

  • 随机变量的矩和矩生成函数

  • 斯蒂尔杰斯变换

  • 切比雪夫一切

  • 马尔可夫一切

  • 切诺夫、伯恩斯坦和霍夫丁类型的不等式

  • 布朗运动和戴森布朗运动

截至 2022 年,最快的超级计算机是Frontier,世界上第一台艾克萨计算机(1.102 艾克萨 FLOPS),位于能源部奥克岭国家实验室。即使在这样一台超级计算机上,当矩阵非常大时,我们也无法应用数值线性代数(例如解涉及矩阵的方程组、找到其谱或找到其奇异值分解)。我们必须做的是对矩阵的列进行随机抽样。最好以导致最忠实逼近的概率抽样列,即方差最小的那个。例如,如果问题是将两个大矩阵AB相乘,我们不是均匀地从A中抽取一列和从B中对应的一行,而是选择A中的列和B中对应的行,概率为p jnorm(column j of A)norm(row j of B)成比例。这意味着我们更经常选择具有较大范数的列和行,从而更有可能捕捉乘积的重要部分

大型和非大型矩阵的列空间非常重要。记住给定矩阵A的列空间的三个最佳基础:

  1. 奇异值分解中的奇异向量,

  2. 来自 Gram Schmidt 过程的正交向量(矩阵的著名QR分解),

  3. 或者直接从A的列中选择线性独立的列。

随机过程

我们现在不再考虑静态(标量或向量或矩阵或张量)随机变量,而是考虑一个时间相关的随机变量。数学中的下一步总是包括时间演变实体。顺便说一句,人类尚未完全理解时间的本质,也没有找到表达其定义的方法。然而,我们理解运动和变化,一个系统从一个状态过渡到另一个状态,我们将时间与之联系起来。我们还将从一个状态过渡到另一个状态的概率联系起来。记住这一点,马尔可夫链很快就会出现。

随机过程是一个无限序列X 0 , X 1 , X 2 , . . .,其中我们将每个X t中的索引t视为离散时间。因此,X 0是时间0时的过程(或在某个特定时间0的随机量的值),X 1是时间1时的过程(或在某个特定时间1的随机量的值),依此类推。要正式定义一个随机变量,我们通常将其固定在我们称之为概率三元组的组合中:(样本空间,σ代数,概率测度)。暂时不要纠结于这个三元组的含义,而是纠结于一个随机过程X 0 , X 1 , X 2 , . . .中的所有随机变量都生活在相同的概率三元组上,从这个意义上说属于一个家族。此外,这些随机变量通常不是独立的。

同样重要(取决于应用)的是连续时间随机过程,其中X t现在编码了任意非负时间t的随机量的值。此外,这很容易与我们对时间的直观感知相吻合,即时间是连续的。

因此,随机过程是有限维多变量分布向无限维度的泛化。当试图证明随机过程的存在时,这种思考方式非常方便,因为我们可以借助允许我们通过依赖于组成分布的有限维集合扩展到无限维度的定理。

随机过程的例子无处不在。每当我们遇到波动时,我们就会想到这些:气体分子的运动,电流波动,金融市场中的股票价格,一段时间内呼叫中心接到的电话数量,赌徒的过程,以及这个有趣的微生物学领域中的例子,讨论在肠道中发现的细菌,血液、跳蚤或蜱虫的群落组装主要受随机过程控制,而肠道微生物组则由确定性过程决定

股市的例子在随机过程理论中是中心的,因为这是布朗运动(也称为维纳随机过程)如何被推广的,L. 巴舍利耶研究了巴黎证券交易所的价格变动。呼叫中心的电话例子也在理论中是中心的,因为这是泊松随机过程如何被推广的,A. K. 埃尔朗模拟了一段时间内发生的电话呼叫数量。

这两个过程,布朗运动和泊松过程,在许多与上述例子无关的情境中出现。也许这告诉我们一些关于自然及其基础过程统一性的更深层次的东西,但让我们不要陷入哲学,而是留在数学领域。一般来说,我们可以根据它们的数学特性将随机过程分为几类。其中一些是离散时间过程,另一些是连续时间过程。区分哪个是哪个是相当直观的。

为了得出关于布朗运动和泊松过程以及我们即将概述的其他随机过程的结论,我们需要对它们进行数学分析。在概率论中,我们首先要建立随机过程的存在性:也就是说,我们需要明确定义离散时间的无限随机变量序列 X 0 , X 1 , X 2 , . . . 或连续时间 X t 过程存在的概率三元组(样本空间,sigma 代数,概率测度),并证明我们可以找到一组满足其特征性质的随机变量。我们将在本章后面重新讨论这一点,但在证明随机过程的存在性时,我们要搜索的一个重要名字是 A.科尔莫戈洛夫(1903-1987),即科尔莫戈洛夫存在定理。这确保了存在一个随机过程,其具有与我们期望的过程相同的有限维分布。也就是说,我们可以通过以某种一致的方式指定所有有限维分布来获得我们期望的随机过程(无限过程,以离散或连续时间为索引)。

让我们来看一下最突出的随机过程:

伯努利过程

这是与反复抛硬币以及生活中模仿这种过程的任何过程大多相关的随机过程(在一些机场,海关官员让我们按下一个按钮,如果灯变绿,我们通过,如果变红,我们就被搜查)。在数学上,它是一个独立同分布的无限序列的随机变量 X 0 , X 1 , X 2 , . . . ,其中每个随机变量以概率p取零值或以概率1-p取一值。这个过程的一个样本实现看起来像 0 , 1 , 1 , 0 , . . .

泊松过程

我们可以将泊松过程看作是其基础随机变量为计数变量的随机过程:这些变量计算在一段时间内发生了多少有趣的事件。这些事件要么是独立的,要么是弱相关的,并且每个事件发生的概率很小。它们以一个固定的期望速率λ发生。这个参数表征了泊松随机变量。例如,在排队理论中,我们用它来模拟顾客到达商店的情况,或者电话中心的电话呼叫,或者在某个时间间隔内地震的发生。这个过程的状态空间是自然数,索引集是非负数。涉及泊松过程的随机变量的概率分布具有以下公式

P r o b ( X = n ) = λ n e -λ n!

上面的公式给出了在一个单位时间段内发生n个有趣事件的概率。显然,在固定的时间间隔内,不太可能发生许多罕见事件,这解释了大n时公式中的快速衰减。泊松随机变量的期望和方差是λ

泊松过程 X t ; t 0 ,以连续时间为索引,具有以下特性:

  • X_0=0

  • 在长度为t的任何区间内的事件(或点)的数量是一个参数为λ t的泊松随机变量。

泊松过程具有两个重要特征:

  1. 每个有限间隔内的事件数量是一个泊松随机变量(具有泊松概率分布)。

  2. 不相交时间间隔内的事件数量是独立的随机变量。

泊松过程是一个 Levy 随机过程的例子,这是一个具有平稳独立增量的过程。

随机漫步

很容易将最简单的随机漫步想象为某人在道路上行走,他从某处开始,然后以概率p向前移动(在他的位置上加一),以概率1-p向后移动(从他的位置上减一)。我们可以定义结果离散时间随机过程X 0 , X 1 , ,使得X 0 = x 0X 1 = X 0 + Z 1X 2 = X 1 + Z 2 = X 0 + Z 1 + Z 2等等,其中Z 1 , Z 2 , d o t s是一个伯努利过程。如果p=0.5,这是一个对称随机漫步。

在第九章中,我们多次使用图上的随机漫步,我们从某个图节点开始,然后以给定概率转移到其中一个相邻节点。图的归一化邻接矩阵将定义所有节点的转移概率。这是一个很好的例子,说明了图上的随机漫步与马尔可夫链的联系,即将很快出现。有关更多信息,请查看这篇关于图上的随机漫步的笔记。

维纳过程或布朗运动

我们可以将维纳过程或布朗运动视为具有无穷小步长的随机漫步,因此离散运动变为无穷小波动,我们得到一个连续随机漫步。布朗运动是一个连续时间随机过程X t ; t 0。随机变量X t是实值的,具有独立增量,并且在两个不同时间tsX tX s之间的差异通常分布(遵循高斯钟形分布)具有均值0和方差t-s。也就是说,X t - X s根据增量的大小服从正态分布。

关于实值连续时间随机过程的有趣之处在于它们可以沿着连续路径移动,产生有趣的随机时间函数。例如,几乎可以肯定,布朗运动(维纳过程)的一个样本路径在任何地方都是连续的,但在任何地方都不可微分(尖峰太多)。

布朗运动在随机过程的研究中是基础性的。它是随机微积分的起点,位于几个重要类别的过程的交集处:它是一个高斯马尔可夫过程,它是一个莱维过程(一个具有平稳独立增量的过程),它是一个马丁格尔,接下来将讨论。

马丁格尔

离散时间马丁格尔是一个随机过程X 0 , X 1 , X 2 , . .,对于任何离散时间 t,

𝔼 ( X t+1 | X 1 , X 2 , , X t ) = X t

也就是说,给定所有先前的观察,下一个观察的期望值等于最近的观察。这是定义某物的一种奇怪方式(遗憾的是这在这个领域非常常见),但让我们简要举几个例子,说明马丁格尔出现在其中的一些背景中:

  • 一个无偏随机游走是马丁格尔的一个例子。

  • 一个赌徒的财富是一个马丁格尔,如果赌徒玩的所有赌博游戏都是公平的:假设一个赌徒赢得 1 美元,如果硬币正面朝上,输掉 1 美元,如果硬币反面朝上。如果X n是赌徒在n次抛硬币后的财富,那么赌徒在下一次抛硬币后的条件期望财富,鉴于历史,等于他们目前的财富。

  • 在一个生态群落中,一群物种竞争有限资源,我们可以将任何特定物种的个体数量建模为随机过程。根据生物多样性和生物地理学统一中性理论,这个序列是一个马丁格尔。

当讨论马丁格尔时,停时出现。这是一个有趣的概念,捕捉到这样的想法:在任何特定时间 t,你可以查看到目前的序列,并判断是否是停止的时候。关于随机过程X 1 , X 2 , X 3 , . . .的停时是一个随机变量S(代表停止),具有这样的性质,即对于每个 t,事件S=t的发生或非发生仅取决于X 1 , X 2 , X 3 , . . . , X t的值。例如,停时随机变量模拟赌徒选择何时停止并离开赌桌的时间:这将取决于他之前的赢利和损失,但不取决于他尚未玩过的游戏的结果。

莱维过程

我们已经提到泊松过程和布朗运动(维纳过程)作为莱维过程最受欢迎的两个例子。这是一个具有独立、平稳增量的随机过程。它可以模拟一个粒子的运动,其连续的位移是随机的,在成对不相交的时间间隔内的位移是独立的,并且在相同长度的不同时间间隔内的位移具有相同的概率分布。在这个意义上,它是随机游走的连续时间模拟。

分支过程

一个分支过程会随机地分裂成分支。例如,它模拟了某种人口的演变(如细菌,或核反应堆中的中子),其中给定一代中的每个个体根据某个固定的概率分布产生下一代中的随机数量的个体,这个概率分布不会因个体而异。分支过程理论中的一个主要问题是最终灭绝的概率,即在有限代之后人口灭绝的概率。

马尔可夫链

现在让我们正式定义一个离散时间马尔可夫链,因为它是最重要的随机过程之一,并且在 AI 强化学习的背景下经常出现。为了定义一个马尔可夫链,我们需要:

  • 一个离散的可能状态集合S(有限或无限)。将其视为粒子或代理可以占据的状态集合。在每一步中,马尔可夫过程随机地从一个状态演变到另一个状态。

  • 一个初始分布规定了每个可能状态s t a t e i的概率ν i:最初,粒子在某个位置或代理处于某个状态的可能性有多大?

  • 转移概率p ij指定了粒子或代理从s t a t e i转移到s t a t e j的概率。注意对于每个状态i,和为 1 的总和p i1 + p i2 + + p in = 1。此外,这个过程没有记忆,因为这个转移概率仅取决于s t a t e is t a t e j,而不是先前访问的状态。

现在,马尔可夫链是一个取值于S的随机过程X 0 , X 1 , ,使得

P r o b ( X 0 = s t a t e i 0 , X 1 = s t a t e i 1 , , X n = s t a t e i n ) = ν i 0 p i 0 i 1 p i 1 i 2 p i n-1 i n

我们可以将所有的转移概率捆绑在一个方阵中(一个马尔可夫矩阵,每行都有非负数相加为 1),并乘以该矩阵。这个矩阵总结了从任何s t a t e is t a t e j的过渡概率在一步中。有趣的是,马尔可夫矩阵的幂也是马尔可夫的,例如这个矩阵的平方总结了从任何s t a t e is t a t e j的过渡概率在两步中,依此类推。

与马尔可夫链相关的一些基本概念是瞬态、再现性和不可约性。如果从一个状态开始,我们肯定最终会返回到它,则状态是再现的。如果状态不再现,则称为瞬态。如果马尔可夫链可以从任何状态移动到任何其他状态,则称为不可约。

最后,一个稳态概率向量,定义了可能状态上的概率分布,是一个不会在我们将其乘以转移矩阵时发生变化的向量。这直接与线性代数中的特征向量和对应的特征值为一的概念联系在一起。当我们知道的数学相互联系时,我们会感到非常愉快,这是一种让人上瘾的感觉,也是我们陷入这个领域的“爱恨”关系的原因。幸运的是,我们待的时间越长,这种感觉就会变得越来越“爱爱”。

伊藤引理

让我们再多谈一点数学。随机过程模拟随时间演变的随机数量。随机过程的函数也随时间随机演变。当确定性函数随时间演变时,下一个问题通常是,“多快?”为了回答这个问题,我们对时间求导,并围绕确定性函数的导数(和积分)发展微积分。链式法则至关重要,特别是对于训练机器学习模型。

伊藤引理是随机过程函数的链式法则的类比。它是链式法则的随机微积分对应物。我们用它来找到随时间变化的随机过程函数的微分。

马尔可夫决策过程和强化学习

在 AI 社区中,马尔可夫决策过程与以下内容相关:

  • 动态规划和 Richard Bellman:Bellman 在该领域发挥了重要作用,他的最优性条件被许多算法实现。

  • 强化学习:通过一系列与正面或负面奖励相关的行动(试错)找到最佳策略。代理在几种行动和转移状态之间有选择,其中转移概率取决于所选择的行动。

  • 深度强化学习:将强化学习与神经网络结合起来。在这里,神经网络将观察结果作为输入,并为代理可以采取的每个可能行动输出一个概率(概率分布)。然后代理根据估计的概率随机决定下一步行动。例如,如果代理有两个选择,向左转或向右转,神经网络为向左转输出 0.7,则代理将以 70%的概率向左转,以 30%的概率向右转。

强化学习有很大的潜力将我们推向智能的方向。智能代理需要在行动的回报不是立即产生而是由一系列连续采取的行动产生时做出理性决策。这是在不确定性下推理的典范。

强化学习的例子

强化学习的例子很多:自动驾驶汽车、推荐系统、家中的恒温器(每当接近目标温度并节省能源时获得正面奖励,当人们需要调整温度时获得负面奖励)、股票市场的自动投资(输入是股价,输出是买入或卖出每支股票的数量,奖励是货币收益或损失)。

也许最著名的深度强化学习成功例子是DeepMind 的 AlphaGo,这个 AI 代理在 2016 年击败了世界上最好的人类玩家在古老的中国围棋游戏中。以棋盘游戏的形式思考强化学习,比如国际象棋或围棋,是直观的,因为在每一步我们决定我们必须采取的行动序列,深知我们当前的决定会影响整个游戏的结果。我们最好在每一步都表现最佳。此外,在每一步,我们的最佳策略会演变,因为它还取决于我们对手的行动(他正在从他的角度解决完全相同的问题)。

我有点偏向于不包含游戏的例子,因为现在我的女儿沉迷于 PlayStation5。我更喜欢投资市场的例子:我们的理财顾问在每天都在变化的市场中操作,并且需要在每个时间步骤上做出买卖某些股票的决定,长期目标是最大化利润和最小化损失。市场环境是随机的,我们不知道其规则,但我们假设我们知道为了建模目的。现在让我们将我们的人类理财顾问换成一个 AI 代理,看看这个代理在不断变化的市场环境中每个时间步需要解决什么样的优化问题。

强化学习作为马尔可夫决策过程

让我们将强化学习在数学上表述为马尔可夫决策过程:我们的代理存在的环境是概率性的,由状态和这些状态之间的转移概率组成。这些转移概率取决于选择的动作。因此,从任何状态state 到另一个状态state '的马尔可夫过程具有对在状态state 时采取的动作a 的显式依赖。

这里的主要假设是我们知道这个过程,这意味着我们知道环境的规则。换句话说,我们知道每个state state '和动作a 的以下概率:

P r o b ( next state = state ' | current state = state , action taken = a )

我们也知道奖励系统,即

P r o b ( next reward value | current state = state , action taken = a , next state = state ' )

这个讨论现在属于动态规划的范畴:我们寻找导致最优值(最大奖励或最小损失)的最优策略(一系列良好的行动)。这个优化问题比我们迄今遇到的问题要复杂一些,因为它是导致最优值的一系列行动。因此,我们必须将问题分解为步骤,寻找每一步的行动,在未来多步中寻求最优奖励。贝尔曼最优方程恰好解决了这个问题,将其简化为在当前状态寻找仅一个最优行动(而不是一次性搜索所有行动),假设我们知道每一步要优化的问题。贝尔曼的巨大贡献是以下断言:当前状态的最优值等于采取一个最优行动后的平均奖励,加上这个行动可能导致的所有可能下一个状态的期望最优值

代理通过一个交互过程与其环境进行交互。它从一个初始状态开始,以及该状态可能的一组动作(在给定该状态的情况下采取行动的概率分布),然后迭代计算以下内容:

  1. 采取的下一个最优行动(将其转移到一个具有新一组可能行动的新状态)。这被称为策略迭代,优化目标是最大化未来奖励。

  2. 给出最优行动的预期值(奖励或损失)。这被称为值迭代

值函数将代理在其当前状态和之后采取的最优行动的预期未来奖励相加:

V a l u e ( state , optimal sequence of actions ) = 𝔼 ( k γ k r e w a r d k ) .

折现因子 g a m m a 是介于 0 和 1 之间的数字。它有助于鼓励采取导致尽早而不是晚获得正奖励的行动。将这个因子放入优化问题中会调整随时间变化的奖励的重要性,对未来奖励给予较少的权重(如果g a m m a在 0 和 1 之间,则g a m m a k对于较大的k很小)。

让我们明确地在值函数中进行优化(我们正在选择在当前状态下最大化奖励的行动序列):

V a l u e ( s ) = max actionsandstates 𝔼 ( k=0 γ k (reward) k | state 0 = s )

现在我们将这个问题分解,以确保代理的当前奖励明确且与其未来奖励分开:

V a l u e ( s ) = max actionsandstates 𝔼 ( r e w a r d 0 + k=1 γ k (reward) k | state 1 = s ' ) .

最后,我们发现代理的当前状态的值函数取决于其当前奖励和未来状态的折现值函数:

V a l u e ( s ) = max actionsandstates 𝔼 ( r e w a r d 0 + γ V a l u e ( s ' ) ) .

上述陈述使我们能够通过迭代地解决我们的主要优化问题(向后推进时间)。现在,代理所要做的就是选择行动以达到下一个最佳状态。这个值函数的表达式是强大的贝尔曼方程贝尔曼最优性条件,它将原始优化问题分解为一系列更简单的优化问题的递归序列,在每个状态局部优化(找到V a l u e ( s ' ) ),然后将结果放入下一个优化子问题(找到V a l u e ( s ) )。奇迹在于,通过这种从期望的最终奖励向后推导到现在决定采取什么行动的方式,最终给出了每个状态的整体最优策略以及最优值函数。

在最优控制和非线性动力学的背景下的强化学习

在第十三章中关于偏微分方程,我们重新审视了在非线性动力学、最优控制和哈密顿雅可比贝尔曼偏微分方程的背景下的强化学习。与我们的代理在上面的讨论中与概率马尔可夫环境互动不同,强化学习的动态规划方法(导致哈密顿雅可比贝尔曼偏微分方程)是确定性的。

强化学习的 Python 库

最后,一个有用的库用于实现强化学习算法是 TF-Agents 库(由谷歌开源于 2018 年),这是一个基于 TensorFlow(Python)的强化学习库。

理论和严格的基础

严格的,或者数学上精确的概率论需要测度论。但为什么呢? 你可能会正当地抗议。毕竟,我们已经尽可能地避免了这个问题。

因为我们再也无法避免它了。

让我们写下这个但永远不要大声说出来:测度论让许多学生对继续深入研究数学产生了厌恶,主要是因为它的故事从来没有按照时间顺序讲述,以及它是如何以及为什么产生的。此外,测度论概率的许多工作都涉及证明某个随机变量存在(在某个样本空间、事件空间或σ代数上,以及对于该σ代数中的每个事件或集合的测度),好像把随机变量写下来并用它来模拟各种随机实体的存在不够。这一定是数学家和哲学家相处得如此融洽的原因。

我们已经以闪电般的速度飞过了本章中的许多概念(我的学生们总是指责我这样做),但我们需要重新开始,并给出:

  • 对概率和σ-代数的精确数学理解;

  • 随机变量和概率分布的精确数学定义,

  • 随机变量期望值的精确数学定义,以及它与积分的联系

  • 概率不等式的概述(控制不确定性)

  • 大数定律、中心极限定理和其他收敛定理的概述

好吧,这太雄心勃勃了。我们不能在一章的一节中提供关于严格概率论的完整课程。相反,我们将为此提出一个令人信服的理由,并以对基本思想的良好理解结束。

我们从非严格概率的两个主要局限性开始(除了它的数学对象具有无数不一致的名称、符号和模糊的定义之外):

哪些事件有概率?

给定一个样本空间(我们可以从中随机抽样的集合),任何子集都可以在其上定义概率吗?如果我们从实数线上均匀抽样数字,并问,我们选中一个有理数的概率是多少?代数数(某个整系数多项式方程的解)的概率是多少?或者从实数线的其他复杂子集中选中一个成员的概率是多少?

看看这些问题是如何慢慢将我们引入实数线上集合论的细节中,而这又直接将我们引入测度论:这个理论涉及我们可以测量实数线上哪些子集,以及哪些子集我们无法测量

为样本空间的子集定义概率开始听起来很像为那个集合定义一个测度,似乎只有可测的子集才能为它们定义概率。那么样本空间的其他不可测子集呢?对它们来说太糟糕了,我们无法为它们定义概率。再次强调,*Prob(A)*并不适用于样本空间的每个子集 A,而只适用于该空间的可测子集。因此,我们必须将所有可测子集聚集在一起,放弃其余部分,永远不要考虑它们或它们的数学,然后放松,因为这样我们就可以在一个所有我们聚集的事件(子集)都有概率(测度)定义的领域中行动。我们所使用的概率测度满足合理的性质,即它是[0,1]范围内的非负数,并且互补事件(子集)的概率之和为一。这整个过程揭示了实数及其子集的复杂性,更一般地,揭示了连续体和无限的奥秘。

严格的概率论帮助我们理解离散和连续空间的特性,这在简单的例子中得以体现,比如在离散集合上构建离散均匀分布与在给定区间上构建连续均匀分布。

我们能谈论更广泛范围的随机变量吗?

非严格概率的另一个限制,也就是避开我们刚刚描述的测度论的那种限制,是它允许的随机变量类型的限制。特别是,我们在离散和连续随机变量之间究竟应该划定何种界限?这个界限真的存在吗?那些既有离散又有连续特性的随机变量呢?举个简单的例子,假设一个随机变量的值由抛硬币决定:如果硬币正面朝上,则它服从泊松分布(离散),如果硬币反面朝上,则服从正态分布(连续)。这个新的随机变量在非严格意义上既不完全是离散的也不完全是连续的。那它是什么呢?严格的答案是:当我们定义了任何随机变量所依赖的基础后,离散和连续随机变量之间就没有区别了。这个基础是什么呢?是什么集合构成了样本空间?这个样本空间的哪些子集是可测的?概率测度是什么?随机变量的分布是什么?这是任何随机变量的共同基础,或者说起点。一旦我们明确了这个基础,那么离散、连续或者介于两者之间,就变成了一个小细节,就像回答:我们正在处理哪个集合(或者说集合的乘积)一样简单。

概率三元组(样本空间、σ代数、概率测度)

一切都始于一个概率三元组(实际上并非如此,但这是严谨开始的地方)。我们称之为概率测度空间,理解为整个样本空间的测度等于一。也就是说,样本空间的概率为一。我们现在感觉非常先进,交替使用概率和测度这两个词。测度提供的舒适感是,它将我们带回到确定性领域。抽样是随机的,但我们可以测量任何事件发生的可能性(即可测量)。

构成概率测度空间的三个对象(样本空间、σ代数、概率测度)是:

  • 样本空间:我们随机抽取样本的任意非空集合。

  • σ代数:样本空间的子集合的集合,代表允许的事件(我们可以谈论它们的概率的事件,因为它们是我们能够测量的唯一事件)。σ代数必须包含整个样本空间,在补集下是封闭的(意味着如果一个集合在σ代数中,那么它的补集也在其中),并且在可数并集下是封闭的(意味着σ代数的可数个子集的并集也是σ代数的成员)。从前两个性质和德摩根定律(与并集和交集的补集有关)推论出来的是,σ代数也是在可数交集下是封闭的。

  • 概率测度:介于零和一之间(包括零和一)的数字,与σ代数的每个子集相关联,满足我们与非严格概率相关的合理性质:

    1. Prob(样本空间)=1

    2. Prob(可数个两两不相交集合的并)=每个集合的概率的可数和。

这非常好,因为只要我们能够表达样本空间集合、σ代数和一个具有上述属性的函数,将σ代数的每个成员映射到其测度(概率),那么我们就可以在坚实的基础上开始建立理论,定义各种随机变量、它们的期望、方差、条件概率、和与积、序列的极限、随机过程、随机过程的函数的时间导数(伊藤积分微分学)等等。我们不会遇到哪种事件有为其定义概率(概率三元组的σ代数的所有成员),或者我们可以考虑哪种类型的随机变量(我们可以在概率三元组上严格定义的任何类型)的问题。

困难在哪里?

请注意,我们上面讨论的非严格概率的限制在涉及连续变量或样本空间在连续(不可数)时都会出现。如果我们的世界只是离散的,我们就不会遇到这些麻烦。当我们转向严格的概率,并尝试为离散样本空间构建概率三元组时,我们并不会遇到太多麻烦。挑战出现在连续世界中,即不可数样本空间。因为突然间我们必须在无限连续的深度上识别σ代数和相关的概率测度,这永远让人着迷。例如,即使我们想要为区间[0,1]上的连续均匀分布定义一个严格的概率三元组,这个挑战也会出现。

扩展定理来到我们的帮助,并允许我们构建复杂的概率三元组:不是在大型σ代数上定义概率测度,而是在一个更简单的子集合集合上构建它,一个半代数,然后定理允许我们自动将测度扩展到完整的σ代数。这个定理允许我们在[0,1]上构建勒贝格测度(这正是[0,1]上的连续均匀分布),乘积测度,多维勒贝格测度,有限和无限的抛硬币。

集合论、实分析和概率的世界已经很好地融合在一起。

随机变量、期望和积分

现在我们可以将概率三元组与样本空间关联起来,为样本空间的大量子集(所有相关 sigma 代数的成员)定义概率,我们可以严格地定义随机变量。正如我们从非严格概率中非常清楚的知道:随机变量为样本空间的每个元素分配一个数值。因此,如果我们将样本空间看作某个实验的所有可能随机结果(抛硬币得到正面和反面),那么随机变量为这些结果中的每一个分配一个数值。

为了建立在严格的基础上,我们必须定义随机变量Y如何与与样本空间相关的整个概率三元组交互。简短的答案是,它必须是一个从样本空间到实数线的可测函数,意味着集合Y -1 ( - , y )Y -1从实数线映射回样本空间的子集),是 sigma 代数的成员,这意味着它有一个概率测度。

就像非严格概率中的随机变量在严格概率理论中实际上是一个可测函数(关于三元组),随机变量的期望𝔼 ( Y )实际上等同于随机变量(可测函数)关于概率测度的积分。我们写成:

𝔼 ( Y ) = Ω Y d P = Ω Y ( ω ) P r o b ( d ω )

理解期望公式中的积分符号

如果我们将随机变量的期望在离散设置中的含义理解为随机变量值乘以它假定该值的集合的概率的总和,那么很容易理解与概率测度相关的积分,比如上述公式中的积分:

𝔼 ( Y ) = i=1 n y i P ( ω Ω such that Y ( ω ) = y i )

现在将这个离散表达式与上面的连续积分进行比较。

我们严格地建立上述积分(期望)的方式与我们在测度论中建立勒贝格积分的方式完全相同:首先是简单随机变量,然后是非负随机变量,最后是一般随机变量。我们可以轻松地证明积分的基本性质,如线性和保序性。请注意,无论样本空间是离散的、连续的还是其他复杂的,只要我们有概率三元组来建立,上述积分就是有意义的(在我们为基本微积分里曼式积分所设想的更广泛的范围内)。一旦我们遇到勒贝格式积分,我们就不会再回头看了。

现在我们有了期望,我们可以像非严格概率理论一样精确地定义方差和协方差。

然后我们可以谈论独立性,以及重要性质,如如果 X 和 Y 是独立的,则 E(XY) = E(X)E(Y)和 Var(X + Y) = Var(X) + Var(Y)。

随机变量的分布和变量变换定理

随机变量X的分布是在实数线上定义的相应概率三元组( , , μ ),对于实数线上定义的波雷尔sigma 代数的每个子集B,我们有:

μ ( B ) = P ( X B ) = P ( X -1 ( B ) )

这完全由累积分布函数F X ( x ) = P ( X x ),决定X

假设我们有一个定义在实数线上的实值函数f。让X是一个概率三元组( Ω , s i g m a a l g e b r a , P )上的随机变量,其分布为μ。注意对于任意实数x,f(x)是一个实数,对于随机变量X,f(X)是一个随机变量。

变量变换定理表明,随机变量f(X)的期望值关于样本空间Ω上的概率测度P等于关于上的测度μ的函数f的期望值。让我们首先用期望的术语来表达这一点,然后用积分的术语来表达:

𝔼 P ( f ( X ) ) = 𝔼 μ ( f ) . Ω f ( X ( ω ) ) P ( d ω ) = - f ( t ) μ ( d t ) .

从上述变量变换定理中方便的一点是,我们可以在期望、积分和概率之间进行切换:让f的一个可测子集的指示函数,那么上述公式给出:

- 1 B μ ( d t ) = μ ( B ) = P ( X B ) .

严格概率论的下一步

严格概率论中的下一步是证明著名的不等式(马尔可夫、切比雪夫、柯西-施瓦茨、延森)引入随机变量的和积,大数定律和中心极限定理。然后我们转向随机变量序列和极限定理。

极限定理

如果我们有一个收敛到某个极限随机变量的随机变量序列,那么序列的期望是否会收敛到极限的期望?用积分语言来说,我们什么时候可以交换极限和积分?

这是我们证明单调收敛、有界收敛、Fatou 引理、支配收敛和一致可积收敛定理时使用的。

最后我们考虑双重或更高的积分,以及何时可以翻转积分的条件。 Fubini 定理回答了这个问题,我们可以应用它来给出独立随机变量之和的分布的卷积公式。

神经网络的普适性定理。

严格的测度论(概率论)帮助我们证明神经网络的定理,这是数学的一个新兴子领域,旨在为许多经验性人工智能成功提供理论基础。

神经网络的普适性定理是一个起点。我们在本书中多次提到它。以下是陈述:

对于紧凑集 K 上的任何连续函数 f,存在一个只有一个隐藏层的前馈神经网络,可以在 K 上均匀逼近 f,误差小于 K 上的任意ϵ > 0

这个网页有一个简单易懂的证明。

总结和展望

在本章中,我们概述了对人工智能、机器学习和数据科学重要的概率概念。我们快速浏览了诸如因果建模、悖论、大型随机矩阵、随机过程和强化学习在人工智能中的主题。

通常当我们学习概率时,我们会陷入关于定义和围绕不确定性的整体哲学的频率主义客观主义立场。以下是对每个观点的简洁描述:

  • 频率主义的立场是概率只能来自实验和观察重复试验结果。

  • 客观主义的立场是概率是宇宙的真实方面:一种真实的倾向或自然倾向以特定方式行为。例如,公平硬币翻转为正面的倾向百分之五十是公平硬币本身的固有属性。

然后频率主义者只是试图通过实验来测量这些自然倾向。严格的概率论统一了概率的不同观点。我们迅速介绍了严格的概率论,并建立了它实质上与实分析中的测度论相同。我们以神经网络的普适逼近定理结束。

我们以Yann LeCun的一条完美贴切的推文结束这一章,这条推文碰到了我们在本章中涵盖的每个主题:

我相信我们需要找到新的概念,使机器能够:

  • 通过像婴儿一样观察来了解世界是如何运作的。

  • 学会通过采取行动来预测如何影响世界。

  • 学习允许在抽象表示空间中进行长期预测的分层表示。

  • 妥善处理世界并非完全可预测的事实。

  • 使代理能够预测行动序列的影响,从而能够推理和规划,使机器能够分层规划,将复杂任务分解为子任务。

  • 所有这些都与基于梯度的学习兼容。

第十二章:数学逻辑

人类会打破规则……

在人工智能领域的历史上,基于逻辑的代理人出现在基于机器学习和神经网络的代理人之前。我们之所以在逻辑之前讨论了机器学习、神经网络、概率推理、图形表示和运算研究,是因为我们希望将所有这些内容融入到一个关于代理人推理的叙事中,而不是将逻辑看作是古老的,神经网络看作是现代的。我们希望将最近的进展视为增强逻辑人工智能代理人表示和推理世界的方式。一个好的思考方式类似于启蒙:一个 AI 代理人过去使用手工编码的知识库和规则来进行推理和决策,然后突然之间它得到启蒙,变得更具推理工具、网络和神经元,使其能够扩展其知识库和推理方法。这样,它就具有了更多的表达能力,可以应对更复杂和不确定的情况。此外,将所有工具结合在一起将使代理人有时可以打破更严格逻辑框架的规则,根据情况采用更灵活的规则,就像人类一样。打破、弯曲甚至改变规则是人类独有的特征。

单词逻辑的字典含义为本章设定了基调,并证明了其进展。

逻辑

组织用于合理思考和推理的规则和过程的框架。这是一个奠定了进行推理和推断的有效性原则的框架。

上述定义中需要注意的最重要的词是框架推理原则。逻辑系统在一个代理人内部编码了指导可靠推理和正确证明的原则。设计能够收集知识、逻辑推理的代理人,使用一个灵活的逻辑系统,适应他们存在的环境中的不确定性,并基于这种逻辑推理进行推断和决策,是人工智能的核心。

我们讨论了我们可以编程到代理人中的各种数学逻辑系统。目标是赋予 AI 代理人能力,使其能够进行适当的推理。这些逻辑框架需要知识库来配合不同大小的推理规则。它们还具有不同程度的表达和演绎能力。

各种逻辑框架

在本章中我们将重点介绍的各种逻辑框架(命题、一阶、时间、概率和模糊),我们将回答两个关于它们在代理人中如何运作的问题:

  1. 代理人的世界中存在哪些对象?也就是说,代理人如何感知其世界的构成?

  2. 代理人如何感知对象的状态?也就是说,在特定的逻辑框架下,代理人可以为其世界中的每个对象分配什么值?

如果我们将我们的代理人比作一只蚂蚁及其体验世界的方式,就很容易理解:由于蚂蚁预先确定的感知框架和允许的移动方式,蚂蚁将世界,以及其曲率,体验为二维。如果蚂蚁得到增强并赋予更具表现力的感知框架和允许的移动方式(例如翅膀),那么它将体验到三维世界。

命题逻辑

  • 代理人的世界中存在哪些对象?

简单或复杂的陈述,称为命题,因此称为命题逻辑。

  • 代理人如何感知对象的状态?

真(1),假(0),或未知。命题逻辑也被称为布尔逻辑,因为其中的对象只能有两种状态。命题逻辑中的悖论是指无法分类为真或假的陈述,根据逻辑框架的真值表

以下是陈述及其状态的示例:

  • 正在下雨(可以是真也可以是假)

  • 埃菲尔铁塔在巴黎(始终为真)

  • 公园里有可疑活动(可以是真也可以是假)

  • 这句话是假的(悖论)

  • 我快乐 我悲伤(始终为假,除非你问我的丈夫)

  • 我快乐 我悲伤(始终为真)

  • 如果分数是 13,那么学生就不及格(真假取决于不及格的阈值,因此我们需要在知识库中添加一个陈述,说所有分数低于 16 的学生都不及格,并将其值设为真)。

  • 1+2 等于 2+1(在具有算术规则的代理中始终为真)。

  • 巴黎浪漫(在命题逻辑中,这必须是真或假,但在模糊逻辑中,它可以在零到一的范围内取值,例如 0.8,这更符合我们感知世界的方式,以一个范围而不是绝对值。当然,如果我在编程一个代理并且受限于命题逻辑,我会为这个陈述分配真值,但是一个讨厌巴黎的人会分配假值。哦,好吧)。

命题逻辑世界中的对象是简单陈述和复杂陈述。我们可以使用五个允许的运算符从简单陈述中形成复杂陈述:非(否定);和;或;蕴含(与如果那样相同);等同于(与如果且仅如果相同)。

我们还有五条规则来确定一个陈述是真还是假:

  1. 如果一个陈述的否定为真,那么该陈述为假。

  2. s t a t e m e n t 1 s t a t e m e n t 2 为真,只有当s t a t e m e n t 1s t a t e m e n t 2 都为真时才为真。

  3. 如果s t a t e m e n t 1 s t a t e m e n t 2 为真,那么只有当s t a t e m e n t 1s t a t e m e n t 2 为真时,该语句为真(或者两者都为真)。

  4. s t a t e m e n t 1 implies s t a t e m e n t 2 是真的,除非当 s t a t e m e n t 1 为真且 s t a t e m e n t 2 为假时。

  5. s t a t e m e n t 1 equivalent to s t a t e m e n t 2 当且仅当 s t a t e m e n t 1s t a t e m e n t 2 都为真或都为假。

我们可以通过一个真值表总结上述规则,考虑到 s t a t e m e n t 1s t a t e m e n t 2 的状态以及它们的组合使用五个允许的运算符。在下面的真值表中,我们使用 S 1 代表 s t a t e m e n t 1,使用 S 2 代表 s t a t e m e n t 2 以节省空间:

S 1 S 2 not S 1 S 1 and S 2 S 1 or S 2 S 1 implies S 2 S 1 equivalent to S 2
F F T F F T T
F T T F T T F
T F F F T F F
T T F T T T T

我们可以通过简单的递归评估使用上述表格计算任何复杂语句的真值。例如,如果我们处于一个 S 1 为真,S 2 为假,且 S 3 为真的世界中,那么该语句:

S 1 ( S 2 S 3 ) F (F T) = F T = F。

为了能够使用命题逻辑推理和证明定理,建立逻辑等价是有帮助的,意味着具有完全相同真值表的陈述,因此它们可以在推理过程中相互替换。以下是一些逻辑等价的示例:

  • 与的交换律: S 1 S 2 S 2 S 1

  • 或的交换律: S 1 S 2 S 2 S 1

  • 双重否定消除:非(非 S 1 ) S 1

  • 逆否命题: S 1 蕴含 S 2 非( S 2 ) 蕴含 非( S 1 ) 。

  • 蕴含消除: S 1 蕴含 S 2 非( S 1 ) S 2

  • 德摩根定律:非( S 1 S 2 ) 非( S 1 ) 非( S 2 )。

  • 德摩根定律:非( S 1 S 2 ) 非( S 1 ) 非( S 2 )。

让我们通过展示它们具有相同的真值表来证明 S 1 蕴含 S 2 非( S 1 ) S 2,因为这种等价对于一些人来说并不那么直观:

S 1 not ( S 1 ) S 2 not( S 1 ) or S 2 S 1 implies S 2
F T F T T
F T T T T
T F T T T
T F F F F

展示逻辑等价性有用的一个例子是反证法推理方式:为了证明陈述 S 1 意味着陈述 S 2 ,我们可以假设我们有 S 1 ,但同时我们没有 S 2 ,然后我们得出一个错误或荒谬的结论,这证明我们不能假设 S 1 而不得出 S 2 。我们可以使用命题逻辑等价性验证这种证明方式的有效性,即 S 1 意味着 S 2

S 1 意味着 S 2 = 真

非( S 1 S 2 = 真(蕴含消除)

非(非( S 1 S 2 )= 非(真)

S 1 非( S 2 )= 假(德摩根定律和双重否定)。

我们赋予命题逻辑框架推理规则,这样我们就能够从一个陈述(简单或复杂)顺序推理到下一个,并达到所需的目标或正确证明一个陈述。以下是一些伴随命题逻辑的推理规则:

  • 如果 S 1 意味着 S 2 是真的,并且我们已知 S 1 ,那么我们可以推断 S 2

  • 如果 S 1 S 2 是真的,那么我们可以推断 S 1 。同样,我们也可以推断 S 2

  • 如果 S 1 等价于 S 2 ,那么我们可以推断( S 1 意味着 S 2S 2 意味着 S 1

  • 相反,如果(S 1 蕴含 S 2S 2 蕴含 S 1 )那么我们可以推断出(S 1 等价于 S 2 )。

最后强调命题逻辑不适用于大型环境,并且不能有效地捕捉普遍关系模式。然而,命题逻辑为一阶逻辑和高阶逻辑提供了基础,因为这些逻辑建立在命题逻辑的机制之上。

从少量公理到整个理论

上述推理规则是正确的:它们只允许我们证明真实陈述,即给定一个真实陈述和一个与之相符的推理规则,我们得到一个真实陈述。因此,正确推理规则提供的保证是它们不允许从真实陈述中推导出错误陈述。我们需要比这个保证稍微多一点。

当我们能够仅使用系统的知识库(公理)和推理规则推断所有可能的真实陈述时,逻辑框架是完备的。系统的完备性的概念非常重要:在所有数学系统中,如数论、概率论、集合论或欧几里得几何中,我们从一组公理开始(数论和数学分析的皮亚诺公理,概率论的概率公理),然后使用逻辑推理规则从这些公理中推导定理。在任何数学理论中的一个主要问题是公理和推理规则是否确保其完备性和一致性。

然而,没有一阶理论有足够的力量来唯一描述具有无限域的结构,比如自然数或实数线。可以在更强的逻辑中获得完全描述这两个结构的公理系统(即,范畴公理系统),比如二阶逻辑。

在代理中编码逻辑

在继续进行一阶逻辑之前,让我们回顾一下在具有命题逻辑的 AI 代理环境中学到的内容。以下过程很重要,对于更具表现力的逻辑来说也是一样的:

  • 我们在形式为真实陈述的初始知识库(公理)中编写。

  • 我们编写推理规则。

  • 代理感知其世界当前状态的某些陈述。

  • 代理可能有或没有目标陈述。

  • 代理使用推理规则推断新的陈述,并决定要做什么(移动到下一个房间,打开门,设置闹钟,等等)。

  • 代理系统的完备性(知识库和推理规则的结合)在这里很重要,因为它允许代理在足够的推理步骤中推导出任何可满足的目标陈述。

确定性和概率机器学习如何适应其中?

机器学习(包括)神经网络的前提是我们不将初始知识库编程到代理中,也不编写推理规则。相反,我们编写的是一种表示输入数据、期望输出和将输入映射到输出的假设函数的方法。然后代理通过优化目标函数(损失函数)来学习函数的参数。最后,代理使用学到的函数对新的输入数据进行推理。因此,在这种情况下,知识库和规则可以通过学习期间推理期间进行分离。在学习期间,知识库是数据和假设函数,目标是最小化损失,规则是优化过程。学习后,代理使用学到的函数进行推理。

如果我们将确定性假设函数替换为数据特征的联合概率分布,我们可以以完全相同的方式思考概率机器学习模型。一旦代理学会了它,就可以用于推理。例如,贝叶斯网络对于不确定知识的作用类似于命题逻辑对于确定知识的作用。

一阶逻辑

  • 代理的世界中存在哪些对象?

“陈述、对象和它们之间的关系。”

  • 代理如何感知对象的状态?

“真(1)、假(0)或未知。”

命题逻辑非常适合说明基于知识的代理如何工作,并解释某种逻辑的“语言”和推理规则的基本规则。然而,命题逻辑在能够表示的知识和推理方式方面存在局限。例如,在命题逻辑中,这样的陈述:

所有年龄超过十八岁的用户都可以看到这则广告。

可以表达为一个“蕴含”陈述(与“如果那么”相同),因为这种语言存在于命题逻辑框架中。这就是我们如何在命题逻辑中将上述陈述表达为推理的方式:

(年满十八岁的用户意味着看广告)并且(年满十八岁 = T)然后我们可以推断(看广告 = T)。

现在让我们考虑一个略有不同的陈述:

一些年满十八岁的用户点击广告。

突然之间,命题逻辑的语言不足以表达上述陈述中的“一些”数量!仅依赖于命题逻辑的代理将不得不将整个陈述存储在其知识库中,然后不知道如何从中推断出任何有用信息。也就是说,假设代理获得了用户确实年满十八岁的信息,它无法预测用户是否会点击广告。

我们需要一种语言(或逻辑框架),其中的词汇包括“存在”和“对于所有”,这样我们就可以写出类似以下的内容:

对于所有年满十八岁的用户,存在一部分点击广告的用户。

这两个额外的量词正是“一阶逻辑”框架提供的。这种词汇量的增加使我们能够更经济地存储知识库中的内容,因为我们能够将知识分解为对象和它们之间的关系。例如,与其存储:

所有年满十八岁的用户都看广告;

年满十八岁的一些用户点击广告;

一些年满十八岁的用户购买产品;

点击广告的一些用户购买了产品;

作为一个只有命题逻辑框架的代理的知识库中的三个独立陈述(我们仍然不知道如何从中推断出任何有用信息),我们可以在一阶逻辑中存储两个陈述:

对于所有年满十八岁的用户,看广告 = T;

对于所有看广告 = T 的用户,存在一部分点击广告的用户;

对于所有点击广告的用户,存在一部分购买产品的用户。

请注意,在命题逻辑和一阶逻辑中,仅凭上述陈述,我们将无法推断特定年满十八岁的用户是否会点击广告或购买产品,甚至无法推断这样做的用户的百分比,但至少在一阶逻辑中,我们有语言来更简洁地表达相同的知识,并且以一种能够进行一些有用推断的方式。一阶逻辑与命题逻辑最显著的特征是,在命题逻辑已有的基础语言上增加了诸如“存在”和“对于所有”之类的量词,这些量词已经存在于命题逻辑中的“非”、“和”、“或”、“蕴含”和“等价于”之上。这一小的增加打开了一个表达对象与其描述以及它们之间关系的大门:

命题逻辑和一阶逻辑的强大之处在于它们的推理规则独立于领域及其知识库或公理集。现在,为了为特定领域,如数学领域或电路工程,开发一个知识库,我们必须仔细研究该领域,选择词汇,然后制定支持所需推理的公理集。

对于所有存在之间的关系

对于所有存在通过否定相互连接。以下两个陈述是等价的:

  • 所有年满十八岁以上的用户看到广告。

  • 不存在一个年满十八岁以上的人不看广告。

在命题逻辑语言中,上述两个陈述翻译为:

  • 对于所有用户,使得用户>18 为真,看到广告为真。

  • 不存在这样的用户,使得用户>18 且看到广告是假的

这些是关系:

  • not(存在一个 x 使得 P 为真) 对于所有 x,P 为假。

  • not(对于所有 x,P 为真) 存在一个 x 使得 P 为假。

  • 存在一个 x 使得 P 为真 不是对所有 x,P 为假。

  • 对于所有 x,P 为真 不存在一个 x 使得 P 为假。

我们不能在不欣赏转向一阶逻辑所获得的表达能力的情况下离开这一部分。这种逻辑框架现在足以支持这样的断言和推理:

神经网络的普适逼近定理

粗略地说,普适逼近定理断言:对于所有连续函数,存在一个神经网络可以将函数近似到我们希望的程度。请注意,这并不告诉我们如何构建这样的网络,它只是断言其存在。尽管如此,这个定理足够强大,使我们对神经网络在各种应用中近似所有种类的输入到输出函数的成功感到不惊讶。

推断关系

父母和孩子之间具有相反的关系:如果 Sary 是 Hala 的孩子,则 Hala 是 Sary 的母亲。此外,关系是单向的:Sary 不能是 Hala 的母亲。在一阶逻辑中,我们可以分配两个指示关系的函数:母亲孩子,可以由HalaSary或任何其他母亲和孩子填充的变量,以及这些函数之间对所有输入变量成立的关系:

对于所有的 x,y,如果 mother(x,y)=T,则 mother(y,x)=F;

对于所有的 x,y,mother(x,y) child(y,x)。

现在,如果我们给一个代理提供这些知识,并告诉它 Hala 是 Sary 的母亲,或者 mother(Hala, Sary)=T,那么它将能够回答类似以下的查询:

  • Hala 是 Sary 的母亲吗?T

  • Sary 是 Hala 的母亲吗?F

  • Sary 是 Hala 的孩子吗?T

  • Hala 是 Sary 的孩子吗?F

  • Laura 是 Joseph 的母亲吗?未知

请注意,在命题逻辑世界中,我们将不得不将每个陈述单独存储,这是极其低效的。

概率逻辑

  • 代理的世界中存在哪些对象?

陈述

  • 代理如何感知对象的状态?

一个介于 0 和 1 之间的概率值,表示一个陈述为真的可能性。

概率是一阶逻辑的扩展,允许我们量化对陈述真实性的不确定性。我们不是断言一个陈述是真还是假,而是为我们对该陈述真实性的信念程度分配一个介于零和一之间的分数。命题和一阶逻辑提供了一组推理规则,允许我们确定一些陈述的真实性,假设其他一些陈述为真。概率理论提供了一组推理规则,允许我们确定一个陈述在其他陈述的真实性可能性的基础上有多大可能是真的。

处理不确定性的这种扩展比一阶逻辑具有更具表现力的框架。概率公理允许我们扩展传统逻辑真值表和推理规则:例如,P(A)+P(not (A))=1:如果 A 为真,则 P(A)=1 且 P(not A)=0,这与关于陈述及其否定的一阶逻辑一致。

将概率理论视为一阶逻辑的自然扩展对于需要将事物连接在一起而不是将它们视为不同事物的思维是令人满意的。这样看待也自然地导致了关于数据的贝叶斯推理,因为我们在收集更多知识并做出更好推断时更新代理人的先验分布。这以最逻辑的方式将我们所有的主题联系在一起。

模糊逻辑

在代理人的世界中存在哪些对象?具有[0,1]之间真实程度的陈述。代理人如何感知对象的状态?已知的区间值。

命题和一阶逻辑的世界是黑白分明的,真或假。它们允许我们从真实陈述开始推断其他真实陈述。这种设置非常适合数学,其中一切都可以是对或错(真或假),或者适合具有非常明确边界的 SIMS 的视频游戏。在现实世界中,许多陈述可能是模糊的,无论它们是完全真(1)还是完全假(0),这意味着它们存在于真实度的尺度上,而不是在边缘上:巴黎浪漫她很快乐黑暗骑士电影很好模糊逻辑允许这样做,并为陈述分配 0 到 1 之间的值,而不是严格的 0 或严格的 1:

巴黎浪漫(0.8);她很快乐(0.6);黑暗骑士电影很好(0.9)。

在一个真假程度呈滑动尺度的模糊世界中如何进行推理?这绝对不像在真假世界中进行推理那样直截了当。例如,给定上述真值,陈述巴黎浪漫她很快乐有多真实?我们需要新的规则来分配这些值,并且我们需要了解上下文或领域知识。另一个选择是单词向量,我们在第七章中讨论过。这些向量在不同维度中携带单词的含义,因此我们可以计算代表单词巴黎的向量与代表浪漫点的向量之间的余弦相似度,并将其分配为巴黎浪漫的陈述的真值。

请注意,概率理论中的信念程度与模糊逻辑中的真实度尺度不同。在概率逻辑中,陈述本身是明确的。我们想要推断的是明确陈述为真的概率。概率理论不推理不完全真实或假的陈述:我们不计算巴黎浪漫的概率,而是计算随机询问巴黎是否浪漫的人会回答真或假的概率。

关于模糊逻辑的一个有趣之处在于,它将其他逻辑中存在的两个原则抛在一边:如果一个陈述是真的,那么它的否定就是假的原则,以及两个矛盾的陈述不能同时为真的原则。这实际上打开了不一致性和开放宇宙的大门。在某种程度上,模糊逻辑并不试图纠正模糊性,而是接受它并利用它来允许在边界不清晰的世界中运作。

时间逻辑

还有其他类型的特殊用途逻辑,其中某些对象,比如本节中的“时间”,受到特别关注,有自己的公理和推理规则,因为它们对需要表示的知识和对其进行推理至关重要。时间逻辑将时间依赖性以及关于时间依赖性的公理和推理规则置于其结构的前沿,而不是将包含时间信息的陈述添加到知识库中。在时间逻辑中,陈述或事实在某些时间点或时间间隔上是真实的,这些时间是有序的。

代理的世界中存在哪些对象?陈述、对象、关系、时间。代理如何感知对象的状态?真(1)、假(0)或未知。

在时间逻辑中,我们可以表示如下陈述:

  • 当时间是早上 7 点时,闹钟会响。

  • 每当向服务器发出请求时,最终会授予访问权限,但永远不会同时授予两个请求。

与人类自然语言的比较

我们在整章中讨论了能够表达人类自然语言似乎轻松做到的知识的逻辑系统。我刚刚用英语写了一本关于数学的整本书,而不是使用任何其他技术语言。我们是如何做到的?人类如何表示和扩展他们的知识库,自然语言使用什么规则来表示和推理,使其如此富有表现力?此外,使用的特定自然语言并不重要:任何多语言的说话者都知道思想,但不一定知道他们用来表达这种思想的特定语言。人们知道或想要表达的东西有一种内在的非语言表示。它是如何工作的,我们如何解锁它的秘密并将其传授给我们的机器?

与人类语言类似,如果我们用两种不同的形式逻辑来表示相同的知识,那么我们可以推断相同的事实(假设逻辑具有完整的推理规则)。唯一的区别在于哪种逻辑框架提供了更容易的推理路径。

也就是说,人类自然语言在许多情况下允许模糊性,并且不能在没有数学形式和所采用的形式逻辑的情况下做出绝对的数学断言。我不能要求一个没有 GPS 系统的人预测从 DC 到 NYC 的驾驶时间。

总结和展望

一个具有各种类型逻辑的 AI 代理可以表达关于世界的知识,对其进行推理,回答查询,并进行推断,这些都在这些逻辑的边界内是允许的。

我们讨论了各种逻辑框架,包括命题逻辑、一阶逻辑、概率逻辑、模糊逻辑和时间逻辑。

下一个自然的问题将是:代理的知识库应该包含什么内容?如何表示关于世界的事实?知识应该在什么框架中表示和推理?

  • 命题逻辑?

  • 一阶逻辑?

  • 用于推理计划的分层任务网络?

  • 用于处理不确定性推理的贝叶斯网络?

  • 因果图和因果推理,代理可以有选择地违反逻辑规则?

  • 用于随时间推理的马尔可夫模型?

  • 用于推理图像、声音或其他数据的深度神经网络?

另一个可能的下一步是深入研究我们讨论过的任何逻辑框架,学习它们的推理规则和现有的推理算法,以及它们的优势、劣势以及适用于哪种知识库。这些研究中的一个重要主题是调查提供完整证明系统的推理规则,意味着一个系统,其中公理或知识库以及规则允许证明所有可能的真陈述。这些规则包括命题逻辑的分辨推理规则和一阶逻辑的广义分辨推理规则,适用于特定类型的知识库。这些对于理论(证明数学定理)和技术(验证和合成)软件和硬件都很重要。最后,一些逻辑比其他逻辑更具表现力,意思是我们可以用更具表现力的逻辑表示的一些陈述,不能用较不具表现力的逻辑语言中的任何有限数量的陈述来表达。例如,高阶逻辑(我们在本章中没有讨论)比一阶逻辑(我们在本章中讨论过,足够强大以支持整个数学理论)更具表现力。

第十三章:人工智能和偏微分方程

《壮志凌云 2》(2022 年电影)中的第一场景展示了 Maverick(汤姆·克鲁斯)操纵一架实验军用飞机,并将其推向声速的 10 倍(10 马赫),然后在大约 10.2 马赫时失去稳定性。到目前为止,最快的非虚构有人飞行器可以达到 6.7 马赫(图 13-1)。无论是真实的速度还是虚拟的(尚未实现),看到物理学、数学和工程学共同将这些飞机放入空中,特别是它们壮观的空中机动,都是令人着迷的。在观看 Maverick 令人敬畏的空战和 10 马赫的场景时,会想起一些偏微分方程(PDEs):

250

图 13-1。有史以来最快的有人飞行器(图片来源或需要类似于这个的无版权图片)

波动传播的波动方程:想象声速、空气中声波的传播,以及由于空气温度和密度的变化而导致不同高度声速的变化。

Navier Stokes 方程用于流体动力学:想象流体流动、气流隧道和湍流。

燃烧的 G 方程:想象飞机发动机中的燃烧和飞机尾部喷出的火焰。

材料弹性方程:想象飞机机翼板、升力、机翼板的屈曲(在压缩下发生的应力平面外移动的过程图 13-2),由于负载引起,这反过来降低了机翼的承载能力。当承载能力低于设计极限时,故障就会发生。

250

图 13-2。飞机的屈曲(图片来源)。

PDE 模拟也会让人想起:想象一下飞行路径模拟,机组人员在计算机屏幕上实时观看 Maverick 的飞行过程并与他交谈。

清单还在继续。我们在这里声称我们之所以让飞机飞行是因为我们写下并解决了 PDE 吗?不是。航空博物馆讲述了莱特兄弟的故事、他们的实验以及航空工业的发展。科学和实验是相辅相成的。我们想要宣称的是,我们可以发明、改进和优化各种设计,因为有了微分方程和数学。

什么是偏微分方程?

PDE 是一个等式,意味着左边等于右边,涉及到一个多变量函数以及它的任何偏导数。函数关于某个变量的偏导数衡量了函数相对于该变量的变化率。普通微分方程(ODEs)是那些只涉及一个变量的函数的方程,比如只有时间、只有空间等(与多个变量相反)及其导数。动态系统是一个非常重要的 ODE,描述了我们关心的系统状态随时间的演变,比如一个粒子系统或商业环境中客户的状态。ODE 涉及系统状态的时间导数,动态规定为系统状态、系统物理参数和时间的函数。ODE 看起来像 dx (t) dt = f ( x ( t ) , a ( t ) , t ) 。我们将在本章多次讨论动态系统。大多数情况下,如果我们能够将 PDE 转化为 ODE 系统,或者甚至转化为动力系统,那么问题基本上就解决了。

自然没有给我们确定性函数,也没有给我们用来产生我们周围观察到的世界并能准确测量的联合概率分布。到目前为止,它一直保守这些秘密。然而,它确实给了我们一些方法来测量、评估或制定关于事物如何相对于彼此变化的法则,这正是偏微分方程所代表的。因为事物如何变化实际上就是导数。

解决偏微分方程的目标是撤销微分算子,以便我们可以恢复函数而不带有任何导数。因此,我们寻找偏微分方程代表的微分算子的精确或近似逆(或伪逆)。积分可以撤销导数,因此偏微分方程的解表示通常涉及一些核函数对 PDE 的输入数据(其参数、初始和/或边界条件)的积分。随着本章的发展,我们将详细阐述这一点。

人们通常将 ODE 和 PDE 分类为类型。我对此的看法是,除非我们恰好在个人工作中处理这些特殊的 ODE 或 PDE,并且这些的解对人类的未来有直接和立即的影响,否则我们不应该让自己困惑于分类。当你在本章中遇到某种类型,比如非线性抛物线或反向随机,接受这个名称然后直接理解我试图表达的观点。甚至不要尝试谷歌这些术语。这就像你谷歌你的症状,互联网告诉你明天就会死一样。自己小心。

用微分方程建模

微分方程模拟了现实世界中无数的现象,从空气湍流到星系的运动,再到纳米尺度材料的行为,再到金融工具的定价,再到与对手和多个玩家的游戏,再到人口流动和增长。典型的偏微分方程课程跳过了建模步骤,因此我们最终研究的偏微分方程似乎是突如其来的,但事实并非如此。偏微分方程的来源和分析解决它们一样重要。通常,偏微分方程表达了一些守恒定律,比如能量、质量、动量等与我们特定应用相关的守恒定律。许多偏微分方程是守恒陈述的表达,看起来像:

时间内数量的变化率=增益-损失

现在当我们有一个有界域时,偏微分方程在域的内部起作用,但我们需要伴随边界条件,告诉我们域的边界发生了什么。如果域是无界的,那么我们需要远场条件,告诉我们当x 时发生了什么。我们使用极限符号来写这些条件。如果偏微分方程在时间上有导数,那么我们需要一些初始时间条件或结束时间条件。我们需要多少这些条件取决于偏微分方程的阶数。将这些视为我们需要解决多少方程以解决多少未知数。未知数是偏微分方程的积分常数。当我们解决偏微分方程时,我们寻求有关函数的信息,给出其导数的信息。为了消除这些导数并恢复函数,我们必须积分偏微分方程,沿途获得积分常数。我们需要边界和/或远场条件来解决这些常数。

不同尺度的模型

忠实模拟自然的现实模型需要考虑所有重要变量以及它们的相互作用,有时在不同尺度的空间和时间。编写数学模型的方程需要一些工作。一旦制定,它们就是优雅的,将大量信息压缩成几行方程。这些方程涉及函数、它们的导数和模型的参数,通常比制定方程更难解决。此外,如果两个模型描述不同尺度上相同的现象,比如一个在原子尺度上(快速摆动的分子)和另一个在更大尺度上,比如在微观或宏观尺度(我们观察到的尺度),那么这两个模型的方程看起来会非常不同,甚至可能依赖于不同科学领域的物理定律。例如,想象一下描述分子水平上气体运动(粒子速度、位置、作用于其上的力等)以及如何将其与在宏观尺度观察到的气态系统的热力学联系起来。或者想想原子如何结合形成晶体结构,以及这些结构如何转化为材料性质,比如导电性、渗透性、脆性等。自然的问题是,我们是否可以在不同尺度上成功地调和这样的模型?更准确地说,如果我们将一个模型的极限取到另一个模型的范围,我们会得到相同的结果吗?这些都是分析师要解决的问题类型。调和不同尺度模型验证了它们,并统一了数学和科学的不同领域。

偏微分方程的参数

我们为一个模型写下的偏微分方程通常涉及参数。这些参数与我们建模的物理系统的属性有关。例如,对于热方程

u t ( x , t ) = α Δ u ( x , t ) ,

参数α扩散系数,这是一个物理常数,取决于扩散物质的性质和其扩散到的介质的性质。我们通常从实验获得的参考表中获取这些值。它们对工程目的非常重要。当我们的方程模拟现实时,我们必须使用从这些真实实验或观测数据中导出的参数值。但实验和观测数据通常存在噪声,缺失值,未解释的异常值,以及各种数学模型的困难。很多时候,我们甚至没有我们方程中的参数的实验值。实验可能很昂贵(想想大型强子对撞机)甚至不可能。因此,我们必须使用间接方式学习参数值,基于实验、观测和计算机模拟值的可访问组合的一些其他变量。从历史上看,许多这些参数值是手动调整的,以适应某些期望的结果,这是不好的!我们应该对进入模拟的参数值的选择有明确的理由。我们将看到机器学习如何帮助 PDEs 在从数据中学习参数值。

在 PDE 中改变一件事可能是一件大事

如果你在大学里上过偏微分方程(PDEs)课程,请回想一下你学过的最简单的方程,也许是在一个类似图 13-3 中的棒上的热扩散方程。如果你没有学过 PDEs,不要担心它的细节。热方程的公式是:

u t ( x , t ) = α Δ u ( x , t ) .

在这里,u ( x , t )表示棒上点x处和时间t处的温度,操作符Δx的二阶导数(所以Δ u ( x , t ) = u xx ( x , t )),因为棒只有一维,如果忽略其厚度。在更高维度中,操作符Δ是每个维度中二阶导数的总和。

现在让我们将域从一个棒改变成一个奇怪形状的板:不是正方形、圆形或椭圆形,而是一些不规则的形状,例如,比较图 13-3 和图 13-4。我们在初级 PDE 课程中学到的适用于棒的真实解的公式,在奇怪的板上不再适用。情况变得更糟。我们不仅通过改变域失去了对解析解的访问:当我们尝试用新域数值解微分方程时,新的几何形状突然使事情复杂化。现在我们必须找到一个离散网格,准确地描绘出新域的形状及其所有细节,然后我们必须在该网格上计算一个数值解,使其满足域内的方程,并满足沿着看起来奇怪的边界的边界条件。

A

图 13-3。在棒上研究热扩散对于那些学过 PDEs 的人来说是容易的,无论是在分析上还是在数值上(图片来源)。

B

图 13-4。研究不规则几何形状上的热扩散并不容易(图片来源)。

这在 PDE 中很正常:改变一点微小的东西,突然我们学到的所有数学方法可能就不再适用了。这些变化包括:

  • 改变域的形状,

  • 改变边界条件的类型,

  • 在系数中引入空间或时间依赖性(参数),

  • 引入非线性,

  • 引入更多导数项(高阶),等等

  • 引入更多变量(更高维度)

这令人沮丧的一面使许多学生不愿专攻 PDE(没有人想成为只擅长一种方程的专家,这种方程可能与现实建模相去甚远)。我们不想被打消积极性。我们想看到全局图景。自然现象非常多样化,因此我们必须接受 PDE 及其解决方法的变化作为我们理解和预测自然的探索的一部分。此外,PDE 是一个庞大而古老的领域。已经在统一许多线性和非线性偏微分方程家族的方法上取得了许多进展,并且在这一过程中发现了许多强大的分析。现状是 PDE 是一个非常有用的领域,它没有,也可能永远不会有,一个统一的理论。

一般来说,非线性 PDE 比线性 PDE 更困难,高阶 PDE 比低阶 PDE 更困难,高维 PDE 比低维 PDE 更困难,PDE 系统比单个 PDE 更困难,我们无法为大多数 PDE 编写显式解的公式,许多 PDE 只在形式下满足。许多 PDE 的解随时间演变会产生奇点(想想波动方程和激波)。开发 PDE 理论的数学家花费时间证明 PDE 的解的存在,并试图理解这些解的正则性,即它们在实际拥有涉及 PDE 的导数方面有多好。这些使用了许多高级微积分方法,寻找积分的估计(上下界的不等式)。

AI 可以介入吗?

如果我们有方法可以考虑 PDE 的变化、域的几何形状、边界条件和参数范围的变化,类似于实际的物理问题,那不是很棒吗?许多行业和科学领域都将目光投向 AI 和深度学习,以解决长期存在的问题或为其带来新的启示。过去十年在计算非常高维问题的解决方案方面取得的巨大进步有潜力改变许多被维度诅咒束缚的领域。这样的转变将对 PDE 和整个人类产生深远影响,因为 PDE 及其解锁的大量科学。

在本章的其余部分,我们强调微分方程社区在传统方法中遇到的障碍,以及如何将真实和嘈杂的数据拟合到他们的模型中。然后我们说明了机器学习如何帮助绕过或减轻这些困难。我们还区分了两个问题:

  1. AI 对 PDE 有什么作用?

  2. PDEs 对 AI 有什么作用?

在为 PDE 提供服务时,我们需要确保机器学习的标志性特征——训练函数、损失函数和优化设置清晰,以及监督学习的标签或目标。将 PDE 的成熟领域融入到机器学习环境中并不是非常直接。理想情况下,我们需要建立从 PDE 到其解决方案的映射。这需要一些暂停和思考。

数值解非常有价值

编写描述自然现象的数学模型,以方程描述涉及变量如何相互作用,只是第一步。我们需要解决这些方程。

分析解比数值解更难,因为模型越接近自然,方程就越复杂。即使分析方法无法为解提供公式,它们仍然为解的重要属性提供了宝贵的见解。数值解比分析解更容易,因为它们涉及将连续方程离散化,将我们从连续函数的领域转移到离散数字的领域,或者从无限维函数空间转移到有限维向量空间(线性代数),这是我们的计算机建立的。数值解为模型的真实分析解提供了宝贵的见解,并且在可用时易于与实验观察进行测试。它们也易于调整,因此对实验设计是很好的辅助。

我们可以在任何尺度上设计数值解,但当我们尝试实施和计算我们的数值方案时,维度的诅咒会困扰我们。在许多情况下,为了模拟系统自然演化的一秒钟,需要大量的计算能力,因此必须进行大量的维度降低和简化假设,这使我们离真实解的良好近似更远。令人沮丧的是,这已经成为常态而非例外。

连续函数 vs 离散函数

函数f ( x ) = x 2 - 3在整个实数线上是连续的( - , )。当我们为机器处理的数值方案离散化它时,首先,定义域不能再是整个实数线,因为机器尚不能概念化无限域。因此,我们的第一个近似是将定义域大幅缩减到某个有限区间[-N,N],其中 N 是一个大数。我们的第二个近似是将这个有限区间离散化,再次大幅减少,从一个连续区间[-N,N]到仅有限的一组点。如果我们使用许多点,那么我们的网格将更加精细,我们的近似将更好,但计算成本会增加。假设我们只使用 6 个点来离散化区间[-5,5]:-5,-3,-1,1,3,5,那么我们的连续函数将被减少为一个只有六个条目的向量:

f ( x ) = x 2 - 3 is continuous on ( - , ) discretef = (-5) 2 - 3 (-3) 2 - 3 (-1) 2 - 3 1 2 - 3 3 2 - 3 5 2 - 3 = 22 6 - 2 - 2 6 22

图 13-5 显示了连续函数及其仅有六个点的极不充分的近似。

250

图 13-5。将连续函数离散化为仅有六个点的向量。我们失去了点之间所有连续的丰富信息。

我们仍然需要离散化导数

我们可以通过在一个区间中选择点来离散化一个函数f(x),就像我们之前所做的那样。微分方程包含函数的导数,比如f x , Δ f,而不仅仅是函数。因此,我们必须离散化导数,或者找到其他方法将问题从函数空间(如连续空间)降维到向量空间(这样我们就可以使用线性代数和计算机进行计算)。有限差分和有限元是两种流行的微分方程离散化方法。我们将很快介绍它们,以及基于随机漫步的概率蒙特卡洛方法。

数值解的简单性之一是,当我们离散化时,我们进行了近似,将无限连续减少为有限的点集,失去了在有限点集之间的所有无限详细信息。也就是说,我们牺牲了高分辨率。对于某些方程,有分析方法可以帮助我们准确量化通过离散化失去了多少信息,并通过将离散网格的大小趋近于零的极限来帮助我们回到准确的分析解。

离散连续函数及涉及它们的方程具有优势:易于访问。我们可以教高中生如何数值解描述杆中热量扩散的热方程(本章后面会讨论),但在他们完成大学微积分和线性代数课程之前,我们无法教他们如何解析解决它。这就是为什么我们必须在孩子很小的时候教他们如何对现实生活中的问题建模和计算数值解。数值解的简单性和计算的力量有助于解决各种人类问题,这应该成为我们教育体系的优先事项。我怀疑自然并不希望我们在计算周围世界如何运作之前建立和解开疯狂复杂的数学理论。我也怀疑自然并不像某些数学理论那样复杂(尽管它们仍然以自身的方式有趣,即使只是作为逻辑和推理规则能引导我们走多远的练习)。

我的博士论文中的 PDE 主题

我的博士论文故事展示了数学理论和数值方法之间的巨大差异。这也是本章某些主题的良好原型。在我的博士论文中,我研究了一个数学模型,描述了原子在薄晶体表面的阶梯状表面上不同级别之间扩散和跳跃的方式。这对材料科学界和设计我们电子设备中所需微型部件的工程师很有用。随着时间的推移,晶体的形状会因其表面上原子的移动而发生变化。最终,晶体会放松成某种稳定的形状。

立即离散化并进行计算机模拟

当我写下这些方程时,我能够进行计算机模拟,展示晶体形状随时间的演变。这是我研究过的偏微分方程之一(并不是你应该关心它或知道其中的函数指的是什么):

u t ( h , t ) = - u 2 (u 3 ) hhhh where h [ 0 , 1 ] , t 0 , )

对于训练有素的人来说,这是一个高度非线性的四阶方程:未知函数u既平方又立方。它的立方体在空间中出现了四个导数,我们可以将其视为距我们想要评估的函数有四个度的距离。[图 13-6 展示了我在空间中使用有限差分(我们将很快讨论有限差分)对我的 PDE 进行离散化,以及其边界条件(在点 0 和 1 处的函数值)。

250

图 13-6。离散微分方程及其连续模拟。

通常,方程非线性程度越高,它就越不愿意服从标准的分析技术。我仍然需要进行数学分析,并证明数值模拟显示的形状确实是方程要求解决方案采取的方式,也就是说,它是分析解,也是自然在可能的其他解决方案中选择的方式。我不得不花费接下来的两年时间只做这件事。我得出的结论是,对于一个物理上不现实的一维晶体*,我在一个微小的案例中得出了一个微小的证明!我必须将我的方程减少到只有一个维度,才能够对其进行任何数学分析。

维度的诅咒

一个始终存在的主题是问题的维度性:即使我进行了少于一个下午的数值模拟,我也只能对一维域上的方程进行模拟。当我尝试进行模拟以建模放置在平面上的现实薄膜实验晶体时,也就是说,当我必须将二维表面离散化而不是一维段时,离散点的数量从一维段上的 100 个跳到了二维表面上的 100,000 个。当时我的电脑无法数值求解在一维情况下只需几秒钟的相同方程。诚然,我当时还不够复杂,无法在大学服务器上进行计算或使用并行计算(我不知道当时是否已经发明了分布式云计算)。这就是维度的诅咒。随着维度数量的增加,计算开销呈指数级增长。现在让我们想想那些在开始时就具有高维度域的方程,比如用于量子粒子系统的薛定谔方程,用于定价金融工具的 Black Scholes 方程,或者用于动态规划的 Hamilton-Jacobi-Bellman 方程,该方程模拟多人游戏或资源分配问题。那么想象一下维度的诅咒的程度。

问题的几何形状

我们之前提到过但值得重复的另一个主题是:域的形状很重要,无论是对于分析还是数值计算。在我不切实际的一维情况下,我使用了一个段作为方程的定义域。在二维情况下,我有更多选择:矩形(具有规则网格的优势),圆形(具有径向对称性的优势),或者任何其他通常没有名称的现实非规则形状。对于分析来说,矩形和圆形域是最容易的(对于我的特定方程来说不是,但对于其他更简单的方程如线性方程来说是)。对于模拟,这些也很好。但是当域的形状不规则时,这是大多数现实事物的情况,如果我们想忠实地捕捉域,我们需要在不规则部分放置更多的离散点。维度的诅咒再次显现:更多的点意味着更长的向量和更大的输入矩阵用于计算。

模拟你关心的事物

结束我的博士故事,直到我完成学位后的十年,我才看到了一个真实的薄膜金晶体,就像我当时正在研究的那个,当时我的朋友在她的实验室里向我展示了一个薄膜金晶体。回想起来,也许我应该从那里开始,通过看到我试图模拟的真实生活中的东西。我的现在的优先事项有所不同,我总是首先询问自己是否关心我试图模拟的东西,我选择工作的模型有多接近现实,以及思考分析解是否值得为这个特定应用付出时间和精力。

离散化和维度的诅咒

研究偏微分方程的数学家喜欢连续世界,但机器喜欢离散世界。数学家喜欢分析函数,但机器喜欢计算函数。为了调和这两者,使机器能够帮助数学家,反之亦然,我们可以离散化我们的连续方程。如何做到?首先,我们离散化方程的定义域,创建一个离散网格。我们选择网格的类型(规则或不规则)以及精细程度。然后我们离散化微分方程本身,使用四种流行的方法之一:

  • 有限差分:确定性,适用于离散化时间,一维或相对规则的空间几何。

  • 有限元:确定性,适用于离散化更复杂的空间几何结构,也适用于随时间变化的空间几何结构。

  • 变分或能量方法:这类似于有限元,但适用于一组更窄的偏微分方程。它们应该具有一个“变分原理”或一个“能量形式”,即,PDE 本身应该等价于“∇E(u)= 0”对于某个能量函数 E(u)(将函数映射到实数线)。我能获得博士学位的原因是我纯粹凭运气为我的 PDE 发现了这样一个能量函数。就像微积分函数的最小值出现在“∇f(x→)= 0”的点处一样,能量函数的最小值出现在“∇E(u)= 0”的“函数”处,但当然我们需要定义如何对“泛函”进行导数运算。

  • 蒙特卡洛方法:概率性的,从离散化 PDE 开始,然后利用这一点设计一个适当的随机游走方案,使我们能够在域中的某一点“聚合”解决方案。

这些方法中的“有限”一词强调了这个过程将我们从函数的连续无限维空间转移到有限维向量空间。

如果我们用于离散化的网格太细,它会捕捉更多的分辨率,但我们最终会得到高维向量和矩阵。记住这种维度的诅咒,以及以下内容:神经网络的流行之所以飙升是因为它们似乎有一种神奇的能力来克服维度的诅咒。我们很快会看到这一点。

有限差分

我们使用有限差分来数值逼近偏微分方程中出现的函数的导数。例如,粒子的速度是其位置矢量在时间上的导数,粒子的加速度是其位置矢量在时间上的两个导数。

在有限差分逼近中,我们用域中离散点处的函数值的线性组合替换导数。回想一下,一个导数测量函数的变化率。两个导数测量凹度。更高阶导数测量更多一些科学家偶尔使用的东西。函数在一个点处的导数与其在该点附近的值如何相互比较之间的联系是相当直观的。这些逼近的数学理由依赖于微积分中的泰勒定理:

f ( x ) = f ( x i ) + f ' ( x i ) ( x - x i ) + f '' (x i ) 2 ( x - x i 2 ) + f (3) (x i ) 3! (x-x i ) 3 + + f (n) (x i ) n! (x-x i ) n + error term ,

其中误差项取决于下一个阶导数在我们尝试使用多项式逼近的点附近的“xi”处的“f(n+1)(xi)”有多好。泰勒定理近似了一个足够好的函数在一个点附近的多项式,其系数由该点处函数的导数确定。函数在一个点处具有的导数越多,它就越好,它在该点附近的行为就越像一个多项式。

现在让我们离散化一个一维区间[a,b],然后写出定义在该区间上的函数f(x)的导数的有限差分逼近。我们可以使用 n+1 个等间距点来离散化[a,b],因此网格大小为 h = (b-a)/n。我们现在可以在任何这些离散点上评估f。如果我们关心某点附近的值 x_i,我们定义 f_{i+1} = f(x_i + h),f_{i+2} = f(x_i + 2h),f_ = f(x_i - h),等等。在接下来的内容中,h 很小,因此一个 O(h²)方法(或更高阶的 h)比一个 O(h)方法更准确:

  1. 一阶导数的 O(h)精度的前向差分逼近(使用 2 个点):(添加图片)

    f ' ( x i ) f i+1 -f i h

  2. 一阶导数的 O(h)精度的后向差分逼近(使用 2 个点):(添加图片)

    f ' ( x i ) f i -f i-1 h

  3. 中心差分逼近的 O(h²)精度,适用于高达四阶的导数(使用 2 个点,平均前向和后向差分):(添加图片)

    f ' ( x i ) f i+1 -f i-1 2h f '' ( x i ) f i+1 -2f i +f i-1 h 2 f ''' ( x i ) f i+2 -2f i+1 +2f i-1 -f i-2 2h 3 f (4) ( x i ) f i+2 -4f i+1 +6f i -4f i-1 +f i-2 h 4

  4. 中心差分逼近的 O(h⁴)精度,适用于高达四阶的导数:

    f ' ( x i ) -f i+2 +8f i+1 -8f i-1 +f i-2 12h f '' ( x i ) -f i+2 +16f i+1 -30f i +16f i-1 -f i-2 12h 2 f ''' ( x i ) -f i+3 +8f i+2 -13f i+1 +13f i-1 -8f i-2 +f i-3 8h 3 f (4) ( x i ) -f i+3 +12f i+2 -39f i+1 +56f i -39f i-1 +12f i-2 -f i-3 6h 4

O ( h k ) 是什么意思? 这是h的数值逼近的阶数。当我们用数值逼近替换导数时,就会产生误差。 O ( h k ) 告诉我们我们产生了多少误差。显然,这取决于网格h的大小。误差应该随着网格更细而变小。为了推导这种误差界限,我们使用 f(x+h), f(x-h), f(x+2h), f(x-2h)等的泰勒展开,以及这些的线性组合来确定所需导数的逼近和我们的有限差分逼近的h阶。为了使用泰勒展开,我们假设我们正在处理的函数在我们评估它们的点上确实具有所需数量的导数。这意味着我们假设我们的函数足够好,以允许这些导数评估。如果函数在这些点附近有奇点,那么我们需要找到解决方法,比如在奇点附近使用更细的网格。

例子:让我们在[0,1]上解决y '' ( x ) = 1,带有边界条件 y(0)=-1 和 y(1)=0。这是一维有界域上的二阶线性常微分方程。

这个例子很简单,因为解析解非常容易。我们只需对方程积分两次,恢复函数而不带其导数y ( x ) = 0 . 5 x 2 + c 1 x + c 2,其中 c 是积分常数。我们将两个边界条件代入以找到 c,并获得解析解y ( x ) = 0 . 5 x 2 + 0 . 5 x - 1。然而,这个例子的重点是展示如何使用有限差分来计算数值解,而不是解析解,因为对于许多其他微分方程,解析解是不可用的,所以我们最好擅长这个。我们首先离散化域[0,1]。我们可以使用任意多的点。点数越多,我们需要处理的维度就越高,但分辨率会更好。我们只使用八个点,因此网格大小为h=1/7(图 13-7)。我们的连续[0,1]区间现在缩减为八个点(0,1/7,2/7,3/7,4/7,5/7,6/7,1)。

250

图 13-7。使用八个离散点离散化单位区间,这等同于七个间隔。步长(或网格大小)为h=1/7

接下来,我们离散化微分方程。我们可以使用任何有限差分方案来离散化二阶导数。让我们选择O ( h 2 ) 中心差分,因此离散化的微分方程变为:

y i+1 -2y i +y i-1 h 2 = 1 for i = 1 , 2 , 3 , 4 , 5 , 6 .

请注意,微分方程仅在域的内部有效,这就是为什么我们在写其离散模拟时不包括 i=0 和 i=7 的原因。我们从边界条件中得到 i=0 和 i=7 处的值:y 0 = - 1y 7 = 0。现在,我们有一个六个未知数的六个方程的系统,y 1 , y 2 , y 3 , y 4 , y 5 , y 6

y 2 - 2 y 1 - 1 = 1 / 49 y 3 - 2 y 2 + y 1 = 1 / 49 y 4 - 2 y 3 + y 2 = 1 / 49 y 5 - 2 y 4 + y 3 = 1 / 49 y 6 - 2 y 5 + y 4 = 1 / 49 0 - 2 y 6 + y 5 = 1 / 49

因此,我们现在从连续世界转移到线性代数世界:

- 2 1 0 0 0 0 1 - 2 1 0 0 0 0 1 - 2 1 0 0 0 0 1 - 2 1 0 0 0 0 1 - 2 1 0 0 0 0 1 - 2 y 1 y 2 y 3 y 4 y 5 y 6 = 1 / 49 + 1 1 / 49 1 / 49 1 / 49 1 / 49 1 / 49

解决这个系统相当于求逆上面的三对角矩阵,这是我们二阶导数算子的离散模拟。在连续世界中,我们积分微分算子以恢复y(x),在离散世界中,我们求逆离散算子以恢复离散值y i。在使用更多点离散化域时,请记住维度的诅咒。

显然,我们必须将离散值y i与它们的精确对应物y ( x i )进行比较,以查看我们仅使用八个离散点执行的有限差分方案的性能(图 13-8)。图 13-9 显示了数值解(仅使用四个离散点)与精确解析解的图形。

250

图 13-8. 在每个离散点比较数值解和精确解析解。

250

图 13-9. 数值解的图形(仅使用四个离散点)与精确解析解的对比(实线)。

现在我们可以使用有限差分来离散化任何任意阶或类型的微分方程,在任何维度的域上。我们所要做的就是离散化域并决定有限差分方案,以近似域内所有离散点处的导数。

示例:在区间x ( 0 , 1 )的内部离散化一维热方程u t = α u xx。这是一维有界空间域上的二阶线性偏微分方程。

这里,u=u(x,t)是两个变量的函数,因此我们的离散化方案应该涉及两个坐标。我们可以只在空间中离散化并保持时间连续,只在时间中离散化并保持空间连续,或者在空间和时间中都离散化。我们总是有多个数值路径。选择是好的。如果我们在空间和时间中都离散化,那么我们最终得到一个代数方程组。如果我们只在空间中离散化而不在时间中离散化,那么我们最终得到一个常微分方程组。由于 PDE 是线性的,因此离散化系统也是线性的。

让我们写出一个完整的离散方案:为了在空间中离散化,让我们使用二阶中心差分。为了在时间中离散化,让我们使用向前差分:

u i,j+1 -u i,j s = u i+1,j -2u i,j +u i-1,j h 2 for i = 1 , 2 , , n and j = 1 , 2 ,

在这样的方程中,u(x,t) 在某个初始时间可以被确定(u(x,0)=g(x)),我们想要知道 u(x,t) 随时间的演变。在上面的数值方案中,下标 j 代表离散时间,因此未知数是 u i,j+1

(完成这部分)

有限元

有限元方法与有限差分方法不同,因为它们是基于 PDE 的弱形式而不是直接操作 PDE。弱形式是加权和平均的,因此我们考虑积分和分部积分。我们很快会回到这个问题。

在讨论有限元的一般概念之前,让我们稍微观察一下图 13-10:这显示了在圆形域上的 PDE 的有限元解。域的离散化使用三角形网格,解似乎被分段线性函数逼近。我们可以使用其他多边形形状的网格,我们可以使用比分段线性更平滑的函数,如分段二次或更高次多项式。更平滑的代价是更多的计算。

250

图 13-10。在圆形域上的有限元解(图片来源)

让我们演示有限元方法如何给出以下 PDE 的数值近似解:

- Δ u ( x , y ) = f ( x , y ) for ( x , y ) Ω 2 u ( x , y ) = 0 for ( x , y ) b o u n d a r y Ω

这是泊松方程(出现在静电学中)。没有时间演变。f(x,y)是指定的,我们正在寻找一个未知函数 u(x,y),它在整个边界上为零,并且其二阶导数 u xxu yy 加起来为-f(x,y)。这个 PDE 已经被广泛研究,我们有其解析解的公式,但我们只对使用有限元方法进行数值逼近感兴趣。

为此,我们将使用一个存在于无限维空间中的未知函数u(x,y)的近似,使用一个存在于有限维空间中的已知函数。有限维空间仅由有限多个线性无关函数张成。我们可以选择这些基函数,以确保我们的选择使我们的计算非常容易。我们通常选择分段线性函数或分段多项式函数,每个最小支持在网格上。这意味着基函数仅在网格的一个或两个相邻元素的顶部为非零,而在其他地方为零。因此,涉及该函数在 PDE 的整个域上的积分将简化为在网格的一个或两个元素上的积分。

在选择这些基函数之后,每个基函数都支持在少量网格元素上,我们通过这些简单且局部支持的基函数的线性组合来近似真实解u(x,y)

u ( x , y ) u 1 b a s i s 1 ( x , y ) + u 2 b a s i s 2 ( x , y ) + u n b a s i s n ( x , y )

现在我们必须找到线性组合的常数u i。因此,我们将问题从在连续介质中解决未知函数u(x,y)降低到解决未知系数向量( u 1 , u 2 , , u n )。我们必须选择它们,使得近似u 1 e l e m e n t 1 ( x , y ) + u 2 e l e m e n t 2 ( x , y ) + u n e l e m e n t n ( x , y )满足 PDE,在某种意义上。我们有n个未知数,所以我们必须写n个方程并解决一个n个未知数的系统。我们从 PDE 或其弱形式中得到这些。为了得到 PDE 的弱形式,我们将其乘以一个函数v(x,y),在整个域上积分,然后使用分部积分来摆脱高阶导数。记住我们有的导数越少,我们就越接近未知函数。让我们一步一步来做:

原始 PDE 是:

- Δ u ( x , y ) = f ( x , y ) for ( x , y ) Ω 2 u ( x , y ) = 0 for ( x , y ) b o u n d a r y Ω

将 PDE 乘以一个函数v(x,y)并在整个域上积分。这是 PDE 的弱形式,因为它以积分形式满足,而不是逐点形式:

- Ω Δ u ( x , y ) v ( x , y ) d x d y = Ω f ( x , y ) v ( x , y ) d x d y

注意算子Δ = . ,两个导数算子的点积。通过分部积分,我们可以通过将一个导数移到积分内的另一个函数来摆脱其中一个导数。这并非免费:在这个过程中,它会带上一个负号和另一个作用于域边界的积分项。域边界上的新积分积分了两个反导数的乘积。边界项需要外法向量到边界n

Ω u ( x , y ) . v ( x , y ) d x d y - boundary Ω v ( x , y ) u ( x , y ) . n d s = Ω f ( x , y ) v ( x , y ) d x d y

我们可以选择v(x,y)=0在边界上,这样整个边界项就消失了:

Ω u ( x , y ) . v ( x , y ) d x d y = Ω f ( x , y ) v ( x , y ) d x d y

现在我们用有限维近似替换u(x,y)

Ω ( u 1 b a s i s 1 ( x , y ) + u 2 b a s i s 2 ( x , y ) + u n b a s i s n ( x , y ) ) . v ( x , y ) d x d y = Ω f ( x , y ) v ( x , y ) d x d y ,

等价于:

Ω ( u 1 b a s i s 1 ( x , y ) + u 2 b a s i s 2 ( x , y ) + u n b a s i s n ( x , y ) ) . v ( x , y ) d x d y = Ω f ( x , y ) v ( x , y ) d x d y

就是这样:我们可以选择n个不同的函数作为v(x,y),得到n个未知数的n个不同方程(u i 是未知数)。一个共同的主题是,每次我们都可以选择,我们选择那些不会使我们的计算变得复杂的东西。v(x,y)的最简单选择是我们已经有的n个基函数,因为这些在相互积分时产生许多抵消(正交性),并且在与自身积分时产生数字 1(正规性)。我们最初选择的基函数形成了一组正交归一的函数。一切都是为了让我们的生活更轻松。因此,这n个方程是:

Ω ( u 1 b a s i s 1 ( x , y ) + u 2 b a s i s 2 ( x , y ) + u n b a s i s n ( x , y ) ) . b a s i s 1 ( x , y ) d x d y = Ω f ( x , y ) b a s i s 1 ( x , y ) d x d y Ω ( u 1 b a s i s 1 ( x , y ) + u 2 b a s i s 2 ( x , y ) + u n b a s i s n ( x , y ) ) . b a s i s 2 ( x , y ) d x d y = Ω f ( x , y ) b a s i s 2 ( x , y ) d x d y Ω ( u 1 b a s i s 1 ( x , y ) + u 2 b a s i s 2 ( x , y ) + u n b a s i s n ( x , y ) ) . b a s i s n ( x , y ) d x d y = Ω f ( x , y ) b a s i s n ( x , y ) d x d y

最后,我们解决了* n 方程 n *未知数的系统,我们将其设置为线性代数形式:

Ω b a s i s 1 ( x , y ) . b a s i s 1 ( x , y ) d x d y Ω b a s i s 2 ( x , y ) . b a s i s 1 ( x , y ) d x d y Ω b a s i s n ( x , y ) . b a s i s 1 ( x , y ) d x d y Ω b a s i s 1 ( x , y ) . b a s i s 2 ( x , y ) d x d y Ω b a s i s 2 ( x , y ) . b a s i s 2 ( x , y ) d x d y Ω b a s i s n ( x , y ) . b a s i s 2 ( x , y ) d x d y Ω b a s i s 1 ( x , y ) . b a s i s n ( x , y ) d x d y Ω b a s i s 2 ( x , y ) . b a s i s n ( x , y ) d x d y Ω b a s i s n ( x , y ) . b a s i s n ( x , y ) d x d y u 1 u 2 u n = Ω f ( x , y ) b a s i s 1 ( x , y ) d x d y Ω f ( x , y ) b a s i s 2 ( x , y ) d x d y Ω f ( x , y ) b a s i s n ( x , y ) d x d y

请记住,我们知道函数f(x,y)、所有基函数和域Ω,所以我们要做的就是解方程组。这个系统是稀疏的,因为大多数这些积分为零。出于这个原因,我们选择了支持较小的基函数。我们永远不想解一个密集的方程组。

当然,我们对有限元有许多问题和丰富的文献来处理这些问题:

  • 所有 PDE 都有一个允许我们做这样事情的弱形式吗?(是的,因为我们总是可以将 PDE 与v函数相乘并进行部分积分,但有些 PDE 比其他 PDE 具有更好的结构来进行简化计算)。

  • PDE 的能量形式变分原理与之相关吗?(是的,它们相关。查找里兹方法。我们在运筹学和变分微积分章节中暗示了这一点,当我们将最小化能量泛函与解 PDE 联系起来时。在这里要记住的一件事是,大多数 PDE 具有弱形式,但并非所有 PDE 都有能量最小化形式。我获得博士学位的一个原因是我发现了我正在研究的 PDE 的能量形式。这完全是偶然。我所做的只是一个幸运的弱形式,然后是部分积分。就像我们在本节中所做的那样。在这个生活中,试错是被低估的)。

  • Sobolov 空间是怎么回事,为什么我们在 PDE 的高级课程中学习它们?(因为我们需要将我们的函数uv和基函数设置在适当的函数空间中,告诉我们我们正在使用的所有计算和近似是有效的。例如,我们不希望包含我们的函数及其导数的涉及积分爆炸)。

  • 我们可以使用非均匀网格来调整域的更详细部分,比如图 13-11 中的部分吗?(是的,我们讨论中的内容并不严格依赖于均匀网格)。

150

图 13-11。一个具有非均匀三角形网格的二维域(图片来源)
  • 我们需要多少基函数?(和我们的网格元素一样多)。

  • 在什么条件下,近似解会收敛到真实解?(欢迎来到有限元分析)。

  • 这在应用中如何使用?(一直在使用。它始于力学和结构设计:载荷、应力和应变;但现在有限元方法被用来数值解决各种具有复杂几何空间域的 PDE)。

  • 可能出什么问题?(一如既往,维度的诅咒。我们需要更多的网格元素以获得更高的分辨率,因此我们最终需要解决的方程组随着网格元素数量的增加呈指数增长。不好。理想情况下,我们希望网格在不需要详细的地方不详细,并在域的更有趣的部分更详细)。

  • 还有什么可能使事情复杂化?(对于域随时间演变的 PDE,我们需要相应随时间演变的网格)。

  • AI 能帮助学习给定几何和 PDE 的适当网格吗?(是的,我们将在本章中很快看到这一点)。

在继续之前,我们注意到有限元方法是一个有限维度的网格依赖方法,用于近似 PDE 的解。在本章的后面,我们将学习无网格神经网络方法。

变分或能量方法

一些偏微分方程在某种意义上非常特殊,因为它们的解最小化了一个能量泛函。我们说这样的偏微分方程具有变分原理。泊松方程,我们刚刚使用有限元方法解决的方程之一,就是这些幸运的偏微分方程之一。当一个偏微分方程具有变分原理时,它为我们打开了另一条理解其解的途径,通过研究它恰好最小化的能量泛函。

让我们写出泊松方程及其解最小化的能量泛函,而不深入讨论为什么会这样:

Δ u ( x , y ) = f ( x , y ) for ( x , y ) Ω 2 u ( x , y ) = 0 for ( x , y ) b o u n d a r y ΩE ( u ( x , y ) ) = Ω |u(x,y)| 2 + 2 f ( x , y ) d x d y .

现在我们可以利用这一新知识来数值近似求解 PDE:寻找能量泛函的近似最小化方案。类似于有限元方法,我们将我们的无限维解(x, y)投影到有限维空间,我们可以选择基元素:

u ( x , y ) u 1 b a s i s 1 ( x , y ) + u 2 b a s i s 2 ( x , y ) + u n b a s i s n ( x , y )

我们必须再次解出数字<u_1, u_2, ..., u_n>。为了做到这一点,我们将近似的 u(x, y)代入能量泛函的公式中。由于我们知道所有的基元素,这现在是<u_1, u_2, ..., u_n>的函数,我们可以使用标准微积分方法来最小化。完成!

这种方法相当通用,并将我们顺利引入变分微积分,这是关于寻找泛函的最优解而不是函数的,就像在正常微积分中一样。

蒙特卡洛方法

我们现在习惯于将大脑转换为概率思维,以解决确定性问题。我们用随机梯度下降来最小化损失函数,相乘大矩阵,对大矩阵进行随机奇异值分解,图上的随机游走来识别社区,排名网页等等。蒙特卡洛方法最著名的入门示例有:

  1. 通过在单位正方形内生成许多随机点<x_random, y_random>,并找到落在半径为 1 的内切四分之一圆内的比例:<x_random² + y_random² ≤ 1>。现在我们可以估计落入四分之一圆内的概率:

    P r o b ( point inside the quarter circle ) = areaofquartercircleofradius1 areaofunitsquare = π 4 numberoftimespointisinsidethequartercircle totalnumberofpointsgenerated .

  2. 通过生成随机点( x random , y random ),其中a x random b0 y random max ( f ),来估计非负连续函数f(x)在区间[a,b]上的积分 a b f ( x ) d x。积分的值是f图形下的面积。我们可以通过找到随机点位于*f(x)*图形下的比例来估计它,或者y random f ( x random )

    P r o b ( point under the graph of f ) = areaunderthegraphoff totalareaoftherectangle = a b f(x)dx (b-a)×max(f) numberoftimespointisunderthegraphoff totalnumberofpointsgenerated

解决确定性问题的这种随机方法被称为蒙特卡罗方法,因为它们涉及重复的机会游戏,并计算特定结果的比例,就像在摩纳哥的蒙特卡洛赌场赌博一样。它们也可以被称为拉斯维加斯大道方法。这类似于随机对照试验来回答确定性问题,例如评估某种药物对给定人群的影响。回答相同问题的另一种方法是完全确定性的观察性研究,其中控制所有疑似混杂变量,并评估药物干预的效果。

现在假设我们有一个确定性的 PDE,并且我们想使用随机数值试验(蒙特卡洛)来找到它的解决方案。为了说明这是如何工作的,让我们使用一个简单的 PDE:

Δ u ( x , y ) = 0 for ( x , y ) in the unit square 2 , u ( x , y ) = g ( x , y ) for ( x , y ) b o u n d a r y square .

让我们首先使用均匀网格离散化域,然后为内部网格点和边界条件编写 PDE 的有限差分方案:

u i+1,j -2u i,j +u i-1,j h 2 + u i,j+1 -2u i,j +u i,j-1 h 2 = 0 when (i,j) corresponds to an interior grid point , u i ' ,j ' = g i ' ,j ' when (i',j') corresponds to a boundary point .

目标是使用上述数值方案找到网格的每个内部点的u i,j。这将是该特定内部点真实解*u(x,y)*的数值估计。让我们解出u i,j

u i,j = 1 4 u i+1,j + 1 4 u i-1,j + 1 4 u i,j+1 + 1 4 u i,j-1 when (i,j) corresponds to an interior grid point , u i ' ,j ' = g i ' ,j ' when (i',j') corresponds to a boundary point .

这就是我们如何解释上述方程对于随机行走设置的:如果我们在边界上,那么我们知道解,它是 u i ' ,j ' = g i ' ,j ' 。因此,遵循 PDE 方案指导进行行走的随机行走者将在边界点收集他的奖励 g i ' ,j ' 。此外,在内部网格点(i,j)处的解 u i,j 是四个周围网格点的解的无权平均值。因此,如果一个随机行走者从内部网格点(i,j)开始,我们将给他 0.25 的概率漫步到他的四个相邻点中的任意一个,然后到它们的相邻点,直到他碰到一个边界网格点(i',j'),在那里他收集他的奖励 g i ' ,j ' 。这只是 PDE 方案的一个探索,以某种方式为我们提供了有关哪个边界点对解 u i,j 有贡献的微小信息。如果我们重复这个过程很多次,比如一千次,都从相同的网格点(i,j)开始,我们想要找到数值解的地方,那么我们可以计算随机行走者最终到达每个边界点的比例:

p r o b ( ending up at point ( i ' , j ' ) ) numberoftimesrandomwalkerendedupatpoint(i ' ,j ' ) totalnumberofrandomwalksstartingat(i,j)

这将为我们提供他从所有边界点预期奖励的估计,这正是我们正在寻找的数值解:每个边界值在内部点的解中扮演什么角色。因此,PDE 的数值解是:

u i,j = (i ' ,j ' ) p r o b ( ending up at point ( i ' , j ' ) ) g i ' ,j '

这是一种非常巧妙的获得数值解的方法,不涉及解线性方程组(可能非常庞大和不可取)。当我们关心仅在少数点找到解而不是在整个网格找到解时,这也非常出色。

当然,对于每个 PDE,我们必须设计正确的数值方案,以及随机行走者的转移概率。例如,如果 PDE 中有与二阶导数相乘的系数,那么随机行走者不会以 0.25 的等概率漫步到他的四个相邻点中的每一个。系数会为每个相邻点引入权重,因此我们调整每个转移概率。

在理论上,我们必须证明行走者最终会碰到边界,并且以这种方式获得的数值解会收敛到 PDE 的真实解析解。我们还必须获得关于随机行走停止时间(平均值)、数值解收敛速度有多快,以及以这种方式获得的数值解在准确性、计算成本和收敛速度方面与从有限差分或有限元获得的解相比如何的分析估计。

使用蒙特卡洛方法,有时我们从另一个角度开始。我们设计一个涉及不同过程和转移速率的模拟,模拟某些物理现象(例如系统中相互作用的粒子),然后我们对其进行平均,并转变为编写涉及手头系统描述符的偏微分方程。这与从偏微分方程开始然后设计一个颗粒尺度的蒙特卡洛模拟来解决它的过程完全相反。我们接下来讨论这一点。

一些统计力学:奇妙的主方程

我最喜欢的偏微分方程之一是来自统计力学的主方程,因为它是少数能够让我们从以概率描述系统的原子或分子尺度(粒子系统)转变到以确定性描述系统的宏观尺度的偏微分方程之一。可以合理地期望,底层的原子过程和转变导致了在宏观尺度上观察到的行为。向我介绍统计力学的非常聪明的人告诉我:我们整个生活经验不就是一些庞大的基础化学反应的集体行为的结果吗?

从原子概率的主方程转变为观察量的确定性偏微分方程是干净的,不会让我们感到欺骗或做出模糊的假设,或者让我们有两个完全不相关的模型,一个在宏观尺度,另一个在原子尺度,彼此毫无关联。

主方程跟踪统计系统(一些粒子)在某个特定时间处于某种状态的概率的演变。我们通过减去损失并考虑不同状态之间的转移速率来计算系统状态的概率的变化率:

P(h,t) t = h ' P ( h ' , t ) T ( h ' h ) - P ( h , t ) T ( h h ' ) , : = L P ,

其中T ( h h ' )T ( h ' h )是从状态h到*h’*和反之的转移速率。我们使用底层的物理假设或对系统的观察来计算这些转移速率,例如原子的蒸发和凝结速率,扩散速率,等等

现在我们可以利用主方程为系统的确定性描述符编写偏微分方程,通过计算它们的期望值。期望值将我们从概率量转换为确定性量。这是我们计算的方法:

f = h f P ( h , t ) = h f e -H(h)/KT Z ,

其中 H(h)是总能量,Z 是配分函数。表达式e -H(h)/KT Z在统计力学中非常常见,它表达了高能量状态指数上更不可能发生的直观观念,意味着系统更倾向于低能量,并且更倾向于向降低总能量的状态演化。

期望值与对 Monte Carlo 模拟的 N 次重复平均值比较

这个期望值 f 与蒙特卡洛模拟相关:它等同于蒙特卡洛模拟重复N次后f的均值的极限N

现在我们可以计算感兴趣量的期望变化率,比如表示晶体剖面(由原子组成)在某个位置i处的高度的h i,使用主方程:

dh i dt = h h i P t = h h i L P .

如果系统是封闭的,也就是说,如果我们能够用h及其对空间和时间的导数来表达右侧,那么我们就可以得到期望高度剖面的运动方程。如果系统不是封闭的,那么我们必须做一个近似以关闭系统。最好做一个物理上合理的近似,比如系统接近平衡,否则我们的努力将是无用的。

最后一步是对离散运动方程进行粗粒化,以获得描述晶体剖面的连续 PDE 模型。这一步将我们从有限差分方案转移到连续 PDE,这与我们通过有限差分学习的离散化过程相反。使用这个过程,得到的 PDE 直接从原子过程中出现。这样的 PDE 通常看起来像:

h t ( x , t ) = F ( h ( x , t ) , t ; ω )

其中ω 是系统的物理参数集。

在本章的后续部分,我们将学习如何使用图神经网络直接从粒子系统模拟宏观尺度的自然现象。这将绕过我们在本节中所做的写 PDE 的过程。网络的输入将是粒子及其相互作用和相互作用速率,输出将是整个系统的时间演变(视频或图的时间序列)。

解决方案作为基础随机过程的期望

对于某些类型的 PDE,找到解决方案的一个巧妙方法是将它们制定为某些基础随机过程的期望:我们模拟适当随机过程的随机路径,然后计算期望。这使我们能够在任何给定的空间-时间位置评估解决方案。

要学习如何做到这一点,我们需要研究费曼-卡克公式伊藤微积分(帮助我们找到依赖于时间的随机变量函数的导数)。这些将 PDE 和概率很好地联系在一起。

费曼-卡克公式(我们不会写)提供了一种实用的方法来解决一些被维度诅咒困扰的 PDE。例如,在量化金融中,我们可以使用费曼-卡克公式高效计算解决方案,以定价股票期权的布莱克-斯科尔斯方程。在量子化学中,我们可以用它来解决薛定谔方程。

转换 PDE

这里的想法很简单:也许在一个转换后的空间中解决 PDE 问题会比在当前空间中更容易(无论是分析还是数值解)。因此,我们以某种方式对其进行转换,并期望最好的结果。

傅里叶变换

傅里叶变换是从x空间到频率ξ空间的积分变换:

F . T ( f ( x ) ) = f ^ ( ξ ) = 1 2π - e -iξx f ( x ) d x

逆傅里叶变换撤销了傅里叶变换,并将我们从频率ξ空间带回到x空间:

F . T -1 ( f ( ξ ) ) = f ( x ) = 1 2π - e iξx f ( ξ ) d x

有许多函数的傅里叶变换表格供我们方便使用。当这些不可用时,我们就求助于数值方法。由于傅里叶变换及其逆变换对于许多应用非常重要,比如频率分析、信号调制和滤波,因此已经专门开发了用于快速计算的算法。

以下是关于傅里叶变换的一些重要事项:

  1. 它将一个函数分解为其频率分量:函数的傅里叶变换告诉我们函数具有每个频率的多少。函数*f(x)*的频率谱是其傅里叶变换的绝对值:| F ( ξ ) |

  2. 它有一个逆变换,允许我们在x空间和频率空间ξ之间来回移动。

  3. 它将x空间中两个函数的卷积转换为频率ξ空间中函数的乘积:F . T . ( f g ( x ) ) = F . T . ( f ( x ) ) × F . T . ( g ( x ) ) = f ( ξ ) g ( ξ )。当尝试为 PDE 找到解析解时,这是有帮助的:在x空间中解 PDE 归结为在ξ空间中解代数方程或更简单的微分方程,然后使用傅里叶逆变换回到x空间。许多情况下,我们要反转两个傅里叶变换的乘积,因此解最终变成x空间中的卷积。如果您之前遇到过用于解析解的Green 函数*,这是到达它们的一种方法。

  4. 它将x上的微分变为i ξ的乘法,因此F . T . ( u x ( x ) ) = i ξ F . T . ( u ( x ) ) = i ξ u ( ξ ),以及F . T . ( u xx ( x ) ) = - ξ 2 F . T . ( u ( x ) ) = - ξ 2 u ( ξ )。摆脱导数是巨大的。这意味着原始空间中的微分方程变成了傅里叶空间中的代数方程。

  5. 这是一个线性变换,因此我们可以将其分别应用于 PDE 中的每一项。这使我们能够无缝解决具有恒定系数的线性 PDE。对于具有非恒定系数的线性 PDE(其中参数取决于空间),如果我们愿意用这些系数的级数展开来解决问题,我们仍然可以使用傅里叶变换。一旦我们写出级数,就必须调查它们的收敛性。

  6. 我们用它来证明神经网络的通用逼近定理*(Hornik 等人,1989)*。

  7. 我们可以用它来加速卷积神经网络*(Mathieu 等人,2013)*。

  8. 将 PDE 表示为傅里叶空间中是方便的,如果我们想要训练神经网络来学习 PDE 解决方案。

也有一些不太方便的事情:

  • 许多函数具有复值傅里叶变换。我们只是学习复分析并接受这一点。

  • 并非所有函数都有傅里叶变换。涉及的积分在无限域上操作,因此如果积分中没有函数补偿以快速衰减为零,积分会发散(使傅里叶变换无用)。傅里叶变换的核是e -iξx = cos ( ξ x ) - i sin ( ξ x )。这以频率ξ振荡,永远不会衰减为零。

  • 即使对于其逆傅里叶变换存在(帮助我们找到 PDE 的解析解)的函数,有时我们也不知道它们的公式。在这些情况下,我们将无法使用这种方法编写明确的解析解。这是许多解析方法的常见问题。

它们有海森堡不确定性原理 不确定性原理的研究始于沃纳·海森堡的论点,即不可能同时确定自由粒子的位置和动量到任意精度。在量子力学中,位置的波函数是动量的波函数的傅里叶变换。:傅里叶不确定性原理最常见的用途是描述系统稳定性和可测性之间的自然权衡,特别是量子力学系统。假设 f(x)是粒子位置为 x 的概率,f(ξ)是其动量为ξ的概率,海森堡的不等式给出了这两个概率分布必须有多分散的下限。物理假设是位置和动量由傅里叶变换相关联。|f|2L2 ≤ 4π · |(x - xo)f|L2 · |(ξ - ξo)f|L2. 从定性上讲,这意味着一个狭窄的函数具有宽广的傅里叶变换,而一个宽广的函数具有狭窄的傅里叶变换。在任一域中,一个更宽广的函数意味着数据分布广泛,因此总是存在一定的不确定性。

傅里叶变换与傅里叶级数

我们不应将傅里叶变换与傅里叶正弦和余弦级数混淆。函数sin x没有傅里叶变换,但其傅里叶正弦级数本身就是。

拉普拉斯变换

拉普拉斯变换使我们能够转换比傅里叶变换更广泛的函数类,因为它的核e -st以指数速度衰减为零(指数中没有复值i来搞乱事情)。拉普拉斯变换作用于定义在[ 0 , )上的函数,因此在偏微分方程中,我们使用它来转换时间变量,或者如果其他变量的范围是[ 0 , )。因此,我们不直接在时间域中解决 PDE,而是对其进行拉普拉斯变换,用s域中解决它,然后再将其逆拉普拉斯变换回时间域。

拉普拉斯变换的公式是:

L . T . ( f ( t ) ) = f ^ ( s ) = 0 e -st f ( t ) d t

逆拉普拉斯变换的公式是:

L . T . -1 ( f ( s ) ) = f ( t ) = 1 2πi c-i c+i e st f ( s ) d s

就像傅里叶变换一样,有许多函数的拉普拉斯变换表格供我们方便计算。

我们关心拉普拉斯变换对 PDE 中涉及的(时间)导数的作用。它最好消除它们,否则 PDE 如何让我们更接近其解?它确实做到了:

  • L . T ( u t ( x , t ) ) = s u ^ ( x , s ) - u ( x , 0 )

  • L . T ( u tt ( x , t ) ) = s 2 u ^ ( x , s ) - s u ( x , 0 ) - u t ( x , 0 ) .

请注意,我们通常知道 PDE 的初始条件u ( x , 0 )u t ( x , 0 ),因此上述变换确实消除了对时间的导数。

我们还关心卷积到乘法的性质,这样我们可以通过逆拉普拉斯变换将s中的代数表达式转换回t空间中的 PDE 解。请注意,这是一个有限卷积,从0t,而不是从- ,就像在傅立叶变换的情况下一样:

  • L . T . ( ( f g ) ( t ) ) = f ( s ) g ( s ) 其中 ( f g ) ( t ) = 0 t f ( τ ) g ( t - τ ) d τ = 0 t f ( t - τ ) g ( τ ) d τ .

类似于傅立叶变换,拉普拉斯变换是一个线性算子,因此最适合用于线性 PDEs。

将 PDEs 简化为代数方程或 ODEs

傅里叶变换、拉普拉斯变换以及其他一些变换,如汉克尔变换和梅林变换,能够消除 PDE 中某些变量(时间、空间等)的导数。我们剩下的是一个代数方程,如果变换作用于 PDE 中涉及的所有变量,或者是一个普通微分方程(ODE),如果变换作用于除一个变量之外的所有变量。希望这里的代数方程或 ODE 比原始 PDE 更容易解决,并且我们可以利用代数、数值和 ODE 的已知方法来解决变换变量中的新方程。我们将在解算符的下一节中看到这种工作方式的一个简单示例。

解算符

现在我们将通过两个简单但具有信息性的示例来说明上述变换方法,同时展示解决 PDE 的解算符背后的思想。这些例子相当一般化,更重要的是为利用神经网络解决 PDE 奠定了基础。此外,这两个示例都有明确的解析解,因此我们可以使用它们来测试解决 PDE 的近似或迭代方法(包括神经网络方法)。

第一个示例使用具有恒定系数的一维热方程在无限域上(这是时间相关的),第二个示例使用具有恒定系数的二维泊松方程在具有简单几何形状的有界域上(这不是时间相关的,解在时间上是静态的)。

使用热方程的示例

无限一维杆上的热方程如下:

u t ( x , t ) = α u xx ( x , t ) for x , t ( 0 , ) u ( x , 0 ) = u 0 ( x ) for x .

由于这个 PDE 在x的无限域上定义,我们必须指定远场条件(没有边界,因此我们必须指定当x→∞和x→-∞时我们认为解函数*u(x,t)*是什么样子)。让我们假设这些极限为零。

为简单起见,让我们假设参数α是常数,这样我们就可以应用傅里叶变换。当将这种变换(关于x)应用于 PDE 时,我们设法消除x中的导数,并将 PDE 简化为只有时间导数的常微分方程:

u t ( ξ , t ) = - α ξ 2 u ( ξ , t ) for ξ , t ( 0 , ) u ( ξ , 0 ) = u 0 ( ξ ) for ξ .

现在我们可以轻松地使用常微分方程中的变量分离方法(让我们不要去烦恼细节),在傅里叶空间中获得解决方案:

u ( ξ , t ) = e -αξ 2 t u 0 ( ξ )

我们需要在x空间中的解决方案而不是在傅里叶空间中,因此我们对上述表达式进行逆傅里叶变换,并利用了在x空间和傅里叶空间之间转换时乘法变为卷积的知识。因此,在x空间中的解决方案是:

u ( x , t ) = F . T . -1 ( e -αξ 2 t u ^ 0 ( ξ ) ) = F . T . -1 ( e -αξ 2 t ) u 0 ( x ) = 1 4παt e -x 2 4αt u 0 ( x ) = - 1 4παt e -(s-x) 2 4αt u 0 ( s ) d s = - k e r n e l ( s , x ; t ; α ) u 0 ( s ) d s

以上计算的要点是:

PDE 的解 u(x,t)是一些核函数k ( s , x ; t ; α )对解的初始状态u 0 ( s )的积分。

此外,PDE 的解算子将给定的输入数据,即参数α和初始状态u 0 ( x ),映射到我们正在寻找的解 u(x,t)的输出,通过将初始状态与某个取决于 PDE 参数(以及其对空间和时间的依赖性)的核函数进行积分。

了解这个核的公式,或使用神经网络来近似它,可以解锁给定 PDE 的解。然后我们说神经网络学习了 PDE 的解算子

在我们简单的例子中,我们利用线性和恒定系数来融入傅立叶变换方法和卷积,当回到实空间时,我们有幸得到了积分核的显式解析公式,即,k ( s , x ; t ; α ) = 1 4παt e -(s-x) 2 4αt,因此不需要近似。有趣的是,这个核来自于一个时间相关的高斯函数G a u s s i a n ( x ; t ; α ) = 1 4παt e -x 2 4αt,随着时间的推移扩散开来。将其与解的初始状态进行卷积会产生平滑效果,使任何初始振荡和尖峰变得平滑。我们观察到这种平滑效果在任何我们可以可视化的扩散过程中,比如空气中的烟雾扩散,或液体中染料的扩散,物质会平滑地扩散直到我们得到一个均匀的介质。

使用泊松方程的示例

有界域上的泊松方程如下:

- . ( a ( x ) u ( x ) ) = f ( x ) for x D u ( x ) = 0 for x at the boundary of D.

a ( x )是常数且定义域是二维时,变成:

- a Δ u ( x , y ) = f ( x , y ) for ( x , y ) D 2 u ( x , y ) = 0 for ( x , y ) at the boundary of D,

在这里,我们可以像处理热方程(具有恒定系数的线性方程)一样,在xy上使用傅立叶变换,但让我们改用格林函数方法。我们可以将 PDE 的右侧视为在连续脉冲聚集的位置(x,y)处的强度 f(x,y)的聚合。我们需要Dirac delta measure δ (x,y) ( s , p ) 来在数学上表达脉冲的概念。这在域上的任何地方都是零,除了在点*(x,y)处是无穷大,它在域上的总测度被归一化为 1。这里的理念是,我们可以解决只有在特定位置有脉冲的 PDE,然后从中聚合原始解决方案。可以推测,仅将脉冲作为右侧的 PDE 比将给定函数作为右侧的 PDE 更容易解决,因此我们将从脉冲 PDE 的解决方案G(x,y;s,p)构建出解决方案u(x,y)*。更重要的是,使用格林函数允许我们获得输入数据的解的积分表示形式,该积分表示形式是针对一个核(即格林函数)的。带有脉冲右侧的 PDE 是:

- a Δ G ( s , p ; x , y ) = δ (x,y) ( s , p ) for ( s , p ) D 2 G ( s , p ; x , y ) = 0 for ( s , p ) at the boundary of D.

现在让我们写:

f ( x , y ) = D f ( s , p ) δ (x,y) ( s , p ) d s d p ,

以及 PDE 为:

- a Δ u ( x , y ) = D f ( s , p ) δ (x,y) ( s , p ) d s d p for ( x , y ) D 2 u ( x , y ) = 0 for ( x , y ) at the boundary of D.

让我们用δ (x,y) ( s , p )替换积分中的- a Δ G ( s , p ; x , y )

- a Δ u ( x , y ) = D - a Δ G ( s , p ; x , y ) f ( s , p ) d s d p for ( x , y ) D 2 u ( x , y ) = 0 for x at the boundary of D.

现在让我们假设我们有正确的条件来交换微分和积分:

- a Δ u ( x , y ) = - a Δ ( D G ( s , p ; x , y ) f ( s , p ) d s d p ) for ( x , y ) D 2 u ( x , y ) = 0 for ( x , y ) at the boundary of D.

最后,这使我们能够将解*u(x,y)*表示为:

u ( x , y ) = D G ( x , y ; s , p ; a ) f ( s , p ) d s d p

请注意,我们在G中明确了 G 对a的依赖关系,因为在神经网络设置中学习 PDE 的解算子时,物理参数a将成为网络输入的一部分。如果参数a=a(s,p)不是常数,那么我们将写成G(x,y;s,p;a(s,p))。类似于前面示例的讨论,上述计算的要点是:

PDE 的解u(x,y)是某个核函数的积分,本例中是格林函数G ( s , p ; x , y ; a ) 对 PDE 的右侧f ( s , p ) 的积分。

此外,PDE 的解算子将给定的输入数据(在本例中为参数 a 和 PDE 的右手边 f(x, y))映射到我们正在寻找的解 u(x, y)的输出,通过将右手边函数与依赖于 PDE 参数的某个核函数进行积分(以及其对空间的依赖)。在我们的情况下,解算子的核是 PDE 的 Green 函数,我们恰好知道它适用于具有简单几何形状的域上的 Poisson 方程,但在更复杂的情况下则不知道。再次强调,了解这个核的公式,或者使用神经网络来近似它,可以解锁给定 PDE 的解。

固定点迭代

固定点迭代对于构建显式解以及证明某些幸运的 PDE 的存在性和唯一性非常有用。这是一种简单而通用的方法,因此绝对是我们工具箱中必不可少的。我们将把它写下来,然后立即应用它来表示动力系统的解作为一个级数。动力系统是描述粒子或一群粒子(系统)随时间演化的常微分方程。同样,我们希望神经网络学习动力系统的解算子,这与我们上面的讨论是一致的。此外,将固定点迭代级数表示的解与神经网络表示并列是很好的。请记住,在许多数学设置中,我们可以用多种方式表示相同的解。固定点迭代级数是加法的,而神经网络表示是组合的。此外,神经网络似乎有优势,可以表示整个 PDE 家族的解算子和更广泛的多样性,这在这个领域是一种梦想成真。

固定点迭代旨在找到一个函数的不动点,或者一个函数映射回自身的点 x*:f(x*) = x*。这并不是一项简单的任务,因为 f 通常是非线性的,大多数情况下我们不知道给定函数是否存在这样的点。与非线性方程一样,迭代方法避免了“一次性”解决方案,而是提出了一系列点,希望在正确条件下收敛到期望的解,即函数的不动点。

它是如何工作的?

固定点迭代的步骤如下:

  • x0 是起始点,然后

  • xi+1 = f(xi)。

就是这样。我们的序列{ x 0 , x 1 , x 2 }是通过连续应用f生成的,看起来像{ x 0 , f ( x 0 ) , f ( f ( x 0 ) ) , f ( f ( f ( x 0 ) ) ) , . . . }。在fx 0的正确条件下,这个序列会收敛到f的一个不动点x (所以f ( x ) = x *)。

请注意,根据f和起始点,这个序列的渐近行为可以是以下任何一种:

  • 收敛到极限x :如果 FPI 收敛,那么它捕获了一个不动点(对于一个连续函数f*,如果 FPI 收敛,那么极限必须是f的不动点)。

  • 发散到:序列增长无限制

  • 周期性行为:序列在两个或更多值之间振荡。

  • 混沌行为:序列表现得不规律,没有任何模式。

与不动点迭代相关的定理断言,不动点迭代的起始点x 0的选择对于是否收敛到一个不动点很重要。

我们如何用它来解 ODEs 和 PDEs?

本章我们关注的是找到微分方程的解,这些解是函数。因此,我们首先会重新表述一个 PDE,使得它的解u满足一个看起来像F(u)=u的方程(注意这里的F是一个算子而不是一个函数),使其适合于一个不动点迭代设置,然后我们将应用上述相同的逻辑并构建一个函数序列,希望在正确的条件下,收敛到算子的不动点u ,这就是我们正在寻找的 PDE 的解。请注意,在前面的讨论中,我们构建了一个数字序列(而不是函数),希望在正确的条件下,收敛到一个函数*(而不是算子)的不动点。

让我们使用动力系统设置来演示这一点。这是描述空间中点的时间演变的最重要、最普遍和最深入研究的常微分方程之一。它易于理解,因为通常是一阶的,只有一个导数需要消除,但在一般情况下是非线性的,因此难以理解。人们习惯于在线性系统附近对动力系统进行线性化研究其线性化行为。这通常对非线性行为具有启发性,但两者不应混淆。对于线性化系统了解很多,对于非线性系统了解很少,因此我们需要同等关注非线性系统。在本节中,我们不进行线性化。相反,我们使用固定点迭代构造的级数来近似解。

知道点的初始状态u ( t 0 ) = u 0,一个解轨迹u ( t )跟踪其所有未来状态。函数f ( u ( t ) , a ( t ) , t )指定了演变:

du (t) dt = f ( u ( t ) , a ( t ) , t ) u ( t 0 ) = u 0

我们需要消除一个关于时间的导数,因此我们对时间积分一次:

u ( t ) = u 0 + t 0 t f ( u ( s ) , a ( s ) , s ) d s

现在让我们以适合固定点迭代的形式重新写上述积分方程:我们将整个右手边视为一个运算符,其输入为u ( t )

u ( t ) = F ( u ( t ) ) .

现在我们可以生成序列{ u 0 ( t ) , u 1 ( t ) , u 2 ( t ) , u 3 ( t ) , },它收敛到解u ( t ),在所有时间或有限时间内,在f的正确条件下。该序列看起来像:

  • u 0 ( t ) = u 0 ( t )

  • u 1 ( t ) = F ( u 0 ( t ) ) = u 0 + t 0 t f ( u 0 ( s ) , a ( s ) , s ) d s

  • u 2 ( t ) = F ( u 1 ( t ) ) = u 0 + t 0 t f ( u 1 ( s ) , a ( s ) , s ) d s

  • u 3 ( t ) = F ( u 2 ( t ) ) = u 0 + t 0 t f ( u 2 ( s ) , a ( s ) , s ) d s

等等...

简单但非常有启发性的例子

最好的例子是那些简单到有多种解决方法的例子。同时看到多种解决方法有助于巩固新学习方法的要点。考虑非常简单的一维线性动力系统:

du(t) dt = u ( t ) u ( 0 ) = 1 .

解决这个问题的第一种方法是通过变量分离,将所有包含 u(t) 的内容放在方程的一边,将所有仅包含 t 的内容放在另一边:

du(t) u(t) = d t

现在我们可以从 0 积分到 t

0 t du(s) u(s) = 0 t d s

我们得到 ln ( u ( t ) ) = t 因此我们使用变量分离方法解决我们简单的动力系统,得到解 u ( t ) = e t(可以说是数学中最重要的函数)。现在让我们使用不动点迭代构造一系列函数,并看它是否收敛到动力系统的解 u ( t ) = e t

  • u 0 ( t ) = 1

  • u 1 ( t ) = F ( u 0 ( t ) ) = u 0 ( t ) + 0 t u 0 ( s ) d s = 1 + 0 t 1 d s = 1 + t

  • u 2 ( t ) = F ( u 1 ( t ) ) = u 0 ( t ) + 0 t u 1 ( s ) d s = 1 + 0 t 1 + s d s = 1 + t + t 2 2

  • u 3 ( t ) = F ( u 2 ( t ) ) = u 0 ( t ) + 0 t u 2 ( s ) d s = 1 + 0 t 1 + s + s 2 2 d s = 1 + t + t 2 2 + t 3 3!

  • 继续: u n ( t ) = F ( u n-1 ( t ) ) = u 0 ( t ) + 0 t u n-1 ( s ) d s = 1 + t + t 2 2 + t 3 3! + + t n n!

n 时,不动点迭代收敛到级数

u ( t ) = 1 + t + t 2 2 + t 3 3! + + t n n! + = n=0 t n n!

这是 u ( t ) = e t 的幂级数展开,与我们使用变量分离得到的解相同(尽管形式不同)。很酷。

当我们使用这种迭代方式构造动力系统的解,或者将 PDE 重新表述为动力系统,或者适合不动点迭代的方式(u=F(u)),我们称之为皮卡迭代。它简单并且在步骤中到达解(当它收敛时)。

复杂在哪里?

为什么我们不使用皮卡迭代来构建所有动力系统和所有我们能够重构成适合固定点迭代的形式的偏微分方程的解?和往常一样,答案是维度的诅咒。即使对于我们非常简单的一维和线性示例,每个皮卡迭代步骤都涉及评估一个积分,对于更复杂的问题,我们必须进行数值评估。例如,对于代表许多粒子的演化和相互作用的动力系统,这个过程会乘以粒子的数量。总体而言,在 ODE 和 PDE 文献中,只有有限数量的情况下,可以为高维设置提供实用算法。

最近的成功!

话虽如此,最近一种基于皮卡迭代找到高维非线性拟线性抛物型 PDE 和反向随机微分方程的显式解的方法在找到现实生活中物理学和金融应用中出现的高维 PDE 的显式解方面取得了相当成功。该论文(2017 年)的摘要很有见地:抛物型偏微分方程(PDEs)和反向随机微分方程(BSDEs)是物理学和金融工程模型中的关键要素。特别是,抛物型 PDE 和 BSDE 是金融衍生品定价和对冲的最先进工具。在这些应用中出现的 PDE 和 BSDE 通常是高维和非线性的。由于这些 PDE 和 BSDE 的显式解通常不可用,因此解决这些 PDE 和 BSDE 的近似方法是一个非常活跃的研究课题。在最近的文章[E, W., Hutzenthaler, M., Jentzen, A., and Kruse, T. Linear scaling algorithms for solving high-dimensional nonlinear parabolic differential equations. arXiv:1607.03295 (2017)]中,我们提出了一系列基于皮卡逼近和多层蒙特卡洛方法的近似方法,并在对半线性热方程的精确解的适当正则性假设下表明,计算复杂度受到O ( d ϵ -(4+δ) )的限制,其中 d 是问题的维度,δ ( 0 , ),而ϵ ( 0 , )是所需的精度。在本文中,我们通过数值模拟测试了这种算法在物理学和金融中出现的各种 100 维非线性 PDE 的适用性,展示了逼近精度与运行时间的关系。这些 100 维示例 PDE 的模拟结果在精度和速度方面非常令人满意。此外,我们还从文献中提供了其他非线性 PDE 和 BSDE 的逼近方法的综述。

为 PDE 的深度学习做准备

在离开这一部分之前,让我们为解决 ODE 和 PDE 在深度学习背景下的情况,特别是深度算子网络,做好准备。我们将保留我们的一维动力系统示例,但这次我们强调对物理参数*a(t)*的依赖,并通过在时间上增加另一个显式依赖,使其稍微更一般化:

du(t) dt = f ( u ( t ) , a ( t ) , t ) u ( t 0 ) = u 0

在这之前,我们对时间进行一次积分:

u ( t ) = u 0 + t 0 t f ( u ( s ) , a ( s ) , s ) d s

神经网络的目的是将数据作为输入,对其进行处理,然后给我们一个我们关心的输出。对于常微分方程或偏微分方程,当然我们关心的输出是解<u(t)>。让我们将这个解写成某个运算符G的输出,该运算符将常微分方程或偏微分方程的给定数据作为输入。在我们的动力系统案例中,输入数据是表示动力系统物理参数的函数a(t)。请注意,我们不需要输入动力系统右侧函数f。这在训练数据中是隐含的,现在看起来像是*(训练输入,训练输出)= ( a ( t ) , u ( t ) )。通过不输入f*,我们在某种程度上在说:我不关心这种行为来自哪个精确形式的常微分方程或偏微分方程,但我能够学习系统正在做什么。这就是机器学习的典范:无需编码系统遵守的规则,模型仍然可以模拟它,只要观察到足够多的实例。

我们可以将解<u(t)>等于上述积分方程中的解算符 G 写成u ( t ) = G ( a ( t ) ),其中解算符 G将使用神经网络进行学习。请记住这个符号和思想,直到本章后面讨论神经运算符网络时。将u ( t ) = G ( a ( t ) )代入上述积分方程中,我们发现要学习的解算符,它满足使用神经网络的条件:

G ( a ( t ) ) = u 0 + t 0 t f ( G ( a ( s ) ) , a ( s ) , s ) d s .

我们刚刚写了一个积分方程,我们不会对其进行任何操作。它只是展示了我们关心的实体G(a(t))满足的真实属性。在上面的讨论中,我们使用了 Picard 的迭代来近似这个方程,在深度学习的新时代中,我们使用深度运算网络来近似它(更多内容即将介绍)。这种深度学习方法在计算上更有效,如果我们包括傅立叶变换来加快计算速度。此外,深度学习方法更广泛,它适用于更多的偏微分方程和常微分方程,而不仅仅是动力系统。动力系统很容易积分一次并获得一个让我们更接近解决方案的表示,而对于许多常微分方程和偏微分方程来说并非如此。

网格独立性和不同分辨率

最后一点:神经网络学习我们动力系统解决方案的输入和输出对看起来像:(训练输入,训练输出)= ( a ( t ) , u ( t ) ) 。由于机器只接受数值而不是函数,我们在实现时必须离散化。这里有一件很漂亮的事情,区分了作用于函数的算子作用于点的函数,并赋予神经算子网络其网格独立性特征:a(t)u(t)不必在相同的t值上离散化。我们只关心将一个函数映射到另一个函数,因此我们可以将离散化的a(t)看作映射到另一个向量的向量,该向量是离散化的u(t),不一定在相同的点上,甚至不一定是相同大小的。出于同样的原因,我们可以在给定分辨率下训练网络,然后在另一个分辨率下进行预测。这对于常微分方程和偏微分方程领域非常有用,因为数值解的质量一直受到所使用的离散化分辨率的限制。

PDE 的 AI

在调查解决 PDE 的主要关注点和基本方法之后,我们终于准备讨论 AI 与 PDE 的关系,而不仅仅是在这里或那里暗示或设定其舞台。我们希望区分深度学习进入 PDE 社区的几种不同方式:

  • 深度学习学习 PDE 的物理参数值

  • 深度学习学习二维和三维网格,用于数值模拟和实体建模

  • 深度学习学习 PDE 的解算子:神经网络学习两个无限维空间之间的映射

  • 深度学习绕过 PDE,直接从观察数据中模拟自然现象(粒子系统及其相互作用)

深度学习学习物理参数值

我们可以使用神经网络推断 PDE 模型的参数及其不确定性。我们可以从实验中获取训练数据(真实的或通过模拟已知参数的众所周知现象)。这些训练数据将带有参数值标签,因此神经网络将学习将某个 PDE 的初始设置映射到适当的参数值,从而产生更准确的建模结果。在历史上,无法直接测量的参数必须被猜测或手动调整以适应某些观察到的行为,这种做法破坏了整个建模过程。深度学习的这种简单应用极大地帮助了 PDE 建模社区,因为它为他们的结果带来了更多的真实性。我们现在可以从实验的标记图像、录音以及其他非结构化或非常高维的数据中学习参数值。一旦训练完成,神经网络可以估计具有相似设置的任何输入数据的参数和不确定性。这篇海报有一个很好而简单的例子,使用深度学习来预测 G 方程(模拟燃烧过程)的速度场参数:基于物理非线性火焰模型的贝叶斯推断

深度学习学习网格

我们在本章中学到,生成网格是有限元方法的一个组成部分,有限元方法又为模拟具有复杂域几何形状的自然现象的各种 PDE 提供了数值解。底层网格的质量会影响数值解的质量。网格越精细,就越有可能捕捉到真实解,但也会增加计算成本。一个理想的网格应该在数值解与真实解之间的误差可能较大的地方密集,而在误差较小的地方粗糙,从而在保持精度的同时保持整体计算成本可控(图 13-12)。

250

图 13-12. 左侧为非均匀网格,右侧为均匀网格。网格需要在误差较大的地方更细致(图片来源)。

如果给定一个偏微分方程(PDE)、其定义域几何形状、边界条件和参数值作为输入,我们可以训练一个神经网络自动生成一个理想的网格,预测在定义域的每个位置的网格元素的密度分布,这将是非常好的。这正是MeshingNet(2020)所做的。

在 MeshingNet 之前,网格学习是通过昂贵的多步有限元解和误差估计器来完成的。相比之下,MeshingNet 依赖于类似的问题来预测新问题的理想网格。它从一个初始均匀和粗糙的网格开始,并预测用于细化的非均匀网格密度。作为深度学习的标志,MeshingNet 在不同几何域中的各种控制 PDE、边界条件和参数下都有很好的泛化能力。

MeshingNet 的输入是控制 PDE、PDE 参数、定义域几何形状和边界条件,输出是整个定义域上的区域上限分布 A(X)。输入和输出之间的映射是高度非线性的,因此通过神经网络学习,神经网络已经展示出表达许多种非线性关系的出色能力。

为了构建训练数据集,MeshingNet 团队使用标准有限元求解器在高密度均匀网格上计算高精度解。他们还对低密度均匀网格进行相同的计算以获得较低精度的解。然后他们通过在这些解之间进行插值来计算一个误差分布 E(X)。他们使用 E(X)作为指导来细化 A(X)。他们通过结合不同几何形状、不同参数和边界条件来丰富训练数据。

用于三维网格的深度学习

三维网格(图 13-13)对计算机图形、娱乐行业的动画和实体建模非常有用。从给定的三维数据点集合中重建纹理和逼真的表面也是非常有价值的。传统方法包括 Delaunay 三角剖分和 Voronoi 图,它们使用三角形网格对点进行插值。然而,当坐标中存在噪声时,得到的表面会过于粗糙,需要数据预处理。

250

图 13-13. 三维网格 (图片来源)

深度学习正在生成更高质量的三维网格,例如,Deep Hybrid Self-Prior for Full 3D Mesh Generation(2021)Pixel To Mesh (2018),它们通过不断变形椭球从单色图像中生成三维三角形网格中的三维形状。

利用深度学习来逼近 PDE 的解算子

我们在本章中已经多次开始讨论这个问题。我们不想使用深度学习来增强 PDE 的现有方法,比如从数据中学习物理参数值,或者学习数值方法的更好网格,我们想要学习 PDE 的解算子。这将 PDE 的输入,如其域、物理参数、解的初始/最终状态和/或边界条件,直接映射到其解。我们可以将其视为:

PDE 的解=函数(PDE 的物理参数、域、边界条件、初始条件等)

我们想要构建一个神经网络来逼近这个函数。实际上,这是一个操作符,而不是通常意义上的函数,因为它将函数映射到其他函数。这里的警告是,微分算子及其逆映射无限维空间无限维空间,有时是线性的,比如从泊松方程的右侧到解的映射,大多数情况下是非线性的,比如从泊松方程的参数到解的映射。相比之下,我们在整本书中学到的神经网络的输入和输出是有限维的(输入和输出是向量、图像、图形等)。这些神经网络能够逼近有限维空间之间的函数映射。它们有一个强大的通用逼近定理,并在实际应用中取得了许多成功(如果对隐藏层的宽度和深度没有约束,我们可以使用神经网络以任意精度逼近任何连续函数)。为了类比地使用深度学习来解决 PDE,我们必须回答两个问题:

  1. 神经网络能够逼近无限维空间之间的映射吗?也就是说,它们能够逼近任何非线性连续泛函(网络的输入将是一个函数或一组函数,输出将是一个实数)或非线性算子(网络的输入将是一个函数或一组函数,输出将是另一个函数)吗?答案是!就像有关神经网络函数的通用逼近定理一样,神经网络算子也有通用逼近定理。具有单个隐藏层的神经网络可以准确逼近任何非线性连续泛函或算子。此外,神经网络能够学习整个 PDE 族的解算子,而不是传统的解 PDE 方法,后者一次只能解决给定 PDE 的一个实例。

  2. 在实践中如何实现这一点?对于有限维情况,神经网络中的一个节点线性组合输入向量的有限维特征(或上一层的输出),添加偏置项,应用非线性激活函数,然后将结果传递给下一层。在无限维情况下,我们不再有有限数量的条目进行线性组合,类似的做法是对输入函数的一些可学习核(乘法器函数)进行积分(对于数值积分,我们必须在有限多个点上采样,将积分转换为加法),添加偏置函数(可选),应用非线性激活函数,然后将结果传递给下一层。下一层将对上一层节点结果的倍数进行相加,并将它们与上一层节点结果的可学习核进行积分,依此类推。一个这样做的例子看起来像:

u n+1 ( x ) = σ ( D k e r n e l ( x , s , a ( x ) , a ( s ) ; ω ) u n ( s ) d s + W u n ( x ) ) ,

在这里,我们通过一定数量的全局积分、与核函数的局部线性变换以及与非线性激活函数的组合迭代地到达解u(x)。迭代过程中的核函数参数是ωW的条目。神经网络通过训练从带有 PDE 解的标记数据中学习这些参数,通过最小化损失函数。类似于有限维情况,神经算子网络通过将在整个域上全局作用的线性积分算子与非线性激活函数组合来逼近非线性算子。上述迭代公式还包括一个局部线性乘数,在我们离散化时变为矩阵(检查这一点)。

神经算子网络学习我们推导出的解算子

让我们暂停一下,将上述表达式与我们为以下三种情况推导出的真实解算子进行比较:热方程、泊松方程和动力系统。我们可以很容易地将神经算子迭代过程适应到上述三种情况中的每一种:

  • 对于一维空间中具有恒定系数的热方程,解算子将初始状态和 PDE 的物理参数(恒定)映射到解u(x,t),我们很幸运地对所有涉及的量都有明确的公式:

G ( u 0 ( x ) , a ) = u ( x , t ) = - 1 4πat e -(s-x) 2 4at u 0 ( s ) d s = - k e r n e l ( s , x ; t ; a ) u 0 ( s ) d s

在这种情况下,神经算子网络通过以下迭代来逼近真实算子:

G ( u 0 ( x ) , a ) = u ( x , t ) u n+1 ( x , t ) = σ ( D k e r n e l ( s , x ; t ; a ; ω ) u n ( s ) d s + W u n ( x ) )

  • 对于二维空间中具有零边界条件和恒定系数的泊松方程,解算子将 PDE 的右侧f和其物理参数(恒定)映射到解u(x,y),只有对于某些简单的几何形状,我们才有所有涉及的数量的明确公式(我们这里没有写出):

G ( f ( x , y ) , a ) = u ( x , y ) = D G r e e n F u n c t i o n ( x , y ; s , p ; a ) f ( s , p ) d s d p

在这种情况下,神经算子网络通过以下迭代来逼近真实算子:

G ( f ( x , y ) , a ) = u ( x , y ) u n+1 ( x , y ) = σ ( D k e r n e l ( x , y , s , p , a ; ω ) u n ( s , p ) d s d p + W u n ( x , y ) )

  • 对于一维动力系统,解算子将 ODE 的物理参数(函数)映射到解u(t),我们有一个隐式积分方程来满足它:

G ( a ( t ) ) = u ( t ) = u 0 + t 0 t f ( G ( a ( s ) ) , a ( s ) , s ) d s .

在这种情况下,神经算子网络通过以下迭代来逼近真实算子:

G ( a ( t ) ) = u ( t ) u n+1 ( t ) = σ ( t 0 t k e r n e l ( t , s , a ( t ) , a ( s ) ; ω ) u n ( s ) d s + W u n ( t ) )

在这里,一个数据点是一个三元组(t, a(t), G(a(t))),因此一个特定的输入 a 可能会出现在多个具有不同 t 值的数据点中。例如,一个大小为 10,000 的数据集可能只从 100 个 a(t)轨迹中生成,并且每个轨迹对 100 个 t 位置进行评估。(解释这个)

观察上述三种不同情境时要注意的一点是,神经算子网络只需要输入和输出数据,而不需要了解底层的 PDE。关于 PDE 的知识隐含在训练数据中。有了这个想法,让我们强调神经算子网络的输入输出形式:

PDE 的解 learned_operator(PDE 的物理参数,域,边界条件,初始条件,_ 等)

重要的问题

当我们超越这本书去扩展我们对神经算子网络的了解时,我们必须将以下问题作为我们的指南:

对于给定的 PDE,网络的输入和输出是什么?

我们在热方程、泊松方程和动力系统的简单情境中解决了这些问题。

神经算子的架构示例是什么?

图 13-14 显示了DeepONet的输入和输出结构。输入是一个离散化的对(t,a(t)),输出是一个离散的 G(a(t))。

300

图 13-14.(使用正确的标签重新制作此图,标签为 G,u,a 和 t)(A)学习算子 G(a(t))的网络接受两个输入( a ( t 1 ) , a ( t 2 ) , , a ( t m ) )和 t。(B)训练数据的示意图(图片来源)

我们如何处理输入在维度上存在如此巨大差异的事实,比如同时具有有限维和无限维?

换句话说,在训练和推断过程中,我们如何离散化涉及的有限维(如时间和空间)和无限维量(解函数、参数函数、边界条件、初始条件等)?请注意,对于学习有限维映射的神经网络,输入(表格、图像、音频文件、图形、自然语言文本)始终具有相同的维度,被预处理为具有相同的维度,或者网络本身逐个处理输入的固定维度部分。

我们如何避免许多 PDE 解决方法中的常见陷阱,这些方法最终取决于离散化?

神经操作器网络在哪种意义上是无网格的,并且能够将其学习的参数推广到其他不同于训练过的离散化的情况?这里的重大进展在于神经操作器网络是离散化不变的,它们在不同的离散化之间共享相同的网络参数。这意味着它们的输出不依赖于底层的离散化,并且可以与不同的网格表示一起使用。

我们如何加快神经操作器中涉及的积分的计算时间,并使其成本更低?

我们引入傅立叶变换。傅立叶神经网络加速了计算所涉及积分的过程,将输入转换为傅立叶空间。这利用了快速傅立叶变换方法。我们将在下一小节讨论的傅立叶神经网络实现了这一点。

神经操作器网络如何处理涉及数百或数千个变量的高维 PDE?

金融市场模型(Black Scholes)、涉及多个参与代理的博弈论设置(Hamilton Jacobi Bellman),或者涉及多粒子的物理系统,都是非常高维的。在每个维度上的离散化会使本来就很大的问题在计算上变得更加庞大,直到现在,这些优雅的 PDE 的任何实际实现都是不可行的。2018 年的文章使用深度学习解决高维微分方程,我们很快也会讨论,使用 AI 技术来解决这些 PDE,但是将该文章的方法与深度神经操作器设置进行比较会更好。

傅立叶神经网络

加州理工学院最近开源了其傅立叶神经网络,用于解决偏微分方程,其方法在文章参数化偏微分方程的傅立叶神经操作器(2021)中有所说明。这些网络可以近似高度非线性、高频模式和能量衰减缓慢的 PDE 的解算符。

傅立叶神经网络中的每一层都对其输入数据应用快速傅立叶变换,然后是线性变换,然后是逆傅立叶变换。这导致准线性的计算复杂度,即 O(n 多项式(log(n)))的顺序,并使模型对数据的空间分辨率不变(尽管仍需要均匀网格)。

图 13-15 显示了傅立叶神经网络的架构。

250

图 13-15. 傅立叶神经网络的架构(图片来源)。

输入是物理参数 a(x),输出是 PDE 解 u(x)。

  • 从输入 a(x)开始。

  • 通过一个浅度全连接的神经网络 P 将其提升到更高维度的通道空间:v0(x) = P(a(x))。

  • 应用几个傅立叶层的积分算子和激活函数。在这些层中,我们:应用傅立叶变换 F.T;对较低的傅立叶模式应用线性变换 R 并滤除较高的模式;应用逆傅立叶变换 F . T -1 。在底部:应用局部线性变换 W。

  • 通过神经网络 Q 将结果投影回目标维度。最后输出 u(x) = Q(vT(x)),这是通过局部变换 Q 对 v 进行的投影,Q 也由一个浅度全连接的神经网络参数化。

  • 最后输出 u(x)。

文章展示了各种重要的 PDE 的方法:

  • 伯格斯方程

  • 达西流

  • Navier-Stokes 方程

  • 在其他方法发散的湍流流动区域中进行。

傅立叶神经网络是网格不变的,因此可以在较低分辨率上进行训练,并在较高分辨率上进行评估,而不需要看到任何更高分辨率的数据(零样本超分辨率)。

由于数据驱动方法依赖于数据的质量和数量,我们需要通过其他方法解决实际 PDE 来生成神经算子网络的输入和输出的训练对。为此,作者指出:为了学习具有 v i s c o s i t y = 1 e -4 ,我们需要生成 N = 10000 个训练对 ( a ( x ) , u ( x ) ) 使用数值求解器。对于更具挑战性的 PDE,生成甚至少量的训练样本可能非常昂贵。未来的方向将是将神经算子与数值求解器结合起来,以减轻对数据的要求。

运算符的通用逼近定理陈述

假设σ是一个连续非多项式函数,X 是 Banach 空间,K 1 XK 2 d是两个紧集,V 是C ( K 1 )中的紧集,G 是一个非线性连续算子,将 V 映射到C ( K 2 )。那么对于任意ϵ > 0,存在正整数 n,p,m,常数c i k , ξ i,j k , θ i k , ξ k , ω k d , x j K 1 , i = 1 , , n , k = 1 , , p , j = 1 , , m,使得

| G ( u ) ( y ) - k=1 p i=1 n c i k σ ( j=1 m ξ ij k u ( x j ) + θ i k ) σ ( ω k . y + ξ k ) | < ϵ

对于所有u Vy K 2成立。请注意,这个逼近定理只使用神经网络中的一个隐藏层,但没有指定这个层有多少节点。在应用中,就像在有限维情况下一样,我们使用多个层。

不要被大词汇和希腊字母吓到。这个定理告诉我们的是,我们有理论基础来制定一个神经网络算子,并期望它能很好地逼近 PDE 解算子。即使我们可能永远不会知道 PDE 解算子的确切公式,我们构建的算子神经网络作为一个很好的代理。这就是我们都热爱逼近定理的原因,应该永远感激那些找到它们的数学家们。

我们已经在固定点迭代的加法逼近解的背景下提到过这一点,值得再次提到:无论是逼近有限维空间之间的映射还是无限维空间之间的映射,神经网络都使用简单函数的组合(线性组合或线性积分算子与非线性激活函数组合)来逼近复杂函数、泛函或算子。这与传统的逼近方法不同,传统的逼近是加法的,而不是组合的。

我们如何拓展并深入了解更多技术细节?

要深入研究神经算子网络,关于这个主题的三个重要出版物是:

  1. DeepONet: Learning nonlinear operators for identifying differential equations based on the universal approximation theorem of operators (2020)

  2. Neural Operator: Graph Kernel Network for Partial Differential Equations (2020)

  3. Fourier Neural Operator For Parametric PDEs (2021)

高维微分方程的数值解

微分方程是普遍的,它们可以模拟我们几乎可以想到的任何事物,包括我们的日常通勤和交通情况。暴露于微分方程然后不考虑我们所处的每种情况是否符合某种微分方程是很困难的。也就是说,自从微分方程领域诞生以来,维度的诅咒一直困扰着这个领域,并阻碍了许多实际应用。这就是为什么许多初级 PDE 课程误导性地只关注一维和二维微分方程,好像那就是全部了。如果 AI 被赋予一个不那么花哨的名字,肯定不会出现在任何电影中,那就是:高维数据的处理、计算和分析。这并不是贬低 AI,因为处理、计算和分析高维数据正是人类每天所做的事情,前提是我们为其增加了创造性的维度(在 AI 中这将转化为生成模型)。因此,深度学习结果被证明是寻找非常高维微分方程的数值解的合适设置。这是 2018 年文章Solving High Dimensional Differential Equations Using Deep Learning (2018)的重点,该文章涉及具有数百甚至数千维的 PDE。通过这种方式,我们可以同时包括所有参与者、资产、资源或粒子,而不是人为地设计关于它们相互作用和联系的假设。作者考虑了多个高维 PDE,包括 Hamilton-Jacobi-Bellman 方程(每个相互作用代理的最佳策略是什么,涉及数百个代理?)和 Black-Scholes 方程(基于 100 个基础资产,尚未发生违约的情况下,欧洲索赔的公平价格是多少?)

当我们将深度学习设置作为模型的基础时,例如用于计算高维 PDE 的解时,我们必须首先问的问题是我们的深度学习网络的输入和输出是什么。对于任何解为u(x,t)的 PDE,理想情况下我们会输入xt,输出u(x,t)。在这种情况下,x可以是一个极高维度的向量。如果x的条目具有任何固有的随机性,比如金融市场资产的价格,那么我们必须将它们建模为这样,如果我们不这样做,那么我们通常是在假设某种平均值。最重要的是,对于许多现实情况,我们可以将x作为X,一个随机过程进行输入。我们必须在数学上定义这一点。

上述文章中的一个重要步骤是在将X输入到近似解梯度的神经网络之前,将高维 PDE 重新表述为反向随机微分方程。为了掌握这里所需的基本数学,我们必须定义:

  1. 布朗运动(见第十一章)

  2. 随机过程(见第十一章)

  3. 随机微分方程(这超出了本书的范围)

  4. 将非线性抛物型 PDE 与随机 PDE 相关联(这超出了本书的范围)

  5. 反向随机微分方程(这超出了本书的范围)

我们必须回答一个问题:为什么在训练网络之前我们必须将偏微分方程重新表述为随机形式?这种形式给我们带来了什么优势?这超出了本书的范围,但现在你知道要寻找什么以及要问什么问题了。

最后,这种方法为解决许多高维微分方程打开了大门,但也存在一些限制。该方法无法应用于量子多体问题,因为处理泡利不相容原理的困难。

直接从数据模拟自然现象

在本章中,我们曾经讨论过粒子系统:我们使用统计力学框架描述了粒子尺度系统状态的概率,然后用这些概率编写了描述系统在宏观尺度上时间演变的偏微分方程。

在本节中,我们将解释最近基于神经网络的模型如何模拟粒子系统并预测其演变,而不需要编写任何偏微分方程。换句话说,我们绕过了偏微分方程,将其替换为从数据中学习。

为了跟踪某个粒子系统(如水或沙)在颗粒尺度上的演变,我们需要知道每个粒子在每个时间步长t的位置矢量p i ( t )。这些位置的变化取决于粒子与其邻居之间的局部和远程相互作用(如能量和动量交换),这些相互作用既受系统的物理性质影响,也受重力、温度、力、磁场等外部影响的影响。我们可以训练一个神经网络来学习一个给定时间点(输入)的粒子系统状态与未来某个时间点的所有粒子位置(或速度或加速度)之间的映射,而不是为这些相互作用编写明确的方程,并将它们与粒子的位置、速度和/或加速度联系起来。图网络非常适合模拟粒子系统,因为每个粒子及其状态可以是一个节点,边及其特征可以模拟特定粒子之间的相互作用。

我们强调并评论了一项最近的工作中的一般思想,该工作学习了这样一个映射:使用图网络学习复杂物理学(2020 年,谷歌 DeepMind 和斯坦福大学)

首先,我们需要训练数据

我们可以从观察或模拟某个粒子系统的轨迹数据集中生成输入(某个时间点的粒子系统及其特征)和目标(稍后时间点每个粒子的加速度)对:例如,从一个 1000 步长的轨迹中,团队生成 995 对,以过去 5 个状态为条件。在数据集中,我们只需要位置矢量,可以使用有限差分推导出速度和加速度矢量。数据集通常包含 1000 个训练、100 个验证和 100 个测试轨迹,每个轨迹模拟了 300-2000 个时间步长,根据各种材料达到稳定平衡所需的平均持续时间进行调整。

接下来,我们需要构建从输入到输出(网络组件)的映射。

从整数时间 t 的某个状态开始系统 X t = ( x 0 t , , x N t ),其中每个 N 个粒子的 x i t 代表其在时间 t 的状态(包括其位置 p i t 和其他特性,如质量,材料属性等)。

接下来,学习一个表示状态的地图 X t = ( x 0 t , , x N t ) 作为图 G = (节点,边,全局属性,也可以作为节点特征包含)。节点嵌入 node i = f u n c t i o n ( x i ) 是粒子状态的学习函数(使用多层感知器)。添加有向边以创建粒子节点之间可能相互作用的路径。边的嵌入 e i,j = f u n c t i o n ( r i,j ) 是对应粒子的成对属性的学习函数(使用多层感知器),例如它们位置之间的位移,弹簧常数等等。

然后学习一个图到图的映射:通过 M 步学习的消息传递计算节点之间的相互作用,生成一系列更新的潜在图,G = ( G 1 , , G M )。然后返回最终图。消息传递允许信息通过边在节点之间传播,并且遵守约束。这样,系统的复杂动态通过节点之间的学习消息传递在它们的局部邻域内近似。此外,最终图具有与第一个图相同的结构,但具有潜在不同的节点、边和图级属性。

然后,学习一个从最终图到提取系统动态的矩阵的映射(多层感知器),例如,粒子加速度的矩阵Y = ( p 1 '' , p 2 '' , , p N '' )。最后,使用 Y 中的加速度的 Euler 积分器更新粒子的位置和速度。这反过来将系统的状态更新为X t+1

这样的模型不仅限于材料和粒子系统,还可以模拟具有许多相互作用代理人的系统,例如机器人控制系统。这是朝着真实模拟复杂现象迈出的一大步,对科学和工程领域具有重要价值。

动态规划的 Hamilton-Jacobi-Bellman PDE

Hamilton-Jacobi-Bellman 方程是另一个偏微分方程,其解决方案在经济学、运筹学和金融领域中打开了许多可能性,只要我们能够在高维度中解决它。简而言之,我们正在寻找一个最佳策略(如投资策略),以确保在一定时间段内有一些最小的实施成本。理想情况下,我们希望包括数百或数千个相互作用的代理人,例如所有投资银行的金融资产,而不是缩小到不切实际的代理人模型。这就是在本章前面看到的使用神经网络为高维度 PDE 找到数值解的地方。

从数学上讲,哈密尔顿-雅可比-贝尔曼偏微分方程非常丰富:它结合了动力系统(x(t) dt = f ( x ( t ) , a ( t ) , t )),偏微分方程(偏导数和等式)以及优化(maxmin问题)。当我们学会如何从现实世界应用中推导出这个偏微分方程时,尝试理解它,找到它的解,并分析这些解(存在性,唯一性,平滑性等),我们会获得大量数学知识。

此外,这个偏微分方程直接与人工智能中的强化学习相关,但是与以马尔可夫决策过程为基础的概率强化学习不同,我们考虑以确定性动态规划的方式来思考强化学习。

在动态规划设置中,相互作用代理的状态,捆绑在一个向量x ( t )中,随时间演变,我们需要找到一种优化策略,引发这个动态系统的特殊解:在给定时间段内产生最小成本。思路是这样的:一种特定的时间依赖策略影响动态系统的行为,进而影响产生的成本。所有这些都是数学量。

理查德·贝尔曼(1920-1984)对动态规划领域(在给定时间段内找到演变系统的最佳策略)的贡献是无价的。我们很快将遇到贝尔曼最优性原理,实际上,正是他创造了“维度诅咒”这个术语。这个原理非常有帮助,因为它将在考虑的时间段内涉及的优化问题分解为更小的子问题,然后我们可以以递归方式解决这些问题。

确定性和随机设置中的贝尔曼方程

在确定性动态规划设置中,有:

  • 离散时间贝尔曼方程:我们可以通过选择当前时间步骤k处的最佳策略(或控制或政策)a k来找到从当前时间到最终时间的值函数,以便当前成本加上下一个时间步骤的值函数最小化。这是一个递归过程:

V a l u e ( x k , n ) = min a k ( C o s t ( x k , a k ) + V a l u e ( x k+1 , n - 1 ) )

其中n是最终时间步骤,离散时间动态是

x k+1 = f ( x k , a k )

因此

V a l u e ( x k , n ) = min a k ( C o s t ( x k , a k ) + V a l u e ( f ( x k , a k ) , n - 1 ) )

每个离散时间步骤k处的优化器a k序列构成了整个时间段的最优策略(或策略或控制),保证了最小总成本,就像在强化学习中一样。

  • 连续时间贝尔曼方程,即哈密尔顿-雅可比-贝尔曼偏微分方程。

随机最优控制设置中,还有贝尔曼方程的随机版本。这在投资银行、调度和路径问题中广泛适用。在随机框架中,我们需要找到一个引导基础随机过程到达某个期望最终状态的最优控制输入(策略或政策),并且成本最小。例如,考虑这样一个问题:我们需要执行一个金融订单,最小化实施成本,并在一定时间内完成。我们可以首先对基础资产的短期动态进行建模,然后在时间和状态空间中进行离散化。这使我们能够在每个时间步执行给定数量的股票,条件是我们必须在给定时间段内执行所有股票。我们寻找告诉我们,在每个时间点我们可以采取的所有可能行动中,哪一个是最优的,让我们达到我们想要的位置的策略。

在第十一章中,我们将贝尔曼方程与强化学习联系起来。这是在具有价值函数的马尔可夫决策过程的背景下完成的:

V a l u e ( s ) = max statesandactions 𝔼 ( r e w a r d 0 + γ V a l u e ( s ' ) )

在确定性动态规划设置中,价值函数的类似方程是哈密尔顿雅可比贝尔曼 PDE。在写出其公式之前,这是我们需要注意的语言:

  1. 最小化成本函数:在这个世界上还有更常见的目标吗?

  2. 选择最优控制或最优策略:这是我们正在寻找的最小化器,它控制着动态系统。

  3. 价值函数:在考虑的时间段内的总最小成本。

  4. 贝尔曼最优性原理:一个非常有帮助的原理,让我们能够简化优化问题。

  5. 时间反向解:从期望的结果开始,逆向地、最优地工作到初始状态。在这种情况下,逆向解是更容易理解的。因为我们知道最终目标,我们立即排除了不会导致它的所有路径,从前一个时间步开始,节省了我们探索许多无用路径的时间。另一方面,如果我们向前解决问题,从时间间隔的开始开始,那么我们就没有接近期望结果的优势,因此我们必须浪费时间和计算资源来探索更多无用的路径。

大局观

最终的问题是:我们现在必须做什么(初始状态是x t initial 和时间相关的策略a t ),以便以最经济的方式(实现策略成本函数的最小值)将我们带到我们想要到达的地方(x t fnal )?

涉及的数量有:

  1. x t 是描述动态系统状态的向量。

  2. 策略(或政策或控制)a t :我们需要设计这个策略,以便调用一个状态x t ,使某个成本函数最小化。也就是说,如果我们将我们正在寻找的特殊a t 输入到动态系统中,输出x t 将最小化成本函数。

  3. 成本函数 C o s t ( x ( t ) , a ( t ) , t initial , t final ) 是由于实施策略(或政策或控制)而产生的成本:这是由某个终端成本在 t final 处以及从 t initial 过渡到 t final 的增量成本(积分)组成。增量成本取决于系统的当前状态和当前控制。

  4. 值函数 V a l u e ( x ( t initial ) , t initial , t final ) 是通过实施最小化策略 a ( t ) 获得的特定时间段内的最小成本,该策略进一步指定了使用系统动态信息的状态 x ( t )

Hamilton-Jacobi-Bellman PDE

这些是涉及的方程和公式:

dx(t) dt = f ( x ( t ) , a ( t ) , t ) C o s t ( x ( t ) , a ( t ) , t initial , t final ) = C o s t final ( x ( t final ) , t final ) + t initial t final C o s t incremental ( x ( s ) , a ( s ) ) d s V a l u e ( x ( t initial ) , t initial , t final ) = min a (t) C o s t ( x ( t ) , a ( t ) , t initial , t final )

贝尔曼最优性原理告诉我们关于值函数(最优成本)在特殊轨迹 x ( t ) 对应于优化策略 a ( t ) 的行为非常有价值:在指定时间间隔内的值是如果我们沿着特殊轨迹 x ( t ) 对应于优化策略 a ( t ) ,值的总和。这使我们能够将长时间间隔上的优化问题分解为在更短时间间隔上的优化问题的递归:

V a l u e ( x ( t initial ) , t initial , t final ) = V a l u e ( x ( t initial ) , t initial , t intermediate ) + V a l u e ( x * ( t intermediate ) , t intermediate , t final )

利用贝尔曼原理,我们可以推导出值函数满足的哈密尔顿-雅可比-贝尔曼 PDE。这个 PDE 推广了一个旧的用于最优控制的哈密尔顿-雅可比 PDE。这个 PDE 的解包含非常有价值的信息:假设我们在任何时间 t 遇到系统,不仅仅是在其初始状态 t initial,那么我们可以通过解哈密尔顿-雅可比-贝尔曼方程计算值函数直到期望的最终成本。

- Value t = min a (t) ( (Value x ) T f ( x ( t ) , a ( t ) ) + C o s t incremental ( x ( t ) , a ( t ) ) )

根据最终时间条件:

V a l u e ( x ( t final ) , t final ) = C o s t final ( x ( t final ) , t final )

这是值函数V a l u e ( x ( t ) , t , t final )的一阶 PDE。同样,这是从时间t开始在状态x ( t )控制系统的最优成本,直到时间t final。我们知道在t final时的最终值函数,我们正在寻找时间t时的值函数,即V a l u e ( x ( t ) )。因此,我们逆向解决这个 PDE,从t final开始,直到t initial结束。

解决哈密尔顿-雅可比-贝尔曼 PDE

如果我们能够解决哈密尔顿-雅可比-贝尔曼偏微分方程,那么我们就知道最优控制a ( t ),这将产生从当前状态x ( t initial )到最终期望状态x * ( t final )的最少成本(或最有益)轨迹。

汉密尔顿-雅可比-贝尔曼 PDE 通常没有平滑解,因此我们必须满足于广义解。这是许多 PDE 的共同主题,研究 PDE 理论的人几乎专注于发展广义解并理解它们存在的函数空间(如 Sobolov 空间等)。汉密尔顿雅可比贝尔曼 PDE 的广义解的经典例子,我们只是简单提及而不详细解释,包括粘性解和极小极大解。

人工智能对汉密尔顿-雅可比-贝尔曼方程的广泛文献做出的贡献是在非常高维度中进行数值求解,如数百或数千维。价值函数是基础资产或贡献代理的状态向量x ( t )的函数,如果这些很多,那么 PDE 就是非常高维的。我们之前引用的论文使用深度学习解决高维 PDE,讨论了汉密尔顿-雅可比-贝尔曼方程的数值解,以及其他重要且具有广泛影响的高维 PDE。

术语Hopf formulas通常与汉密尔顿-雅可比 PDE 的解相关联。对于一类无粘汉密尔顿-雅可比类型 PDE,Darbon 和 Osher 克服控制理论和其他领域中某些汉密尔顿-雅可比方程维度诅咒的算法(2016) 基于 Hopf formulas 开发了一种高维汉密尔顿-雅可比 PDE 的有效算法。

动态规划和强化学习

在一些领域中,使用神经网络学习动态规划的最佳策略被称为强化学习,而在其他领域中被称为神经动态规划。神经网络和搭载它的机器学会预测当前和未来的动作如何影响长期累积成本或奖励,即该时间段的价值。我们当前和每日的投资策略如何影响我们的年度表现?我们的第一步和随后的国际象棋走法如何影响游戏的整体结果?价值函数是遵循每个(离散或连续)时间步骤的最佳策略所对应的成本和奖励的总和。

神经网络在训练过程中需要历史数据的输入和输出。输入是状态和该状态下允许的所有潜在动作,输出是价值(总成本和奖励)。训练后,例如对于一个正在制定如何处理每个客户的业务模型,神经网络学会将客户的状态作为输入,并输出下一个动作序列,以最大化长期价值。查看神经动态规划(1996) D. P. Bertsekas 和 J. N. Tsitsiklis,了解神经动态规划和利用人工神经网络逼近贝尔曼方程中价值函数的更早但全面的解释。这对于减少维度的影响非常有用:我们不需要存储和评估整个高维函数,只需要存储神经网络的参数。

AI 的 PDE?

前一节强调了动态规划和贝尔曼方程与人工智能的强化学习密切相关。

此外,PDE 领域有一整套分析工具,研究各种函数、它们所在的空间、弱解和强解,以及各种意义上的收敛。如果有任何领域有能力解锁神经网络在近似许多数据生成过程中的成功秘密,无论是联合概率分布还是确定性函数,那将是 PDE 领域。我们需要用定理和最终有助于设计和架构优化的数学严谨来支持神经网络。神经网络的神奇能力需要在分析的镜头下,以及来自 PDE 及其解的分析工具,是前进的一种有希望的方式。例如,Sobolev 训练(Czarnecki,Osindero,Jaderberg,Swirszcz,Pascanu;2017)(添加示例)

在偏微分方程中的其他考虑

在强调本章主题时,我们大多数时间都远离了著名的偏微分方程,以强调这些主题适用于远不止研究过的微分方程和应用。本科课程主要涉及仅涉及两个变量(x,y)或(x,t)的函数的线性 PDE。学生们要么被误导,认为这就是所有重要的内容,要么感到困惑:非线性 PDE 呢?以及所有高维应用呢?PDE 系统呢?这些课程还倾向于专注于热方程(抛物线)、波动方程(双曲线)、拉普拉斯方程(椭圆)以及一些数值解和模拟(有限差分、有限元和蒙特卡洛)。这些以最简单的形式呈现:线性的、一维、二维或三维的,在具有规则几何形状的域上定义,给本科生们一种错误的印象,即这些 PDE 是可能出现在应用中的所有方程的基础。它们还在类型之间提供了人为的区分:椭圆型、抛物型和双曲型,好像有一个完整的理论包括每种类型。分析解方法是狭窄的,仅关注简单解的叠加原理(由于线性性),这导致了傅立叶级数和变换(实际上这是一件非常好的事情)。神经网络扩大了范围,以近似使用简单函数的组合而不是加法来解非线性方程。

本科 PDE 课程的设置都很好,但它们并没有真正反映 PDE 的现实:不是在理论上,也不是在数值上,甚至不是在它们的广泛适用性上。学生毕业时会感到,如果给他们一个全新的 PDE,他们不知道该怎么处理,因为它与他们在入门 PDE 课程中学到的任何内容都不匹配(我可以告诉你首先要做什么,当然是在谷歌搜索之后:离散化并模拟它;这将让你对其解的行为有深刻的了解)。

也就是说,有一些一般的思考方式可以将 PDEs(偏微分方程)组合在一起(建模),这几乎总是与物理学中的一些守恒定律相关,并且进行它们的分析(理论-解的存在性、唯一性和敏感性分析以及弱解),并找到实际的解析或数值解(表示公式、格林函数、变换方法和数值解)。

首先,每个研究领域都有自己的微分方程,用于模拟其关心的现象,例如:

  • 在流体动力学中,我们研究纳维-斯托克斯方程(以及其他方程)。这是一个非线性的 PDE 系统。纳维-斯托克斯 PDE 考虑了流体的速度、压力、密度、应力、可压缩性以及作用在其上的力。该方程表达了质量守恒和动量守恒。方程的解描述了粘性流体的运动。

  • 在经济和金融领域,我们研究布莱克-斯科尔斯方程(以及其他方程)。

  • 在人口动态学中,我们研究洛特卡-沃尔特拉捕食者-猎物方程(以及其他方程)。

  • 在广义相对论中,我们研究爱因斯坦场方程(以及其他方程)。

当偏微分方程模拟随时间演化的现象时,可能会有更高级的演化驱动因素,这些因素可以更深入地了解偏微分方程解及其性质:倾向于减少能量。在数学上,当在 PDE 的解处评估能量泛函的导数时,结果为负数。通过理解这些能量泛函、它们的导数以及它们作用的函数空间,我们学到了很多数学知识。我们使用许多相对容易的能量估计来证明各种非线性 PDE 的解的存在性。通过能量方法研究 PDE 的正确设置是Sobolov 函数空间。变分法关注能量泛函的最大值或最小值(统称为极值)。这对于非线性 PDE 的理论是基础的。作为能量泛函的极小值出现的 PDE 被称为欧拉-拉格朗日方程

总结和展望

这一章向我们介绍了 PDE 与人工智能的关系。PDE 具有无与伦比的能力来模拟自然和社会现象。解开它们的解决方案为许多领域打开了许多可能性。我们强调了许多获得这些解决方案的困难,如维度诅咒、网格生成、嘈杂数据,以及 AI 如何帮助解决这些问题。

还有很多工作要做。为了开发物理信息智能机器,我们需要建立新的框架、数据集、标准化基准和可扩展和稳健系统的新严格数学。

有许多重要的 PDE 主题我们没有涉及,比如不适定的反问题,我们需要从部分或完全观察其解中学习 PDE 的参数或初始数据。物理信息神经网络对于这类问题非常有效和高效。

在哈密顿-雅可比-贝尔曼方程的背景下,我们只是随意提到了粘性解和霍普夫-拉克斯公式。在 PDE 的存在性方法方面,除了固定点迭代外,还有某些 PDE 类型的极小极大方法。例如,我们没有提到椭圆和抛物线 PDE 的单调性或最大值原理。

我们在这一章节中留下一个思考的问题:*PDE 是否会推动我们朝着更智能的代理前进?以及这篇 2021 年的文章,在这篇文章中,作者们提出了物理信息机器学习(2021 年)*的观点,我们将神经网络与物理定律相结合,以利用两者的优势,并在许多科学环境中弥补大数据集或嘈杂数据的缺失。以下是文章中的一句引用:这样的网络可以通过强制执行物理定律(例如,在连续时空域的随机点)获得额外信息进行训练。这种物理信息学习通过神经网络或其他基于核的回归网络集成(嘈杂)数据和数学模型,并通过它们实现。此外,可能可以设计专门的网络架构,以自动满足一些物理不变量,以获得更好的准确性、更快的训练和改进的泛化能力。

第十四章:人工智能、伦理、数学和政策

折磨数据足够多,它就会承认任何事情

诺贝尔奖得主、经济学家罗纳德·科斯(1910-2013)

人工智能伦理是一个广泛而深刻的话题,它正在成为哲学和人工智能领域交叉的新领域。在本章中,我们只能浅尝辄止,强调一些问题和可能的解决方式,但留下了许多同样重要的问题。然而,本章传达了一个信息,我不希望读者错过:

我们需要更多人同时了解人工智能和政策。

在我从数学到人工智能应用的学习过程中,我发现人工智能不应与政策脱钩,两者应该共同发展。我可以坐下来写下无数例子,说明与人工智能技术相关的伦理考虑,比如数据安全、隐私、监视、民主、言论自由、劳动力考虑、公平、公正、偏见、歧视、包容性、透明度、监管和武器化人工智能,但这不是我对待这个主题的方式。我对这些问题的看法略有不同,我亲眼看到人们如何在战乱地区对人群试验新武器,然而政府和媒体要么否认,要么不评论,要么说这些不幸事件是错误,会进行调查,然后大家都继续往更好的方向发展。当有一项新技术影响到人们规模时,开发这项技术的人最有资格了解其影响,无论是好是坏。因此,他们应该直接与政策制定者合作,以规范其使用。此外,如果有一项技术或其他事件对社会造成巨大破坏,我们可以迫使人们思考、撰写和遵守政策。巨大的破坏不是人工智能本身,也不是人类目前产生和拥有的数据量,比如 Facebook 拥有的数据,NASA 对太空的调查,人类基因组计划,或者我们的 Apple 手表,而是投入到这项技术中的资金,更重要的是公众的关注。

我曾生活在一个小而完美的数学泡泡中,那里的事物只能是黑白分明、逻辑正确的,如果我们不理解某些数学是如何运作的,我们总是可以说服自己,只要多花点时间就能学会。让我眼界大开的是与我们城市的消防部门和交通部门合作。当我的学生在市政厅向市政官员、公共安全领导和决策者展示时,我意识到作为技术专家与他们的数据合作,我们有能力告诉他们我们的数学模型可以做任何事情,无论这些模型是否真的能做到。这个认识对我来说非常可怕。我不是一个受过政策培训的人,我是一个数学人,但我决定必须涉足政策领域。我参与了一些小型政策制定场合,以建立一些政策专业知识(重新制定我大学的招聘政策;主持学院委员会;主持学术政策委员会;参加我大学的指导委员会;开设数据、政策和外交课程;在欧洲开发夏季项目,探讨现代战争面临的人类安全、技术和创业问题;并就此主题发表演讲和举办研讨会)。

我学到了政策不像数学那样,存在许多灰色地带和利益冲突,涉足其危险水域是一场不同的游戏。我了解到建立新政策及其与现有政策的交叉点的复杂性。这与人工智能系统类似,其中持续更新和一致性至关重要,同时保持高效,不至于使自己和系统陷入瘫痪。

我们必须努力制定简明具体的政策。任何有可能影响数百万人的技术,必须由其专家开发,具有类似于应急响应团队的意识和态度,考虑最坏情况并防范。当前情况是,世界领先的技术公司正在加速人类走向一个新的连接和人工智能驱动的世界,而政策和监管正在追赶。然而,人工智能仍在成熟阶段,现在是设计朝向公共利益的政策的理想时机。技术发展不是一些偶然发生在我们身上的随机事件。我们不应该只是被动参与者、接收者或消费者,尤其是我们自己就是数据:我们的互联网习惯,我们的社交媒体帖子,我们的银行交易,我们的医疗记录,我们的血液检测,我们的核磁共振扫描,我们的杂货店购物,我们的优步乘车,我们的家庭恒温器偏好,我们的视频游戏技能,我们的公交车乘车,我们的苹果手表步数和心率计数,我们的驾驶刹车和加速模式,我们的整个生活。这些都被数字化并存储在一些随机建筑物的数据仓库中的随机位置。与进入我们 FICO 信用评分的金融数据不同,后者受到严格监管,今天大部分数字数据是无监管的。一家公司可以将其出售给另一家公司,带有所有其不准确性,新公司将基于这些无监管数据构建模型并做出决策。某人的驾驶习惯是否影响他们是否能进入某个学院?或者决定他们医疗保险的保费定价?他们每天经过的穷困社区的通勤路线呢?那个十年前从某人记录中清除的轻微犯罪呢?它是否已从所有数据集中清除,包括多年前出售给其他公司的数据集?这是否仍然影响着贷款、大学录取、保险费、工作机会等改变生活和生计的决定?谁知道?这是无监管的。当我们选择与一家公司分享我们的数据时,是否有法律禁止将这些数据分享或转售给其他公司用于其他用途?

我们可以利用我们庞大的数字数据做好事,但如果没有明智有效的政策和监管,我们不能指望这一点。

良好的人工智能

良好的人工智能应该足够值得信赖,可以在公共和私营部门部署和使用。该领域有一种倾向,花费大量时间定义可解释性、可解释性(显然这两者不同)、公平性、公正性等术语。我认为这种对词汇的过度关注是一种分心。最终目标更为重要:

我们需要信任我们的系统,并使其对需要使用它们的人员可访问和可理解

为此,我们需要我们的人工智能及其服务和建立在其之上的数据是:

  1. 安全:随着系统的发展,我们必须继续维护和更新物理和软件安全协议。由于云计算引入了新的安全要求层,因为如今我们的数据和计算都不再发生在我们本地机器的附近。

  2. 私密:许多应用领域已经制定了正式的隐私概念和标准。在谁拥有数据以及 AI 系统可以出于什么目的使用数据方面还有很多工作要做。我在这里的补充是透明和信息共享:当我们透明地表明我们的系统打算如何使用某些数据,比如医疗数据用于发现新药物,或者创建个性化治疗计划时,人们可能会选择分享他们的数据。目前存在着技术生产者和技术消费者之间的犹豫和不信任文化。我们可以通过传播知识和分享最终目标以及成功和失败的结果来改善这一点。

  3. 完成了它所建立的目标和所声称要做的事情:有正式的方法可以检查代码是否正确,但我们需要更多关于系统的持续测试,包括边缘情况,并且要公开系统的能力、限制和未经测试的领域。

  4. 对扰动和噪声具有鲁棒性:对输入的微小扰动不应该导致输出的大变化。当决策依赖于 AI 系统的预测时,这些预测不能是任意的。AI 系统应该能够容忍其输入中的噪声,并且这种容忍度必须被量化。

  5. 高效:AI 系统的效率应该是理所当然的-它们建立在速度、自动化以及能够处理比以往任何时候都更多的贡献变量的承诺之上。我们需要继续改进现有系统,并关注那些在理论上运作良好但尚未对实际部署高效的系统。

  6. 公平:许多系统依赖于有偏见的数据,这些数据经过管道传输后会导致不公平的决策。识别数据中的偏见并消除它们是朝着公平方向迈出的第一步。

  7. 对许多用户来说是可访问和易理解的:当一项新技术对社会有益时,需要使其易于访问、使用和理解。应该有意识地努力使其产业化、商业化,并解决社会部门或社区中处于劣势的人的访问问题。

  8. 透明:与数据来源、模型能力、用例、限制和文档的透明性至关重要。当这些信息持续且清晰地传达时,人们通常对有缺陷的系统更加宽容。

政策问题

AI 政策开始形成。其目标是利用和最大化 AI 的好处,同时防范其潜在危害。

政策至关重要并产生影响。一个例子是 ClearviewAI 及其隐私问题。ClearviewAI 是一家美国公司,创建并出售给私人公司一款使用从网络下载的数十亿张个人照片数据库的人脸识别软件。最近(2022 年 5 月),它达成了一项诉讼和解协议,同意遵守伊利诺伊州的隐私法,该法赋予人们对其生物特征数据的控制权。ClearviewAI 将主要限制其人脸识别技术供应给执法部门和其他政府机构使用。

另一个例子是海康威视及其监控问题。海康威视是一家中国公司,生产数百万视频监控摄像头,用于超过 190 个国家的用途,从警察监视系统到婴儿监视器。该公司目前面临美国政府的制裁,原因是其与中国政府的密切联系。海康威视在建设中国庞大的警察监视系统中发挥了作用,中国政府利用该系统压制新疆的穆斯林少数民族。美国财政部目前正在考虑将海康威视列入特别指定国民和被封锁人员名单,该名单禁止列入者与美国政府、美国人或美国公司做生意。此外,这些实体或个人的资产也被美国冻结。

对于人工智能政策的有组织努力,可以看看朝着这个方向发展的政府、政府间和全球人工智能倡议的治理:美国的国家人工智能计划,欧盟的人工智能伦理指南草案,阿联酋的人工智能部,英国的艾伦·图灵研究所,加拿大的人工智能 CIFAR 主席计划,丹麦的技术协议,日本的工业化路线图,法国的健康数据中心,德国的自动驾驶和联网驾驶伦理委员会,印度的#AIforAll 战略,中国的全球人工智能治理计划等。

我们可以将与人工智能相关的政策分类为:

  • 投资于人工智能研究和培训劳动力;

  • 标准和规定;

  • 建设坚固和安全的数字数据基础设施。

    投资于技能发展和技术产业化。

    政府机构正在为人工智能研究、新的人工智能机构、劳动力培训和早期科学、技术、工程和数学(STEM)教育、终身学习和技术发展分配资金。政府还鼓励人工智能技术的产业化和私营部门的采用。此外,政府自身正在投资于数据驱动的倡议和各自部门的人工智能,以进行公共管理改革,并使其运营更加高效和集中化(政府中的人工智能)。

    法规和标准

    相关法规和标准包括数据安全和使用、自动驾驶汽车等汽车人工智能,以及武器化人工智能。

    数据和数字基础设施

    高质量的数据对于人工智能按预期工作至关重要。政府正在鼓励开放数据集,并开发平台以安全交换私人数据。还有有意识的努力从人工智能算法和数据集中消除偏见。

会出现什么问题?

在设计新系统或分析现有系统时,我们的一个指导性问题必须是:会出现什么问题?随之而来的是一系列检查点:

  • 系统的预期功能是什么?

  • 它训练的数据是什么?数据是如何收集的?如何处理噪声和缺失值?

  • 谁在数据中可能被最大程度地代表不足?

  • 它使用了哪些算法?

  • 决策算法的阈值是多少?

  • 鉴于这些阈值,谁最有可能受到这些算法决策的伤害?

在这一部分中,我们列举了一些例子(其中包括许多),突出了可能出现问题的事情,我们必须要么防范,要么尝试标准化和规范化。

从数学到武器

本书的一个目标是突出人工智能模型的数学基础。从数学到武器的转变并不新鲜,考虑到许多武器的发展历史(例如原子弹)。这种贡献不仅仅是单向的:军事和防御战略和目标影响了整个数学领域的发展,比如动态规划最初是为了解决军事训练或后勤的调度,以及优化各种资源的分配。

书籍《数学毁灭之武器》(2017)超越了军事武器化,列举了许多有害的方式,这些方式是我们社会目前依赖于进行高度重大和生活改变决策的数学算法。书的最后一章的前几段值得完整引用,因为它们揭示了看似不同领域中部署的算法如何相互作用并影响彼此的结果。它们还揭示了完全相同的算法如何以极其不同的方式影响不同人群。

[…] 我们走过学校和大学,法庭和工作场所,甚至投票站。沿途,我们目睹了“数学毁灭武器”造成的破坏。它们承诺效率和公平,却扭曲了高等教育,推高了债务,促使大规模监禁,残酷地打击穷人几乎在每一个关口,并破坏了民主。似乎合乎逻辑的反应是逐个解除这些武器。问题在于它们互相滋养。贫困人口更有可能信用不佳,生活在高犯罪率社区,周围都是其他贫困人口。一旦“数学毁灭武器”的黑暗宇宙消化了这些数据,它们就会向他们洒下针对次级贷款或营利学校的掠夺性广告。它会派更多警察逮捕他们,一旦他们被定罪,就会判他们更长的刑期。这些数据输入到其他“数学毁灭武器”中,这些武器会将同一群人评分为高风险或易被攻击目标,并开始阻止他们获得工作,同时提高他们的抵押贷款、汽车贷款和各种保险的费率。这进一步拉低了他们的信用评级,创造了一个建模的死亡螺旋。在“数学毁灭武器”的世界中贫穷变得越来越危险和昂贵。

虐待穷人的同样“数学毁灭武器”也将社会舒适阶层置于他们自己的营销隔离区。他们被送往阿鲁巴度假,被列入沃顿商学院的候补名单。对于他们中的许多人来说,世界似乎变得更聪明更容易。模型突出了意大利熏火腿和基安蒂的特价,推荐了亚马逊 Prime 上的一部好电影,或者逐步引导他们到一个曾经是“危险”的社区的咖啡馆。这种静默和个人化的定位使得社会的赢家们看不到同样的模型正在摧毁生活,有时就在几个街区之外。

注意,数学是正确的,对社会的两个部分完全相同,但改变的是模型的输入。回想一下,如果我们想把整本书总结成一句数学句子,那就是:AI 模型的输入特征决定最终输出。贫困和富裕人口,缺乏更好的术语,具有不同的特征,因此他们得到不同的结果。在这个意义上,我们的算法是公平的,计算确切地它们应该计算的内容。我不喜欢提出问题而不提出解决方案,或者至少提出解决方案的想法。也许改善当前情况的一个初始方法是使用来自不同人口群体的数据分别训练我们的算法,这样一个人的贫困将不会成为算法决定他们是否值得信任偿还某笔贷款的因素,而其他真实因素将会起作用。

化学战剂

人工智能模型的破坏潜力甚至可以体现在那些旨在最大程度造福人类的模型上:用于药物发现的生成式人工智能模型。坏人可以滥用这些模型的便利性令人震惊。坏人所需做的只是学习模型的工作原理:首先,模型将分子的结构映射到其在体内的作用方式,然后优化那些最大程度获益和最小程度毒性的分子。坏人可以重新训练模型,将其优化目标从最小化毒性转变为最大化毒性。从数学上讲,这就是在优化问题中颠倒目标函数的符号。这是 Fabio Urbina 及其 Collaborations Pharmaceuticals 团队最近在他们的工作中强调的。为了证明这一点,该团队用这个恶意目标重新训练了他们的模型。仅仅在六小时内,该模型生成了 40,000 种毒素,其中一些是实际化学战剂,这些战剂并不在初始数据集中。

我们很容易得出结论,我们需要有意识、刻意、内省,以及各种形容词来防范这一问题,但并没有明确说明如何做到,因为现实情况是这是一个复杂的问题。但我们如何防范这一问题呢?我个人的看法是,我们应该以非人工智能世界中防范大规模破坏性武器的方式来对待这个问题。没有人能保证坏人不会获得这项技术,但我们的工作是让他们很难将其发展成可部署的武器。

人工智能与政治

TikTok、Facebook 和其他社交媒体平台在政治中的作用难以言表。它们已经影响了选举结果并推翻了政府。机器人可以生成假新闻、虚假历史、虚假评论、虚假页面、虚假推文,并传播政治目的的错误信息。社交媒体公司正在尝试应对这一问题,采用多方面的方法,利用机器学习来检测欺诈或识别传播错误信息的节点,雇佣第三方事实核查组织,致力于改进用户新闻订阅的排名算法,以及其他方式,由于这些公司的运营规模以及有时公司盈利目标与其道德部门之间的利益冲突,结果参差不齐。个性化政治活动,同一政治人物根据其目标受众的不同意识形态来服务,而受众却从未知晓这一情况,是一个真正可能破坏民主的危险。此外,根据新信息,某个州是向左还是向右倾斜,可以分配更多资金来针对选民(再次通过个性化新闻订阅、政治广告仅迎合他们的偏好观点,基于他们的历史偏好以及他们的朋友的偏好),以在竞争激烈的战场地区摇摆他们的选票。这可以实时发生,并影响整个选举的结果。这在政治中一直存在,但在数字时代,这发生在规模上,实时进行,并且几乎没有比有针对性地部署算法支持的巨大数据库更多的努力,了解我们的偏好以及是什么让我们感兴趣、点击、支付、志愿或选举。

生成模型的意外结果

大型生成语言模型和文本到图像模型是在互联网规模数据上训练的,继承了互联网规模的社会偏见、歧视和有害内容。这最好通过Imagen关于他们的文本到图像模型生成高分辨率图像的限制部分来说明:

[…] 文本到图像模型的数据需求导致研究人员严重依赖大规模、大部分未经筛选的网络抓取数据集。虽然这种方法在近年来促进了算法的快速进步,但这类数据集往往反映了社会刻板印象、压迫性观点,以及对边缘身份群体的贬低或其他有害的关联。尽管我们的部分训练数据经过了噪音和不良内容的过滤,比如色情图像和有毒语言,我们还使用了已知包含大量不当内容的 LAION-400M 数据集,包括色情图像、种族歧视性言论和有害的社会刻板印象。Imagen 依赖于在未经筛选的网络规模数据上训练的文本编码器,因此继承了大型语言模型的社会偏见和局限性。因此,Imagen 存在编码有害刻板印象和表现的风险,这促使我们决定在没有进一步保障措施的情况下不向公众发布 Imagen。[…] Imagen 可能会遇到数据分布模式的丢失风险,这可能进一步加剧数据偏见的社会后果。Imagen 在生成描绘人物的图像时表现出严重的局限性。我们的人类评估发现,Imagen 在不描绘人物的图像上获得了显著更高的偏好率,表明图像保真度下降。初步评估还表明,Imagen 编码了一些社会偏见和刻板印象,包括对生成肤色较浅人物图像的整体偏好以及对描绘不同职业的图像与西方性别刻板印象一致的倾向。最后,即使我们将生成重点放在远离人物的图像上,我们的初步分析表明,Imagen 在生成活动、事件和物体图像时编码了一系列社会和文化偏见。我们的目标是在未来的工作中解决这些开放挑战和局限性。

如何解决?

过去几年中,对有害、偏见、不公平、侵入性和被武器化的人工智能的认识已经提高,努力正在进行以解决这些问题。以下是一些相关努力的例子。

解决训练数据中的代表性不足

一个反复出现的主题是训练 AI 模型所需的数据质量。许多偏见是由于非主导群体、其文化价值观或语言在大型数据集中的代表不足而出现的。为了使 AI 造福于所有人,一个解决方案是确保数据由本国人标记。例如,智慧之声 AI 项目(现已结束)在 2021 年举办了一个数据标记研讨会,让美洲原住民重新标记与他们文化相关的图像。许多这些图像被机器学习分类模型错误标记。他们还创建了一个关于本土烹饪技术的知识图谱,以及一个用于查询知识图谱的聊天机器人。通过这样的努力,AI 可以帮助保护即将灭绝的文化、历史和语言。

处理词向量中的偏见

自然语言处理中的第一步是将语言的符号(如单词)转换为携带单词语义的数字向量。在第七章中,我们了解到语言模型使用单词在文档中出现的上下文构建这些单词向量。因此,嵌入在词向量中的含义在很大程度上取决于用于训练模型的语料库类型。语料库是我们生活文化的产物。许多自由和公民权利是相对较新的,性别角色和性别身份不再被预先确定。许多用于训练语言模型的语料库基于互联网新闻文章、维基百科页面等,仍然存在偏见、歧视性和包含有害刻板印象或内容。我们希望确保进入我们 AI 模型的词向量不会强化歧视,也不会对妇女和少数族裔造成不成比例的伤害。

举例来说,如果训练语料库(比如谷歌新闻文章)主要来自一个女性在护士或小学教师中过度代表,而男性在医生或软件工程师中过度代表的社会,那么词向量将继承这种性别偏见。例如,代表男人软件工程师的向量之间的距离会比女人软件工程师之间的距离更小。我们需要识别并补偿词向量中的这种偏见。

一个简单而不错的解决方案。鉴于我们处理的是数字向量,我们可以从这些向量中减去性别偏见和其他偏见。因此,代表软件工程师的向量将通过减去代表男人男性的向量进行调整,甚至加上代表女人女性的向量,如果我们选择在另一个方向上偏见。请记住,当我们将单词向量相互相加或相互相减时,所得到的新向量仍然具有意义,因为向量中的每个条目代表某种意义维度中的某种强度。也就是说,如果我们从国王的向量中减去男性的向量,我们将得到一个接近女王的向量。

解决隐私问题

隐私问题是关于大数据和人工智能的关注焦点。机器学习模型需要数据进行训练,而这些数据包含真实人员的个人和敏感信息。此外,许多对私人数据的计算发生在云上,这引发了更多的安全和隐私问题。

如果匿名化数据不可行,或者如果它降低了模型的性能(例如,年龄、体重、种族和性别信息对医疗目的很重要),那么加密就是我们的下一个选择。为此,我们需要能够直接在加密数据上执行计算的模型。然而,传统的加密方案不允许对加密数据进行任何计算。解决方案是允许这样做的新加密方案。安全设备可以加密数据,将这些加密数据发送到在云中运行的机器学习模型,预测结果而无需解密,将这些结果发送回安全设备,最终在本地解密,保护所有私人数据,同时利用云的优势。

同态加密正是这样做的。由克里斯汀·劳特(MetaAI)撰写的SIAM 新闻文章,她的研究涉及人工智能和密码学的交叉点,解释了同态加密,并列出了以下不错的应用:

  • 一个云服务,以加密形式处理所有锻炼、健身和位置数据。该应用程序在本地解密分析结果后,在手机上显示摘要统计信息。

  • 一个加密的天气预测服务,接收加密的邮政编码并返回有关所询问位置天气的加密信息,然后解密并在手机上显示。云服务永远不会了解用户的位置或返回的天气数据的具体信息。

  • 一个私人医疗诊断应用程序:患者将胸部 X 光图像的加密版本上传到云服务。医疗状况通过在云中对加密图像运行图像识别算法来诊断;诊断以加密形式返回给医生或患者。

在这里添加有关同态加密数学的更多内容

了解在云和连接设备时代确保数据安全和隐私的努力,增加了公众对系统的信任和愿意自愿提供数据以增强这些技术的意愿。也就是说,任何与真实数据打交道的人都知道,能够看到我们正在处理的数据会让我们学到很多。我不确定在加密数据上进行故障排除会有什么结果。

解决公平性

人类在直觉层面上能够识别不公平。我们如何确保 AI 模型运行公平?一种方法是监控模型对哪些利益相关者造成了最大的伤害(比如年长的求职者,或者刑事司法系统中有资格获得假释的少数族裔),然后努力寻找解决方法,比如去偏见化训练数据,重新定义决策边界和阈值,包括人类在其中,或者重新分配资源用于提升弱势群体的项目。

公平的 AI 不仅仅涉及决策算法。公平还包括谁从算法中受益,例如谁得知有工作机会、疫苗可用性或教育机会。文章Adversarial Graph Embeddings for Fair Influence Maximization over Social Networks (2020)将这视为社交媒体图中的公平影响最大化问题。对于影响最大化图模型,通常会在选择具有最大影响力的节点和那些不一定与图中大型中心紧密连接的少数群体之间进行权衡。因此,最终受影响的节点集通常在种族、性别、原籍国等方面分布不公平。对抗网络通常用于训练具有竞争目标的模型。作者利用这一点,引入对抗图嵌入,其中有两个网络一起训练:用于图嵌入的自动编码器和用于区分敏感属性的鉴别器。这导致嵌入在敏感属性上分布相似。然后他们对结果图嵌入进行聚类,以决定一个良好的初始种子集。

将道德注入 AI

AI 代理必须知道对错之分,并且最好能够灵活处理道德的灰色地带。我们需要一个模型来模拟人类的道德判断,包括所有情境变化和复杂性。问 Delphi正试图做到这一点。当我们问 Delphi 这个仍处于原型阶段的问题时,比如:抢银行可以吗?不和丈夫说话可以吗?我们的问题和 Delphi 的回答都被记录下来,以及我们是否同意 Delphi 的回答,以及我们对改进 Delphi 回答的建议。随着越来越多的人与 Delphi 互动,训练数据得到增强,使 Delphi 能够学习更复杂的情况并做出更好的预测(道德判断)。以下摘录和免责声明来自 Delphi 的网站。它们对该模型的最新状态很有见地:

Delphi 正在从在 MTurk 上经过精心筛选的人们那里学习道德判断。问题中使用的情况仅从 Reddit 中获取,因为它是一个伦理问题严重的情况的好来源。Delphi 1.0.4 在涉及种族的陈述上表现出 97.9%的准确性,在涉及性别的陈述上表现出 99.3%的准确性。在首次推出后,我们增强了 Delphi 1.0.0 对涉及种族主义和性别歧视的陈述的防范措施,这些陈述的准确性曾分别为 91.2%和 97.3%。

条款与条件(v1.0.4)

Delphi 是一个研究原型,旨在探讨模拟人们在各种日常情况下的道德判断的潜力和更重要的是局限性。Delphi 的目标是帮助 AI 系统更具道德意识和公平意识。通过朝着这个方向迈出一步,我们希望激励我们的研究社区直面这一领域的研究挑战,构建道德、可靠和包容的 AI 系统。

Delphi 的局限性是什么?大型预训练语言模型,如 GPT-3,主要是在未经过滤的互联网数据上训练的,因此极易产生有害、不道德和有害的内容,尤其是针对少数群体。Delphi 的回应是自美国众包工作者调查中自动推断出来的,这有助于减少这个问题,但可能会引入自身的偏见。因此,Delphi 的一些回应可能包含不当或冒犯性的结果。在分享结果之前,请谨慎考虑。

AI 的民主化和对非专家的可访问性

要最大化 AI 技术的好处,它们必须民主化,易于访问大众,而不是仅限于专家。为了实现这一目标,人们要信任这些系统,这些系统依赖的模型和数据系统必须易于理解、易于使用,并透明地展示其内部运作、能力和局限性。

安娜·法里哈,博士(微软)是一位致力于实现这一目标的研究人员。她致力于扩展数据系统的能力,提供面向用户的功能,帮助提高各种用户的生产力和敏捷性,从最终用户到数据科学家和开发人员。

优先考虑高质量数据

本章的例子证明了优先考虑、民主化和保护高质量数据的重要性,以获得对人类公平和有益的人工智能。高质量数据清晰、准确且公正。它存储在易于查询的结构中。需要向最终用户解释数据结构之间的差异,以便他们可以决定哪种最适合他们。对于希望过渡到数据驱动决策、或加入人工智能浪潮、或与那些将这些技术融入基因的年轻公司保持竞争力的机构来说,制定一个处理数据的有组织和一致方式的计划是未来成功至关重要的一步。

在我们与城市消防局和公共交通部门合作的过程中,我们发现了许多改进数据质量的方法。在建立数据结构和收集数据的早期阶段实施这些方法将节省大量时间、金钱和资源。例如,在公交路线项目中,像运营中的公交车和每月司机数量这样的数据没有记录,公交车站的信息也没有记录,比如哪些标记了,哪些没有标记。即使数据被存储,也无法检索:我们大学的停车服务告诉我们,要从停车楼获取历史数据,他们将不得不进行超过 5,000 次手动请求。我们获得的所有数据都需要进行清洗和转换为可用形式。有时,来自同一来源的数据是不一致的,如果在一开始就更加小心,就可以节省大量工作。

我们的数据发生了一件终生受益的事情:在项目进行到后期时,经过清理、连接和转换所有相关数据后,我们的模型产生了可转化为业务决策的结果,比如识别某些地区供需之间的差距,并突出最重要的贡献者,等等,我们发现我们得到的所有公交车站数据都被打乱了。这意味着城市中每个公交车站的乘客量和路线数据表中的公交车站不对应,我们除了运行原始查询到数据库并追踪写入数据文件时出了什么问题之外,没有其他修复方法。如果我们没有发现这一点,我们将基于错误数据,垃圾数据进行所有分析!交通部门将根据错误结果采取行动。我们必须始终确保我们处理的数据与实际情况准确对应。我们必须绘制、映射、检查、反复检查。我们的工作伴随着责任,我们不能轻率对待。我们应该全面了解我们的数据和模型。我们应该准备好回答关于我们模型的所有问题,将其与其他模型进行比较,并确保在向利益相关者提供结果之前尽到应有的职责。

像我们一样,一个通用的 AI 代理会在正确的地方寻找正确的数据,然后将其转换为可用的形式。在那之前,我们必须重新聚焦我们的努力,收集和存储高质量的数据,并拥有更好的访问和查询方式。由于低质量的数据和不存在的数字基础设施,许多 AI 项目从未见天日,许多自动化投资从未见回报。我们应该退后一步,思考数据最终将如何被表示为我们模型的输入。这应该指导我们如何获取数据,以及如何存储以备将来使用。AI 领域一直遵循一种普遍适用的范式,先表示,后获取

区分偏见和歧视

许多涉及 AI 伦理的讨论将偏见歧视这两个术语互换使用,我想在完成本书之前确保我们强调两者之间的区别。我从来不是那种纠缠于术语定义的人,尤其是我把英语作为第三语言,因为我注意到重新定义术语通常被用作一种廉价的手段来转移对论点或辩论主要观点的注意力。我之所以想特别强调偏见和歧视之间的区别,是因为每种都需要不同的数学方法来识别。此外,一种是有意的,另一种则不是。我们和我们的机器都应该能够推理出哪个是哪个。

简而言之,我们只需观察数据就可以检测到偏见。除非我们从单纯的观察上升到更高层次的推理,使用干预和反事实语言,我们才能识别歧视,我们在第九章中已经讨论过:如果我在申请人的简历上更改性别,他们会得到这份工作吗?

偏见是特定决策与特定申请人性别之间的关联模式。当观察申请人和最终录用者的数据时,我们可以直接检测到这种模式。

另一方面,歧视中包含了有意性:当性别对入职资格无关紧要时,决策受到申请人性别的影响。申请人的性别影响了招聘决定。

上述定义在 Judea Pearl 的《为什么之书》(2020)中得到强调。他继续提到美国案例法中对歧视的定义,该定义也使用了反事实语言:在卡森诉伯利恒钢铁公司案(1996)中,第七巡回法院写道,“在任何就业歧视案中,中心问题是雇主是否会在员工种族(年龄、性别、宗教、国籍等)不同的情况下采取相同行动,而其他一切都相同。”

因此,为了区分偏见和有意的歧视,我们需要在条件概率上使用我们在第九章和第十章中介绍的 do-演算法,您可以从 Judea Pearl 及其数学社区的优秀资源中了解更多。

炒作

AI 领域在其历史上一直被指责被夸大。如今,任何解决问题或构建系统的计算方法,无论是传统的还是更近期的,都被重新定义为 AI。传统统计是 AI,运筹学是 AI,数据探索和分析是 AI,量子计算是 AI,医学成像是 AI,等等。许多初创公司依赖夸大的指标、拉伸的事实,以及不问太多问题就投资的投资者,以免错过下一个大事件(例如破产的硅谷血液检测公司 Theranos)。由于我们正处于 AI 成为热词和家喻户晓的时代,很容易被带走,认为任何基于 AI 的技术都会奏效。

量子计算是另一项仍处于萌芽阶段、被炒作并与人工智能混淆的技术。它离商业化还有很远,但已经被宣传为商业化。需要进行大量研究,如果成功,这项技术具有广泛的有用应用潜力。最著名的应用是彼得·肖尔(Peter Shor)在 1994 年理论上证明了量子计算机可以以指数速度比所有经典方案更快地解决大数的质因数问题。Rivest–Shamir–Adleman(RSA)加密是现代计算机用来加密和解密消息的算法,而质因数分解是破解其代码的核心。

专门的人工智能相比量子计算已经发展得很好,而本书的目标之一是区分炒作和非炒作。无论是炒作还是非炒作,进入这个领域,享受并朝着良好的目标和释放巨大潜力努力。

总结思考

许多部门和行业都在向人工智能和数据科学靠拢。他们希望利用计算能力的实质性进步和高度表达模型的进步,将他们的数据转化为有意义的见解和决策。他们也意识到在行业层面可能会发生重大变革,并希望成为其中的一部分。

如果你想进入这个美丽而令人兴奋的领域,你可以选择进入应用方面:选择一个你感兴趣并且热情的行业中的应用。开始制定你想要回答的问题,找到数据,然后开始应用你所学到的知识。另一条路是进入研究方面,我们在那里研究模型本身,如何改进它们,扩展它们,分析它们并证明关于它们行为的定理,或者提出全新的模型。同样,只选择你真正感兴趣的研究项目。还有一条路是进入编码方面,构建软件包、库和更好的实现方式。这样做对我们所有人都是一个帮助。我无法想象如果 keras 和 scikit learn(用于机器学习和神经网络的 Python 库)不存在,我们中的许多人会怎么办。

目前,全球只有 22,000 名拥有博士学位的人工智能研究人员。其中百分之四十在美国。为了满足需求,引入新的想法到这个领域,我们需要更多的研究人员,无论是国内还是国际上。我希望这本书能够帮助你快速进入这个迷人的领域,也希望你有足够的基础能够自己深入研究你感兴趣的任何主题。

对我来说,作为一直欣赏数学及其惊人能力来模拟我们宇宙的人,最令人兴奋的事情之一是,人工智能激发了人们对数学的兴趣。我希望这反过来促使数学家重新思考如何呈现和教授数学。与此同时,让我们都倡导高质量和准确标记的数据、人工智能政策,并对我们的系统考虑和不考虑的内容保持诚实。同时,我们必须非常小心,不要将我们的人类经验简化为一系列数据和指标,有些可测量,有些留给我们容易出错的模型来预测和做出决策。正如这本书一次又一次地展示的那样:经历、点击习惯、邮政编码、健康记录、社交媒体评论、图片、标签、电子邮件往来、居住历史、种族、民族、国籍、宗教、婚姻状况、年龄、我们的朋友、我们朋友的习惯,等等,所有都变成了高维向量中的简单条目,被馈送到机器学习模型中进行预测。我们要确保我们不会意外地将自己转变为行走和说话的高维数据点。

我最后的想法,暂时来说:人工智能已经将许多数学方面巧妙地联系在一起。也许这不是巧合。也许数学是最适合智能的语言,而智能最舒适地通过数学表达自己。为了人工复制智能,我们需要一个能够毫不费力地通过其首选语言代表世界的代理。

关于作者

哈拉·纳尔逊 是詹姆斯·麦迪逊大学的数学副教授。她在纽约大学库兰数学科学研究所获得数学博士学位。在麦迪逊大学工作之前,她曾在密歇根大学安娜堡分校担任博士后助理教授。

她的研究领域涉及材料科学、统计力学、逆问题以及机器学习和人工智能的数学。她最喜欢的数学科目是优化、偏微分方程、数值线性代数和概率论。她喜欢将复杂的想法转化为简单而实用的术语。对她来说,大多数数学概念都是轻松且易于理解的,除非介绍这些概念的人要么并不太了解它们,要么试图炫耀。

其他事实:哈拉·纳尔逊在黎巴嫩长大,那时正值残酷的内战时期。她在一次导弹爆炸中很小的时候失去了头发。这一事件以及许多随后发生的事件塑造了她对人类行为、智能的本质和人工智能的兴趣。她的父亲在家里和用法语教她数学,直到她高中毕业。她父亲对数学的最喜欢的一句话是:“这是一门干净的科学”。

后记

《人工智能的基本数学》 封面上的动物是一只系着挽具的灌木羚(Tragelaphus scriptus)。

O’Reilly 封面上的许多动物都濒临灭绝;它们都对世界至关重要。

封面插图由 Karen Montgomery 制作,基于肖氏动物学中的一幅古老线刻。封面字体为 Gilroy Semibold 和 Guardian Sans。正文字体为 Adobe Minion Pro;标题字体为 Adobe Myriad Condensed;代码字体为 Dalton Maag 的 Ubuntu Mono。

posted @ 2024-06-17 17:11  绝不原创的飞龙  阅读(17)  评论(0编辑  收藏  举报