- 文档
- 教程
- 人工智能
- 深度学习
- NLP
- 计算机视觉
- 强化学习
【免费下载链接】d2l-en
Interactive deep learning book with multi-framework code, math, and discussions. Adopted at 500 universities from 70 countries including Stanford, MIT, Harvard, and Cambridge.
本篇文章以《Dive into Deep Learning》(d2l-en,中文名《动手学深度学习》)的开源仓库前言章节为主体,梳理这本交互式深度学习教材的写作理念、三大部分内容结构、"边做边学"的教学法,以及贯穿全书、用#@save标记累积而成的d2l工具包及其多框架实现。读完本文,你将理解该仓库的整体章节组织方式、d2l包的依赖与常用类/函数,并能按照官方安装流程在自己的机器上搭建环境、运行 Notebook,以及通过 GitHub 工作流参与本书的持续改进。
前言背景:深度学习从边缘学科到主流技术
前言回顾了一个并不久远的事实:在短短几年内,深度学习从一门"蓝天空想"式的学术分支,迅速发展为驱动计算机视觉、自然语言处理、自动语音识别、强化学习与生物医学信息学等众多领域快速进步的通用技术。今天,它已经可以驱动自动驾驶汽车、通过追问澄清问题来调试代码的对话系统,以及在围棋等棋类游戏中战胜人类顶尖棋手的软件智能体;同时也在改变电影制作、疾病诊断的方式,并在天体物理、气候建模、天气预报与生物医学等基础科学中扮演越来越重要的角色。
这一背景决定了本书的出发点:深度学习应用本身横跨多个学科,要想真正掌握它,需要同时理解五个层面的内容:
- 问题的建模动机——为什么要把问题以特定方式表述;
- 模型的数学形式——给定模型对应的数学表达;
- 优化算法——如何将模型拟合到数据;
- 统计原理——何时可以期望模型泛化到未见数据,以及如何验证泛化确实发生;
- 工程技巧——如何高效训练模型、规避数值计算的陷阱并充分利用硬件。
前言明确指出,当时市场上没有一份资源能够同时做到:保持内容更新、覆盖现代机器学习实践的足够技术深度、并且把教科书级别的讲解与可运行、干净的代码交织在一起。这正是《动手学深度学习》要填补的空白。
关于本书:概念、背景与代码三位一体
一种融合代码、数学与 HTML 的媒介
前言认为,任何计算技术要发挥全部影响力,都需要被充分理解、充分文档化,并由成熟且维护良好的工具支撑。深度学习的学习材料面临独特挑战:数学公式、定理与引用最适合用 LaTeX 管理,代码最适合用 Python 描述,而网页原生是 HTML 与 JavaScript。同时,内容还要能作为可执行代码、实体书、可下载 PDF 以及在线网站四种形态访问。
为此,本书作者自建了一套工作流(详见贡献章节):
- 使用GitHub存放源码并促进社区贡献;
- 使用Jupyter Notebook混合代码、公式与文字;
- 使用Sphinx作为渲染引擎;
- 使用Discourse作为讨论平台。
这一"内容即代码"的架构正是本仓库的基石:仓库中每个章节都是一个 Markdown 源文件(如chapter_preface/index.md、chapter_linear-regression/index.md),代码块通过%%tab标记区分不同深度学习框架的实现,再经d2lbook构建工具统一渲染为网页、PDF 与可执行 Notebook。
与传统教材、博客与在线课程的区别
前言客观对比了当时的几类资源:
- 框架教程/博客代码片段:大量博客与 GitHub 仓库提供了"如何实现 LeNet、AlexNet、ResNet"之类的示例,但它们通常只讲how(如何实现),忽略了why(为什么做这些算法决策);
- 交互式资源(如 Distill 等):覆盖的主题有限,且往往缺少配套代码;
- 深度学习教科书(如 Goodfellow 等人的经典著作):提供了全面综述,但没有把概念描述与代码实现"联姻",读者常常不知道如何动手实现;
- 商业课程平台的付费内容:被付费墙挡在门外。
因此本书作者设定了五个目标:
- 对所有人免费开放;
- 提供足够的技术深度,成为通向"应用型机器学习科学家"的起点;
- 包含可运行代码,展示如何在实际中解决问题;
- 支持作者与社区快速更新;
- 配有一个讨论论坛,用于技术细节的互动讨论与答疑。
前言称《动手学深度学习》可能是第一本使用这种集成工作流出版的书籍。
边做边学:just-in-time 教学法
许多教科书按顺序、详尽地讲解每个概念,读者往往需要付出大量前置工作才能接触到线性回归。本书则相反,采用just in time(即时)教学:在某个概念恰好被需要用来完成某个实际目标的那一刻才引入它。开头只花少量篇幅讲授线性代数、概率等基础预备知识,随后就让读者尽早体验到训练第一个模型的成就感。
本书的组织策略是"一个可运行的示例,一个 Notebook"(one working example, one notebook),这让读者可以轻松地通过复制 Notebook 并修改来启动自己的研究项目。全书在需要时交织运行代码与背景材料,并倾向于先给出工具、后解释原理——例如在使用随机梯度下降(SGD)的场合,可能先使用它,之后才解释其原理与直觉。
在讲解方式上,本书遵循"从零开始"的原则:基础教程中会深入模型与优化器的细节,通常给出两个版本的示例:
- 从零实现版:只依赖 NumPy 类功能与自动微分,逐行实现某个层或优化器;
- 高层 API 版:使用深度学习框架的高层 API 编写简洁代码。
在解释完组件工作原理后,后续教程便依赖高层 API 继续推进。这一"先看底层、再用高层"的模式在仓库中随处可见,例如chapter_linear-regression/linear-regression-scratch.md与linear-regression-concise.md的成对编排。
内容与结构:三大部分
全书分为三大板块,涵盖预备知识、深度学习技术,以及聚焦真实系统与应用的高级主题,整体结构如下图所示。
第一部分:基础与预备知识(Basics and Preliminaries)
- 开篇的绪论章节介绍深度学习;
- 预备知识章节快速补齐动手实践所需的前提:数据存储与操作、基于线性代数/微积分/概率的数值运算;
- 回归与多层感知机章节(chapter_linear-regression、chapter_linear-classification、chapter_multilayer-perceptrons)覆盖最基础的概念与技术:回归与分类、线性模型、多层感知机、过拟合与正则化。
第二部分:现代深度学习技术(Modern Deep Learning Techniques)
- 计算章节(chapter_builders-guide、chapter_computational-performance)讲解深度学习系统的关键计算组件,为后续复杂模型实现奠定基础;
- 卷积神经网络章节(chapter_convolutional-neural-networks、chapter_convolutional-modern)介绍作为现代计算机视觉系统骨干的 CNN;
- 循环神经网络章节(chapter_recurrent-neural-networks、chapter_recurrent-modern)介绍利用序列(如时间)结构、常用于 NLP 与时间序列预测的 RNN;
- 注意力与 Transformer 章节(chapter_attention-mechanisms-and-transformers)介绍基于注意力机制、已取代 RNN 成为大多数 NLP 任务主导架构的新一代模型。
第三部分:可扩展性、效率与应用(Scalability, Efficiency, and Applications)
- 优化章节(chapter_optimization)讨论训练深度学习模型的常用优化算法;
- 计算性能章节(chapter_computational-performance)考察影响深度学习代码计算性能的关键因素;
- 计算机视觉章节(chapter_computer-vision)展示深度学习在视觉领域的主要应用;
- 自然语言处理预训练与应用章节(chapter_natural-language-processing-pretraining、chapter_natural-language-processing-applications)演示如何预训练语言表示模型并将其应用于 NLP 任务。
此外,仓库还包含强化学习、高斯过程、超参数优化、生成对抗网络、推荐系统等进阶章节,完整章节清单可参见仓库根目录的 index.md。
Code:d2l 工具包与#@save约定
前言强调,本书大部分小节都配有可执行代码,因为有些直觉必须通过反复试错、微调代码并观察结果来建立。为了避免不必要的重复,全书把最常用、最常被导入的函数与类集中收录在d2l包中。凡是标记了#@save的代码块(函数、类或导入语句集合),都表示它之后会通过d2l包被再次访问。
前言给出了d2l包轻量化的依赖集合(即d2l包本身只依赖下列库):
import inspect import collections from collections import defaultdict from IPython import display import math from matplotlib import pyplot as plt from matplotlib_inline import backend_inline import os import pandas as pd import random import re import shutil import sys import tarfile import time import requests import zipfile import hashlib d2l = sys.modules[__name__]这与仓库中d2l/torch.py顶部的导入集合完全一致,也和 setup.py 声明的安装依赖(jupyter==1.0.0、numpy==1.23.5、matplotlib==3.7.2、matplotlib-inline==0.1.6、requests==2.31.0、pandas==2.0.3、scipy==1.10.1)相互印证。d2l包的版本号在 d2l/init.py 中定义为1.0.3,并支持四种后端导入方式:
from d2l import mxnet as d2l # 使用 MXNet 作为后端 from d2l import torch as d2l # 使用 PyTorch 作为后端 from d2l import tensorflow as d2l # 使用 TensorFlow 作为后端 from d2l import jax as d2l # 使用 JAX 作为后端各框架的专属依赖
全书代码同时维护 MXNet、PyTorch、TensorFlow 与 JAX 四个后端实现(即d2l/mxnet.py、d2l/torch.py、d2l/tensorflow.py、d2l/jax.py四个源码文件)。前言中按框架给出了各自的常用导入:
MXNet 后端(基于 Apache MXNet,曾被 AWS 及众多高校与公司选用):
from mxnet import autograd, context, gluon, image, init, np, npx from mxnet.gluon import nn, rnnPyTorch 后端(本书目前的主框架,深受深度学习研究社区欢迎):
import numpy as np import torch import torchvision from torch import nn from torch.nn import functional as F from torchvision import transforms from PIL import Image from scipy.spatial import distance_matrixTensorFlow 后端(工业界广泛采用):
import numpy as np import tensorflow as tfJAX 后端(提供任意 Python/NumPy 函数的可组合变换,如自动微分、JIT 编译、向量化,API 与 NumPy 保持 1:1 对齐):
from dataclasses import field from functools import partial import flax from flax import linen as nn from flax.training import train_state import jax from jax import numpy as jnp from jax import grad, vmap import numpy as np import optax import tensorflow as tf import tensorflow_datasets as tfds from types import FunctionType from typing import Any注意:MXNet 与 TensorFlow 两个后端是历史演进产物——本书最初以 MXNet 为主框架,2021 年 7 月后重新设计并改用 PyTorch 为主框架,同时保留 MXNet、TensorFlow 与 JAX 实现(见前言致谢部分)。
d2l 包的核心类与函数(源码级概览)
完整的d2l包 API 清单见附录的 《The d2l API Document》,其中按字母顺序列出了全书累积的类与函数及其定义出处。从前言与源码可以归纳出d2l包的几条主线:
面向对象设计的基础设施(详见 chapter_linear-regression/oo-design.md):
HyperParameters:基类,提供save_hyperparameters(ignore=[]),利用inspect.getargvalues把函数参数自动保存为类属性,避免手写大量样板代码(d2l/torch.py 中第 109 行起的实现);Module:所有模型的基类,继承nn.Module与HyperParameters,内置ProgressBoard绘图板与training_step/validation_step/configure_optimizers等钩子;DataModule:数据基类,提供train_dataloader()与val_dataloader()接口;Trainer:训练器基类,fit(model, data)驱动max_epochs轮训练并维护训练/验证批索引;ProgressBoard:训练曲线动画绘图板,draw方法按every_n聚合原始点并绘制均值曲线。
数学与可视化工具:use_svg_display、set_figsize、set_axes、plot(源自 chapter_preliminaries/calculus.md),以及Animator、Accumulator、accuracy、show_images等(源自 chapter_appendix-tools-for-deep-learning/utils.md)。
数据获取工具:download(支持 sha1 校验缓存)、extract、download_extract(源自 utils.md),配合d2l.torch.py顶部的DATA_HUB与DATA_URL = 'http://d2l-data.s3-accelerate.amazonaws.com/'使用。
数据集类:FashionMNIST、SyntheticRegressionData、TimeMachine、MTFraEng(英法机器翻译语料)等。
模型类:LinearRegression、SoftmaxRegression、LeNet、GRU、RNN、Seq2Seq、TransformerEncoder、MultiHeadAttention、Residual、ResNeXtBlock等。
这些类/函数正是"一例一 Notebook"策略下,全书代码得以简洁、可复用的底层支撑。
目标读者与前置知识
本书面向学生(本科生或研究生)、工程师与研究人员,目标是让他们扎实掌握深度学习的实用技术。由于所有概念都从零讲解,读者不需要任何深度学习或机器学习背景,但需要具备适度的线性代数、微积分、概率与 Python 编程基础。
如果你遗忘了相关数学知识,仓库中的数学附录提供了书中大部分数学内容的复习资料。前言还推荐了几本扩展读物(线性分析、统计学、概率论等),并指出本书通常优先"直觉与思想",而非数学上的严格性。
Notebooks、网站、GitHub 与论坛
所有 Notebook 都可通过本书网站与 GitHub 仓库下载;与本书配套的讨论论坛允许读者在每一节底部找到对应讨论页面的链接,随时向作者与更广泛的社区提问、寻找答案。仓库中每个章节的 Markdown 源文件即是这些 Notebook 的源(由d2lbook构建系统转换为可执行 Notebook),例如chapter_preface/index.md的代码块都可在 Jupyter 中直接运行。
环境准备:安装与运行本书代码
要实际运行本书代码,需要 Python、Jupyter Notebook、相关库以及本书代码所需的环境。仓库中的安装章节给出了完整流程,核心步骤如下(以官方测试过的 Python 3.9 与d2l包 1.0.3 版本为例):
1. 安装 Miniconda(若机器已有 conda 可跳过):
# macOS(以 Intel Mac 为例) sh Miniconda3-py39_4.12.0-MacOSX-x86_64.sh -b # Linux sh Miniconda3-py39_4.12.0-Linux-x86_64.sh -b初始化 shell 后创建并激活d2l环境:
~/miniconda3/bin/conda init conda create --name d2l python=3.9 -y conda activate d2l2. 安装深度学习框架。安装前先确认机器是否具备可用 GPU(笔记本上驱动显示器的 GPU 不适用;无 GPU 时 CPU 足够跑完前几章,跑大规模模型前再考虑 GPU)。
- PyTorch(本书当前主框架):
pip install torch==2.0.0 torchvision==0.15.1- TensorFlow:
pip install tensorflow==2.12.0 tensorflow-probability==0.20.0- JAX(CPU 版与 CUDA 版二选一):
# GPU 版 pip install "jax[cuda11_pip]==0.4.13" -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html flax==0.7.0 # CPU 版 pip install "jax[cpu]==0.4.13" flax==0.7.0- MXNet(需根据 CUDA 版本选择,如
cu112对应 CUDA 11.2,无 GPU 时安装 CPU 版):
# GPU 版(以 CUDA 11.2 为例) pip install mxnet-cu112==1.9.1 # CPU 版 pip install mxnet==1.9.13. 安装d2l包(封装全书高频函数与类的轻量包):
pip install d2l==1.0.34. 下载 Notebook 并运行:
mkdir d2l-en && cd d2l-en curl https://d2l.ai/d2l-en-1.0.3.zip -o d2l-en.zip unzip d2l-en.zip && rm d2l-en.zip cd pytorch # 或 mxnet / tensorflow / jax jupyter notebook启动后在浏览器打开 http://localhost:8888 即可逐节运行代码。每次打开新命令行窗口,都需先执行conda activate d2l再运行 Notebook 或更新包;退出环境用conda deactivate。
如何参与贡献:从修错别字到提交大改动
前言指出,本书源码托管在 GitHub 上,借助版本控制与持续集成(CI)测试,改进通常只需数小时到数天即可被合入(传统书籍两次印刷之间的勘误间隔则以年计)。详细流程见贡献章节,要点如下:
- 小幅修改(改一句话、修错别字):直接在 GitHub 仓库中找到对应的 Markdown 源文件(如
chapter_preface/index.md),点击 "Edit this file" 修改,填写变更说明后提交 Pull Request; - 大篇幅改动:先 Fork 仓库,在本地用 Jupyter Notebook 打开对应 Markdown 文件编辑并运行测试(提交前务必清空所有输出,因为 CI 会执行你更新的小节来生成输出);若新增代码块,需用
%%tab标记所属框架(%%tab pytorch、%%tab tensorflow、%%tab all等); - 标准流程为:Fork → Clone → 编辑并
git add/git commit/git push→ 从你的 Fork 发起 "New pull request"; - 建议提交多个小 Pull Request而非一个巨型 PR,便于作者审阅与合入。
这一"内容可被任何人改进"的开放机制,正是本书能在多框架、多语言版本间快速演进的工程保障。
总结
深度学习已经革新了模式识别,驱动着计算机视觉、自然语言处理、自动语音识别等众多领域。要成功应用深度学习,必须理解如何表述问题、建模的基本数学、拟合模型的算法以及实现它的工程技巧。《动手学深度学习》将这些内容——文字、图、数学与代码——完整地汇集在一处:
- 内容形态:一个 Markdown 源文件同时产出可执行 Notebook、实体书、PDF 与网页,多框架代码用
%%tab组织; - 教学法:just-in-time 引入概念,"一个示例一个 Notebook",从零实现与高层 API 双版本并存;
- 代码体系:
d2l包(d2l/目录下四框架实现)用#@save累积全书高频工具,配套 setup.py 声明的最小依赖与d2l==1.0.3发布版本; - 开放协作:GitHub 源码 + 讨论论坛 + CI 测试,使读者能快速参与改进。
练习
- 在本书的讨论论坛注册一个账号,熟悉提问与讨论的入口;
- 在电脑上安装 Python,并参照安装章节搭建
d2l环境; - 按照章节底部提供的论坛链接,加入讨论、向作者与更广泛的社区寻求帮助并回答问题。
- 文档
- 教程
- 人工智能
- 深度学习
- NLP
- 计算机视觉
- 强化学习
【免费下载链接】d2l-en
Interactive deep learning book with multi-framework code, math, and discussions. Adopted at 500 universities from 70 countries including Stanford, MIT, Harvard, and Cambridge.
相关推荐
《Dive into Deep Learning》项目解析:深度学习入门指南
《Dive into Deep Learning》项目解析:深度学习入门指南 深度学习的发展历程 深度学习在短短几年内从学术界的边缘课题发展成为推动技术进步的核
文档教程人工智能深度学习NLP计算机视觉强化学习D2L(Dive into Deep Learning)开源交互式深度学习教材:多框架代码、数学与社区讨论的完整指南
D2L(Dive into Deep Learning)开源交互式深度学习教材:多框架代码、数学与社区讨论的完整指南 D2L(Dive into Deep Le
文档教程人工智能深度学习NLP计算机视觉强化学习Dive into Deep Learning 开篇:从规则编程到机器学习与深度学习的全景入门
Dive into Deep Learning 开篇:从规则编程到机器学习与深度学习的全景入门 本篇是开源交互式深度学习教材《Dive into Deep Le
文档教程人工智能深度学习NLP计算机视觉强化学习
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考