



人工智能(在业内人士看来是 机器学习或深度学习 )目前非常流行。媒体对这种新技术统治的世界充满了热切和偏执的预测,这是理所当然的。这是一场发生在我们眼前的知识革命。
在我攻读博士学位期间和之后的几十年里,我一直在从事计算机视觉和图像处理问题的研究,先是在Adobe Systems,随后在Google,后来在我创办的硅谷初创公司Drishti Technologies。我一直处于这一革命的最前沿。我不仅见证了什么是有效的,还看到了——也许更重要的是——什么不起作用以及什么几乎有效。这使我拥有了独特的视角,因为在尝试解决实际问题时,经常无法直接应用教科书上的理论。我们必须融合各种观点,创造出一种成功的解决方案。这需要对什么有效及其原因、什么无效及其原因有一种感觉。这种感觉,这种对机器/深度学习理论内部运作的理解,以及我的见解和直觉,正是我希望传达给读者的。
这让我想到另一个问题。由于这个主题的流行,市面上和网络上存在大量“深度学习入门”类型的资料。这些文章并没有公正地对待这个主题。对此,我的反应是“所有事情都应该尽可能简单,但不能过于简化”。深度学习不能通过浏览一些简化的、去除了所有数学内容的零散教程来掌握。这是一个数学主题,要掌握它,需要理解数学和编程。我们需要的是一种资源,它以恰当的数学表达来呈现这个主题——不多不少,并明确说明深度学习和数学之间的联系。这正是这本书力求做到的,通过数学和相应的PyTorch代码片段进行内容的双重展示。
关于本书
你是那种想要知道事物为何运作以及如何运作的人吗?在工具解决了当前问题时,你是否会试图理解这个工具到底在做什么、为什么会以某种方式表现,以及它在不同情况下能否都正常工作?如果是的话,你将获得我们的同情——你的生活注定不会太平静。你也会获得我们的祝愿——这些内容就是为你而写的。
互联网上充斥着各种预构建的深度学习模型和训练系统,这些系统几乎不需要你理解其基本原理。然而,实际问题往往并不符合任何公开可用的模型。在这些情况下,需要开发一个定制的模型架构。开发这样的架构则需要理解优化和机器学习的数学基础。
深度学习和计算机视觉是非常实用的学科,所以这些问题是相关的:“学习数学有必要吗?我们不应该花时间学习深度学习的Python细节吗?”答案是肯定的,也是否定的。编程技能(特别是Python)是必不可少的。但如果没有对数学的直观理解,关于“我能否重新利用这个模型”的如何与为何的问题就不会显而易见。数学能够让你看到实现背后的抽象概念。
在许多方面,形成抽象的能力是高级智慧的本质。抽象使得早期人类能够用一块尖锐的石头创造出挖掘和防御的工具,而其他动物则不能。对于人类文明而言,对某个物体相对于环境中另一个固定物体的位置描述进行抽象化(即坐标系和向量)更是创造了无数奇迹。数学是用于表达抽象概念的语言:它是人类已知的最精确、简洁且明确的语言。因此,数学作为研究深度学习的工具是绝对必要的。但我们必须记住,它只是一个工具——仅此而已。本书中介绍所有数学知识的最终目的是引发那些在复杂的机器学习世界中获得专业知识所必需的直觉和洞察力。
另一个同样重要的工具是编程语言——PyTorch,没有它,所有的智慧都无法付诸实践。本书通过许多代码段将机器学习的两大支柱——数学和编程——联系起来,通常数学知识和代码一起展示。在GitHub存储库中附有完整可用的代码。我们希望读者先用纸和笔进行数学演算,然后在计算机上运行代码以理解结果。本书并不是睡前读物。
在阐明了学习深度学习和计算机视觉基本数学原理的必要性之后,我们急需补充说明的是,本书的目标并不是追求数学的严谨性,而是提供数学(特别是几何)见解,使这个主题更加直观,而不是像黑魔法。同时,我们在整本书中提供了Python编码练习和可视化辅助工具。因此,可以将阅读本书视为通过几何示例和Python练习来学习深度学习的数学基础。掌握本书中呈现的材料将使你能够:
·了解最先进的深度学习研究论文。本书对当今一些有影响力的论文提供了深入、直观的解释。
·研究并理解深度学习代码库。
·在你的任务中使用书中的代码段。
·为机器学习工程师/科学家职位的面试做好准备。
·确定现实生活中的问题是否适合使用机器学习/深度学习解决。
·解决神经网络的效果问题。
·选取正确的神经网络架构来解决现实生活中的问题。
·快速实现原型架构并针对现实问题训练深度学习模型。
需要注意的是,我们经常从基础知识讲起,但很快就会深入探讨相关内容。即使你熟悉开头介绍的材料,但从头到尾阅读各个章节仍然很重要。
最后,一项智力劳动的终极意义在于享受追求它的乐趣。因此,如果你喜欢阅读本书,那么我们将认为自己是成功的。
本书的目标读者
本书面向对工程数学和Python编程有基本了解、希望深入掌握深度学习的读者。为了获得最佳学习效果,建议使用纸和笔进行数学计算,并在计算机上执行PyTorch程序。以下是本书可能适合的读者群体:
·拥有工程、科学或数学学位(可能刚毕业不久)的人,正在考虑将职业转向深度学习。不需要有机器学习或深度学习的先验知识。
·初级或中级机器学习从业者,他们希望更深入地了解各种技术的工作原理,实现从互联网下载模型进行试用到为实际问题开发定制的深度学习解决方案的能力跃升,并培养能够阅读和理解该领域研究文献的专业素养。
·即将踏上深度学习职业生涯的大学生。
本书的结构:路线图
本书由14章和附录及符号说明组成。一般来说,所有的数学概念都是从机器学习的角度来剖析的。书中还阐释了相关的几何见解,并在适当的地方提供了PyTorch代码。
第1章是对机器学习和深度学习的概述。目的是在读者的脑海中建立整体背景,并使读者熟悉一些机器学习的概念,如输入空间、特征空间、模型训练、架构、损失等。
第2章涵盖构成机器学习基础的核心概念——向量、矩阵和张量。它将介绍点积、向量长度、正交性、线性系统、特征值和特征向量、摩尔-彭若斯(Moore-Penrose)伪逆、矩阵对角化、谱分解等概念。
第3章概述理解深度学习所需的向量微积分概念,涵盖梯度、多维函数在任意维空间中通过泰勒展开进行的局部近似、黑塞矩阵、梯度下降、凸性以及这些概念与机器学习中损失最小化思想的联系。本章还将提供PyTorch模型构建的初步体验。
第4章介绍主成分分析(PCA)和奇异值分解(SVD)——机器学习的关键线性代数工具。我们将提供基于SVD的文档检索系统的端到端PyTorch实现。
第5章从深度学习的角度解释概率分布的基本概念。我们将研究分布的重要性质,如期望值、方差和协方差,还将介绍一些最流行的概率分布,如高斯分布、伯努利分布、二项分布、多项分布、分类分布等。同时,我们还将介绍PyTorch的distributions包。
第6章探讨机器学习中的贝叶斯工具。我们将学习贝叶斯定理,了解模型参数估计技术,如最大似然估计(MLE)和最大后验(MAP)估计。我们还将研究潜在变量、正则化、高斯分布的MLE、熵、交叉熵、条件熵和KL散度。最后,我们将研究高斯混合模型(GMM)及其建模和参数估计方法。
第7章深入探讨神经网络。我们将研究感知机、神经网络的基本构建块,以及多层感知机如何建模任意多边形决策边界和常见的逻辑门操作,从而实现分类。我们还将讨论Cybenko的通用逼近定理。
第8章介绍神经网络的激活函数、层的重要性和直觉的解释。我们将研究前向传播和反向传播(包括数学证明),并使用PyTorch实现一个简单的神经网络。我们还将研究如何端到端地训练一个神经网络。
第9章深入研究各种对神经网络有效学习至关重要的损失函数。我们将研究流行损失函数(如交叉熵损失、回归损失、焦点损失等)背后的数学和直觉解释,并通过PyTorch实现它们。我们将探讨各种优化技术(如SGD、Nesterov、AdaGrad、Adam等)的几何见解。此外,我们还将了解正则化的重要性及其与MLE和MAP的关系。
第10章介绍卷积,这是计算机视觉模型的核心算子。我们将研究一维、二维和三维卷积,以及转置卷积及其直观解释。我们还将通过PyTorch实现一个简单的卷积神经网络。
第11章介绍用于图像分类和目标检测的各种神经网络架构。我们将详细研究几种图像分类架构,如LeNet、VGG、Inception和ResNet。我们还将深入研究用于目标检测的Faster R-CNN。
第12章探讨流形、流形的性质[如同胚性、豪斯多夫(Haussdorf)性质和第二可数性],以及流形如何与神经网络相关联。
第13章介绍全贝叶斯模型参数估计。我们将探讨如何将先验信念注入参数估计,以及它在无监督/半监督设置中的应用。此外,我们还将介绍共轭先验以及在已知/未知均值和方差条件下高斯似然参数的估计。
第14章探讨潜在空间和生成建模。我们将介绍潜在空间的几何视角及其建模的好处,从这一新视角重新审视主成分分析(PCA),并研究自编码器和变分自编码器。我们将研究变分自编码器如何正则化潜在空间,从而表现出优于自编码器的特性。
附录包含对各章节中介绍的一些数学性质的数学证明和推导。
关于代码
本书包含许多源代码示例,既有带编号的代码清单,也有与正文混排的代码。在这两种情况下,源代码都使用等宽字体格式,以便与普通文本区分开来。有时代码还会以粗体显示,以突出相对于本章先前步骤已更改的代码,例如,添加新功能到现有代码行时。
在许多情况下,原始源代码已被重新格式化;我们添加换行符并重新调整了缩进,以适应书中的页面空间。极少数情况下,即使这样处理仍不够,因此代码清单中包含了行续标记(
)。此外,当代码在正文中已有描述时,源代码清单中的注释通常会被删除。许多代码清单还附有注解来突出重要概念。
你可以在本书的liveBook(在线)版本中获取可执行的代码段,网址是https://livebook.manning.com/book/math-and-architectures-of-deep-learning。在本书配套的GitHub存储库中可以获取完整可用的代码,网址是https://github.com/krishnonwork/mathematical-methods-in-deep-learning-ipython,也可以从Manning的网站获取,网址是www.manning.com。代码以Jupyter Notebook的形式呈现(按章节组织),可以独立执行。代码用Python编写,并使用了流行的PyTorch库。重要的代码段在书中以代码清单的形式呈现,关键概念通过代码注解突出显示。要开始使用这些代码,请克隆存储库并按照README中描述的步骤进行操作。