diff --git a/totrans/dl-cb_01.md b/totrans/dl-cb_01.md index 0421525..4f5ff36 100644 --- a/totrans/dl-cb_01.md +++ b/totrans/dl-cb_01.md @@ -1,4 +1,4 @@ -# 第一章 工具和技术 +# 第一章:工具和技术 在本章中,我们将介绍深度学习的常见工具和技术。这是一个很好的章节,可以通读一次以了解各种情况,并在需要时回头查看。 diff --git a/totrans/dl-cb_02.md b/totrans/dl-cb_02.md index 32d77b3..152651d 100644 --- a/totrans/dl-cb_02.md +++ b/totrans/dl-cb_02.md @@ -1,4 +1,4 @@ -# 第二章。摆脱困境 +# 第二章:摆脱困境 深度学习模型经常被视为黑匣子;我们在一端输入数据,另一端输出答案,而我们不必太关心网络是如何学习的。虽然深度神经网络确实擅长从复杂输入数据中提取信号,但将这些网络视为黑匣子的反面是,当事情陷入困境时并不总是清楚该怎么办。 diff --git a/totrans/dl-cb_03.md b/totrans/dl-cb_03.md index d84afa2..fa8a62a 100644 --- a/totrans/dl-cb_03.md +++ b/totrans/dl-cb_03.md @@ -1,4 +1,4 @@ -# 第三章。使用单词嵌入计算文本相似性 +# 第三章:使用单词嵌入计算文本相似性 ###### 提示 diff --git a/totrans/dl-cb_04.md b/totrans/dl-cb_04.md index 38bd37c..329a5a0 100644 --- a/totrans/dl-cb_04.md +++ b/totrans/dl-cb_04.md @@ -1,4 +1,4 @@ -# 第四章。基于维基百科外部链接构建推荐系统 +# 第四章:基于维基百科外部链接构建推荐系统 推荐系统传统上是根据用户先前收集的评分进行训练的。我们希望预测用户的评分,因此从历史评分开始似乎是一个自然的选择。然而,这要求我们在开始之前有一个大量的评分集,并且不允许我们对尚未评分的新项目做出良好的工作。此外,我们故意忽略了我们对项目的元信息。 diff --git a/totrans/dl-cb_05.md b/totrans/dl-cb_05.md index a2f1bb3..e8aa1f2 100644 --- a/totrans/dl-cb_05.md +++ b/totrans/dl-cb_05.md @@ -1,4 +1,4 @@ -# 第五章 生成类似示例文本风格的文本 +# 第五章:生成类似示例文本风格的文本 在本章中,我们将看看如何使用递归神经网络(RNN)生成类似文本体的文本。这将产生有趣的演示。人们已经使用这种类型的网络生成从婴儿姓名到颜色描述等各种内容。这些演示是熟悉递归网络的好方法。RNN 也有它们的实际用途——在本书的后面,我们将使用它们来训练聊天机器人,并基于收集的播放列表构建音乐推荐系统,RNN 已经被用于生产中跟踪视频中的对象。 diff --git a/totrans/dl-cb_06.md b/totrans/dl-cb_06.md index a26dc5c..6b1c5a0 100644 --- a/totrans/dl-cb_06.md +++ b/totrans/dl-cb_06.md @@ -1,4 +1,4 @@ -# 第六章。问题匹配 +# 第六章:问题匹配 我们现在已经看到了一些示例,说明我们如何构建和使用词嵌入来比较术语。自然而然地,我们会问如何将这个想法扩展到更大的文本块。我们能否为整个句子或段落创建语义嵌入?在本章中,我们将尝试做到这一点:我们将使用来自 Stack Exchange 的数据为整个问题构建嵌入;然后我们可以使用这些嵌入来查找相似的文档或问题。 diff --git a/totrans/dl-cb_07.md b/totrans/dl-cb_07.md index ef1f6c3..ea40a40 100644 --- a/totrans/dl-cb_07.md +++ b/totrans/dl-cb_07.md @@ -1,4 +1,4 @@ -# 第七章。建议表情符号 +# 第七章:建议表情符号 在本章中,我们将构建一个模型,根据一小段文本建议表情符号。我们将首先基于一组带有各种情感标签的推文开发一个简单的情感分类器,如快乐、爱、惊讶等。我们首先尝试一个贝叶斯分类器,以了解基线性能,并查看这个分类器可以学到什么。然后我们将切换到卷积网络,并查看各种调整这个分类器的方法。 diff --git a/totrans/dl-cb_08.md b/totrans/dl-cb_08.md index 8ed0656..145715a 100644 --- a/totrans/dl-cb_08.md +++ b/totrans/dl-cb_08.md @@ -1,4 +1,4 @@ -# 第八章。序列到序列映射 +# 第八章:序列到序列映射 在本章中,我们将研究使用序列到序列网络来学习文本片段之间的转换。这是一种相对较新的技术,具有诱人的可能性。谷歌声称已经通过这种技术大大改进了其 Google 翻译产品;此外,它已经开源了一个版本,可以纯粹基于平行文本学习语言翻译。 diff --git a/totrans/dl-cb_09.md b/totrans/dl-cb_09.md index 13a15ac..200a8ac 100644 --- a/totrans/dl-cb_09.md +++ b/totrans/dl-cb_09.md @@ -1,4 +1,4 @@ -# 第九章。重用预训练的图像识别网络 +# 第九章:重用预训练的图像识别网络 图像识别和计算机视觉是深度学习取得重大影响的领域之一。拥有几十层甚至超过一百层的网络已经被证明在图像分类任务中非常有效,甚至超过了人类。 diff --git a/totrans/dl-cb_10.md b/totrans/dl-cb_10.md index 9fad4cb..091eafb 100644 --- a/totrans/dl-cb_10.md +++ b/totrans/dl-cb_10.md @@ -1,4 +1,4 @@ -# 第十章。构建反向图像搜索服务 +# 第十章:构建反向图像搜索服务 在前一章中,我们看到如何在我们自己的图像上使用预训练网络,首先通过在网络顶部运行分类器,然后在一个更复杂的示例中,我们只训练网络的部分来识别新的图像类别。在本章中,我们将使用类似的方法来构建一个反向图像搜索引擎,或者通过示例搜索。 diff --git a/totrans/dl-cb_11.md b/totrans/dl-cb_11.md index 0b98ca6..f308b23 100644 --- a/totrans/dl-cb_11.md +++ b/totrans/dl-cb_11.md @@ -1,4 +1,4 @@ -# 第十一章。检测多个图像 +# 第十一章:检测多个图像 在之前的章节中,我们看到了如何使用预训练分类器来检测图像并学习新的类别。然而,在所有这些实验中,我们总是假设我们的图像中只有一件事情要看。在现实世界中,情况并非总是如此——例如,我们可能有一张既有猫又有狗的图像。 diff --git a/totrans/dl-cb_12.md b/totrans/dl-cb_12.md index 8bc5491..93b1a37 100644 --- a/totrans/dl-cb_12.md +++ b/totrans/dl-cb_12.md @@ -1,4 +1,4 @@ -# 第十二章 图像风格 +# 第十二章:图像风格 在本章中,我们将探讨一些技术,以可视化卷积网络在分类图像时看到的内容。我们将通过反向运行网络来实现这一点——而不是给网络一个图像并询问它是什么,我们告诉网络要看到什么,并要求它以一种使检测到的物品更夸张的方式修改图像。 diff --git a/totrans/dl-cb_13.md b/totrans/dl-cb_13.md index 386554c..e8997b1 100644 --- a/totrans/dl-cb_13.md +++ b/totrans/dl-cb_13.md @@ -1,4 +1,4 @@ -# 第十三章。使用自动编码器生成图像 +# 第十三章:使用自动编码器生成图像 在第五章中,我们探讨了如何生成文本,以某个现有语料库的风格为基础,无论是莎士比亚的作品还是 Python 标准库中的代码,而在第十二章中,我们研究了通过优化预训练网络中通道的激活来生成图像。在本章中,我们将结合这些技术并在其基础上生成基于示例的图像。 diff --git a/totrans/dl-cb_14.md b/totrans/dl-cb_14.md index 0f05727..b3c609c 100644 --- a/totrans/dl-cb_14.md +++ b/totrans/dl-cb_14.md @@ -1,4 +1,4 @@ -# 第十四章。使用深度网络生成图标 +# 第十四章:使用深度网络生成图标 在上一章中,我们看了一下从 Quick Draw 项目生成手绘草图和从 MNIST 数据集生成数字。在本章中,我们将尝试三种类型的网络来完成一个稍微具有挑战性的任务:生成图标。 diff --git a/totrans/dl-cb_15.md b/totrans/dl-cb_15.md index c1fff37..27422b0 100644 --- a/totrans/dl-cb_15.md +++ b/totrans/dl-cb_15.md @@ -1,4 +1,4 @@ -# 第十五章。音乐和深度学习 +# 第十五章:音乐和深度学习 这本书中的其他章节都是关于图像或文本的处理。这些章节代表了深度学习研究中媒体的平衡,但这并不意味着声音处理不是有趣的,我们在过去几年中也看到了一些重大进展。语音识别和语音合成使得像亚马逊 Alexa 和谷歌 Home 这样的家庭助手成为可能。自从 Siri 推出以来,那个老的情景喜剧笑话中电话拨错号码的情节并不是很现实。 diff --git a/totrans/dl-cb_16.md b/totrans/dl-cb_16.md index b5e6f73..b22485c 100644 --- a/totrans/dl-cb_16.md +++ b/totrans/dl-cb_16.md @@ -1,4 +1,4 @@ -# 第十六章。生产机器学习系统 +# 第十六章:生产机器学习系统 构建和训练模型是一回事;在生产系统中部署您的模型是另一回事,通常被忽视。在 Python 笔记本中运行代码很好,但不是为 web 客户端提供服务的好方法。在本章中,我们将看看如何真正开始运行。 diff --git a/totrans/dl-fin_0.md b/totrans/dl-fin_0.md index b80572f..6e9b706 100644 --- a/totrans/dl-fin_0.md +++ b/totrans/dl-fin_0.md @@ -1,4 +1,4 @@ -# 第一章。介绍数据科学和交易 +# 第一章:介绍数据科学和交易 开始学习复杂主题的最佳方法是逐渐建立动力,直到你开始完成拼图。了解金融深度学习需要对基本和中级数据科学主题以及金融市场及其结构有一定的了解。 @@ -70,7 +70,7 @@ *数值数据* -这种类型的数据由反映在定期或不定期间隔内收集的某种类型信息的数字组成。示例可以包括市场数据(OHLC^(1),成交量,价差等)和财务报表数据(资产,收入,成本等)。 +这种类型的数据由反映在定期或不定期间隔内收集的某种类型信息的数字组成。示例可以包括市场数据(OHLC¹,成交量,价差等)和财务报表数据(资产,收入,成本等)。 *分类数据* @@ -509,8 +509,8 @@ plt.legend() 如果您需要 Python 的复习,请参阅第三章,这是一个基本介绍。它为书中接下来要讲的内容奠定了基础。您不需要成为 Python 大师来进行数据科学,但您必须理解代码及其引用的内容,尤其是如何调试和检测代码中的错误。 -^(1) OHLC 指的是市场数据的四个基本部分:开盘价、最高价、最低价和收盘价。 +¹ OHLC 指的是市场数据的四个基本部分:开盘价、最高价、最低价和收盘价。 -^(2) 我之所以说是暗示的是因为必须通过统计检查来验证平稳性,您将在下一章中看到。目前,假设是对数据进行差分运算得到平稳时间序列。 +² 我之所以说是暗示的是因为必须通过统计检查来验证平稳性,您将在下一章中看到。目前,假设是对数据进行差分运算得到平稳时间序列。 -^(3) Rish 算法是一种用于找到反导数的不定积分技术。 +³ Rish 算法是一种用于找到反导数的不定积分技术。 diff --git a/totrans/dl-fin_1.md b/totrans/dl-fin_1.md index 358c3c3..dd807dc 100644 --- a/totrans/dl-fin_1.md +++ b/totrans/dl-fin_1.md @@ -1,4 +1,4 @@ -# 第二章。深度学习的基本概率方法 +# 第二章:深度学习的基本概率方法 技术的兴起和可访问性使每个人都能够部署机器学习和深度学习算法进行数据分析和优化。但不幸的是,这意味着许多用户不了解不同学习模型的基础和基础知识。这使得机器学习对他们来说简直就是一个黑匣子,这是一场灾难的前兆。 diff --git a/totrans/dl-fin_2.md b/totrans/dl-fin_2.md index 88092dc..e3f2d50 100644 --- a/totrans/dl-fin_2.md +++ b/totrans/dl-fin_2.md @@ -1,4 +1,4 @@ -# 第三章。描述性统计和数据分析 +# 第三章:描述性统计和数据分析 *描述性统计*是描述数据并尽可能多地从中提取信息的领域。基本上,描述性统计可以像数据的代表一样,因为它概括了数据的倾向、行为和趋势。 @@ -1543,4 +1543,4 @@ p-value: 0.010000 `# with trend consideration` 能够进行数据分析是部署正确算法以预测时间序列未来值的关键。通过来自统计学领域的各种工具来理解数据。确保您了解什么是平稳性和相关性,因为它们在建模中提供极其有价值的见解。 -^(1) 其他方式也有,但这两种方式是最流行的表示形式。 +¹ 其他方式也有,但这两种方式是最流行的表示形式。 diff --git a/totrans/dl-fin_3.md b/totrans/dl-fin_3.md index 4bede57..ff15cda 100644 --- a/totrans/dl-fin_3.md +++ b/totrans/dl-fin_3.md @@ -1,4 +1,4 @@ -# 第四章. 深度学习的线性代数和微积分 +# 第四章:深度学习的线性代数和微积分 代数和微积分是数据科学的支柱,特别是基于这两个数学领域的概念的学习算法。本章以一种所有人都能理解的方式介绍了一些关键的代数和微积分主题。 @@ -1254,4 +1254,4 @@ x 轴和 y 轴是垂直线,指定了平面的边界以及二维笛卡尔坐标 到目前为止,您应该已经对数据科学和数学要求有一定的了解,这将让您舒适地开始。 -^(1) 矩阵也可以包含符号和表达式,但为了简单起见,让我们坚持使用数字。 +¹ 矩阵也可以包含符号和表达式,但为了简单起见,让我们坚持使用数字。 diff --git a/totrans/dl-fin_4.md b/totrans/dl-fin_4.md index 30a2ea0..63f28f0 100644 --- a/totrans/dl-fin_4.md +++ b/totrans/dl-fin_4.md @@ -1,4 +1,4 @@ -# 第五章。介绍技术分析 +# 第五章:介绍技术分析 技术分析提供了许多类型的输入,可以用于您的深度学习模型。本章介绍了这一广阔领域,以便您具备在接下来的章节中创建基于技术的学习模型所需的知识。 @@ -144,7 +144,7 @@ 反向指标 -用于淡化移动^(2),最好在横向市场中使用^(3),因为它们通常标志着初始移动的结束。因此,它们与移动的预期逆转有关(因此也与移动的反持续性有关)。 +用于淡化移动²,最好在横向市场中使用³,因为它们通常标志着初始移动的结束。因此,它们与移动的预期逆转有关(因此也与移动的反持续性有关)。 接下来的章节介绍了技术分析的两个支柱:移动平均线(趋势跟踪)和相对强弱指数(反向)。 @@ -320,10 +320,10 @@ 技术分析提供了一系列工具来对市场进行数学、图形或甚至心理(通过模式)分析。这一章标志着在开始本书的真正目的之前进行热身练习的结束,即用于交易和预测目的的机器和深度学习应用。这一章的学习成果应该是对技术分析是什么以及其局限性的深刻理解。同样,你还应该对我提出的两个主要技术指标有深刻的理解:移动平均线和相对强弱指标,因为它们构成了即将出现的模型的关键特征。 -^(1) 这假设了一个长期显示确定性特征的非随机概率。 +¹ 这假设了一个长期显示确定性特征的非随机概率。 -^(2) 反向操作是一种交易技术,你在与正在进行的趋势相反的方向进行交易,希望能够把握其结束的时机。 +² 反向操作是一种交易技术,你在与正在进行的趋势相反的方向进行交易,希望能够把握其结束的时机。 -^(3) 横盘市场通常处于均衡状态,没有特定的趋势描述它们。它们往往在彼此接近的高点和低点之间摇摆。 +³ 横盘市场通常处于均衡状态,没有特定的趋势描述它们。它们往往在彼此接近的高点和低点之间摇摆。 -^(4) 参见 J.韦尔斯·怀尔德(1978)的《技术交易系统中的新概念》,由趋势研究出版。 +⁴ 参见 J.韦尔斯·怀尔德(1978)的《技术交易系统中的新概念》,由趋势研究出版。 diff --git a/totrans/dl-fin_5.md b/totrans/dl-fin_5.md index ee6fd35..383dd79 100644 --- a/totrans/dl-fin_5.md +++ b/totrans/dl-fin_5.md @@ -1,4 +1,4 @@ -# 第六章。数据科学的 Python 入门 +# 第六章:数据科学的 Python 入门 在深入机器和深度学习领域之前还有一个停留。对于有经验的 Python 开发人员来说,本章是可选的,但对于没有扎实编程背景的任何人来说都是至关重要的。了解算法背后的直觉是一个很大的优势,但如果未能正确实现它们,这将无法让您走得更远。毕竟,这些算法需要代码来工作,而不是手动操作。确保了解基本语法以及如何操作数据和转换数据。 diff --git a/totrans/dl-lfsci_01.md b/totrans/dl-lfsci_01.md index b242200..de375ec 100644 --- a/totrans/dl-lfsci_01.md +++ b/totrans/dl-lfsci_01.md @@ -1,4 +1,4 @@ -# 第一章。为什么选择生命科学? +# 第一章:为什么选择生命科学? 虽然有许多技术倾向和对数据的热情可以追求的方向,但很少有领域能与生物医学研究的基本影响相匹配。现代医学的出现从根本上改变了人类存在的本质。在过去 20 年里,我们已经看到了许多创新,这些创新已经改变了无数个体的生活。当 HIV/AIDS 首次出现在 1981 年时,这是一种基本上致命的疾病。抗逆转录病毒疗法的持续发展已经显著延长了发达国家患者的预期寿命。其他疾病,如肝炎 C,在十年前被认为基本上无法治愈,现在可以治愈。遗传学的进步使得能够识别并希望很快治疗各种疾病。诊断和仪器的创新使得医生能够具体识别和针对人体内的疾病。许多这些突破受益于并将继续受到计算方法的推动。 @@ -56,4 +56,4 @@ 本书的最后一章探讨了深度学习在生命科学中的当前影响和未来潜力。讨论了当前努力面临的一些挑战,包括数据集的可用性和质量。我们还强调了在诊断、个性化医学、制药开发和生物学研究等许多其他领域中的机遇和潜在风险。 -^(1) Furbush, James. “Machine Learning: A Quick and Simple Definition.” [*https://www.oreilly.com/ideas/machine-learning-a-quick-and-simple-definition*](https://www.oreilly.com/ideas/machine-learning-a-quick-and-simple-definition). 2018. +¹ Furbush, James. “Machine Learning: A Quick and Simple Definition.” [*https://www.oreilly.com/ideas/machine-learning-a-quick-and-simple-definition*](https://www.oreilly.com/ideas/machine-learning-a-quick-and-simple-definition). 2018. diff --git a/totrans/dl-lfsci_02.md b/totrans/dl-lfsci_02.md index 1bf3a4d..58d8c56 100644 --- a/totrans/dl-lfsci_02.md +++ b/totrans/dl-lfsci_02.md @@ -1,4 +1,4 @@ -# 第二章。深度学习简介 +# 第二章:深度学习简介 本章的目标是介绍深度学习的基本原理。如果您已经有很多深度学习经验,可以随意略读本章,然后继续下一章。如果您经验较少,应该仔细学习本章,因为它涵盖的内容对于理解本书的其余部分至关重要。 diff --git a/totrans/dl-lfsci_03.md b/totrans/dl-lfsci_03.md index 675dba5..bdd712a 100644 --- a/totrans/dl-lfsci_03.md +++ b/totrans/dl-lfsci_03.md @@ -1,4 +1,4 @@ -# 第三章。使用 DeepChem 进行机器学习 +# 第三章:使用 DeepChem 进行机器学习 本章简要介绍了使用 DeepChem 进行机器学习的内容,DeepChem 是建立在 TensorFlow 平台之上的库,旨在促进在生命科学领域中使用深度学习。DeepChem 提供了大量适用于生命科学应用的模型、算法和数据集。在本书的其余部分,我们将使用 DeepChem 来进行案例研究。 diff --git a/totrans/dl-lfsci_04.md b/totrans/dl-lfsci_04.md index 8d0d991..693cfe7 100644 --- a/totrans/dl-lfsci_04.md +++ b/totrans/dl-lfsci_04.md @@ -315,10 +315,10 @@ highlightAtomLists=match_list) ###### 图 4-14。与 SMARTS 表达式“C[C,N,O]C”匹配的分子。 -SMARTS 还有很多内容超出了这个简短介绍的范围。建议感兴趣的读者阅读“Daylight Theory Manual”以深入了解 SMILES 和 SMARTS。^(1) 正如我们将在第十一章中看到的,SMARTS 可以用于构建复杂的查询,以识别在生物测定中可能存在问题的分子。 +SMARTS 还有很多内容超出了这个简短介绍的范围。建议感兴趣的读者阅读“Daylight Theory Manual”以深入了解 SMILES 和 SMARTS。¹ 正如我们将在第十一章中看到的,SMARTS 可以用于构建复杂的查询,以识别在生物测定中可能存在问题的分子。 # 结论 在这一章中,您已经学习了分子机器学习的基础知识。在简要回顾基础化学知识之后,我们探讨了分子在计算系统中传统的表示方法。您还学习了图卷积,这是一种在深度学习中对分子建模的较新方法,并看到了如何使用机器学习来预测重要物理性质的完整工作示例。这些技术将成为后续章节构建的基础。 -^(1) Daylight Chemical Information Systems, Inc. “Daylight Theory Manual.” [*http://www.daylight.com/dayhtml/doc/theory/*](http://www.daylight.com/dayhtml/doc/theory/). 2011. +¹ Daylight Chemical Information Systems, Inc. “Daylight Theory Manual.” [*http://www.daylight.com/dayhtml/doc/theory/*](http://www.daylight.com/dayhtml/doc/theory/). 2011. diff --git a/totrans/dl-lfsci_05.md b/totrans/dl-lfsci_05.md index 38688b8..46ff612 100644 --- a/totrans/dl-lfsci_05.md +++ b/totrans/dl-lfsci_05.md @@ -1,4 +1,4 @@ -# 第五章 生物物理机器学习 +# 第五章:生物物理机器学习 在本章中,我们将探讨如何使用深度学习来理解生物物理系统。特别是,我们将深入探讨如何预测类似药物的小分子如何与人体中感兴趣的蛋白质结合。 diff --git a/totrans/dl-lfsci_06.md b/totrans/dl-lfsci_06.md index 7e2b440..b266b46 100644 --- a/totrans/dl-lfsci_06.md +++ b/totrans/dl-lfsci_06.md @@ -1,4 +1,4 @@ -# 第六章。基因组学的深度学习 +# 第六章:基因组学的深度学习 每个生物体的核心是其基因组:包含制造生物体工作部分的所有指令的 DNA 分子。如果一个细胞是一台计算机,那么它的基因组序列就是它执行的软件。如果 DNA 可以被视为软件,信息是计算机处理的,那么我们肯定可以使用我们自己的计算机来分析这些信息并理解它是如何运作的? @@ -306,4 +306,4 @@ for i in range(20): 与生命科学的大多数其他领域相比,基因组学产生了大量的实验数据。例如,单个人类基因组序列包含超过 60 亿个碱基。传统的统计技术很难在所有这些数据中找到信号。它们经常需要简化假设,这些假设并不能反映基因组调控的复杂性。深度学习非常适合处理这些数据,并推动我们对生命细胞核心功能的理解。 -^(1) Huesken, D., J. Lange, C. Mickanin, J. Weiler, F. Asselbergs, J. Warner, B. Meloon, S. Engel, A. Rosenberg, D. Cohen, M. Labow, M. Reinhardt, F. Natt, and J. Hall, “Design of a Genome-Wide siRNA Library Using an Artificial Neural Network.” *Nature Biotechnology* 23:995–1001\. 2005\. *[`doi.org/10.1038/nbt1118`](https://doi.org/10.1038/nbt1118)*. +¹ Huesken, D., J. Lange, C. Mickanin, J. Weiler, F. Asselbergs, J. Warner, B. Meloon, S. Engel, A. Rosenberg, D. Cohen, M. Labow, M. Reinhardt, F. Natt, and J. Hall, “Design of a Genome-Wide siRNA Library Using an Artificial Neural Network.” *Nature Biotechnology* 23:995–1001\. 2005\. *[`doi.org/10.1038/nbt1118`](https://doi.org/10.1038/nbt1118)*. diff --git a/totrans/dl-lfsci_07.md b/totrans/dl-lfsci_07.md index 6ead639..e291642 100644 --- a/totrans/dl-lfsci_07.md +++ b/totrans/dl-lfsci_07.md @@ -1,4 +1,4 @@ -# 第七章 机器学习用于显微镜 +# 第七章:机器学习用于显微镜 在这一章中,我们向您介绍显微镜的深度学习技术。在这些应用中,我们试图理解显微图像的生物结构。例如,我们可能对在给定图像中某种特定类型的细胞数量感兴趣,或者我们可能试图识别特定的细胞器。显微镜是生命科学中最基本的工具之一,显微镜技术的进步极大地推动了人类科学的发展。即使对于怀疑论者来说,眼见为实,能够直观地检查细胞等生物实体,有助于对生命的基本机制有更直观的理解。对细胞核和细胞骨架的生动可视化(如图 7-1)比教科书中干燥的讨论更有助于更深入地理解。 @@ -473,10 +473,10 @@ model.fit(train_dataset, nb_epoch=50, checkpoint_interval=100) 在下一章中,我们将探讨深度学习在医学中的应用。我们将重复本章中涵盖的许多视觉深度学习技能。 -^(1) 欧阳伟等人。“深度学习大大加速了超分辨率定位显微镜。”*自然生物技术*36(2018 年 4 月):460–468。[*https://doi.org/10.1038/nbt.4106*](https://doi.org/10.1038/nbt.4106)。 +¹ 欧阳伟等人。“深度学习大大加速了超分辨率定位显微镜。”*自然生物技术*36(2018 年 4 月):460–468。[*https://doi.org/10.1038/nbt.4106*](https://doi.org/10.1038/nbt.4106)。 -^(2) 陶鑫等人。“用于深度图像去模糊的尺度循环网络。”[*https://arxiv.org/pdf/1802.01770.pdf*](https://arxiv.org/pdf/1802.01770.pdf)。2018 年。 +² 陶鑫等人。“用于深度图像去模糊的尺度循环网络。”[*https://arxiv.org/pdf/1802.01770.pdf*](https://arxiv.org/pdf/1802.01770.pdf)。2018 年。 -^(3) 克里斯滕森,埃里克。“体外标记:预测未标记图像中的荧光标记。”[*https://github.com/google/in-silico-labeling*](https://github.com/google/in-silico-labeling)。 +³ 克里斯滕森,埃里克。“体外标记:预测未标记图像中的荧光标记。”[*https://github.com/google/in-silico-labeling*](https://github.com/google/in-silico-labeling)。 -^(4) 罗森菲尔德,阿米尔,理查德·泽梅尔和约翰·K·索索斯。“房间里的大象。”[*https://arxiv.org/abs/1808.03305*](https://arxiv.org/abs/1808.03305)。2018 年。 +⁴ 罗森菲尔德,阿米尔,理查德·泽梅尔和约翰·K·索索斯。“房间里的大象。”[*https://arxiv.org/abs/1808.03305*](https://arxiv.org/abs/1808.03305)。2018 年。 diff --git a/totrans/dl-lfsci_08.md b/totrans/dl-lfsci_08.md index 1132eba..c34f128 100644 --- a/totrans/dl-lfsci_08.md +++ b/totrans/dl-lfsci_08.md @@ -1,4 +1,4 @@ -# 第八章。医学的深度学习 +# 第八章:医学的深度学习 正如我们在上一章中看到的,从视觉数据集中提取有意义的信息对于分析显微镜图像是有用的。这种处理视觉数据的能力同样对医学应用非常有用。现代医学的许多领域需要医生对医学扫描进行批判性分析。深度学习工具有可能使这种分析变得更加简单和快速(但可能更少可解释)。 diff --git a/totrans/dl-lfsci_09.md b/totrans/dl-lfsci_09.md index 43bb59f..874ad0f 100644 --- a/totrans/dl-lfsci_09.md +++ b/totrans/dl-lfsci_09.md @@ -1,4 +1,4 @@ -# 第九章。生成模型 +# 第九章:生成模型 到目前为止,我们所研究的所有问题都涉及以某种方式将输入转换为输出。您创建一个模型,该模型接受输入并产生输出。然后,您对来自数据集的输入样本进行训练,优化以产生每个样本的最佳输出。 diff --git a/totrans/dl-lfsci_10.md b/totrans/dl-lfsci_10.md index 2e16ea6..508dba4 100644 --- a/totrans/dl-lfsci_10.md +++ b/totrans/dl-lfsci_10.md @@ -1,4 +1,4 @@ -# 第十章。深度模型的解释 +# 第十章:深度模型的解释 到目前为止,我们已经看到了许多训练深度模型解决问题的例子。在每种情况下,我们收集一些数据,构建一个模型,并训练它,直到它在我们的训练和测试数据上产生正确的输出。然后我们为自己鼓掌,宣布问题已经解决,然后继续下一个问题。毕竟,我们有一个为输入数据产生正确预测的模型。我们还能想要什么? @@ -252,6 +252,6 @@ y_pred, y_std = model.predict_uncertainty(test_dataset) 深度模型被认为很难解释,但已经开发出许多有用的技术可以帮助。通过使用这些技术,您可以开始理解模型的工作原理。这有助于您决定是否信任它,并让您识别可能失败的情况。它还可能为数据提供新的见解。例如,通过分析 TF 结合模型,我们发现了特定转录因子的结合基序。 -^(1) Simonyan, K., A. Vedaldi, and A. Zisserman. “Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps.” [Arxiv.org](https://arxiv.org/abs/1312.6034). 2014. +¹ Simonyan, K., A. Vedaldi, and A. Zisserman. “Deep Inside Convolutional Networks: Visualising Image Classification Models and Saliency Maps.” [Arxiv.org](https://arxiv.org/abs/1312.6034). 2014. -^(2) Kendall, A., and Y. Gal, “What Uncertainties Do We Need in Bayesian Deep Learning for Computer Vision?” [*https://arxiv.org/abs/1703.04977*](https://arxiv.org/abs/1703.04977). 2017. +² Kendall, A., and Y. Gal, “What Uncertainties Do We Need in Bayesian Deep Learning for Computer Vision?” [*https://arxiv.org/abs/1703.04977*](https://arxiv.org/abs/1703.04977). 2017. diff --git a/totrans/dl-lfsci_11.md b/totrans/dl-lfsci_11.md index 1713548..af17489 100644 --- a/totrans/dl-lfsci_11.md +++ b/totrans/dl-lfsci_11.md @@ -1,4 +1,4 @@ -# 第十一章。虚拟筛选工作流程示例 +# 第十一章:虚拟筛选工作流程示例 虚拟筛选可以提供一种高效且具有成本效益的方法,用于确定药物发现项目的起始点。我们可以使用计算方法来虚拟评估数百万甚至数千万分子,而不是进行昂贵的实验高通量筛选(HTS)。虚拟筛选方法通常分为两类,即基于结构的虚拟筛选和基于配体的虚拟筛选。 diff --git a/totrans/dl-lfsci_12.md b/totrans/dl-lfsci_12.md index 8ce35ff..5b1c53d 100644 --- a/totrans/dl-lfsci_12.md +++ b/totrans/dl-lfsci_12.md @@ -1,4 +1,4 @@ -# 第十二章。前景与展望 +# 第十二章:前景与展望 生命科学正在以惊人的速度发展,也许比任何其他科学领域都要快。深度学习也是如此:它是计算机科学中最令人兴奋、迅速发展的领域之一。这两者的结合有潜力以戏剧性、深远的方式改变世界。影响已经开始显现,但与未来几十年可能发生的事情相比,这些都微不足道。深度学习与生物学的结合可以带来巨大的好处,但也可能造成巨大的危害。 @@ -84,6 +84,6 @@ 无论您来自哪一方,我们希望这本书为您提供了必要的背景,以开始在将深度学习应用于生命科学中做出重要贡献。我们正处于历史上一个非凡的时刻,一系列新技术正在汇聚在一起改变世界。我们都有幸成为这个过程的一部分。 -^(1) Yamins, Daniel L. K. 等人。“性能优化的分层模型预测更高级视觉皮层中的神经反应。” 美国国家科学院院刊 111:8619–8624。[*https://doi.org/10.1073/pnas.1403112111*](https://doi.org/10.1073/pnas.1403112111)。2014 年。 +¹ Yamins, Daniel L. K. 等人。“性能优化的分层模型预测更高级视觉皮层中的神经反应。” 美国国家科学院院刊 111:8619–8624。[*https://doi.org/10.1073/pnas.1403112111*](https://doi.org/10.1073/pnas.1403112111)。2014 年。 -^(2) Kell, Alexander J. E. 等人。“一个任务优化的神经网络复制人类听觉行为,预测大脑反应,并揭示了皮层处理层次。” *神经元* 98:630–644。[*https://doi.org/10.1016/j.neuron.2018.03.044*](https://doi.org/10.1016/j.neuron.2018.03.044)。2018 年。 +² Kell, Alexander J. E. 等人。“一个任务优化的神经网络复制人类听觉行为,预测大脑反应,并揭示了皮层处理层次。” *神经元* 98:630–644。[*https://doi.org/10.1016/j.neuron.2018.03.044*](https://doi.org/10.1016/j.neuron.2018.03.044)。2018 年。 diff --git a/totrans/dl-scr_1.md b/totrans/dl-scr_1.md index ae55a40..c6d87f5 100644 --- a/totrans/dl-scr_1.md +++ b/totrans/dl-scr_1.md @@ -1,4 +1,4 @@ -# 第一章。基础 +# 第一章:基础 > 不要死记这些公式。如果你理解了概念,你可以发明自己的符号。 > @@ -112,7 +112,7 @@ a.sum(axis=0): [4 6] a.sum(axis=1): [3 7] ``` -最后,NumPy 的`ndarray`支持将 1D 数组添加到最后一个轴;对于具有`R`行和`C`列的 2D 数组`a`,这意味着我们可以添加长度为`C`的 1D 数组`b`,NumPy 将以直观的方式进行加法运算,将元素添加到`a`的每一行:^(1) +最后,NumPy 的`ndarray`支持将 1D 数组添加到最后一个轴;对于具有`R`行和`C`列的 2D 数组`a`,这意味着我们可以添加长度为`C`的 1D 数组`b`,NumPy 将以直观的方式进行加法运算,将元素添加到`a`的每一行:¹ ```py a = np.array([[1,2,3], @@ -639,17 +639,9 @@ def multiple_inputs_add_backward(x: ndarray, ## 图 -一种简单的描述这个操作的方式如[图 1-14 所示。 +一种简单的描述这个操作的方式如图 1-14 所示。 -![dlfs 0114](img/dlfs_0114.png) - -###### 图 1-14。矢量点积的图示 - -这个图示描述了一个接受两个输入的操作,这两个输入都可以是`ndarray`,并产生一个输出`ndarray`。 - -但这实际上是对许多操作进行了大量简写,这些操作发生在许多输入上。我们可以选择突出显示各个操作和输入,如图 1-15 和 1-16 所示。 - -![dlfs 0115](img/dlfs_0115.png) +![dlfs 0114###### 图 1-14。矢量点积的图示这个图示描述了一个接受两个输入的操作,这两个输入都可以是`ndarray`,并产生一个输出`ndarray`。但这实际上是对许多操作进行了大量简写,这些操作发生在许多输入上。我们可以选择突出显示各个操作和输入,如图 1-15 和 1-16 所示。![dlfs 0115](img/dlfs_0115.png) ###### 图 1-15。矩阵乘法的另一个图示 @@ -870,7 +862,7 @@ print(matrix_function_backward_1(X, W, sigmoid)) [[ 0.0852 -0.0557 -0.1121]] ``` -为了测试这个梯度是否正确,我们应该看到,在将*x*[3]增加 0.01 后,函数的*output*大约减少`0.01 × -0.1121 = -0.001121`;如果我们看到减少的数量多或少于这个量,或者出现增加,那么我们就知道我们对链式法则的推理是错误的。然而,当我们进行这个计算时,^(2),我们看到增加*x*[3]一点点确实会减少函数输出的值`0.01 × -0.1121`——这意味着我们计算的导数是正确的! +为了测试这个梯度是否正确,我们应该看到,在将*x*[3]增加 0.01 后,函数的*output*大约减少`0.01 × -0.1121 = -0.001121`;如果我们看到减少的数量多或少于这个量,或者出现增加,那么我们就知道我们对链式法则的推理是错误的。然而,当我们进行这个计算时,²,我们看到增加*x*[3]一点点确实会减少函数输出的值`0.01 × -0.1121`——这意味着我们计算的导数是正确的! 在本章结束时,我们将介绍一个建立在我们迄今为止所做的一切基础上,并直接应用于我们将在下一章中构建的模型的示例:一个计算图,从将一对二维矩阵相乘开始。 @@ -928,9 +920,9 @@ print(matrix_function_backward_1(X, W, sigmoid)) ## 图表 -从概念上讲,我们在这里所做的与我们在以前的例子中使用多个输入的计算图所做的类似;因此,[图 1-21 应该看起来很熟悉。 +从概念上讲,我们在这里所做的与我们在以前的例子中使用多个输入的计算图所做的类似;因此,图 1-21 应该看起来很熟悉。 -![dlfs 0121](img/dlfs_0121.png) +![dlfs 0121 ###### 图 1-21\. 具有复杂前向传递的函数的图表 @@ -1166,12 +1158,12 @@ dLdW = np.dot(dNdW, dSdN) 在本章之后,您应该有信心能够理解复杂的嵌套数学函数,并通过将它们概念化为一系列箱子,每个代表一个单一的组成函数,通过连接的字符串来推理出它们的工作原理。具体来说,您可以编写代码来计算这些函数的输出相对于任何输入的导数,即使涉及到包含二维`ndarray`的矩阵乘法,也能理解这些导数计算背后的数学原理。这些基础概念正是我们在下一章开始构建和训练神经网络所需要的,以及在之后的章节中从头开始构建和训练深度学习模型所需要的。继续前进! -^(1) 这将使我们能够轻松地在矩阵乘法中添加偏差。 +¹ 这将使我们能够轻松地在矩阵乘法中添加偏差。 -^(2) 在整个过程中,我将提供指向 GitHub 存储库的相关补充材料的链接,该存储库包含本书的代码,包括[本章](https://oreil.ly/2ZUwKOZ)的代码。 +² 在整个过程中,我将提供指向 GitHub 存储库的相关补充材料的链接,该存储库包含本书的代码,包括[本章](https://oreil.ly/2ZUwKOZ)的代码。 -^(3) 在接下来的部分中,我们将专注于计算`N`相对于`X`的梯度,但相对于`W`的梯度也可以通过类似的方式推理。 +³ 在接下来的部分中,我们将专注于计算`N`相对于`X`的梯度,但相对于`W`的梯度也可以通过类似的方式推理。 -^(4) 我们在“矩阵链规则”中进行了这样的操作。 +⁴ 我们在“矩阵链规则”中进行了这样的操作。 -^(5) 完整的函数可以在[书的网站](https://oreil.ly/deep-learning-github)找到;它只是前一页显示的`matrix function backward sum`函数的一个子集。 +⁵ 完整的函数可以在[书的网站](https://oreil.ly/deep-learning-github)找到;它只是前一页显示的`matrix function backward sum`函数的一个子集。 diff --git a/totrans/dl-scr_2.md b/totrans/dl-scr_2.md index 6aa7d1e..a57a9c8 100644 --- a/totrans/dl-scr_2.md +++ b/totrans/dl-scr_2.md @@ -1,4 +1,4 @@ -# 第二章 基础知识 +# 第二章:基础知识 在第一章中,我描述了理解深度学习的主要概念构建块:嵌套、连续、可微函数。我展示了如何将这些函数表示为计算图,图中的每个节点代表一个简单的函数。特别是,我演示了这种表示如何轻松地计算嵌套函数的输出相对于其输入的导数:我们只需对所有组成函数取导数,将这些导数在这些函数接收到的输入处进行评估,然后将所有结果相乘;这将导致嵌套函数的正确导数,因为链式法则。我用一些简单的例子说明了这实际上是有效的,这些函数以 NumPy 的`ndarray`作为输入,并产生`ndarray`作为输出。 @@ -18,7 +18,7 @@ # 监督学习概述 -在高层次上,机器学习可以被描述为构建能够揭示或“学习”数据中的*关系*的算法;监督学习可以被描述为机器学习的子集,专注于找到已经被测量的数据特征之间的关系。^(1) +在高层次上,机器学习可以被描述为构建能够揭示或“学习”数据中的*关系*的算法;监督学习可以被描述为机器学习的子集,专注于找到已经被测量的数据特征之间的关系。¹ 在本章中,我们将处理一个在现实世界中可能遇到的典型监督学习问题:找到房屋特征与房屋价值之间的关系。显然,诸如房间数量、平方英尺、或者与学校的距离等特征与一所房屋的居住或拥有价值之间存在某种关系。在高层次上,监督学习的目的是揭示这些关系,鉴于我们已经*测量了*这些特征。 @@ -104,25 +104,13 @@ -得到这个我们可以称之为*L*的数字是关键的:一旦我们有了它,我们可以使用我们在[第一章中看到的所有技术来计算*L*对*W*的每个元素的*梯度*。然后*我们可以使用这些导数来更新 W 的每个元素,使 L 减少*。重复这个过程多次,我们希望能够“训练”我们的模型;在本章中,我们将看到这在实践中确实可以起作用。为了清楚地看到如何计算这些梯度,我们将完成将线性回归表示为计算图的过程。 +得到这个我们可以称之为*L*的数字是关键的:一旦我们有了它,我们可以使用我们在第一章中看到的所有技术来计算*L*对*W*的每个元素的*梯度*。然后*我们可以使用这些导数来更新 W 的每个元素,使 L 减少*。重复这个过程多次,我们希望能够“训练”我们的模型;在本章中,我们将看到这在实践中确实可以起作用。为了清楚地看到如何计算这些梯度,我们将完成将线性回归表示为计算图的过程。 ## 线性回归:更有帮助的图表(和数学) 图 2-3 展示了如何用上一章的图表来表示线性回归。 -![线性回归简单](img/dlfs_0203.png) - -###### 图 2-3。线性回归方程表达为计算图—深蓝色字母是函数的数据输入,浅蓝色 W 表示权重 - -最后,为了强调我们仍然用这个图表示一个嵌套的数学函数,我们可以表示最终计算的损失值*L*为: - - - -## 加入截距 - -将模型表示为图表在概念上向我们展示了如何向模型添加截距。我们只需在最后添加一个额外步骤,涉及添加一个“偏差”,如图 2-4 所示。 - -![线性回归](img/dlfs_0204.png) +![线性回归简单###### 图 2-3。线性回归方程表达为计算图—深蓝色字母是函数的数据输入,浅蓝色 W 表示权重最后,为了强调我们仍然用这个图表示一个嵌套的数学函数,我们可以表示最终计算的损失值*L*为:## 加入截距将模型表示为图表在概念上向我们展示了如何向模型添加截距。我们只需在最后添加一个额外步骤,涉及添加一个“偏差”,如图 2-4 所示。![线性回归](img/dlfs_0204.png) ###### 图 2-4。线性回归的计算图,最后添加了一个偏置项 @@ -482,11 +470,11 @@ array([-1.0084, 0.7097, 0.2731, 0.7161, -2.2163, 2.3737, 0.7156, 用这些单独的步骤来表示事物是否让你对正在发生的事情有直观的理解?这个问题涉及到本书的一个关键主题:要完全理解神经网络,我们必须看到多种表示,每一种都突出神经网络工作的不同方面。图 2-10 中的表示并没有给出关于网络“结构”的直觉,但它清楚地指示了如何训练这样一个模型:在反向传播过程中,我们将计算每个组成函数的偏导数,在该函数的输入处评估,然后通过简单地将所有这些导数相乘来计算损失相对于每个权重的梯度——就像我们在第一章中看到的简单链式法则示例中一样。 -然而,还有另一种更标准的表示神经网络的方式:我们可以将我们原始特征中的每一个表示为圆圈。由于我们有 13 个特征,我们需要 13 个圆圈。然后我们需要 13 个圆圈来表示我们正在进行的“线性回归- Sigmoid”操作的 13 个输出。此外,每个这些圆圈都是我们原始 13 个特征的函数,所以我们需要将第一组 13 个圆圈中的所有圆圈连接到第二组中的所有圆圈。^(6) +然而,还有另一种更标准的表示神经网络的方式:我们可以将我们原始特征中的每一个表示为圆圈。由于我们有 13 个特征,我们需要 13 个圆圈。然后我们需要 13 个圆圈来表示我们正在进行的“线性回归- Sigmoid”操作的 13 个输出。此外,每个这些圆圈都是我们原始 13 个特征的函数,所以我们需要将第一组 13 个圆圈中的所有圆圈连接到第二组中的所有圆圈。⁶ 最后,所有这些 13 个输出都被用来做一个最终的预测,所以我们会再画一个圆圈来代表最终的预测,以及 13 条线显示这些“中间输出”与最终预测的“连接”。 -图 2-11 显示了最终的图表。^(7) +图 2-11 显示了最终的图表。⁷ ![神经网络表示 2](img/dlfs_0211.png) diff --git a/totrans/dl-scr_3.md b/totrans/dl-scr_3.md index 81397a3..b95da8a 100644 --- a/totrans/dl-scr_3.md +++ b/totrans/dl-scr_3.md @@ -1,4 +1,4 @@ -# 第三章。从头开始的深度学习 +# 第三章:从头开始的深度学习 您可能没有意识到,但现在您已经具备回答本书开头提出的关于深度学习模型的关键问题的所有数学和概念基础:您了解*神经网络*是如何工作的——涉及矩阵乘法、损失和相对于该损失的偏导数的计算,以及这些计算为什么有效(即微积分中的链式法则)。通过从第一原理构建神经网络,将它们表示为一系列“构建块”,我们实现了这种理解。在本章中,您将学习将这些构建块本身表示为抽象的 Python 类,然后使用这些类构建深度学习模型;到本章结束时,您确实将完成“从头开始的深度学习”! @@ -178,7 +178,7 @@ class ParamOperation(Operation): 最后,让我们将我们迄今所见的内容与您可能之前听过的概念之间建立最后一个连接:每个层可以说具有等于*表示该层输出中每个观察的向量的维度*的*神经元*数量。因此,前一个示例中的神经网络可以被认为在输入层有 13 个神经元,然后在隐藏层中有 13 个神经元(再次),在输出层中有一个神经元。 -大脑中的神经元具有这样的特性,它们可以从许多其他神经元接收输入,只有当它们累积接收到的信号达到一定的“激活能量”时,它们才会“发射”并向前发送信号。神经网络的神经元具有类似的属性:它们确实根据其输入向前发送信号,但是输入仅通过非线性函数转换为输出。因此,这个非线性函数被称为*激活函数*,从中出来的值被称为该层的*激活*。^(1) +大脑中的神经元具有这样的特性,它们可以从许多其他神经元接收输入,只有当它们累积接收到的信号达到一定的“激活能量”时,它们才会“发射”并向前发送信号。神经网络的神经元具有类似的属性:它们确实根据其输入向前发送信号,但是输入仅通过非线性函数转换为输出。因此,这个非线性函数被称为*激活函数*,从中出来的值被称为该层的*激活*。¹ 现在我们已经定义了层,我们可以陈述更传统的深度学习定义:*深度学习模型是具有多个隐藏层的神经网络。* @@ -418,7 +418,7 @@ class Layer(object): 我们称我们一直在处理的`Operation`为`WeightMultiply`,`BiasAdd`等等。到目前为止我们一直在使用的层应该叫什么?`LinearNonLinear`层? -这一层的一个定义特征是*每个输出神经元都是所有输入神经元的函数*。这就是矩阵乘法真正做的事情:如果矩阵是行乘以列,那么乘法本身计算的是个新特征,每个特征都是*所有*个输入特征的加权线性组合。^(2) 因此,这些层通常被称为*全连接*层;最近,在流行的`Keras`库中,它们也经常被称为`Dense`层,这是一个更简洁的术语,传达了相同的概念。 +这一层的一个定义特征是*每个输出神经元都是所有输入神经元的函数*。这就是矩阵乘法真正做的事情:如果矩阵是行乘以列,那么乘法本身计算的是个新特征,每个特征都是*所有*个输入特征的加权线性组合。² 因此,这些层通常被称为*全连接*层;最近,在流行的`Keras`库中,它们也经常被称为`Dense`层,这是一个更简洁的术语,传达了相同的概念。 既然我们知道该如何称呼它以及为什么,让我们根据我们已经定义的操作来定义`Dense`层 - 正如您将看到的,由于我们如何定义了我们的`Layer`基类,我们所需要做的就是在`_setup_layer`函数中将前一节中定义的`Operation`作为列表放入其中。 @@ -712,7 +712,7 @@ class NeuralNetwork(object): yield from layer.param_grads ``` -有了这个`NeuralNetwork`类,我们可以以更模块化、灵活的方式实现上一章中的模型,并定义其他模型来表示输入和输出之间的复杂非线性关系。例如,这里是如何轻松实例化我们在上一章中介绍的两个模型——线性回归和神经网络:^(3) +有了这个`NeuralNetwork`类,我们可以以更模块化、灵活的方式实现上一章中的模型,并定义其他模型来表示输入和输出之间的复杂非线性关系。例如,这里是如何轻松实例化我们在上一章中介绍的两个模型——线性回归和神经网络:³ ```py linear_regression = NeuralNetwork( @@ -1005,12 +1005,12 @@ Root mean squared error 3.82 # 结论和下一步 -在下一章中,我将介绍几种技巧,这些技巧对于让我们的模型在面对比这个简单问题更具挑战性的问题时能够正确训练是至关重要的^(4)——特别是定义其他`Loss`和`Optimizer`。我还将介绍调整学习率和在整个训练过程中修改学习率的其他技巧,并展示如何将这些技巧融入`Optimizer`和`Trainer`类中。最后,我们将看到 Dropout,这是一种新型的`Operation`,已被证明对增加深度学习模型的训练稳定性至关重要。继续前进! +在下一章中,我将介绍几种技巧,这些技巧对于让我们的模型在面对比这个简单问题更具挑战性的问题时能够正确训练是至关重要的⁴——特别是定义其他`Loss`和`Optimizer`。我还将介绍调整学习率和在整个训练过程中修改学习率的其他技巧,并展示如何将这些技巧融入`Optimizer`和`Trainer`类中。最后,我们将看到 Dropout,这是一种新型的`Operation`,已被证明对增加深度学习模型的训练稳定性至关重要。继续前进! -^(1) 在所有激活函数中,`sigmoid`函数最接近大脑中神经元的实际激活,它将输入映射到 0 到 1 之间,但一般来说,激活函数可以是任何单调的非线性函数。 +¹ 在所有激活函数中,`sigmoid`函数最接近大脑中神经元的实际激活,它将输入映射到 0 到 1 之间,但一般来说,激活函数可以是任何单调的非线性函数。 -^(2) 正如我们将在第五章中看到的,这并不适用于所有层:例如,在*卷积*层中,每个输出特征是输入特征的*一个小子集*的组合。 +² 正如我们将在第五章中看到的,这并不适用于所有层:例如,在*卷积*层中,每个输出特征是输入特征的*一个小子集*的组合。 -^(3) 学习率 0.01 并不特殊;我们只是在写前一章时在实验过程中发现它是最佳的。 +³ 学习率 0.01 并不特殊;我们只是在写前一章时在实验过程中发现它是最佳的。 -^(4) 即使在这个简单的问题上,稍微改变超参数可能会导致深度学习模型无法击败两层神经网络。克隆[GitHub 存储库](https://oreil.ly/deep-learning-github)并尝试一下吧! +⁴ 即使在这个简单的问题上,稍微改变超参数可能会导致深度学习模型无法击败两层神经网络。克隆[GitHub 存储库](https://oreil.ly/deep-learning-github)并尝试一下吧! diff --git a/totrans/dl-scr_4.md b/totrans/dl-scr_4.md index 9d96f68..fcb2de5 100644 --- a/totrans/dl-scr_4.md +++ b/totrans/dl-scr_4.md @@ -1,4 +1,4 @@ -# 第四章. 扩展 +# 第四章:扩展 在上一章中,经过两章的推理,我们从第一原则出发,探讨了深度学习模型是什么以及它们应该如何工作,最终构建了我们的第一个深度学习模型,并训练它解决了相对简单的问题,即根据房屋的数值特征预测房价。然而,在大多数实际问题中,成功训练深度学习模型并不那么容易:虽然这些模型可以理论上找到任何可以被定义为监督学习问题的问题的最优解,但在实践中它们经常失败,而且确实很少有理论保证表明给定的模型架构实际上会找到一个好的解决方案。尽管如此,还是有一些被充分理解的技术可以使神经网络训练更有可能成功;这将是本章的重点。 @@ -94,13 +94,13 @@ array([0.84, 0.11, 0.04]) -现在我们可以更容易地将其分解。如果*y*=0,那么在区间 0 到 1 上的这个损失值与均方误差损失值的图像如[图 4-4 所示。 +现在我们可以更容易地将其分解。如果*y*=0,那么在区间 0 到 1 上的这个损失值与均方误差损失值的图像如图 4-4 所示。 -![dlfs 0404](img/dlfs_0404.png) +![dlfs 0404 ###### 图 4-4。当时的交叉熵损失与 MSE -不仅在这个区间内交叉熵损失的惩罚要高得多,^(2)而且它们的增长速度更快;事实上,当我们的预测与目标之间的差距接近 1 时,交叉熵损失的值会趋近于无穷!当*y* = 1 时的图形类似,只是“翻转”了(即,它围绕*x* = 0.5 的线旋转了 180 度)。 +不仅在这个区间内交叉熵损失的惩罚要高得多,²而且它们的增长速度更快;事实上,当我们的预测与目标之间的差距接近 1 时,交叉熵损失的值会趋近于无穷!当*y* = 1 时的图形类似,只是“翻转”了(即,它围绕*x* = 0.5 的线旋转了 180 度)。 因此,对于我们知道输出将在 0 和 1 之间的问题,交叉熵损失产生的梯度比均方误差更陡。真正的魔力发生在我们将这种损失与 softmax 函数结合时——首先将神经网络输出通过 softmax 函数进行归一化,使值相加为 1,然后将得到的概率输入到交叉熵损失函数中。 @@ -127,7 +127,7 @@ loss_grad = softmax_x - y ### 代码 -回顾[第三章,任何`Loss`类都应该接收两个 2D 数组,一个是网络的预测,另一个是目标。每个数组中的行数是批量大小,列数是分类问题中的类别数`n`;每个数组中的一行代表数据集中的一个观察值,行中的`n`个值代表神经网络对该观察值属于每个`n`类的概率的最佳猜测。因此,我们将需要对`prediction`数组中的*每一行*应用`softmax`。这会导致一个潜在的问题:接下来我们将把结果数值输入`log`函数来计算损失。这应该让你担心,因为*log*(*x*)当*x*趋近于 0 时会趋向于负无穷,同样地,1 - *x*当*x*趋近于 1 时会趋向于无穷。为了防止可能导致数值不稳定的极大损失值,我们将裁剪 softmax 函数的输出,使其不小于 10^(–7)且不大于 10⁷。 +回顾第三章,任何`Loss`类都应该接收两个 2D 数组,一个是网络的预测,另一个是目标。每个数组中的行数是批量大小,列数是分类问题中的类别数`n`;每个数组中的一行代表数据集中的一个观察值,行中的`n`个值代表神经网络对该观察值属于每个`n`类的概率的最佳猜测。因此,我们将需要对`prediction`数组中的*每一行*应用`softmax`。这会导致一个潜在的问题:接下来我们将把结果数值输入`log`函数来计算损失。这应该让你担心,因为*log*(*x*)当*x*趋近于 0 时会趋向于负无穷,同样地,1 - *x*当*x*趋近于 1 时会趋向于无穷。为了防止可能导致数值不稳定的极大损失值,我们将裁剪 softmax 函数的输出,使其不小于 10^(–7)且不大于 10⁷。 最后,我们可以把所有东西放在一起! @@ -169,7 +169,7 @@ softmax_cross_entropy_loss = ( + 对模型产生了“正则化”效果,将中间特征强制限制在一个有限范围内,具体在 0 和 1 之间 -然而,Sigmoid 也有一个缺点,类似于均方误差损失的缺点:*在反向传播过程中产生相对平坦的梯度*。在反向传播过程中传递给 Sigmoid 函数(或任何函数)的梯度表示函数的*输出*最终对损失的影响有多大;因为 Sigmoid 函数的最大斜率为 0.25,这些梯度在向后传递到模型中的前一个操作时将*最多*被除以 4。更糟糕的是,当 Sigmoid 函数的输入小于-2 或大于 2 时,这些输入接收到的梯度几乎为 0,因为在*x* = -2 或*x* = 2 时,*Sigmoid*(*x*)几乎是平的。这意味着影响这些输入的任何参数将接收到较小的梯度,结果我们的网络可能学习速度较慢。^(3)此外,如果在神经网络的连续层中使用多个 Sigmoid 激活函数,这个问题将会加剧,进一步减少神经网络中较早的权重可能接收到的梯度。 +然而,Sigmoid 也有一个缺点,类似于均方误差损失的缺点:*在反向传播过程中产生相对平坦的梯度*。在反向传播过程中传递给 Sigmoid 函数(或任何函数)的梯度表示函数的*输出*最终对损失的影响有多大;因为 Sigmoid 函数的最大斜率为 0.25,这些梯度在向后传递到模型中的前一个操作时将*最多*被除以 4。更糟糕的是,当 Sigmoid 函数的输入小于-2 或大于 2 时,这些输入接收到的梯度几乎为 0,因为在*x* = -2 或*x* = 2 时,*Sigmoid*(*x*)几乎是平的。这意味着影响这些输入的任何参数将接收到较小的梯度,结果我们的网络可能学习速度较慢。³此外,如果在神经网络的连续层中使用多个 Sigmoid 激活函数,这个问题将会加剧,进一步减少神经网络中较早的权重可能接收到的梯度。 “另一个极端”的激活函数会是什么样子? @@ -177,19 +177,7 @@ softmax_cross_entropy_loss = ( 修正线性单元(ReLU)激活是一种常用的激活函数,具有与 Sigmoid 相反的优缺点。如果*x*小于 0,则简单地定义 ReLU 为 0,否则为*x*。这在图 4-5 中有所展示。 -![dlfs 0405](img/dlfs_0405.png) - -###### 图 4-5。ReLU 激活 - -这是一个“有效”的激活函数,因为它是单调的和非线性的。它产生比 Sigmoid 大得多的梯度——如果函数的输入大于 0,则为 1,否则为 0,平均为 0.5——而 Sigmoid 能产生的*最大*梯度为 0.25。ReLU 激活在深度神经网络架构中非常受欢迎,因为它的缺点(在小于或大于 0 的值之间绘制了一个尖锐的、有些任意的区别)可以通过其他技术来解决,包括本章将介绍的一些技术,而它的好处(产生大梯度)对于训练深度神经网络架构中的权重至关重要。 - -然而,有一种激活函数介于这两者之间,我们将在本章的演示中使用:Tanh。 - -### 一个中庸之道:Tanh - -Tanh 函数的形状与 Sigmoid 函数类似,但将输入映射到-1 到 1 之间的值。图 4-6 展示了这个函数。 - -![dlfs 0406](img/dlfs_0406.png) +![dlfs 0405###### 图 4-5。ReLU 激活这是一个“有效”的激活函数,因为它是单调的和非线性的。它产生比 Sigmoid 大得多的梯度——如果函数的输入大于 0,则为 1,否则为 0,平均为 0.5——而 Sigmoid 能产生的*最大*梯度为 0.25。ReLU 激活在深度神经网络架构中非常受欢迎,因为它的缺点(在小于或大于 0 的值之间绘制了一个尖锐的、有些任意的区别)可以通过其他技术来解决,包括本章将介绍的一些技术,而它的好处(产生大梯度)对于训练深度神经网络架构中的权重至关重要。然而,有一种激活函数介于这两者之间,我们将在本章的演示中使用:Tanh。### 一个中庸之道:TanhTanh 函数的形状与 Sigmoid 函数类似,但将输入映射到-1 到 1 之间的值。图 4-6 展示了这个函数。![dlfs 0406](img/dlfs_0406.png) ###### 图 4-6。Tanh 激活 @@ -401,7 +389,7 @@ Loss increased after epoch 50, final loss was 0.338, using the model from epoch The model validation accuracy is: 95.51% ``` -您可以看到损失明显降低,准确率明显提高,这只是将动量添加到我们的参数更新规则中的结果!^(6) +您可以看到损失明显降低,准确率明显提高,这只是将动量添加到我们的参数更新规则中的结果!⁶ 当然,修改每次迭代中的参数更新的另一种方法是修改学习率;虽然我们可以手动更改初始学习率,但我们也可以使用某些规则在训练过程中自动衰减学习率。接下来将介绍最常见的这种规则。 @@ -557,7 +545,7 @@ The model validation accuracy is: 96.06% -作为这些之间的折衷,最常被称为*Glorot 初始化*^(7)涉及将每一层中权重的方差初始化为: +作为这些之间的折衷,最常被称为*Glorot 初始化*⁷涉及将每一层中权重的方差初始化为: @@ -777,18 +765,18 @@ The model validation accuracy is: 96.52% 接下来,我们将讨论针对特定领域专门设计的高级架构,从卷积神经网络开始,这些网络专门用于理解图像数据。继续! -^(1) 此外,正如我们在第三章中看到的,我们将这些梯度乘以学习率,以便更精细地控制权重的变化。 +¹ 此外,正如我们在第三章中看到的,我们将这些梯度乘以学习率,以便更精细地控制权重的变化。 -^(2) 我们可以更具体一些:在区间 0 到 1 上, 的平均值是 1,而在相同区间上,*x*²的平均值只是。 +² 我们可以更具体一些:在区间 0 到 1 上, 的平均值是 1,而在相同区间上,*x*²的平均值只是。 -^(3) 要直观地理解为什么会发生这种情况:想象一下一个权重*w*正在为一个特征*f*做出贡献(使得),在我们的神经网络的前向传播过程中,对于某个观察值,*f* = -10。因为在*x* = -10 时,*sigmoid*(*x*)非常平坦,改变*w*的值几乎不会对模型预测产生影响,因此也不会对损失产生影响。 +³ 要直观地理解为什么会发生这种情况:想象一下一个权重*w*正在为一个特征*f*做出贡献(使得),在我们的神经网络的前向传播过程中,对于某个观察值,*f* = -10。因为在*x* = -10 时,*sigmoid*(*x*)非常平坦,改变*w*的值几乎不会对模型预测产生影响,因此也不会对损失产生影响。 -^(4) 例如,TensorFlow 的 MNIST 分类教程使用`softmax_cross_entropy_with_logits`函数,而 PyTorch 的`nn.CrossEntropyLoss`实际上在其中计算 softmax 函数。 +⁴ 例如,TensorFlow 的 MNIST 分类教程使用`softmax_cross_entropy_with_logits`函数,而 PyTorch 的`nn.CrossEntropyLoss`实际上在其中计算 softmax 函数。 -^(5) 您可能会认为 softmax 交叉熵损失在这里获得了“不公平的优势”,因为 softmax 函数对其接收到的值进行了归一化,使它们相加为 1,而均方误差损失只是得到了通过`sigmoid`函数传递的 10 个输入,并没有被归一化为 1。然而,在[书的网站](https://oreil.ly/2H7rJvf)上,我展示了即使将输入归一化为均方误差损失,使其对每个观察值求和为 1,均方误差仍然比 softmax 交叉熵损失表现更差。 +⁵ 您可能会认为 softmax 交叉熵损失在这里获得了“不公平的优势”,因为 softmax 函数对其接收到的值进行了归一化,使它们相加为 1,而均方误差损失只是得到了通过`sigmoid`函数传递的 10 个输入,并没有被归一化为 1。然而,在[书的网站](https://oreil.ly/2H7rJvf)上,我展示了即使将输入归一化为均方误差损失,使其对每个观察值求和为 1,均方误差仍然比 softmax 交叉熵损失表现更差。 -^(6) 此外,动量只是我们可以利用当前数据批次之外的梯度信息来更新参数的一种方式;我们在附录 A 中简要介绍了其他更新规则,您可以在[书的 GitHub 存储库](https://oreil.ly/2MhdQ1B)中看到这些更新规则的实现。 +⁶ 此外,动量只是我们可以利用当前数据批次之外的梯度信息来更新参数的一种方式;我们在附录 A 中简要介绍了其他更新规则,您可以在[书的 GitHub 存储库](https://oreil.ly/2MhdQ1B)中看到这些更新规则的实现。 -^(7) 这样被称为是因为它是由 Glorot 和 Bengio 在 2010 年的一篇论文中提出的:[“理解训练深度前馈神经网络的困难”](http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf)。 +⁷ 这样被称为是因为它是由 Glorot 和 Bengio 在 2010 年的一篇论文中提出的:[“理解训练深度前馈神经网络的困难”](http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf)。 -^(8) 欲了解更多信息,请参阅 G. E. Hinton 等人的[“通过防止特征检测器的共适应来改进神经网络”](https://arxiv.org/pdf/1207.0580.pdf)。 +⁸ 欲了解更多信息,请参阅 G. E. Hinton 等人的[“通过防止特征检测器的共适应来改进神经网络”](https://arxiv.org/pdf/1207.0580.pdf)。 diff --git a/totrans/dl-scr_5.md b/totrans/dl-scr_5.md index a856d7d..f964390 100644 --- a/totrans/dl-scr_5.md +++ b/totrans/dl-scr_5.md @@ -1,4 +1,4 @@ -# 第五章。卷积神经网络 +# 第五章:卷积神经网络 在本章中,我们将介绍卷积神经网络(CNNs)。CNNs 是用于预测的标准神经网络架构,当输入观察数据是图像时,这在各种神经网络应用中都是适用的情况。到目前为止,在本书中,我们专注于全连接神经网络,我们将其实现为一系列`Dense`层。因此,我们将通过回顾这些网络的一些关键元素来开始本章,并用此来激发我们为什么可能想要为图像使用不同的架构。然后,我们将以与本书中介绍其他概念类似的方式介绍 CNNs:我们将首先讨论它们在高层次上的工作原理,然后转向在低层次上讨论它们,最后通过编写从头开始的卷积操作的代码详细展示它们的工作方式。到本章结束时,您将对 CNNs 的工作原理有足够深入的理解,能够使用它们来解决问题,并自行学习高级 CNN 变体,如 ResNets、DenseNets 和 Octave Convolutions。 @@ -52,9 +52,9 @@ ## 多通道卷积操作 -回顾一下:卷积神经网络与常规神经网络的不同之处在于它们创建了数量级更多的特征,并且每个特征仅是来自输入图像的一个小块的函数。现在我们可以更具体:从*n*个输入像素开始,刚刚描述的卷积操作将为输入图像中的每个位置创建*n*个输出特征。在神经网络的卷积`Layer`中实际发生的事情更进一步:在那里,我们将创建*f*组*n*个特征,*每个*都有一个对应的(最初是随机的)权重集,定义了在输入图像的每个位置检测到的视觉模式,这将在特征图中捕获。这*f*个特征图将通过*f*个卷积操作创建。这在[图 5-3 中有所体现。 +回顾一下:卷积神经网络与常规神经网络的不同之处在于它们创建了数量级更多的特征,并且每个特征仅是来自输入图像的一个小块的函数。现在我们可以更具体:从*n*个输入像素开始,刚刚描述的卷积操作将为输入图像中的每个位置创建*n*个输出特征。在神经网络的卷积`Layer`中实际发生的事情更进一步:在那里,我们将创建*f*组*n*个特征,*每个*都有一个对应的(最初是随机的)权重集,定义了在输入图像的每个位置检测到的视觉模式,这将在特征图中捕获。这*f*个特征图将通过*f*个卷积操作创建。这在图 5-3 中有所体现。 -![神经网络图示](img/dlfs_0503.png) +![神经网络图示 ###### 图 5-3。比以前更具体,对于具有 n 个像素的输入图像,我们定义一个输出,其中包含 f 个特征图,每个特征图的大小与原始图像大致相同,总共有 n×f 个输出神经元用于图像,每个神经元仅是原始图像的一个小块的函数 @@ -132,7 +132,7 @@ 要找到答案,回想一下,每个神经元只是表示图像中是否存在特定视觉特征组合(如果这是一个深度卷积神经网络,则可能是特征的特征或特征的特征的特征)在图像的给定位置。这与如果我们将全连接神经网络应用于此图像时学习的特征没有区别:第一个全连接层将表示单个像素的特征,第二个将表示这些特征的特征,依此类推。在全连接架构中,我们只需将网络学习的每个“特征的特征”视为单个神经元,用作预测图像属于哪个类别的输入。 -事实证明,我们可以用卷积神经网络做同样的事情——我们将*m*个特征图视为个神经元,并使用`Flatten`操作将这三个维度(通道数、图像高度和图像宽度)压缩成一个一维向量,然后我们可以使用简单的矩阵乘法进行最终预测。这样做的直觉是,每个单独的神经元*基本上代表与全连接层中的神经元相同的“类型”*——具体来说,表示在图像的给定位置是否存在给定的视觉特征(或特征组合)——因此我们可以在神经网络的最后一层中以相同的方式处理它们。^(4) +事实证明,我们可以用卷积神经网络做同样的事情——我们将*m*个特征图视为个神经元,并使用`Flatten`操作将这三个维度(通道数、图像高度和图像宽度)压缩成一个一维向量,然后我们可以使用简单的矩阵乘法进行最终预测。这样做的直觉是,每个单独的神经元*基本上代表与全连接层中的神经元相同的“类型”*——具体来说,表示在图像的给定位置是否存在给定的视觉特征(或特征组合)——因此我们可以在神经网络的最后一层中以相同的方式处理它们。⁴ 我们将在本章后面看到如何实现`Flatten`层。但在我们深入实现之前,让我们讨论另一种在许多 CNN 架构中很重要的层,尽管本书不会详细介绍它。 @@ -152,7 +152,7 @@ > 神经网络的输入是一个 19 × 19 × 17 的图像堆栈,包括 17 个二进制特征平面。8 个特征平面 *X*[t] 包含二进制值,指示当前玩家的棋子的存在(如果时间步 t 的交叉点 *i* 包含玩家颜色的棋子,则为 ;如果交叉点为空,包含对手的棋子,或者 t < 0,则为 0)。另外 8 个特征平面 *Y*[t] 表示对手棋子的相应特征。最后一个特征平面 C 表示要下的颜色,其常量值为 1(黑色下棋)或 0(白色下棋)。这些平面被连接在一起以给出输入特征 *s*[t] = *X*[t], *Y*[t], *X*[t – 1], *Y*[t – 1], …, *X*[t – 7], *Y*[t – 7], *C*。历史特征 *X*[t], *Y*[t] 是必要的,因为围棋不仅仅通过当前的棋子就能完全观察到,重复是被禁止的;同样,颜色特征 C 是必要的,因为贴目是不可观察的。 -换句话说,他们基本上将棋盘表示为一个 19 × 19 像素的“图像”,有 17 个通道!他们使用其中的 16 个通道来编码每个玩家之前 8 步所发生的情况;这是必要的,以便他们可以编码防止重复之前步骤的规则。第 17 个通道实际上是一个 19 × 19 的网格,要么全是 1,要么全是 0,取决于轮到谁走。^(7) CNN 和它们的多通道卷积操作主要应用于图像,但更一般的是,用多个“通道”表示沿某些空间维度排列的数据的想法即使超出图像也是适用的。 +换句话说,他们基本上将棋盘表示为一个 19 × 19 像素的“图像”,有 17 个通道!他们使用其中的 16 个通道来编码每个玩家之前 8 步所发生的情况;这是必要的,以便他们可以编码防止重复之前步骤的规则。第 17 个通道实际上是一个 19 × 19 的网格,要么全是 1,要么全是 0,取决于轮到谁走。⁷ CNN 和它们的多通道卷积操作主要应用于图像,但更一般的是,用多个“通道”表示沿某些空间维度排列的数据的想法即使超出图像也是适用的。 然而,为了真正理解多通道卷积操作,您必须从头开始实现它,接下来的几节将详细描述这个过程。 @@ -885,14 +885,14 @@ Model validation accuracy after 1 epoch is 90.50% 这些也被称为*内核*。 -^(4) 这就是为什么重要理解卷积操作的输出,既可以看作是创建一定数量的滤波器映射(比如说,),也可以看作是创建 个独立的神经元。正如在神经网络中一样,同时在脑海中保持多个层次的解释,并看到它们之间的联系是关键。 +⁴ 这就是为什么重要理解卷积操作的输出,既可以看作是创建一定数量的滤波器映射(比如说,),也可以看作是创建 个独立的神经元。正如在神经网络中一样,同时在脑海中保持多个层次的解释,并看到它们之间的联系是关键。 -^(5) 请参阅[原始 ResNet 论文](http://tiny.cc/dlfs_resnet_paper),作者是 Kaiming He 等人,题目是“用于图像识别的深度残差学习”。 +⁵ 请参阅[原始 ResNet 论文](http://tiny.cc/dlfs_resnet_paper),作者是 Kaiming He 等人,题目是“用于图像识别的深度残差学习”。 -^(6) DeepMind(David Silver 等人),[*无需人类知识掌握围棋*](https://oreil.ly/wUpMW),2017 年。 +⁶ DeepMind(David Silver 等人),[*无需人类知识掌握围棋*](https://oreil.ly/wUpMW),2017 年。 -^(7) 一年后,DeepMind 发布了使用类似表示法的结果,只是这一次,为了编码更复杂的国际象棋规则,输入有 119 个通道!参见 DeepMind(David Silver 等人),[“一个通用的强化学习算法,通过自我对弈掌握国际象棋、将棋和围棋”](https://oreil.ly/E6ydw)。 +⁷ 一年后,DeepMind 发布了使用类似表示法的结果,只是这一次,为了编码更复杂的国际象棋规则,输入有 119 个通道!参见 DeepMind(David Silver 等人),[“一个通用的强化学习算法,通过自我对弈掌握国际象棋、将棋和围棋”](https://oreil.ly/E6ydw)。 -^(8) 请在[书籍的网站](https://oreil.ly/2H99xkJ)上查看这些内容的完整实现。 +⁸ 请在[书籍的网站](https://oreil.ly/2H99xkJ)上查看这些内容的完整实现。 -^(9) 完整的代码可以在[书籍的 GitHub 仓库](https://oreil.ly/2H99xkJ)的本章节中找到。 +⁹ 完整的代码可以在[书籍的 GitHub 仓库](https://oreil.ly/2H99xkJ)的本章节中找到。 diff --git a/totrans/dl-scr_6.md b/totrans/dl-scr_6.md index fa1f1c7..f917fc5 100644 --- a/totrans/dl-scr_6.md +++ b/totrans/dl-scr_6.md @@ -1,4 +1,4 @@ -# 第六章。循环神经网络 +# 第六章:循环神经网络 在这一章中,我们将介绍循环神经网络(RNNs),这是一类用于处理数据序列的神经网络架构。到目前为止,我们看到的神经网络将它们接收到的每一批数据视为一组独立的观察结果;在我们在第四章中看到的全连接神经网络或第五章中看到的卷积神经网络中,没有某些 MNIST 数字在其他数字之前或之后到达的概念。然而,许多种类的数据在本质上是有序的,无论是时间序列数据,在工业或金融背景下可能会处理的数据,还是语言数据,其中字符、单词、句子等是有序的。循环神经网络旨在学习如何接收*这些数据序列*并返回一个正确的预测作为输出,无论这个正确的预测是关于第二天金融资产价格的还是关于句子中下一个单词的。 @@ -778,7 +778,7 @@ def forward(self, ## LSTMNodes -长短期记忆单元,或 LSTMs,是香草 RNN 单元最受欢迎的变体。部分原因是它们是在深度学习的早期阶段,即 1997 年发明的^(6),而对于 LSTM 替代方案如 GRUs 的调查在过去几年中才加速进行(例如,GRUs 是在 2014 年提出的)。 +长短期记忆单元,或 LSTMs,是香草 RNN 单元最受欢迎的变体。部分原因是它们是在深度学习的早期阶段,即 1997 年发明的⁶,而对于 LSTM 替代方案如 GRUs 的调查在过去几年中才加速进行(例如,GRUs 是在 2014 年提出的)。 与 GRUs 一样,LSTMs 的动机是为了让 RNN 能够在接收新输入时“重置”或“忘记”其隐藏状态。在 GRUs 中,通过将输入和隐藏状态通过一系列门传递,以及使用这些门计算“建议”的新隐藏状态—`self.h_bar`,使用门`self.r`计算—然后使用建议的新隐藏状态和旧隐藏状态的加权平均值计算最终隐藏状态,由更新门控制: @@ -786,7 +786,7 @@ def forward(self, self.H_out = self.u * self.H_in + (1 - self.u) * self.h_bar ``` -相比之下,LSTMs*使用一个单独的“状态”向量,“单元状态”,来确定是否“忘记”隐藏状态中的内容*。然后,它们使用另外两个门来控制它们应该重置或更新*单元状态*中的内容的程度,以及第四个门来确定基于最终单元状态的情况下隐藏状态的更新程度。^(7) +相比之下,LSTMs*使用一个单独的“状态”向量,“单元状态”,来确定是否“忘记”隐藏状态中的内容*。然后,它们使用另外两个门来控制它们应该重置或更新*单元状态*中的内容的程度,以及第四个门来确定基于最终单元状态的情况下隐藏状态的更新程度。⁷ ### LSTMNodes: Diagram @@ -917,16 +917,16 @@ LSTMLayer(hidden_size=256, output_size=62)] 希望这个多方面的主题现在不再是一个黑匣子。在第七章中,我将通过转向深度学习的实践方面来结束本书,展示如何使用 PyTorch 框架实现我们迄今所讨论的一切,PyTorch 是一个高性能、基于自动微分的框架,用于构建和训练深度学习模型。继续前进! -^(1) 我们碰巧发现将观察结果排列在行上,将特征排列在列上很方便,但我们不一定要以这种方式排列数据。然而,数据必须是二维的。 +¹ 我们碰巧发现将观察结果排列在行上,将特征排列在列上很方便,但我们不一定要以这种方式排列数据。然而,数据必须是二维的。 -^(2) 或者至少是这本书的这个版本。 +² 或者至少是这本书的这个版本。 -^(3) 我想提到作者 Daniel Sabinasz 在他的博客[*deep ideas*](http://www.deepideas.net)上分享的另一种解决这个问题的方法:他将操作表示为一个图,然后使用广度优先搜索来计算反向传播中的梯度,以正确的顺序构建一个模仿 TensorFlow 的框架。他关于如何做到这一点的博客文章非常清晰和结构良好。 +³ 我想提到作者 Daniel Sabinasz 在他的博客[*deep ideas*](http://www.deepideas.net)上分享的另一种解决这个问题的方法:他将操作表示为一个图,然后使用广度优先搜索来计算反向传播中的梯度,以正确的顺序构建一个模仿 TensorFlow 的框架。他关于如何做到这一点的博客文章非常清晰和结构良好。 -^(4) 深入了解如何实现自动微分,请参阅 Andrew Trask 的*Grokking Deep Learning*(Manning)。 +⁴ 深入了解如何实现自动微分,请参阅 Andrew Trask 的*Grokking Deep Learning*(Manning)。 -^(5) 请查看 LSTMs 的维基百科页面,了解更多[LSTM 变体](https://oreil.ly/2TysrXj)的例子。 +⁵ 请查看 LSTMs 的维基百科页面,了解更多[LSTM 变体](https://oreil.ly/2TysrXj)的例子。 -^(6) 参见 Hochreiter 等人的原始 LSTM 论文[“长短期记忆”](https://oreil.ly/2YYZvwT) (1997)。 +⁶ 参见 Hochreiter 等人的原始 LSTM 论文[“长短期记忆”](https://oreil.ly/2YYZvwT) (1997)。 至少是标准变体的 LSTMs;正如提到的,还有其他变体,比如“带有窥视孔连接的 LSTMs”,其门的排列方式不同。 diff --git a/totrans/dl-scr_7.md b/totrans/dl-scr_7.md index 0eb8040..2f58553 100644 --- a/totrans/dl-scr_7.md +++ b/totrans/dl-scr_7.md @@ -1,4 +1,4 @@ -# 第七章。PyTorch +# 第七章:PyTorch 在第六章和第五章中,您学习了如何通过从头开始实现卷积和循环神经网络来使它们工作。然而,了解它们如何工作是必要的,但仅凭这些知识无法使它们在真实世界的问题上工作;为此,您需要能够在高性能库中实现它们。我们可以致力于构建一个高性能神经网络库的整本书,但那将是一本非常不同(或者只是更长)的书,面向一个非常不同的受众。相反,我们将把这最后一章献给介绍 PyTorch,这是一个越来越受欢迎的基于自动微分的神经网络框架,我们在第六章的开头介绍过。 diff --git a/totrans/fund-dl_01.md b/totrans/fund-dl_01.md index 2950b57..ede0c16 100644 --- a/totrans/fund-dl_01.md +++ b/totrans/fund-dl_01.md @@ -1,4 +1,4 @@ -# 第一章。深度学习的线性代数基础 +# 第一章:深度学习的线性代数基础 在本章中,我们涵盖了重要的先决知识,这些知识将激发我们在主文本和选定章节末尾的可选侧栏中讨论深度学习技术。深度学习最近在学术研究和工业领域都经历了一次复兴。它通过飞跃和飞跃地推动了机器学习的极限,革新了计算机视觉和自然语言处理等领域。然而,重要的是要记住,深度学习在其核心上是对诸如微积分、线性代数和概率等领域成就的总结。尽管与其他数学领域有更深入的联系,但我们专注于这里列出的三个领域,以帮助我们在深入研究深度学习之前拓宽我们的视野。这些领域对于揭示深度学习的整体图景和使其变得如此令人兴奋的微妙细节至关重要。在这个关于背景的第一章中,我们涵盖了线性代数的基础知识。 diff --git a/totrans/fund-dl_02.md b/totrans/fund-dl_02.md index 18a5f87..4f7cc8a 100644 --- a/totrans/fund-dl_02.md +++ b/totrans/fund-dl_02.md @@ -1,4 +1,4 @@ -# 第二章。概率基础 +# 第二章:概率基础 概率是一门量化我们对事件的不确定性的数学领域。例如,当掷骰子或抛硬币时,除非骰子或硬币本身存在任何不规则性,否则我们对即将发生的结果感到不确定。然而,我们可以通过概率来量化我们对每种可能结果的信念。例如,我们说每次抛硬币时硬币出现正面的概率是 。每次掷骰子时,我们说骰子朝上的概率是 。这些是我们在日常生活中轻松谈论的概率,但我们如何定义和有效利用它们呢?在本章中,我们将讨论概率的基础知识以及它们与深度学习中的关键概念的联系。 diff --git a/totrans/fund-dl_03.md b/totrans/fund-dl_03.md index f40a229..b1c5793 100644 --- a/totrans/fund-dl_03.md +++ b/totrans/fund-dl_03.md @@ -1,10 +1,10 @@ -# 第三章 神经网络 +# 第三章:神经网络 # 构建智能机器 大脑是人体中最不可思议的器官。它决定了我们感知每一处景象、声音、气味、味道和触感的方式。它使我们能够存储记忆,体验情感,甚至做梦。没有它,我们将是原始生物,除了最简单的反射动作外一无所能。大脑本质上是使我们聪明的东西。 -婴儿的大脑只有一磅重,但它以某种方式解决了即使是我们最大、最强大的超级计算机也无法解决的问题。出生几个月后,婴儿就能认出父母的脸,从背景中辨别出离散的物体,甚至分辨声音。一年后,他们已经对自然物理有了直觉,可以追踪物体,即使它们被部分或完全遮挡,也可以将声音与特定含义联系起来。到了幼儿时期,他们已经对语法有了复杂的理解,词汇量中有数千个单词。^(1) +婴儿的大脑只有一磅重,但它以某种方式解决了即使是我们最大、最强大的超级计算机也无法解决的问题。出生几个月后,婴儿就能认出父母的脸,从背景中辨别出离散的物体,甚至分辨声音。一年后,他们已经对自然物理有了直觉,可以追踪物体,即使它们被部分或完全遮挡,也可以将声音与特定含义联系起来。到了幼儿时期,他们已经对语法有了复杂的理解,词汇量中有数千个单词。¹ 几十年来,我们梦想着建造像我们一样拥有大脑的智能机器——用于清洁我们家的机器人助手,能自动驾驶的汽车,能自动检测疾病的显微镜。但要建造这些人工智能机器,我们必须解决一些我们曾经面对过的最复杂的计算问题;这些问题我们的大脑已经可以在几微秒内解决。为了解决这些问题,我们将不得不开发一种完全不同的编程计算机的方式,这种方式在过去十年中得到了广泛发展。这是一个极其活跃的人工计算机智能领域,通常被称为*深度学习*。 @@ -14,7 +14,7 @@ ![ ](img/fdl2_0301.png) -###### 图 3-1. 来自 MNIST 手写数字数据集的图像^(2) +###### 图 3-1. 来自 MNIST 手写数字数据集的图像² 尽管图 3-1 中的每个数字写法略有不同,但我们可以轻松识别第一行中的每个数字为零,第二行中的每个数字为一,依此类推。让我们尝试编写一个计算机程序来完成这个任务。我们可以使用什么规则来区分一个数字和另一个数字? diff --git a/totrans/fund-dl_04.md b/totrans/fund-dl_04.md index c27cccd..73e1a87 100644 --- a/totrans/fund-dl_04.md +++ b/totrans/fund-dl_04.md @@ -1,4 +1,4 @@ -# 第四章。训练前馈神经网络 +# 第四章:训练前馈神经网络 # 快餐问题 @@ -32,7 +32,7 @@ 我们还可以方便地将这个表面可视化为一组椭圆形轮廓,其中最小误差位于椭圆的中心。在这个设置中,我们在一个二维平面上工作,其中维度对应于两个权重。轮廓对应于评估为相同值 *E* 的 和 的设置。轮廓越接近,斜率越陡。事实上,最陡下降的方向总是垂直于轮廓。这个方向被表示为一个称为*梯度*的向量。 -现在我们可以制定一个高层策略,来找到最小化误差函数的权重值。假设我们随机初始化网络的权重,这样我们就会发现自己在水平平面上的某个位置。通过评估当前位置的梯度,我们可以找到最陡下降的方向,并朝这个方向迈出一步。然后我们会发现自己在一个比之前更接近最小值的新位置。我们可以通过在这个新位置上取梯度并朝这个新方向迈出一步来重新评估最陡下降的方向。很容易看出,如图 4-3 所示,遵循这个策略最终会将我们带到最小误差点。这个算法被称为*梯度下降*,我们将用它来解决训练单个神经元和更一般的训练整个网络的问题。^(1) +现在我们可以制定一个高层策略,来找到最小化误差函数的权重值。假设我们随机初始化网络的权重,这样我们就会发现自己在水平平面上的某个位置。通过评估当前位置的梯度,我们可以找到最陡下降的方向,并朝这个方向迈出一步。然后我们会发现自己在一个比之前更接近最小值的新位置。我们可以通过在这个新位置上取梯度并朝这个新方向迈出一步来重新评估最陡下降的方向。很容易看出,如图 4-3 所示,遵循这个策略最终会将我们带到最小误差点。这个算法被称为*梯度下降*,我们将用它来解决训练单个神经元和更一般的训练整个网络的问题。¹ ![ ](img/fdl2_0403.png) @@ -198,7 +198,7 @@ y = 1 / (1 + e^(-z)) 在一个 epoch 结束时,验证集将告诉我们模型在尚未见过的数据上的表现。如果训练集上的准确性继续增加,而验证集上的准确性保持不变(或下降),这表明是时候停止训练了,因为我们正在过拟合。 -验证集还有助于作为*超参数优化*过程中准确性的代理度量。到目前为止,我们已经涵盖了几个超参数(学习率、小批量大小等),但我们尚未开发出如何找到这些超参数的最佳值的框架。找到超参数的最佳设置的一个潜在方法是应用*网格搜索*,在网格搜索中,我们从有限的选项集中为每个超参数选择一个值(例如,),并使用每种超参数选择的所有可能排列来训练模型。我们选择在验证集上性能最佳的超参数组合,并报告使用最佳组合训练的模型在测试集上的准确性。^(3) +验证集还有助于作为*超参数优化*过程中准确性的代理度量。到目前为止,我们已经涵盖了几个超参数(学习率、小批量大小等),但我们尚未开发出如何找到这些超参数的最佳值的框架。找到超参数的最佳设置的一个潜在方法是应用*网格搜索*,在网格搜索中,我们从有限的选项集中为每个超参数选择一个值(例如,),并使用每种超参数选择的所有可能排列来训练模型。我们选择在验证集上性能最佳的超参数组合,并报告使用最佳组合训练的模型在测试集上的准确性。³ 考虑到这一点,在我们开始描述直接对抗过拟合的各种方法之前,让我们先概述构建和训练深度学习模型时使用的工作流程。工作流程在图 4-14 中有详细描述。这有点复杂,但了解流程对确保我们正确训练神经网络至关重要。 @@ -220,7 +220,7 @@ y = 1 / (1 + e^(-z)) 一种对抗过拟合的方法称为*正则化*。正则化通过添加额外的惩罚大权重的项来修改我们最小化的目标函数。我们改变目标函数,使其变为,其中随着的分量增大而增大,是正则化强度(另一个超参数)。我们选择的的值决定了我们想要保护免受过拟合的程度。意味着我们不采取任何措施来防止过拟合。如果太大,那么我们的模型将优先保持尽可能小,而不是试图找到在训练集上表现良好的参数值。因此,选择是一项非常重要的任务,可能需要一些试错。 -机器学习中最常见的正则化类型是*L2*正则化。^(4) 它可以通过将神经网络中所有权重的平方幅度添加到误差函数中来实现。换句话说,对于神经网络中的每个权重,我们将添加到误差函数中。L2 正则化具有对尖峰权重向量进行严厉惩罚并更喜欢扩散权重向量的直观解释。这具有鼓励网络稍微使用其所有输入而不是仅大量使用部分输入的吸引性属性。特别值得注意的是,在梯度下降更新期间,使用 L2 正则化最终意味着每个权重都会线性衰减至零。由于这种现象,L2 正则化通常也被称为*权重衰减*。 +机器学习中最常见的正则化类型是*L2*正则化。⁴ 它可以通过将神经网络中所有权重的平方幅度添加到误差函数中来实现。换句话说,对于神经网络中的每个权重,我们将添加到误差函数中。L2 正则化具有对尖峰权重向量进行严厉惩罚并更喜欢扩散权重向量的直观解释。这具有鼓励网络稍微使用其所有输入而不是仅大量使用部分输入的吸引性属性。特别值得注意的是,在梯度下降更新期间,使用 L2 正则化最终意味着每个权重都会线性衰减至零。由于这种现象,L2 正则化通常也被称为*权重衰减*。 我们可以使用 ConvNetJS 来可视化 L2 正则化的效果。与图 2-10 和 2-11 类似,我们使用一个具有 2 个输入、大小为 2 的 softmax 输出和一个包含 20 个神经元的隐藏层的神经网络。我们使用小批量梯度下降(批量大小为 10)和正则化强度为 0.01、0.1 和 1 来训练网络。结果可以在图 4-15 中看到。 @@ -244,14 +244,14 @@ y = 1 / (1 + e^(-z)) 在本章中,我们学习了训练前馈神经网络所涉及的所有基础知识。我们讨论了梯度下降,反向传播算法,以及我们可以使用的各种方法来防止过拟合。在下一章中,当我们使用 PyTorch 库高效实现我们的第一个神经网络时,我们将把这些教训付诸实践。然后在第六章中,我们将回到优化目标函数以训练神经网络的问题,并设计算法来显著提高性能。这些改进将使我们能够处理更多的数据,这意味着我们将能够构建更全面的模型。 -^(1) Rosenbloom, P. “The Method of Steepest Descent.” *Proceedings of Symposia in Applied Mathematics*. Vol. 6\. 1956. +¹ Rosenbloom, P. “The Method of Steepest Descent.” *Proceedings of Symposia in Applied Mathematics*. Vol. 6\. 1956. -^(2) Rumelhart, David E., Geoffrey E. Hinton, and Ronald J. Williams. “Learning Representations by Back-Propagating Errors.” *Cognitive Modeling* 5.3 (1988): 1. +² Rumelhart, David E., Geoffrey E. Hinton, and Ronald J. Williams. “Learning Representations by Back-Propagating Errors.” *Cognitive Modeling* 5.3 (1988): 1. -^(3) Nelder, John A., and Roger Mead. “A Simplex Method for Function Minimization.” *The Computer Journal* 7.4 (1965): 308-313. +³ Nelder, John A., and Roger Mead. “A Simplex Method for Function Minimization.” *The Computer Journal* 7.4 (1965): 308-313. -^(4) Tikhonov, Andrei Nikolaevich, and Vladlen Borisovich Glasko. “Use of the Regularization Method in Non-Linear Problems.” *USSR Computational Mathematics and Mathematical Physics* 5.3 (1965): 93-107. +⁴ Tikhonov, Andrei Nikolaevich, and Vladlen Borisovich Glasko. “Use of the Regularization Method in Non-Linear Problems.” *USSR Computational Mathematics and Mathematical Physics* 5.3 (1965): 93-107. -^(5) Srebro, Nathan, Jason DM Rennie, and Tommi S. Jaakkola. “Maximum-Margin Matrix Factorization.” *NIPS*, Vol. 17, 2004. +⁵ Srebro, Nathan, Jason DM Rennie, and Tommi S. Jaakkola. “Maximum-Margin Matrix Factorization.” *NIPS*, Vol. 17, 2004. -^(6) Srivastava, Nitish 等人。“Dropout: 一种简单的方法防止神经网络过拟合。” *机器学习研究杂志* 15.1 (2014): 1929-1958. +⁶ Srivastava, Nitish 等人。“Dropout: 一种简单的方法防止神经网络过拟合。” *机器学习研究杂志* 15.1 (2014): 1929-1958. diff --git a/totrans/fund-dl_05.md b/totrans/fund-dl_05.md index b0ce456..db103b3 100644 --- a/totrans/fund-dl_05.md +++ b/totrans/fund-dl_05.md @@ -1,4 +1,4 @@ -# 第五章。在 PyTorch 中实现神经网络 +# 第五章:在 PyTorch 中实现神经网络 # PyTorch 简介 diff --git a/totrans/fund-dl_06.md b/totrans/fund-dl_06.md index 9dd063a..57f7375 100644 --- a/totrans/fund-dl_06.md +++ b/totrans/fund-dl_06.md @@ -1,4 +1,4 @@ -# 第六章。超越梯度下降 +# 第六章:超越梯度下降 # 梯度下降的挑战 @@ -167,7 +167,7 @@ for alpha in torch.arange(-2, 2, 0.05): ###### 图 6-5\. 二维误差表面上的一个鞍点 -一般来说,在一个 维参数空间中,我们可以通过 个不同的轴切过一个临界点。一个临界点只有在每一个 个一维子空间中都出现为局部最小值时才能成为局部最小值。利用一个临界点在一维子空间中有三种不同类型的事实,我们意识到一个随机临界点在随机函数中的概率是 。这意味着一个具有 个临界点的随机函数有望有 个局部最小值。换句话说,随着参数空间的维度增加,局部最小值变得越来越稀有。对这个主题的更严格的处理超出了本书的范围,但在 2014 年由 Dauphin 等人进行了更深入的探讨。^(3) +一般来说,在一个 维参数空间中,我们可以通过 个不同的轴切过一个临界点。一个临界点只有在每一个 个一维子空间中都出现为局部最小值时才能成为局部最小值。利用一个临界点在一维子空间中有三种不同类型的事实,我们意识到一个随机临界点在随机函数中的概率是 。这意味着一个具有 个临界点的随机函数有望有 个局部最小值。换句话说,随着参数空间的维度增加,局部最小值变得越来越稀有。对这个主题的更严格的处理超出了本书的范围,但在 2014 年由 Dauphin 等人进行了更深入的探讨。³ 那么,这对于优化深度学习模型意味着什么?对于随机梯度下降,目前还不清楚。看起来这些错误表面的平坦段是棘手的,但最终并不会阻止随机梯度下降收敛到一个好的答案。然而,对于试图直接解决梯度为零点的方法,这对于某些二阶优化方法在深度学习模型中的有用性构成了严重问题,我们将在后面讨论。 @@ -405,18 +405,18 @@ PyTorch 中 Adam 的默认超参数设置通常表现良好,但 Adam 对于超 ([3] Dauphin, Yann N.等人。“在高维非凸优化中识别和攻击鞍点问题。”*神经信息处理系统的进展*。2014 年。 -^(4) Polyak, Boris T. “一些加速迭代方法收敛的方法。” *苏联计算数学和数学物理* 4.5 (1964): 1-17。 +⁴ Polyak, Boris T. “一些加速迭代方法收敛的方法。” *苏联计算数学和数学物理* 4.5 (1964): 1-17。 -^(5) Sutskever, Ilya, 等. “关于深度学习中初始化和动量的重要性。” *ICML* (3) 28 (2013): 1139-1147。 +⁵ Sutskever, Ilya, 等. “关于深度学习中初始化和动量的重要性。” *ICML* (3) 28 (2013): 1139-1147。 -^(6) Møller, Martin Fodslette. “一种用于快速监督学习的缩放共轭梯度算法。” *神经网络* 6.4 (1993): 525-533。 +⁶ Møller, Martin Fodslette. “一种用于快速监督学习的缩放共轭梯度算法。” *神经网络* 6.4 (1993): 525-533。 -^(7) Broyden, C. G. “解非线性联立方程的一种新方法。” *计算机杂志* 12.1 (1969): 94-99。 +⁷ Broyden, C. G. “解非线性联立方程的一种新方法。” *计算机杂志* 12.1 (1969): 94-99。 -^(8) Bonnans, Joseph-Frédéric, 等. *数值优化:理论和实践方面*。Springer Science & Business Media, 2006。 +⁸ Bonnans, Joseph-Frédéric, 等. *数值优化:理论和实践方面*。Springer Science & Business Media, 2006。 -^(9) Duchi, John, Elad Hazan, 和 Yoram Singer. “用于在线学习和随机优化的自适应次梯度方法。” *机器学习研究杂志* 12.Jul (2011): 2121-2159。 +⁹ Duchi, John, Elad Hazan, 和 Yoram Singer. “用于在线学习和随机优化的自适应次梯度方法。” *机器学习研究杂志* 12.Jul (2011): 2121-2159。 -^(10) Tieleman, Tijmen, 和 Geoffrey Hinton. “讲座 6.5-rmsprop:将梯度除以最近幅度的运行平均值。” *COURSERA:神经网络机器学习* 4.2 (2012)。 +¹⁰ Tieleman, Tijmen, 和 Geoffrey Hinton. “讲座 6.5-rmsprop:将梯度除以最近幅度的运行平均值。” *COURSERA:神经网络机器学习* 4.2 (2012)。 -^(11) Kingma, Diederik, 和 Jimmy Ba. “Adam:一种用于随机优化的方法。” *arXiv 预印本 arXiv*:1412.6980 (2014)。 +¹¹ Kingma, Diederik, 和 Jimmy Ba. “Adam:一种用于随机优化的方法。” *arXiv 预印本 arXiv*:1412.6980 (2014)。 diff --git a/totrans/fund-dl_07.md b/totrans/fund-dl_07.md index 14dd502..0bed789 100644 --- a/totrans/fund-dl_07.md +++ b/totrans/fund-dl_07.md @@ -1,14 +1,14 @@ -# 第七章。卷积神经网络 +# 第七章:卷积神经网络 # 人类视觉中的神经元 -人类的视觉感知能力是令人难以置信的先进。在几秒钟内,我们可以在视野范围内识别物体,毫不犹豫地,毫不费力。我们不仅可以命名我们看到的物体,还可以感知它们的深度,完美地区分它们的轮廓,并将物体与背景分开。不知何故,我们的眼睛接收到了原始的彩色数据体素,但我们的大脑将这些信息转化为更有意义的基元——线条、曲线和形状——这些基元可能表明,例如,我们正在看一只家猫。^(1) +人类的视觉感知能力是令人难以置信的先进。在几秒钟内,我们可以在视野范围内识别物体,毫不犹豫地,毫不费力。我们不仅可以命名我们看到的物体,还可以感知它们的深度,完美地区分它们的轮廓,并将物体与背景分开。不知何故,我们的眼睛接收到了原始的彩色数据体素,但我们的大脑将这些信息转化为更有意义的基元——线条、曲线和形状——这些基元可能表明,例如,我们正在看一只家猫。¹ -人类视觉的基础是神经元。专门的神经元负责在人眼中捕捉光信息。^(2)然后,这些光信息经过预处理,传输到大脑的视觉皮层,最终被完全分析。神经元单独负责所有这些功能。因此,直觉上,将我们的神经网络模型扩展到构建更好的计算机视觉系统是有很多道理的。在本章中,我们将利用对人类视觉的理解来构建有效的深度学习模型,解决图像问题。但在我们深入研究之前,让我们看看更传统的图像分析方法以及它们为什么存在缺陷。 +人类视觉的基础是神经元。专门的神经元负责在人眼中捕捉光信息。²然后,这些光信息经过预处理,传输到大脑的视觉皮层,最终被完全分析。神经元单独负责所有这些功能。因此,直觉上,将我们的神经网络模型扩展到构建更好的计算机视觉系统是有很多道理的。在本章中,我们将利用对人类视觉的理解来构建有效的深度学习模型,解决图像问题。但在我们深入研究之前,让我们看看更传统的图像分析方法以及它们为什么存在缺陷。 # 特征选择的缺陷 -让我们从考虑一个简单的计算机视觉问题开始。我给你一张随机选择的图像,比如图 7-1 中的图像。你的任务是告诉我这张图片中是否有一个人脸。这正是保罗·维奥拉和迈克尔·琼斯在他们 2001 年发表的开创性论文中解决的问题。^(3) +让我们从考虑一个简单的计算机视觉问题开始。我给你一张随机选择的图像,比如图 7-1 中的图像。你的任务是告诉我这张图片中是否有一个人脸。这正是保罗·维奥拉和迈克尔·琼斯在他们 2001 年发表的开创性论文中解决的问题。³ ![](img/fdl2_0701.png) @@ -44,7 +44,7 @@ Viola 和 Jones 有一个洞察,即人脸具有一定的光亮和暗斑块模 ###### 图 7-3。随着图像尺寸的增加,层之间的连接密度呈不可控增加 -卷积网络利用我们分析图像的事实,并合理地限制深度网络的架构,从而大大减少模型中的参数数量。受到人类视觉工作方式的启发,卷积网络的层中的神经元以三维方式排列,因此层具有宽度、高度和深度,如图 7-4 所示。^(7) +卷积网络利用我们分析图像的事实,并合理地限制深度网络的架构,从而大大减少模型中的参数数量。受到人类视觉工作方式的启发,卷积网络的层中的神经元以三维方式排列,因此层具有宽度、高度和深度,如图 7-4 所示。⁷ 正如我们将看到的,卷积层中的神经元仅连接到前一层的一个小区域,因此我们避免了全连接神经元的浪费。卷积层的功能可以简单地表达为:它处理一个三维信息体积,以产生一个新的三维信息体积。我们将在下一节更详细地看一下这是如何工作的。 @@ -54,7 +54,7 @@ Viola 和 Jones 有一个洞察,即人脸具有一定的光亮和暗斑块模 # 滤波器和特征图 -为了激发卷积层的基本原理,让我们建立对人类大脑如何将原始视觉信息拼接成我们周围世界理解的直觉。在这个领域最有影响力的研究之一来自 David Hubel 和 Torsten Wiesel,他们发现视觉皮层的部分负责检测边缘。1959 年,他们在猫的大脑中插入电极,并在屏幕上投射黑白图案。他们发现一些神经元只有在有垂直线时才会发射,其他神经元只有在有水平线时才会发射,还有一些神经元只有在线条呈特定角度时才会发射。^(8) +为了激发卷积层的基本原理,让我们建立对人类大脑如何将原始视觉信息拼接成我们周围世界理解的直觉。在这个领域最有影响力的研究之一来自 David Hubel 和 Torsten Wiesel,他们发现视觉皮层的部分负责检测边缘。1959 年,他们在猫的大脑中插入电极,并在屏幕上投射黑白图案。他们发现一些神经元只有在有垂直线时才会发射,其他神经元只有在有水平线时才会发射,还有一些神经元只有在线条呈特定角度时才会发射。⁸ 进一步的研究确定了视觉皮层是分层组织的。每一层负责在前一层检测到的特征基础上构建——从线条到轮廓,再到形状,最终到整个对象。此外,在视觉皮层的每一层中,相同的特征检测器在整个区域中复制,以便在图像的所有部分检测特征。这些想法对卷积神经网络的设计产生了重大影响。 @@ -359,7 +359,7 @@ layer = nn.BatchNorm1d(num_features=32) 在过去的十年中,图像处理中的各种归一化形式已经被研究和利用。其中最著名的是批量归一化。仅从前一节回顾一下,这种技术计算每个卷积层输出的通道均值和方差,使用计算出的统计数据对每个通道进行归一化,然后将归一化的输出馈送到下一个卷积层。因此,归一化输出中的任何给定通道在批次中将具有相同的均值和方差(分别为零和一)。在实践中,模型还将学习一个均值参数β和一个标准差参数γ,然后将它们应用于归一化的输出,使其在馈送到后续层之前具有均值β和标准差γ。这个过程用于减少任何给定通道从一个批次到下一个批次的分布偏移。请注意,这只是减少偏移而不是完全消除它,因为通道分布可能仍然在一个批次到下一个批次看起来完全不同,尽管它们具有相同的均值和方差。从理论上讲,并且根据经验观察,减少这种内部协变量偏移可以稳定训练并产生强大的性能增益。 -然而,在批量大小较大的情况下,通道均值和方差的计算会导致较大的内存成本。此外,批量归一化对批量大小的大小非常重要,因为较小的批量大小会由于嘈杂的均值和方差估计而显著降低性能。为了避免沿批处理维度进行计算带来的问题,*组归一化*被引入。^(12)组归一化不是沿着批处理维度进行归一化,而是沿着通道维度进行归一化,因此不受前述问题的影响。组归一化预定义了一些通道组,并且对于每个实例,在每个批次实例中计算每个通道组的均值μ和方差σ。每组计算出的β和γ参数集用于对归一化的条目集进行归一化。此外,类似于批量归一化,为每个条目集单独学习偏移/均值参数β和缩放/标准差参数γ。 +然而,在批量大小较大的情况下,通道均值和方差的计算会导致较大的内存成本。此外,批量归一化对批量大小的大小非常重要,因为较小的批量大小会由于嘈杂的均值和方差估计而显著降低性能。为了避免沿批处理维度进行计算带来的问题,*组归一化*被引入。¹²组归一化不是沿着批处理维度进行归一化,而是沿着通道维度进行归一化,因此不受前述问题的影响。组归一化预定义了一些通道组,并且对于每个实例,在每个批次实例中计算每个通道组的均值μ和方差σ。每组计算出的β和γ参数集用于对归一化的条目集进行归一化。此外,类似于批量归一化,为每个条目集单独学习偏移/均值参数β和缩放/标准差参数γ。 这类似于另一种流行的技术,称为*层归一化*,它实际上是批量归一化,但是跨越通道维度的整个长度,而不是整个批处理维度的长度。请注意,层归一化也只是组归一化的一个特例,其中通道组的数量设置为一。图 7-16 比较了批量归一化、组归一化和层归一化。每个立方体中的被阻挡的部分展示了归一化发生的维度以及一起归一化的条目组。请注意,为了可视化目的,我们将标准的 4D 表示压缩为 3D。 @@ -445,11 +445,11 @@ class Net(nn.Module): 我们可以在我们的滤波器中看到许多有趣的特征:垂直、水平和对角边缘,以及由另一种颜色包围的小点或斑点。我们可以确信我们的网络正在学习相关特征,因为这些滤波器不仅仅是噪音。 -我们还可以尝试可视化网络如何学习以图像形式聚类各种图像。为了说明这一点,我们采用一个在 ImageNet 挑战赛上训练过的大型网络,然后获取在每个图像的 softmax 之前完全连接层的隐藏状态。然后,我们采用称为*t-分布随机邻居嵌入*或*t-SNE*的算法,将每个图像的高维表示压缩到我们可以可视化的 2D 表示。^(14) 我们不在这里详细介绍 t-SNE 的细节,但有许多公开可用的软件工具可以为我们执行,包括[脚本](https://oreil.ly/7NA1K)。我们在图 7-20 中可视化嵌入,结果非常惊人。 +我们还可以尝试可视化网络如何学习以图像形式聚类各种图像。为了说明这一点,我们采用一个在 ImageNet 挑战赛上训练过的大型网络,然后获取在每个图像的 softmax 之前完全连接层的隐藏状态。然后,我们采用称为*t-分布随机邻居嵌入*或*t-SNE*的算法,将每个图像的高维表示压缩到我们可以可视化的 2D 表示。¹⁴ 我们不在这里详细介绍 t-SNE 的细节,但有许多公开可用的软件工具可以为我们执行,包括[脚本](https://oreil.ly/7NA1K)。我们在图 7-20 中可视化嵌入,结果非常惊人。 ![](img/fdl2_0720.png) -###### 图 7-20。t-SNE 嵌入(中心)周围是嵌入的放大子段(外围)^(15) +###### 图 7-20。t-SNE 嵌入(中心)周围是嵌入的放大子段(外围)¹⁵ 乍一看,颜色相似的图像更接近。这很有趣,但更引人注目的是,当我们放大可视化的部分时,我们意识到这不仅仅是颜色。我们意识到所有船的图片都在一个地方,所有人类的图片在另一个地方,所有蝴蝶的图片在可视化中的另一个位置。很明显,卷积网络具有惊人的学习能力。 @@ -459,7 +459,7 @@ class Net(nn.Module): 有趣的是,问题甚至不是过拟合(低训练准确率和高验证准确率所暗示的),对于具有如此多参数的网络来说,过拟合是可以理解的。此外,我们可以轻松地构建一个深度网络,其性能与其浅层对应物完全相同:只需取出训练好的浅层网络层,并简单地堆叠执行恒等操作的层。我们通过专门的优化算法表现更差,与我们的朴素构建相比,这是相当令人震惊的。问题在于由于某种无法解释的原因,训练停滞在一个我们无法摆脱的局部最小值。不幸的是,对于这一点的理论解释仍然有些模糊。 -2015 年,何等人^(16)引入了 ResNet34 架构,这是一个深度架构,在主要图像分类竞赛中超越了所有同行。何等人等人重新定义了我们如何训练深度计算机视觉架构,他们的贡献是引入了我们现在称之为*跳跃连接*的概念,即将从一层获得的特征向量添加到当前层之后的一层或两层获得的特征向量中。更确切地说,假设我们到目前为止已经通过网络的一半,我们的原始输入*x*已经转换为一些中间表示*x'*。跳跃连接将*x'*添加到下一层的结果*F(x')*中,然后将表示传递给下一层*G*。因此,G 看到的不是*F(x')*,而是*F(x') + x'*。请注意,跳跃连接不需要将当前表示添加到*F*的结果中。如图 7-21 所示,我们还可以将*x'*添加到*G*的结果中,因此下一层*H*看到的是*G(F(x')) + x'*,而不仅仅是*G(F(x'))*。 +2015 年,何等人¹⁶引入了 ResNet34 架构,这是一个深度架构,在主要图像分类竞赛中超越了所有同行。何等人等人重新定义了我们如何训练深度计算机视觉架构,他们的贡献是引入了我们现在称之为*跳跃连接*的概念,即将从一层获得的特征向量添加到当前层之后的一层或两层获得的特征向量中。更确切地说,假设我们到目前为止已经通过网络的一半,我们的原始输入*x*已经转换为一些中间表示*x'*。跳跃连接将*x'*添加到下一层的结果*F(x')*中,然后将表示传递给下一层*G*。因此,G 看到的不是*F(x')*,而是*F(x') + x'*。请注意,跳跃连接不需要将当前表示添加到*F*的结果中。如图 7-21 所示,我们还可以将*x'*添加到*G*的结果中,因此下一层*H*看到的是*G(F(x')) + x'*,而不仅仅是*G(F(x'))*。 ![](img/fdl2_0721.png) @@ -628,7 +628,7 @@ class ResNet34(nn.Module): # 利用卷积滤波器复制艺术风格 -在过去的几年里,我们还开发了利用卷积网络以更有创意方式的算法。其中一个算法被称为*神经风格*。^(17) 神经风格的目标是能够将任意照片呈现为以著名艺术家的风格绘制的样子。这似乎是一项艰巨的任务,如果没有卷积网络,我们不太清楚如何解决这个问题。然而,聪明地操作卷积滤波器可以在这个问题上产生惊人的结果。 +在过去的几年里,我们还开发了利用卷积网络以更有创意方式的算法。其中一个算法被称为*神经风格*。¹⁷ 神经风格的目标是能够将任意照片呈现为以著名艺术家的风格绘制的样子。这似乎是一项艰巨的任务,如果没有卷积网络,我们不太清楚如何解决这个问题。然而,聪明地操作卷积滤波器可以在这个问题上产生惊人的结果。 让我们拿一个预训练的卷积网络。我们处理三幅图像。前两幅是内容源***p***和风格源***a***。第三幅图像是生成的图像***x***。我们的目标是推导一个错误函数,我们可以反向传播,当最小化时,将完美地结合所需照片的内容和所需艺术作品的风格。 @@ -648,11 +648,11 @@ class ResNet34(nn.Module): ![](img/fdl2_0722.png) -###### 图 7-22。将雨公主与麻省理工学院圆顶的照片混合的结果^(18) +###### 图 7-22。将雨公主与麻省理工学院圆顶的照片混合的结果¹⁸ # 学习卷积滤波器用于其他问题领域 -尽管本章中的示例侧重于图像识别,但卷积网络在几个其他问题领域中也很有用。图像分析的自然延伸是视频分析。事实上,使用五维张量(包括时间作为一个维度)并应用三维卷积是将卷积范式扩展到视频的一种简单方法。^(19) 卷积滤波器还成功地用于分析听力图。^(20) 在这些应用中,卷积网络在听力图输入上滑动,以预测另一侧的音素。 +尽管本章中的示例侧重于图像识别,但卷积网络在几个其他问题领域中也很有用。图像分析的自然延伸是视频分析。事实上,使用五维张量(包括时间作为一个维度)并应用三维卷积是将卷积范式扩展到视频的一种简单方法。¹⁹ 卷积滤波器还成功地用于分析听力图。²⁰ 在这些应用中,卷积网络在听力图输入上滑动,以预测另一侧的音素。 不太直观的是,卷积网络还在自然语言处理中找到了一些用途。我们将在后面的章节中看到一些例子。卷积网络的更奇特用途包括教授算法玩棋盘游戏,以及分析生物分子以进行药物发现。我们还将在本书的后面章节讨论这两个例子。 @@ -662,42 +662,42 @@ class ResNet34(nn.Module): 由于我们能够想出有效的方法将图像表示为张量,因此图像分析变得容易。在其他情况下(例如自然语言),如何将输入数据表示为张量并不太清楚。为了作为新深度学习模型的一个基石来解决这个问题,我们将在下一章中开发一些关键概念,包括向量嵌入和表示学习。 -^(1) Hubel, David H., and Torsten N. Wiesel. “Receptive Fields and Functional Architecture of Monkey Striate Cortex.” *The Journal of Physiology* 195.1 (1968): 215-243. +¹ Hubel, David H., and Torsten N. Wiesel. “Receptive Fields and Functional Architecture of Monkey Striate Cortex.” *The Journal of Physiology* 195.1 (1968): 215-243. -^(2) Cohen, Adolph I. “Rods and Cones.” *Physiology of Photoreceptor Organs*. Springer Berlin Heidelberg, 1972\. 63-110. +² Cohen, Adolph I. “Rods and Cones.” *Physiology of Photoreceptor Organs*. Springer Berlin Heidelberg, 1972\. 63-110. -^(3) Viola, Paul, and Michael Jones. “Rapid Object Detection using a Boosted Cascade of Simple Features.” Computer Vision and Pattern Recognition, 2001\. CVPR 2001\. *Proceedings of the 2001 IEEE Computer Society Conference* on. Vol. 1\. IEEE, 2001. +³ Viola, Paul, and Michael Jones. “Rapid Object Detection using a Boosted Cascade of Simple Features.” Computer Vision and Pattern Recognition, 2001\. CVPR 2001\. *Proceedings of the 2001 IEEE Computer Society Conference* on. Vol. 1\. IEEE, 2001. -^(4) Deng, Jia, et al. “ImageNet: A Large-Scale Hierarchical Image Database.” *Computer Vision and Pattern Recognition*, 2009\. CVPR 2009\. IEEE Conference. IEEE, 2009. +⁴ Deng, Jia, et al. “ImageNet: A Large-Scale Hierarchical Image Database.” *Computer Vision and Pattern Recognition*, 2009\. CVPR 2009\. IEEE Conference. IEEE, 2009. -^(5) Perronnin, Florent, Jorge Sénchez, and Yan Liu Xerox. “Large-Scale Image Categorization with Explicit Data Embedding.” *Computer Vision and Pattern Recognition* (CVPR), 2010 IEEE Conference. IEEE, 2010. +⁵ Perronnin, Florent, Jorge Sénchez, and Yan Liu Xerox. “Large-Scale Image Categorization with Explicit Data Embedding.” *Computer Vision and Pattern Recognition* (CVPR), 2010 IEEE Conference. IEEE, 2010. -^(6) Krizhevsky, Alex, Ilya Sutskever, and Geoffrey E. Hinton. “ImageNet Classification with Deep Convolutional Neural Networks.” *Advances in Neural Information Processing Systems*. 2012. +⁶ Krizhevsky, Alex, Ilya Sutskever, and Geoffrey E. Hinton. “ImageNet Classification with Deep Convolutional Neural Networks.” *Advances in Neural Information Processing Systems*. 2012. -^(7) LeCun, Yann, et al. “Handwritten Digit Recognition with a Back-Propagation Network.” *Advances in Neural Information Processing Systems*. 1990. +⁷ LeCun, Yann, et al. “Handwritten Digit Recognition with a Back-Propagation Network.” *Advances in Neural Information Processing Systems*. 1990. -^(8) Hubel, David H., and Torsten N. Wiesel. “Receptive Fields of Single Neurones in the Cat’s Striate Cortex.” *The Journal of Physiology* 148.3 (1959): 574-591. +⁸ Hubel, David H., and Torsten N. Wiesel. “Receptive Fields of Single Neurones in the Cat’s Striate Cortex.” *The Journal of Physiology* 148.3 (1959): 574-591. -^(9) Graham, Benjamin. “Fractional Max-Pooling.” *arXiv Preprint arXiv*:1412.6071 (2014). +⁹ Graham, Benjamin. “Fractional Max-Pooling.” *arXiv Preprint arXiv*:1412.6071 (2014). -^(10) Simonyan, Karen, and Andrew Zisserman. “Very Deep Convolutional Networks for Large-Scale Image Recognition.” *arXiv Preprint arXiv*:1409.1556 (2014). +¹⁰ Simonyan, Karen, and Andrew Zisserman. “Very Deep Convolutional Networks for Large-Scale Image Recognition.” *arXiv Preprint arXiv*:1409.1556 (2014). -^(11) S. Ioffe, C. Szegedy. “Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift.” *arXiv Preprint arXiv*:1502.03167\. 2015. +¹¹ S. Ioffe, C. Szegedy. “Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift.” *arXiv Preprint arXiv*:1502.03167\. 2015. -^(12) Wu et. al. “Group Normalization.” 2018\. *https://arxiv.org/abs/1803.08494*. +¹² Wu et. al. “Group Normalization.” 2018\. *https://arxiv.org/abs/1803.08494*. -^(13) Krizhevsky, Alex, and Geoffrey Hinton. “Learning Multiple Layers of Features from Tiny Images.” University of Toronto (2009). +¹³ Krizhevsky, Alex, and Geoffrey Hinton. “Learning Multiple Layers of Features from Tiny Images.” University of Toronto (2009). -^(14) Maaten, Laurens van der, and Geoffrey Hinton. “Visualizing Data Using t-SNE.” *Journal of Machine Learning Research* 9\. Nov (2008): 2579-2605. +¹⁴ Maaten, Laurens van der, and Geoffrey Hinton. “Visualizing Data Using t-SNE.” *Journal of Machine Learning Research* 9\. Nov (2008): 2579-2605. -^(15) 图像来源:Andrej Karpathy。*http://cs.stanford.edu/people/karpathy/cnnembed*。 +¹⁵ 图像来源:Andrej Karpathy。*http://cs.stanford.edu/people/karpathy/cnnembed*。 -^(16) He et. al. “Deep Residual Learning for Image Recognition.” *arXiv Preprint arXiv*:1512.03385\. 2015. +¹⁶ He et. al. “Deep Residual Learning for Image Recognition.” *arXiv Preprint arXiv*:1512.03385\. 2015. -^(17) Gatys, Leon A., Alexander S. Ecker, and Matthias Bethge. “A Neural Algorithm of Artistic Style.” *arXiv Preprint arXiv*:1508.06576 (2015). +¹⁷ Gatys, Leon A., Alexander S. Ecker, and Matthias Bethge. “A Neural Algorithm of Artistic Style.” *arXiv Preprint arXiv*:1508.06576 (2015). -^(18) 图像来源:Anish Athalye。 +¹⁸ 图像来源:Anish Athalye。 -^(19) Karpathy, Andrej, et al. “Large-scale Video Classification with Convolutional Neural Networks.” *Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition*. 2014. +¹⁹ Karpathy, Andrej, et al. “Large-scale Video Classification with Convolutional Neural Networks.” *Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition*. 2014. -^(20) Abdel-Hamid, Ossama, et al. “Applying Convolutional Neural Networks Concepts to Hybrid NN-HMM Model for Speech Recognition.” IEEE International Conference on Acoustics, Speech, and Signal Processing (ICASSP), Kyoto, 2012, pp. 4277-4280. +²⁰ Abdel-Hamid, Ossama, et al. “Applying Convolutional Neural Networks Concepts to Hybrid NN-HMM Model for Speech Recognition.” IEEE International Conference on Acoustics, Speech, and Signal Processing (ICASSP), Kyoto, 2012, pp. 4277-4280. diff --git a/totrans/fund-dl_08.md b/totrans/fund-dl_08.md index e6166b7..89d121c 100644 --- a/totrans/fund-dl_08.md +++ b/totrans/fund-dl_08.md @@ -1,4 +1,4 @@ -# 第八章。嵌入和表示学习 +# 第八章:嵌入和表示学习 # 学习低维表示 @@ -289,7 +289,7 @@ c_x = (corrupt_input(x) * corrupt) + (x * (1 - corrupt)) -的值决定了我们在追求稀疏性的同时牺牲生成更好重建的程度。对于数学倾向的人来说,您可以将每个表示的每个组件的值视为具有未知均值的随机变量的结果。然后,我们将使用一个衡量观察这个随机变量(每个组件的值)的分布和已知均值为 0 的随机变量的分布之间差异的度量。用于此目的的常用度量是 Kullback-Leibler(通常称为 KL)散度。关于自动编码器中稀疏性的进一步讨论超出了本文的范围,但已被 Ranzato 等人(2007 年^(4)和 2008 年^(5))涵盖。最近,Makhzani 和 Frey(2014 年)^(6)研究了在编码层之前引入一个中间函数的理论性质和经验有效性,该函数将表示中的最大激活值之外的所有值都归零。这些*k-稀疏自动编码器*被证明与其他稀疏机制一样有效,尽管实现和理解起来非常简单(以及在计算上更有效)。 +的值决定了我们在追求稀疏性的同时牺牲生成更好重建的程度。对于数学倾向的人来说,您可以将每个表示的每个组件的值视为具有未知均值的随机变量的结果。然后,我们将使用一个衡量观察这个随机变量(每个组件的值)的分布和已知均值为 0 的随机变量的分布之间差异的度量。用于此目的的常用度量是 Kullback-Leibler(通常称为 KL)散度。关于自动编码器中稀疏性的进一步讨论超出了本文的范围,但已被 Ranzato 等人(2007 年⁴和 2008 年⁵)涵盖。最近,Makhzani 和 Frey(2014 年)⁶研究了在编码层之前引入一个中间函数的理论性质和经验有效性,该函数将表示中的最大激活值之外的所有值都归零。这些*k-稀疏自动编码器*被证明与其他稀疏机制一样有效,尽管实现和理解起来非常简单(以及在计算上更有效)。 这结束了我们对自动编码器的讨论。我们已经探讨了如何使用自动编码器通过总结其内容来找到数据点的强表示。当独立数据点丰富并包含有关其结构的所有相关信息时,这种降维的机制效果很好。在下一节中,我们将探讨当主要信息源是数据点的上下文而不是数据点本身时,我们可以使用的策略。 @@ -535,18 +535,18 @@ data.plot_with_labels(low_dim_embs, labels) 在本章中,我们探讨了表示学习中的各种方法。我们了解了如何使用自动编码器进行有效的降维。我们还学习了去噪和稀疏性,这些增强了自动编码器的有用属性。在讨论完自动编码器后,我们将注意力转向当输入的上下文比输入本身更具信息性时的表示学习。我们学习了如何使用 Skip-Gram 模型为英语单词生成嵌入,这将在我们探索用于理解语言的深度学习模型时非常有用。在下一章中,我们将在此基础上分析语言和其他序列使用深度学习。 -^(1) Hinton, Geoffrey E., and Ruslan R. Salakhutdinov. “使用神经网络降低数据的维度。”*科学*313.5786(2006):504-507。 +¹ Hinton, Geoffrey E., and Ruslan R. Salakhutdinov. “使用神经网络降低数据的维度。”*科学*313.5786(2006):504-507。 -^(2) Vincent, Pascal, et al. “使用去噪自动编码器提取和组合稳健特征。”*第 25 届国际机器学习会议论文集*。ACM,2008 年。 +² Vincent, Pascal, et al. “使用去噪自动编码器提取和组合稳健特征。”*第 25 届国际机器学习会议论文集*。ACM,2008 年。 -^(3) Bengio, Yoshua, et al. “广义去噪自动编码器作为生成模型。”*神经信息处理系统进展*。2013 年。 +³ Bengio, Yoshua, et al. “广义去噪自动编码器作为生成模型。”*神经信息处理系统进展*。2013 年。 -^(4) Ranzato, Marc’Aurelio, et al. “使用基于能量的模型高效学习稀疏表示。”*第 19 届神经信息处理系统国际会议论文集*。MIT 出版社,2006 年。 +⁴ Ranzato, Marc’Aurelio, et al. “使用基于能量的模型高效学习稀疏表示。”*第 19 届神经信息处理系统国际会议论文集*。MIT 出版社,2006 年。 -^(5) Ranzato, Marc’Aurelio, and Martin Szummer. “半监督学习中的紧凑文档表示与深度网络。”*第 25 届国际机器学习会议论文集*。ACM,2008 年。 +⁵ Ranzato, Marc’Aurelio, and Martin Szummer. “半监督学习中的紧凑文档表示与深度网络。”*第 25 届国际机器学习会议论文集*。ACM,2008 年。 -^(6) Makhzani, Alireza, and Brendan Frey. “k-稀疏自动编码器。”*arXiv 预印本 arXiv*:1312.5663(2013)。 +⁶ Makhzani, Alireza, and Brendan Frey. “k-稀疏自动编码器。”*arXiv 预印本 arXiv*:1312.5663(2013)。 -^(7) Mikolov, Tomas, et al. “单词和短语的分布式表示及其组合性。”*神经信息处理系统进展*。2013 年。 +⁷ Mikolov, Tomas, et al. “单词和短语的分布式表示及其组合性。”*神经信息处理系统进展*。2013 年。 -^(8) Tomas Mikolov, Kai Chen, Greg Corrado, and Jeffrey Dean. “在向量空间中高效估计单词表示。”*ICLR 研讨会*,2013 年。 +⁸ Tomas Mikolov, Kai Chen, Greg Corrado, and Jeffrey Dean. “在向量空间中高效估计单词表示。”*ICLR 研讨会*,2013 年。 diff --git a/totrans/fund-dl_09.md b/totrans/fund-dl_09.md index 55226b1..a8c21b2 100644 --- a/totrans/fund-dl_09.md +++ b/totrans/fund-dl_09.md @@ -1,4 +1,4 @@ -# 第九章。序列分析模型 +# 第九章:序列分析模型 Surya Bhupatiraju @@ -335,7 +335,7 @@ Shift 在全局归一化网络中,我们对分数的解释略有不同。我们不是通过 softmax 将分数转换为每个操作的概率分布,而是将所有假设动作序列的分数相加。确保我们选择正确的假设序列的一种方法是计算所有可能假设的总和,然后应用 softmax 层生成概率分布。理论上,我们可以使用与局部归一化网络中相同的交叉熵损失函数。然而,这种策略的问题在于可能的假设序列数量太大,难以处理。即使考虑到平均句子长度为 10,每个左右弧有 1 个移动和 7 个标签的保守总操作数为 15,这对应于 1,000,000,000,000,000 个可能的假设。 -为了使这个问题可解,如图 9-12 所示,我们应用一个固定大小的束搜索,直到我们要么(1)到达句子的结尾,要么(2)正确的动作序列不再包含在束中。然后,我们构建一个损失函数,试图通过最大化相对于其他假设的分数来尽可能将“黄金标准”动作序列(用蓝色突出显示)推到束的顶部。虽然我们不会在这里深入讨论如何构建这个损失函数的细节,但我们建议您参考 2016 年 Andor 等人的原始论文。^(3) 该论文还描述了一个更复杂的词性标注器,它使用全局归一化和束搜索来显著提高准确性(与我们在本章前面构建的词性标注器相比)。 +为了使这个问题可解,如图 9-12 所示,我们应用一个固定大小的束搜索,直到我们要么(1)到达句子的结尾,要么(2)正确的动作序列不再包含在束中。然后,我们构建一个损失函数,试图通过最大化相对于其他假设的分数来尽可能将“黄金标准”动作序列(用蓝色突出显示)推到束的顶部。虽然我们不会在这里深入讨论如何构建这个损失函数的细节,但我们建议您参考 2016 年 Andor 等人的原始论文。³ 该论文还描述了一个更复杂的词性标注器,它使用全局归一化和束搜索来显著提高准确性(与我们在本章前面构建的词性标注器相比)。 ![](img/fdl2_0912.png) @@ -998,13 +998,13 @@ loss += step_loss / steps_per_checkpoint current_step += 1 随着最基本的架构被理解和实现,我们现在将继续研究 RNN 的令人兴奋的新发展,并开始探索更复杂的学习。 -# 自注意力和变压器 +# 自注意力和 Transformer -早些时候,我们讨论了一种注意力形式,这种形式首次在 2015 年由 Bahdanau 等人提出。具体来说,我们使用一个简单的前馈神经网络来计算每个编码器隐藏状态与当前时间步的解码器状态的对齐分数。在本节中,我们将讨论一种称为*缩放点积注意力*的不同形式的注意力,它在*自注意力*中的使用,以及*变压器*,这是一种最近的语言建模突破。基于变压器的模型主要取代了 LSTM,并已被证明在许多序列到序列问题中具有更高的质量。 +早些时候,我们讨论了一种注意力形式,这种形式首次在 2015 年由 Bahdanau 等人提出。具体来说,我们使用一个简单的前馈神经网络来计算每个编码器隐藏状态与当前时间步的解码器状态的对齐分数。在本节中,我们将讨论一种称为*缩放点积注意力*的不同形式的注意力,它在*自注意力*中的使用,以及*Transformer*,这是一种最近的语言建模突破。基于 Transformer 的模型主要取代了 LSTM,并已被证明在许多序列到序列问题中具有更高的质量。 点积注意力实际上就像听起来的那样简单——这种方法计算编码器隐藏状态之间的点积作为对齐分数。这些权重用于计算上下文向量,这是编码器隐藏状态的凸组合(通过 softmax)。为什么使用点积来衡量对齐?正如我们在第一章中学到的,两个向量的点积可以表示为两个向量的范数和它们之间夹角的余弦的乘积。当两个向量之间的夹角趋近于零时,余弦趋近于一。此外,从三角学中我们知道,当输入角度在 0 度到 180 度之间时,余弦的范围是 1 到-1,这是我们需要考虑的角度域的唯一部分。点积具有一个很好的性质,即当两个向量之间的夹角变小时,点积变大。这使我们能够将点积作为相似性的自然度量。 -2017 年,Vaswani 等人^(7)通过引入一个缩放因子——隐藏状态维度的平方根,对现有的点积注意力框架进行了修改。Vaswani 等人承认,随着隐藏状态表示在维度上变得越来越大,我们预计会看到更多高幅度的点积。为了理解包含这个缩放因子的原因,假设每个 的索引都是从均值为零、单位方差的随机变量中独立且相同地抽取的。让我们计算它们的点积的期望和方差: +2017 年,Vaswani 等人⁷通过引入一个缩放因子——隐藏状态维度的平方根,对现有的点积注意力框架进行了修改。Vaswani 等人承认,随着隐藏状态表示在维度上变得越来越大,我们预计会看到更多高幅度的点积。为了理解包含这个缩放因子的原因,假设每个 的索引都是从均值为零、单位方差的随机变量中独立且相同地抽取的。让我们计算它们的点积的期望和方差: @@ -1038,16 +1038,16 @@ loss += step_loss / steps_per_checkpoint current_step += 1 在本章中,我们深入探讨了序列分析的世界。我们分析了如何修改前馈网络以处理序列,发展了对 RNN 的深刻理解,并探讨了注意力机制如何实现从语言翻译到音频转录等令人难以置信的应用。序列分析是一个领域,不仅涉及自然语言问题,还涉及金融领域的主题,比如对金融资产回报的时间序列分析。任何涉及纵向分析或跨时间分析的领域都可以使用本章描述的序列分析应用。我们建议您通过在不同领域实施序列分析来加深对其的理解,并通过将自然语言技术的结果与各领域的最新技术进行比较。在某些情况下,本文介绍的技术可能不是最合适的建模选择,我们建议您深入思考为什么这里所做的建模假设可能不适用于广泛应用。序列分析是一个强大的工具,在几乎所有技术应用中都有一席之地,不仅仅是自然语言。 -^(1) Nivre, Joakim. “Incrementality in Deterministic Dependency Parsing.” *Proceedings of the Workshop on Incremental Parsing: Bringing Engineering and Cognition Together*. Association for Computational Linguistics, 2004; Chen, Danqi, and Christopher D. Manning. “A Fast and Accurate Dependency Parser Using Neural Networks.” *EMNLP*. 2014. +¹ Nivre, Joakim. “Incrementality in Deterministic Dependency Parsing.” *Proceedings of the Workshop on Incremental Parsing: Bringing Engineering and Cognition Together*. Association for Computational Linguistics, 2004; Chen, Danqi, and Christopher D. Manning. “A Fast and Accurate Dependency Parser Using Neural Networks.” *EMNLP*. 2014. -^(2) Andor, Daniel, et al. “Globally Normalized Transition-Based Neural Networks.” *arXiv preprint* *arXiv*:1603.06042 (2016). +² Andor, Daniel, et al. “Globally Normalized Transition-Based Neural Networks.” *arXiv preprint* *arXiv*:1603.06042 (2016). -^(3) 同上。 +³ 同上。 -^(4) Kilian, Joe, 和 Hava T. Siegelmann。“Sigmoid 神经网络的动态普适性。” *信息与计算* 128.1 (1996): 48-56。 +⁴ Kilian, Joe, 和 Hava T. Siegelmann。“Sigmoid 神经网络的动态普适性。” *信息与计算* 128.1 (1996): 48-56。 -^(5) Kiros, Ryan, 等。“Skip-Thought Vectors。” *神经信息处理系统的进展*。2015 年。 +⁵ Kiros, Ryan, 等。“Skip-Thought Vectors。” *神经信息处理系统的进展*。2015 年。 -^(6) Bahdanau, Dzmitry, Kyunghyun Cho, and Yoshua Bengio. “通过联合学习对齐和翻译的神经机器翻译。” *arXiv 预印本 arXiv*:1409.0473 (2014)。 +⁶ Bahdanau, Dzmitry, Kyunghyun Cho, and Yoshua Bengio. “通过联合学习对齐和翻译的神经机器翻译。” *arXiv 预印本 arXiv*:1409.0473 (2014)。 -^(7) Vaswani 等。“注意力就是一切。” *arXiv 预印本 arXiv*:1706.03762 2017 年。 +⁷ Vaswani 等。“注意力就是一切。” *arXiv 预印本 arXiv*:1706.03762 2017 年。 diff --git a/totrans/fund-dl_10.md b/totrans/fund-dl_10.md index 0fdeef3..e624d29 100644 --- a/totrans/fund-dl_10.md +++ b/totrans/fund-dl_10.md @@ -1,4 +1,4 @@ -# 第十章. 生成模型 +# 第十章:生成模型 生成模型试图理解产生我们所看到的数据的*潜在*或基础过程。例如,在分解 MNIST 数据集中的数字图像时,我们可以将生成每个图像的潜在过程的一些属性解释为数字本身(从零到九的离散变量)、将绘制图像的方向或角度、生成图像的大小、线条的粗细以及一些噪声成分(所有这些都是连续变量)。到目前为止,我们关注的是*鉴别*模型,无论是在回归还是分类设置中。在分类设置中,鉴别模型将 MNIST 数据集中的图像作为输入,并尝试确定输入最有可能属于的数字类别,从零到九。生成模型则尝试完全建模数据分布,并在此过程中可能隐含地尝试学习先前提到的一些特征,以生成看起来就像最初来自 MNIST 数据集的图像。请注意,生成建模比鉴别建模更难,因为例如,鉴别模型可能只需要很好地学习几个特征,以令人满意地区分 MNIST 数据集中不同数字之间的差异。生成模型有许多种类,在本章中,我们提供了一个瞥见过去十年才开始蓬勃发展的广阔研究领域。 @@ -601,6 +601,6 @@ Vincent 在 2011 年首次提出了使用