本文档记录了 d2l-ai 代码库中深度学习算法和模型所依据的核心数学概念。这些基础数学工具对于理解神经网络如何工作、如何训练以及如何解释其结果至关重要。本文侧重于在数学理论及其代码实现之间建立清晰的联系,涵盖了微积分、线性代数、概率论和自动微分。有关更高级的模型架构,请参阅深度学习基础,有关特定模型的实现细节,请参阅线性网络和多层感知机。
来源: chapter_preliminaries/calculus.md1-304 chapter_preliminaries/linear-algebra.md1-1112 chapter_preliminaries/probability.md1-515 chapter_preliminaries/autograd.md1-460
微积分提供了深度学习中优化的数学框架,特别是通过梯度下降来寻找损失函数的最小值。
在深度学习中,我们经常需要计算模型参数的变化如何影响损失函数。导数代表了这种变化率
$$f'(x) = \lim_{h \rightarrow 0} \frac{f(x+h) - f(x)}{h}$$
代码实现演示了如何进行数值求导
来源: chapter_preliminaries/calculus.md31-148
对于多元函数,梯度是一个包含所有偏导数的向量
$$\nabla_{\mathbf{x}} f(\mathbf{x}) = \bigg[\frac{\partial f(\mathbf{x})}{\partial x_1}, \frac{\partial f(\mathbf{x})}{\partial x_2}, \ldots, \frac{\partial f(\mathbf{x})}{\partial x_n}\bigg]^\top$$
梯度指向函数最陡峭的上升方向,这对于梯度下降等优化算法(用于最小化损失函数)至关重要。
来源: chapter_preliminaries/calculus.md256-276
链式法则允许我们计算复合函数的导数,这对于神经网络的反向传播至关重要
$$\frac{dy}{dx} = \frac{dy}{du} \frac{du}{dx}$$
对于多元函数,广义链式法则为
$$\frac{\partial y}{\partial x_i} = \sum_{j=1}^m \frac{\partial y}{\partial u_j} \frac{\partial u_j}{\partial x_i}$$
该法则使我们能够在训练过程中计算通过神经网络层的梯度。
来源: chapter_preliminaries/calculus.md279-294
线性代数提供了处理多维空间数据的数学工具,这对于深度学习中数据的表示和转换至关重要。
深度学习框架使用张量来表示数据,张量将标量(0D)、向量(1D)和矩阵(2D)推广到更高维度
来源: chapter_preliminaries/ndarray.md8-16 chapter_preliminaries/linear-algebra.md9-350
深度学习中向量和矩阵的关键运算包括
| 操作 | 数学符号 | Python实现 |
|---|---|---|
| 逐元素加法 | $\mathbf{A} + \mathbf{B}$ | A + B |
| 逐元素乘法 (Hadamard) | $\mathbf{A} \odot \mathbf{B}$ | A * B |
| 矩阵乘法 | $\mathbf{A}\mathbf{B}$ | np.dot(A, B) 或 torch.mm(A, B) |
| 点积 | $\mathbf{x}^\top\mathbf{y}$ | np.dot(x, y) 或 torch.dot(x, y) |
| 转置 | $\mathbf{A}^\top$ | A.T |
这些运算对于实现神经网络的前向传播和梯度计算至关重要。
来源: chapter_preliminaries/linear-algebra.md360-935 chapter_preliminaries/ndarray.md253-326
范数衡量向量的“大小”,通常用于损失函数和正则化项中
在深度学习中,这些范数经常出现在我们希望在训练期间最小化的目标函数中。
来源: chapter_preliminaries/linear-algebra.md939-1064
概率论为建模数据中的不确定性以及许多机器学习算法(尤其是生成模型)提供了基础。
随机变量是其值受机会影响的变量。在深度学习中,我们经常处理
分布描述了随机变量不同值的概率
来源: chapter_preliminaries/probability.md276-303
对于多个随机变量,我们需要理解它们之间的关系
贝叶斯定理将这些概念联系起来
$$P(A|B) = \frac{P(B|A)P(A)}{P(B)}$$
该定理对于许多机器学习算法(包括贝叶斯方法)至关重要。
来源: chapter_preliminaries/probability.md319-358
期望(均值)和方差是关键的统计度量
这些度量有助于我们理解随机变量的中心趋势和分布范围,这对于分析模型性能和行为很有用。
来源: chapter_preliminaries/probability.md465-486
深度学习框架提供了高效处理张量的方法,张量是机器学习模型的基本数据结构。
示例张量操作包括
torch.arange(12), np.zeros((2, 3))x.reshape(3, 4)x + y, torch.mm(A, B), x.sum()来源: chapter_preliminaries/ndarray.md62-108 chapter_preliminaries/ndarray.md164-237
广播通过虚拟扩展较小的张量,允许不同形状张量之间的运算
# Example broadcasting:
a = torch.arange(3).reshape((3, 1)) # Shape: (3, 1)
b = torch.arange(2).reshape((1, 2)) # Shape: (1, 2)
c = a + b # Shape: (3, 2), broadcasting happens automatically
这种机制使得张量运算更加简洁高效。
来源: chapter_preliminaries/ndarray.md386-433
自动微分是深度学习框架的关键特性,它能够高效地计算用于优化的梯度。
框架在前向传播过程中构建计算图,并利用它在反向传播过程中计算梯度。这个过程通过 autograd 系统自动完成。
来源: chapter_preliminaries/autograd.md8-13
自动微分的代码实现遵循以下模式
其他框架(如 MXNet 和 TensorFlow)也存在类似的模式,但语法略有不同。
来源: chapter_preliminaries/autograd.md53-135
自动微分的高级功能包括
这种灵活性支持复杂的模型架构和训练流程。
来源: chapter_preliminaries/autograd.md193-408
为了将这些数学概念与实际的深度学习应用联系起来,以下是它们在典型神经网络训练过程中的相互作用方式
这个周期依赖于
来源: chapter_preliminaries/calculus.md14-26 chapter_preliminaries/autograd.md1-7
d2l 包提供了这些数学基础的实现
该包抽象了特定于框架的实现,同时提供了可视化数学概念和实现深度学习算法的实用程序。
来源: chapter_preliminaries/calculus.md149-226
本节介绍的数学基础提供了理解和实现深度学习模型的必要工具集
这些概念已在 d2l 包中实现,并在整个代码库中用于日益复杂的模型和应用。