就在几年前,还没有大量深度学习科学家在大公司和初创公司开发智能产品和服务。当我们中最年轻的人(作者)进入这个领域时,机器学习还没有占据日报的头条。我们的父母不知道什么是机器学习,更不用说为什么我们会更喜欢它而不是医学或法律职业。机器学习是一个具有前瞻性的学术学科,在现实世界的应用范围很窄。而这些应用,例如语音识别和计算机视觉,需要大量的领域知识,以至于它们常常被视为完全独立的领域,而机器学习只是其中的一小部分。神经网络作为我们在本书中关注的深度学习模型的前身,被认为是过时的工具。
在过去的五年中,深度学习震惊了世界,推动了计算机视觉,自然语言处理,自动语音识别,强化学习和统计建模等各个领域的快速发展。有了这些先进技术,我们现在可以制造出比以往任何时候都更能驾驶自己的汽车(并且比您可能相信的某些公司还更少的自主性),智能回复系统能够自动起草最平凡的电子邮件以帮助人们摆脱收件箱中大量的邮件所带来的压迫感,以及在像围棋这样的棋类游戏中,软件代理控制着世界上最优秀的人类,这一壮举曾经被认为距今已有几十年了。这些工具已经对行业和社会产生了越来越广泛的影响,改变了电影的制作方式,疾病的诊断方法,并在从天体物理学到生物学的基础科学中发挥着越来越重要的作用。

关于本书

这本书代表了我们的尝试,使深度学习可被容易的接受,讲授包括概念,环境和代码。

一种结合了代码、数学和HTML的媒介

为了使任何计算技术都能发挥其全部作用,一定是可以被很好理解的,充分记录并由成熟,维护良好的工具提供支持。关键思想应该清楚地提炼出来,以最大程度地缩短新学员需要的入职时间。成熟的库应自动执行常见任务,并且示例代码应使从业人员可以轻松地修改、应用和扩展通用应用程序以满足他们的需求。以动态Web应用程序为例。尽管像Amazon之类的众多公司在1990年代成功开发了数据库驱动的Web应用程序,但在过去十年中,这种技术在帮助创意企业家方面的潜力已经得到了更大的发展,这在一定程度上要归功于功能强大,文档完善的框架。
测试深度学习的潜力提出了独特的挑战,因为任何单个应用程序都将各种学科融合在一起。应用深度学习需要同时理解(i)以特定方式提出问题的动机; (ii)给定建模方法的数学; (iii)使模型适合数据的优化算法; (iv)有效训练模型,克服数值计算陷阱并充分利用可用硬件所需的工程设计。教授解决问题所需的批判性思维技能,解决问题的数学方法以及在一个地方实施这些解决方案的软件工具都面临着巨大的挑战。我们在本书中的目标是提供一个统一的资源,以使可能的从业人员快速掌握。
在我们开始本书项目时,没有资源同时(i)是最新的; (ii)涵盖了具有相当技术深度的现代机器学习的全部范围; (iii)对一本引人入胜的教科书所期望的质量进行了交错的阐述,并希望人们能在动手教程中找到干净可运行的代码。我们找到了许多代码示例,这些代码示例散布在各个地方如何使用给定的深度学习框架(例如,如何使用TensorFlow中的矩阵进行基本数值计算)或实现特定技术(例如,用于LeNet,AlexNet,ResNets等的代码段)各种博客文章和GitHub存储库。但是,这些示例通常着重于如何实现给定的方法,而忽略了为何做出某些算法决策的讨论。尽管一些交互式资源偶尔会弹出以解决特定主题,例如在Distill网站上发布的引人入胜的博客文章或个人博客,但它们仅涵盖深度学习中的选定主题,并且通常缺少相关代码。另一方面,虽然出现了几本教科书,最引人注目的是[Goodfellow et al.,2016],它提供了深度学习背后的概念的全面概述,但这些资源并未将描述与代码中概念的实现结合起来,有时使读者对如何实现它们一无所知。而且,太多的资源被隐藏在商业课程提供者的付费内容中。
我们着手创建一种资源,该资源可以(i)每个人免费使用; (ii)提供足够的技术深度,为实际成为应用机器学习科学家的道路提供起点; (iii)包含可运行的代码,向读者展示如何解决实际问题; (iv)允许我们以及整个社区进行快速更新; (v)以论坛为补充,以互动方式讨论技术细节并回答问题。
这些目标经常冲突。最好在LaTeX中管理和布置方程式,定理和引用。最好用Python描述代码。网页是HTML和JavaScript原生的。此外,我们希望内容既可以作为可执行代码,作为实体书,可以下载的PDF,又可以作为网站在Internet上访问。目前,尚无工具和完美适合这些需求的工作流程,因此我们必须组装自己的工具。我们将在19.6节中详细介绍我们的方法。我们选择在GitHub上共享源代码并允许进行编辑,使用Jupyter笔记本混合代码,方程式和文本,使用Sphinx作为呈现引擎以生成多个输出,并使用Discourse进行论坛讨论。尽管我们的系统还不完善,但是这些选择在竞争中引起了很大的折衷。我们相信这可能是使用这种集成的工作流程出版的第一本书。

