1.前言 2.预备知识 3.线性神经网络 4.多层感知机 5.深度学习计算 1.优化算法 6.卷积神经网络 8,循环神经网络 12.计算性能 9.现代循环神经网络 7.现代卷积神经网 13.计算机视觉 14-15.自然语言处理 10.注意力机制 图1:全书结构 ·第一部分包括基础知识和预备知识。1节提供深度学习的入门课程。然后在2节中,我们将快速向你介 绍实践深度学习所需的前提条件、例如如何存储和处理数据以及如何应用基干线性代数、微积分和概 率基本概念的各种数值运算。3节和4节涵盖了深度学习的最基本概念和技术,例如线性回归、多层感 知机和正则化。 ,接下来的五章集中讨论现代深度学习技术。5节描述了深度学习计算的各种关键组件,并为我们随后 实现更复杂的模型奠定了基础。接下来,在6节和7节中,我们介绍了卷积神经网络(convolutional neural network,CNN),这是构成大多数现代计算机视觉系统骨干的强大工具。随后,在8节和9节 中,我们引入了循环神经网络(recurrent neural network,RN),这是一种利用数据中的时间或序列 结构的模型,通常用于自然语言处理和时间序列预测。在10节中,我们介绍了一类新的模型,它采用 了一种称为注意力机制的技术,最近它们已经开始在自然语言处理中取代循环神经网络。这一部分将 帮助你快速了解大多数现代深度学习应用背后的基本工具。 ,第三部分讨论可伸缩性、效率和应用程序。首先,在11节中,我们讨论了用于训练深度学习模型的几 种常用优化算法。 下一章12节将探讨影响深度学习代码计算性能的几个关键因素。在13节中, 我们展 示了深度学习在计算机视觉中的主要应用。在14节和15节中,我们展示了如何预训练语言表示模型并 将其应用于自然语言处理任务。 目录
图1: 全书结构 • 第⼀部分包括基础知识和预备知识。1节 提供深度学习的⼊⻔课程。然后在 2节 中,我们将快速向你介 绍实践深度学习所需的前提条件,例如如何存储和处理数据,以及如何应⽤基于线性代数、微积分和概 率基本概念的各种数值运算。3节 和 4节 涵盖了深度学习的最基本概念和技术,例如线性回归、多层感 知机和正则化。 • 接下来的五章集中讨论现代深度学习技术。5节 描述了深度学习计算的各种关键组件,并为我们随后 实现更复杂的模型奠定了基础。接下来,在 6节 和 7节 中,我们介绍了卷积神经⽹络(convolutional neural network,CNN),这是构成⼤多数现代计算机视觉系统⻣⼲的强⼤⼯具。随后,在 8节 和 9节 中,我们引⼊了循环神经⽹络(recurrent neural network,RNN),这是⼀种利⽤数据中的时间或序列 结构的模型,通常⽤于⾃然语⾔处理和时间序列预测。在 10节 中,我们介绍了⼀类新的模型,它采⽤ 了⼀种称为注意⼒机制的技术,最近它们已经开始在⾃然语⾔处理中取代循环神经⽹络。这⼀部分将 帮助你快速了解⼤多数现代深度学习应⽤背后的基本⼯具。 • 第三部分讨论可伸缩性、效率和应⽤程序。⾸先,在 11节 中,我们讨论了⽤于训练深度学习模型的⼏ 种常⽤优化算法。下⼀章 12节 将探讨影响深度学习代码计算性能的⼏个关键因素。在 13节 中,我们展 ⽰了深度学习在计算机视觉中的主要应⽤。在 14节 和 15节 中,我们展⽰了如何预训练语⾔表⽰模型并 将其应⽤于⾃然语⾔处理任务。 4 ⽬录
代码 本书的大部分章节都以可执行代码为特色,因为我们相信交互式学习体验在深度学习中的重要性。目前,某 些直觉只能通过试错、小幅调整代码并观察结果来发展。理想情况下,一个优雅的数学理论可能会精确地告 诉我们如何调整代码以达到期望的结果。不幸的是,这种优雅的理论目前还没有出现。尽管我们尽了最大努 但仍然缺乏对各种技术的正式解释,这既是因为描述这些模型的数学可能非常困难, 也是因为对这些主 题的认真研究最近才进入高南潮。我们希望随着深度学习理论的发展,这本书的未来版本将能够在当前版本无 法提供的地方提供见解。 有时,为了避免不必要的重复,我们将本书中经常导入和引用的函数、类等封装在21包中。对于要保存到 包中的任何代码块,比如一个函数、一个类或者多个导入,我们都会标记为#@save。我们在16.6节中提供 了这些函数和类的详细描述。d2L软件包是轻量级的,仅需要以下软件包和模块作为依赖项: #@save import collections import hashlib import math import os import random import re import shutil import sys import tarfile import time import zipfile from collections import defaultdict rom IPythor mport display from matplotlib import pyplot as plt from matplotlib inline import backend inline d2l sys.modules[__name__] 本书中的大部分代码都是基于PyTorch的。PyTorch是一个开源的深度学习框架,在研究界非常受欢迎。本书 中的所有代码都在最新版本的PyTorch下通过了测试。但是,由于深度学习的快速发展, 一些在印刷版中代 码可能在PyTorchf的未来版本无法正常工作。但是,我们计划使在线版本保持最新。如果你遇到任何此类问 题,请查看安装(page9)以更新你的代码和运行时环境。 下面是我们如何从PyTorch导入模块。 asave import numpy as np port torc import torchvision es on next page
代码 本书的⼤部分章节都以可执⾏代码为特⾊,因为我们相信交互式学习体验在深度学习中的重要性。⽬前,某 些直觉只能通过试错、⼩幅调整代码并观察结果来发展。理想情况下,⼀个优雅的数学理论可能会精确地告 诉我们如何调整代码以达到期望的结果。不幸的是,这种优雅的理论⽬前还没有出现。尽管我们尽了最⼤努 ⼒,但仍然缺乏对各种技术的正式解释,这既是因为描述这些模型的数学可能⾮常困难,也是因为对这些主 题的认真研究最近才进⼊⾼潮。我们希望随着深度学习理论的发展,这本书的未来版本将能够在当前版本⽆ 法提供的地⽅提供⻅解。 有时,为了避免不必要的重复,我们将本书中经常导⼊和引⽤的函数、类等封装在d2l包中。对于要保存到 包中的任何代码块,⽐如⼀个函数、⼀个类或者多个导⼊,我们都会标记为#@save。我们在 16.6节 中提供 了这些函数和类的详细描述。d2l软件包是轻量级的,仅需要以下软件包和模块作为依赖项: #@save import collections import hashlib import math import os import random import re import shutil import sys import tarfile import time import zipfile from collections import defaultdict import pandas as pd import requests from IPython import display from matplotlib import pyplot as plt from matplotlib_inline import backend_inline d2l = sys.modules[__name__] 本书中的⼤部分代码都是基于PyTorch的。PyTorch是⼀个开源的深度学习框架,在研究界⾮常受欢迎。本书 中的所有代码都在最新版本的PyTorch下通过了测试。但是,由于深度学习的快速发展,⼀些在印刷版中代 码可能在PyTorch的未来版本⽆法正常⼯作。但是,我们计划使在线版本保持最新。如果你遇到任何此类问 题,请查看安装 (page 9) 以更新你的代码和运⾏时环境。 下⾯是我们如何从PyTorch导⼊模块。 #@save import numpy as np import torch import torchvision (continues on next page) ⽬录 5
(continued from previous page) from PIL import Image from torch import functional as F rom torch.utils import data from torchvision import transforms 目标受众 本书面向学生(本科生或研究生)、工程师和研究人员,他们希望扎实掌握深度学习的实用技术。因为我们 从头开始解释每个概念,所以不需要过往的深度学习或机器学习背景。全面解释深度学习的方法需要一些 数学和编程,但我们只假设你了解一些基础知识,包括线性代数、微积分、概率和非常基础的Pythor编程。 此外,在附录中,我们提供了本书所涵盖的大多数数学知识的复习。大多数时候,我们会优先考虑直觉和想 法,而不是数学的严谨性。有许多很棒的书可以引导感兴趣的读者走得更远。Bela Bollobas的《线性分析》 [Bollobas,.1999]对线性代数和函数分析进行了深入的研究。【Wasserman,2013】是一本很好的统计学指南。 如果你以前没有使用过Pythoni语言,那么你可能想要仔细阅读这个Python教程。 论坛 与本书相关,我们已经启动了一个论坛,在discuss..d21.ai。当你对本书的任何一节有疑向时,你可以在每- 节的末尾找到相关的讨论页链接。 致谢 我们感谢中英文草稿的数百位撰稿人。他们帮助改进了内容并提供了宝贵的反馈。特别地,我们要感谢这份 中文稿的每一位撰稿人,是他们的无私奉献让这本书变得更好。他们的GitHubID或姓名是(没有特定顺序) alxnorden,avinashingit,bowen0701,brettkoonce,Chaitanya Prakash Bapat,cryptonaut,Davide Fiocco, edgarroman,gkutiel,John Mitro,Liang Pu,Rahul Agarwal,Mohamed Ali Jamaoui,Michael (Stu)Stew- tpdi,vermicelli,Vishaal Kapoor,Vishwesh Ravi Shrimali,YaYaB,Yuhong Chen,Evgeniy Smirnov,lgov,Si- mon Corston-Oliver,Igor Dzreyev,Ha Nguyen,pmuens,Andrei Lukovenko,senorcinco,vfdev-5,dsweet, Mohammad Mahdi Rahimi,Abhishek Gupta,uwsd,DomKM,Lisa Oakley,Bowen Li,Aarush Ahuja,Pras anth Buddareddygari,brianhendee,mani2106,mtn,lkevinzc,caojilin,Lakshva,Fiete Luer,Surbhi Vijay vargeeya,Muhyun Kim,dennismalmgren,adursun,Anirudh Dagar,liqingnz,Pedro Larroy,Igov,ati-ozgur, un Wu,Matthias Blume,Lin Yuan,geogunow,Josh Gardner,Maximilian Bother,Rakib Islam,Leon Lausen,Abhinav Upadhyay,rongruosong,Steve Sedlmeyer,Ruslan Baratov,Rafael Schlatter,liusy182,Gi annis Pappas,ati-ozgur,qbaza,dchoi77,Adam Gerson,Phuc Le,Mark Atwood,christabella,vn09,Haibin Lin,jjangga0214,RichyChen,noelo,hansent,Giel Dops,dvincent1337,WhiteD3vil,Peter Kulits,codypenta, s.d2l.ai/ 目录
(continued from previous page) from PIL import Image from torch import nn from torch.nn import functional as F from torch.utils import data from torchvision import transforms ⽬标受众 本书⾯向学⽣(本科⽣或研究⽣)、⼯程师和研究⼈员,他们希望扎实掌握深度学习的实⽤技术。因为我们 从头开始解释每个概念,所以不需要过往的深度学习或机器学习背景。全⾯解释深度学习的⽅法需要⼀些 数学和编程,但我们只假设你了解⼀些基础知识,包括线性代数、微积分、概率和⾮常基础的Python编程。 此外,在附录中,我们提供了本书所涵盖的⼤多数数学知识的复习。⼤多数时候,我们会优先考虑直觉和想 法,⽽不是数学的严谨性。有许多很棒的书可以引导感兴趣的读者⾛得更远。Bela Bollobas的《线性分析》 [Bollobas, 1999] 对线性代数和函数分析进⾏了深⼊的研究。[Wasserman, 2013] 是⼀本很好的统计学指南。 如果你以前没有使⽤过Python语⾔,那么你可能想要仔细阅读这个Python教程3。 论坛 与本书相关,我们已经启动了⼀个论坛,在discuss.d2l.ai4。当你对本书的任何⼀节有疑问时,你可以在每⼀ 节的末尾找到相关的讨论⻚链接。 致谢 我们感谢中英⽂草稿的数百位撰稿⼈。他们帮助改进了内容并提供了宝贵的反馈。特别地,我们要感谢这份 中⽂稿的每⼀位撰稿⼈,是他们的⽆私奉献让这本书变得更好。他们的GitHub ID或姓名是(没有特定顺序): alxnorden, avinashingit, bowen0701, brettkoonce, Chaitanya Prakash Bapat, cryptonaut, Davide Fiocco, edgarroman, gkutiel, John Mitro, Liang Pu, Rahul Agarwal, Mohamed Ali Jamaoui, Michael (Stu) Stewart, Mike Müller, NRauschmayr, Prakhar Srivastav, sad-, sfermigier, Sheng Zha, sundeepteki, topecongiro, tpdi, vermicelli, Vishaal Kapoor, Vishwesh Ravi Shrimali, YaYaB, Yuhong Chen, Evgeniy Smirnov, lgov, Simon Corston-Oliver, Igor Dzreyev, Ha Nguyen, pmuens, Andrei Lukovenko, senorcinco, vfdev-5, dsweet, Mohammad Mahdi Rahimi, Abhishek Gupta, uwsd, DomKM, Lisa Oakley, Bowen Li, Aarush Ahuja, Prasanth Buddareddygari, brianhendee, mani2106, mtn, lkevinzc, caojilin, Lakshya, Fiete Lüer, Surbhi Vijayvargeeya, Muhyun Kim, dennismalmgren, adursun, Anirudh Dagar, liqingnz, Pedro Larroy, lgov, ati-ozgur, Jun Wu, Matthias Blume, Lin Yuan, geogunow, Josh Gardner, Maximilian Böther, Rakib Islam, Leonard Lausen, Abhinav Upadhyay, rongruosong, Steve Sedlmeyer, Ruslan Baratov, Rafael Schlatter, liusy182, Giannis Pappas, ati-ozgur, qbaza, dchoi77, Adam Gerson, Phuc Le, Mark Atwood, christabella, vn09, Haibin Lin, jjangga0214, RichyChen, noelo, hansent, Giel Dops, dvincent1337, WhiteD3vil, Peter Kulits, codypenta, 3 http://learnpython.org/ 4 https://discuss.d2l.ai/ 6 ⽬录
joseppinilla,ahmaurya,karolszk,heytitle,Peter Goetz,rigtorp,Tiep Vu,sfilip,mlxd,Kale-ab Tessera, Sanjar Adilov,MatteoFe ra,hsneto,Kataryna Biesialska,Gregor Bruss,Duy-Thanh Doan,paulaurel graytowne,Duc Pham,s7423,Jaedong Hwang,Yida Wang,cys4,clhm,Jean Kaddour,austinmw,trebe jahr,tbaums,Cuong V.Nguyen,pavelkomarov,vzlamal,NotAnotherSystem,J-Arun-Mani,jancio,eldark- urtic,the-great-shazbot,doctorcolossus,gducharme,cclauss,Daniel-Mietchen,hoonose,biagiom,abhi- navsp0730,jonathanhrandall,ysraell,Nodar Okroshiashvili,UgurKap,Jiyang Kang,StevenJokes,Tomer Kaftan,liweiwp,netyster,ypandya,NishantTharani,heiligerl,SportsTHU,Hoa Nguyen,manuel-arno- korfmann-webentwicklung,aterzis-personal,nxby,Xiaoting He,Josiah Yoder,mathresearch,mzz2017, jroberayalas,iluu,ghejc,BSharmi,vkramdev,simonwardjones,LakshKD,TalNeoran,djliden,Nikhil95 Oren Barkan,guoweis,haozhu233,pratikhack,315930399,tayfununal,steinsag,charleybeller,Andrew Lumsdaine.liekui Zhang,Deepak Pathak.Florian Donhauser.Tim Gates.Adriaan Tiisseling.Ron Medina. Gaurav Saha,Murat Semerci,Lei Mao,Zhu Yuanxiang,thebesttv,Quanshangze Du,Yanbo Chen 我f们感谢Amazon Web Services,,特别是Swami Sivasubramanian、.Peter DeSantis、Adam Selipsky和Andrev Jssy对撰写本书的慷慨支持。如果没有可用的时间、资源、与同事的讨论和不断的鼓励,这本书就不会出版。 小结 ,深度学习已经制底改变了揽式识别引入了一系列技术句括计镜机视微自然语言处理。自动语音识 别。 ,要成功地应用深度学习,你必须知道如何抛出一个问题、建模的数学方法、将模型与数据拟合的算法。 以及实现所有这些的工程技术。 ·这本书提供了一个全面的资源,包括文本、图表、数学和代码,都集中在一个地方。 ,要回答与本书相关的向题,请访问我们的论坛discuss.d21.a ·所有们upyteri记事本都可以在GitHub.上下载。 练习 1.在本书discuss..d21.ai的论坛上注册帐户。 2.在你的计算机上安装Python 3.沿着本节底部的链接进入论坛,在那里你可以寻求帮助、讨论这本书,并通过与作者和社区接触来找到 间题的答案。 Discussions? 6 httns-lldiscuss d21 ail 7 https://discuss.d21.ai/t/2086 目录
joseppinilla, ahmaurya, karolszk, heytitle, Peter Goetz, rigtorp, Tiep Vu, sfilip, mlxd, Kale-ab Tessera, Sanjar Adilov, MatteoFerrara, hsneto, Katarzyna Biesialska, Gregory Bruss, Duy‒Thanh Doan, paulaurel, graytowne, Duc Pham, sl7423, Jaedong Hwang, Yida Wang, cys4, clhm, Jean Kaddour, austinmw, trebeljahr, tbaums, Cuong V. Nguyen, pavelkomarov, vzlamal, NotAnotherSystem, J-Arun-Mani, jancio, eldarkurtic, the-great-shazbot, doctorcolossus, gducharme, cclauss, Daniel-Mietchen, hoonose, biagiom, abhinavsp0730, jonathanhrandall, ysraell, Nodar Okroshiashvili, UgurKap, Jiyang Kang, StevenJokes, Tomer Kaftan, liweiwp, netyster, ypandya, NishantTharani, heiligerl, SportsTHU, Hoa Nguyen, manuel-arnokorfmann-webentwicklung, aterzis-personal, nxby, Xiaoting He, Josiah Yoder, mathresearch, mzz2017, jroberayalas, iluu, ghejc, BSharmi, vkramdev, simonwardjones, LakshKD, TalNeoran, djliden, Nikhil95, Oren Barkan, guoweis, haozhu233, pratikhack, 315930399, tayfununal, steinsag, charleybeller, Andrew Lumsdaine, Jiekui Zhang, Deepak Pathak, Florian Donhauser, Tim Gates, Adriaan Tijsseling, Ron Medina, Gaurav Saha, Murat Semerci, Lei Mao, Zhu Yuanxiang, thebesttv, Quanshangze Du, Yanbo Chen。 我们感谢Amazon Web Services,特别是Swami Sivasubramanian、Peter DeSantis、Adam Selipsky和Andrew Jassy对撰写本书的慷慨⽀持。如果没有可⽤的时间、资源、与同事的讨论和不断的⿎励,这本书就不会出版。 ⼩结 • 深度学习已经彻底改变了模式识别,引⼊了⼀系列技术,包括计算机视觉、⾃然语⾔处理、⾃动语⾳识 别。 • 要成功地应⽤深度学习,你必须知道如何抛出⼀个问题、建模的数学⽅法、将模型与数据拟合的算法, 以及实现所有这些的⼯程技术。 • 这本书提供了⼀个全⾯的资源,包括⽂本、图表、数学和代码,都集中在⼀个地⽅。 • 要回答与本书相关的问题,请访问我们的论坛discuss.d2l.ai5 . • 所有Jupyter记事本都可以在GitHub上下载。 练习 1. 在本书discuss.d2l.ai6的论坛上注册帐⼾。 2. 在你的计算机上安装Python。 3. 沿着本节底部的链接进⼊论坛,在那⾥你可以寻求帮助、讨论这本书,并通过与作者和社区接触来找到 问题的答案。 Discussions7 5 https://discuss.d2l.ai/ 6 https://discuss.d2l.ai/ 7 https://discuss.d2l.ai/t/2086 ⽬录 7
安装 我们需要配置一个环境来运行Python、Jupyter Notebook、相关库以及运行本书所需的代码,以快速入门并 获得动手学习经验。 安装Miniconda 最简单的方法就是安装依赖Python3.x的Miniconda。如果已安装conda,.则可以跳过以下步骤。访 问Minicondal网站,根据Python3.x版本确定适合你的系统的版本。 如果你使用macOS,假设你的Python版本是3.8(我们的测试版本),你将下载名称包含字符串“MacOSX 的bash脚本,并执行以下操作: #文件名可能会更改 sh Miniconda3-py38_4.10.3-MacOSX-x86_64.sh-b 如果你使用Linux,假设你的Python版本是3.8(我们的测试版本),你将下载名称包含字符串“Linux'”的ash脚 本,并执行以下操作 #文件名可能会更改 sh Miniconda3-py38_4.10.3-Linux-x86_64.sh-b 接下来,初始化终端Shell,.以便我们可以直接运行conda。. -/miniconda3/bin/conda init 现在关闭并重新打开当前的shell。.你应该能用下面的命令创建一个新的环境: https://conda.io/en/ates/miniconda.html 9
安装 我们需要配置⼀个环境来运⾏ Python、Jupyter Notebook、相关库以及运⾏本书所需的代码,以快速⼊⻔并 获得动⼿学习经验。 安装 Miniconda 最简单的⽅法就是安装依赖Python 3.x的Miniconda8。如果已安装conda,则可以跳过以下步骤。访 问Miniconda⽹站,根据Python3.x版本确定适合你的系统的版本。 如果你使⽤macOS,假设你的Python版本是3.8(我们的测试版本),你将下载名称包含字符串“MacOSX” 的bash脚本,并执⾏以下操作: # ⽂件名可能会更改 sh Miniconda3-py38_4.10.3-MacOSX-x86_64.sh -b 如果你使⽤Linux,假设你的Python版本是3.8(我们的测试版本),你将下载名称包含字符串“Linux”的bash脚 本,并执⾏以下操作: # ⽂件名可能会更改 sh Miniconda3-py38_4.10.3-Linux-x86_64.sh -b 接下来,初始化终端Shell,以便我们可以直接运⾏conda。 ~/miniconda3/bin/conda init 现在关闭并重新打开当前的 shell。你应该能⽤下⾯的命令创建⼀个新的环境: 8 https://conda.io/en/latest/miniconda.html 9