菜单

数学基础

相关源文件

目的与范围

本文档记录了 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

范数和目标函数

范数衡量向量的“大小”,通常用于损失函数和正则化项中

  • L1 范数: $|\mathbf{x}|_1 = \sum_{i=1}^n |x_i|$
  • L2 范数: $|\mathbf{x}|_2 = \sqrt{\sum_{i=1}^n x_i^2}$
  • Frobenius 范数 (用于矩阵): $|\mathbf{X}|_F = \sqrt{\sum_{i=1}^m \sum_{j=1}^n x_{ij}^2}$

在深度学习中,这些范数经常出现在我们希望在训练期间最小化的目标函数中。

来源: chapter_preliminaries/linear-algebra.md939-1064

概率论

概率论为建模数据中的不确定性以及许多机器学习算法(尤其是生成模型)提供了基础。

随机变量与分布

随机变量是其值受机会影响的变量。在深度学习中,我们经常处理

  • 离散随机变量(例如,类别标签)
  • 连续随机变量(例如,神经网络中的权重)

分布描述了随机变量不同值的概率

来源: chapter_preliminaries/probability.md276-303

联合、条件和边缘概率

对于多个随机变量,我们需要理解它们之间的关系

  • 联合概率: $P(A=a, B=b)$ - 两个事件都发生的概率
  • 条件概率: $P(A=a | B=b)$ - 在 B 发生的情况下 A 发生的概率
  • 边缘概率: $P(B) = \sum_{A} P(A, B)$ - B 在 A 的所有值上的概率

贝叶斯定理将这些概念联系起来

$$P(A|B) = \frac{P(B|A)P(A)}{P(B)}$$

该定理对于许多机器学习算法(包括贝叶斯方法)至关重要。

来源: chapter_preliminaries/probability.md319-358

期望和方差

期望(均值)和方差是关键的统计度量

  • 期望: $E[X] = \sum_{x} x P(X = x)$
  • 方差: $\text{Var}[X] = E[(X - E[X])^2] = E[X^2] - E[X]^2$

这些度量有助于我们理解随机变量的中心趋势和分布范围,这对于分析模型性能和行为很有用。

来源: 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

代码实现自动微分

自动微分的代码实现遵循以下模式

  1. 创建启用了梯度跟踪的张量
  2. 在记录上下文中执行计算
  3. 对结果调用 backward() 来计算梯度

其他框架(如 MXNet 和 TensorFlow)也存在类似的模式,但语法略有不同。

来源: chapter_preliminaries/autograd.md53-135

处理非标量输出和控制流

自动微分的高级功能包括

  1. 为非标量输出计算梯度(使用 sum 约简)
  2. 分离计算图的部分
  3. 通过 Python 控制流计算梯度

这种灵活性支持复杂的模型架构和训练流程。

来源: chapter_preliminaries/autograd.md193-408

实践中的数学基础

为了将这些数学概念与实际的深度学习应用联系起来,以下是它们在典型神经网络训练过程中的相互作用方式

这个周期依赖于

  • 用于数据处理和前向传播的张量运算
  • 用于计算梯度的自动微分
  • 使用这些梯度来更新参数的优化算法
  • 用于建模不确定性和定义损失函数的概率论

来源: chapter_preliminaries/calculus.md14-26 chapter_preliminaries/autograd.md1-7

从理论到实现:d2l 包

d2l 包提供了这些数学基础的实现

该包抽象了特定于框架的实现,同时提供了可视化数学概念和实现深度学习算法的实用程序。

来源: chapter_preliminaries/calculus.md149-226

总结

本节介绍的数学基础提供了理解和实现深度学习模型的必要工具集

  • 微积分:通过导数、梯度和链式法则为优化提供了框架。
  • 线性代数:通过张量运算实现高效的数据表示和转换。
  • 概率论:允许对不确定性进行建模并开发损失函数。
  • 自动微分:有助于高效计算训练神经网络的梯度。

这些概念已在 d2l 包中实现,并在整个代码库中用于日益复杂的模型和应用。