通过动手实践来学习

许多教科书讲授一系列主题,每个主题都非常详尽。例如,克里斯·毕晓普(Chris Bishop)的优秀教科书(毕晓普(Bishop),2006年)详尽地讲授了每个主题,甚至进入线性回归这一章都需要大量的工作。虽然专家完全喜欢本书,但它的完整性对于初学者而言,此属性限制了它作为介绍性文本的用处。
在本书中,我们会及时的讲解大多数概念,即您将在需要一些概念来完成一些实际目的时再立即学习它们。尽管我们一开始需要一些时间来讲解基础知识(例如线性代数和概率),但我们希望您在担心更多深奥的概率分布之前,先体验下训练您的第一个模型所带来的满足感。
除了一些在基础数学背景下提供速成课程的初步notebook之外,每个后续章节都介绍了合理数量的新概念,并使用真实的数据集提供了一个独立的工作示例。这提出了组织上的挑战。从逻辑上讲,某些模型可以组合在一个notebook中。通过连续执行多个模型,可以使得一些想法的传授达到最好的效果。另一方面,遵守一个工作示例(一个notebook)的策略有一个很大的优势:这使您可以尽可能容易地利用我们的代码来开始自己的研究项目。只需复制notebook并修改即可。
我们将根据需要将可运行代码与背景材料进行交织。通常,在充分解释工具之前,我们经常会在使工具可用方面出错(我们将在后面解释背景)。例如,在充分说明其有用性或有效性之前,我们可能使用随机梯度下降法。这有助于为从业人员提供必要的弹药以迅速解决问题,代价是要求读者信任我们的一些策展决策。
这本书将从头开始教授深度学习的概念。有时,我们想深入研究有关模型的详细信息,这些信息通常会被深度学习框架的高级抽象对用户隐藏。特别是在基础教程中,我们希望您了解给定层或优化器中发生的所有事情。在这些情况下,我们通常会提供示例的两个版本:一个版本(scratch)是,我们从头开始实现所有操作,仅依靠NumPy接口和自动区分,另一个示例(更实际的示例),使用简洁的代码编写的高级API深度学习框架。一旦我们教了您某些组件的工作原理,我们就可以在后续教程中使用高级API。

内容和结构

这本书可以大致分为三部分,在图1中用不同的颜色表示。

前言 - 图1
图1 内容结构

  • 第一部分涵盖基础知识和预备知识。第1章介绍了深度学习。然后在第2章中,我们将快速帮助您掌握动手深度学习所需的先决条件,例如如何存储和操作数据,以及如何基于线性代数,微积分和概率。第3章和第4章介绍了深度学习的最基本概念和技术,例如线性回归,多层感知机和正则化。
  • 接下来的五章重点介绍现代深度学习技术。第5章介绍了深度学习计算的各个关键组成部分,并为我们随后实施更复杂的模型奠定了基础。接下来,在第6章和第7章中,我们将介绍卷积神经网络(CNN),这些功能强大的工具构成了大多数现代计算机视觉系统的骨干。随后,在第8章和第9章中,我们介绍了递归神经网络(RNN),这些模型利用数据中的时间或顺序结构,并且通常用于自然语言处理和时间序列预测。在第10章中,我们介绍了一类新的模型,该模型采用了一种称为注意力机制的技术,并且最近它们开始在自然语言处理中取代RNN。这些部分将使您快速掌握大多数现代深度学习应用程序背后的基本工具。
  • 第三部分讨论可扩展性,执行效率和应用。首先,在第11章中,我们讨论了用于训练深度学习模型的几种常见优化算法。在第12章研究了影响深度学习代码的计算性能的几个关键因素。在第13章中,我们说明了深度学习在计算机视觉中的主要应用。在第14章和第15章中,我们展示了如何预训练语言表示模型并将其应用于自然语言处理任务。

    代码

    本书的大多数部分都采用了可执行代码,因为我们相信在深度学习中交互式学习体验的重要性。目前,某些直觉的知识只能通过反复试验来发展,以小方式调整代码并观察结果。理想情况下,一个优雅的数学理论可以准确地告诉我们如何调整代码以获得所需的结果。不幸的是,目前这种高雅的理论使我们望而却步。尽管我们尽了最大的努力,但仍缺乏对各种技术的形式化解释,这不仅是因为表征这些模型的数学方法非常困难,而且还因为对这些主题的认真研究才刚刚起步。我们希望随着深度学习理论的发展,本书的未来版本将能够在当前版本无法提供的地方提供见解。
    有时为避免不必要的重复,我们将本书中经常导入和引用的函数和类等封装在d2l包中。对于要保存在包中的任何模块,例如函数,类或多个导入,我们将其标记为#@save。我们将在19.7节中详细介绍这些功能和类。d2l软件包轻巧,仅需要以下软件包和模块作为依赖项:

    1. #@save
    2. import collections
    3. from collections import defaultdict
    4. from IPython import display
    5. import math
    6. from matplotlib import pyplot as plt
    7. import os
    8. import pandas as pd
    9. import random
    10. import re
    11. import shutil
    12. import sys
    13. import tarfile
    14. import time
    15. import requests
    16. import zipfile
    17. import hashlib
    18. d2l = sys.modules[__name__]

    本书中的大多数代码都基于Apache MXNet。 MXNet是用于深度学习和AWS(Amazon Web Services)以及许多大学和公司的首选的开源框架。本书中的所有代码均已通过最新MXNet版本的测试。但是,由于深度学习的飞速发展,印刷版中的某些代码在MXNet的未来版本中可能无法正常工作。但是,我们计划保持在线版本为最新。如果遇到任何此类问题,请咨询安装(第9页)以更新代码和运行时环境。
    这是我们从MXNet导入模块的方式。

    1. #@save
    2. from mxnet import autograd, context, gluon, image, init, np, npx
    3. from mxnet.gluon import nn, rnn

    目标读者

    本书面向寻求扎实的深度学习实践技术的学生(本科生或研究生),工程师和研究人员。因为我们从头开始解释每个概念,所以不需要深度学习或机器学习的先前背景。全面说明深度学习的方法需要一些数学和编程知识,但我们仅假设您具备一些基础知识,包括线性代数,演算,概率和Python编程(非常基础的知识)。此外,在附录中,我们提供了本书中涵盖的大多数数学的复习课程。大多数时候,我们会优先考虑直觉和思想,而不是严格的数学。有很多很棒的书可以引导感兴趣的读者。例如,Bela Bollobas的《Linear Analysis》(Bollobas,1999)涵盖了线性代数和泛函分析。 《All of Statistics》(Wasserman,2013年)是一本很棒的统计指南。而且,如果您以前没有使用过Python,则可能需要仔细阅读Python tutorial

    论坛

    与此书相关的是,我们已经启动了一个讨论论坛,位于discuss.d2l.ai。如果您对本书的任何部分有疑问,可以在每章末尾找到相关的讨论页面链接。

    致谢

    我们感谢中英文草案的数百位撰稿人。他们帮助改善了内容并提供了宝贵的反馈。具体来说,我们感谢这份英语草案的每位撰稿人为所有人提供的帮助。他们的GitHub ID或名字为(无特定顺序):alxnorden, avinashingit, bowen0701, brettkoonce, Chaitanya PrakashBapat, 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, Vish-wesh Ravi Shrimali, YaYaB, Yuhong Chen, Evgeniy Smirnov, lgov, Simon Corston-Oliver, IgorDzreyev, Ha Nguyen, pmuens, Andrei Lukovenko, senorcinco, vfdev-5, dsweet, MohammadMahdi Rahimi,Abhishek Gupta, uwsd, DomKM, Lisa Oakley, Bowen Li, Aarush Ahuja, PrasanthBuddareddygari, brianhendee, mani2106, mtn, lkevinzc, caojilin, Lakshya, Fiete Lüer, SurbhiVijayvargeeya, Muhyun Kim, dennismalmgren, adursun, Anirudh Dagar, liqingnz, Pedro Lar-roy, lgov, ati-ozgur, Jun Wu, Matthias Blume, Lin Yuan, geogunow, Josh Gardner, MaximilianBöther, Rakib Islam, Leonard Lausen, Abhinav Upadhyay, rongruosong, Steve Sedlmeyer, Rus-lan 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, 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, hinavsp0730, jonathanhrandall, ysraell, Nodar Okroshiashvili, UgurKap,Jiyang Kang, StevenJokes, Tomer Kaftan, liweiwp, netyster, ypandya, ishantTharani, 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, 15930399, tayfununal, steinsag, charleybeller, Andrew Lumsdaine, Jiekui Zhang,Deepak Pathak, Florian Donhauser, Tim Gates, Adriaan Tijsseling, Ron Medina, Gaurav Saha,Murat Semerci, Lei Mao7.
    我们感谢Amazon Web Services,尤其是Swami Sivasubramanian,Raju Gulabani,Charlie Bell和Andrew Jassy在编写本书时的慷慨支持。没有可获得的时间,资源,与同事的讨论以及不断的鼓励,就不会有本书的诞生。

    总结

    深度学习彻底改变了模式识别,引入了现在可支持多种技术的技术,包括计算机视觉,自然语言处理,自动语音识别。

  • 要成功应用深度学习,您必须了解如何提出问题,建模数学,将模型拟合到数据的算法以及实现所有这些的工程技术

  • 本书在一个地方提供了全面的资源,包括文本,图形,数学和代码
  • 如果想要提出与本书有关的问题,请访问我们的论坛,网址为https://discuss.d2l.ai/
  • 所有notebook均可在GitHub上下载

    练习

  1. 注册一个账号用于本书的论坛https://discuss.d2l.ai/
  2. 在电脑上安装python
  3. 单击该部分底部的论坛链接,您可以在其中寻求作者的帮助和讨论,并通过吸引作者和更广泛的社区来找到问题的答案。

https://discuss.d2l.ai/t/18