Skip to content

3.导数、反向传播、复杂度

内容速览:

  • 矩阵微积分
  • 链式法则
  • 自动微分法
  • 反向传播

3.1矩阵微积分

在深度学习中,我们经常需要计算损失函数对模型参数的导数。由于模型参数通常以矩阵或向量的形式存在,因此我们需要掌握矩阵微积分的基本概念和规则。

3.1.1 标量函数的梯度

对于一个标量函数 \( f: \mathbb{R}^n \to \mathbb{R} \),其梯度定义为: \( \nabla f(\mathbf{x}) = \left[ \frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, \ldots, \frac{\partial f}{\partial x_n} \right]^T \) 梯度是一个向量,表示函数在各个方向上的变化率。

3.1.2 矩阵函数的导数

对于一个矩阵函数 \( F: \mathbb{R}^{m \times n} \to \mathbb{R}^{p \times q} \),其导数可以表示为一个四维张量,包含了所有元素对输入矩阵元素的偏导数。

3.1.3 常见矩阵微积分规则

  • 加法规则:如果 \( F(\mathbf{X}) = G(\mathbf{X}) + H(\mathbf{X}) \),则 \( \frac{\partial F}{\partial \mathbf{X}} = \frac{\partial G}{\partial \mathbf{X}} + \frac{\partial H}{\partial \mathbf{X}} \)
  • 乘法规则:如果 \( F(\mathbf{X}) = G(\mathbf{X}) H(\mathbf{X}) \),则需要使用乘积法则进行求导。
  • 链式法则:如果 \( F(\mathbf{X}) = G(H(\mathbf{X})) \),则 \( \frac{\partial F}{\partial \mathbf{X}} = \frac{\partial G}{\partial H} \cdot \frac{\partial H}{\partial \mathbf{X}} \)
  • 转置规则:如果 \( F(\mathbf{X}) = \mathbf{X}^T \),则 \( \frac{\partial F}{\partial \mathbf{X}} = (\frac{\partial F}{\partial \mathbf{X}})^T \)
  • 迹的导数:如果 \( F(\mathbf{X}) = \text{tr}(\mathbf{X}) \),则 \( \frac{\partial F}{\partial \mathbf{X}} = \mathbf{I} \),其中 \( \mathbf{I} \) 是单位矩阵。

3.1.4 矩阵微分求导

\( \mathbf{x} = \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{bmatrix} \) 求导后: \( \frac{\partial y}{\partial \mathbf{x}} = \left[ \frac{\partial y}{\partial x_1}, \frac{\partial y}{\partial x_2}, \dots, \frac{\partial y}{\partial x_n} \right] \)

3.2 链式法则

链式法则是计算复合函数导数的基本工具。在深度学习中,模型通常由多个层级组成,每一层都是一个函数,链式法则帮助我们计算整个模型的导数。 对于复合函数 \( F(x) = f(g(x)) \),链式法则表明: \( \frac{dF}{dx} = \frac{df}{dg} \cdot \frac{dg}{dx} \) 在矩阵形式下,链式法则同样适用,允许我们逐层计算导数。

3.3 自动微分法

自动微分(Automatic Differentiation, AD)是一种高效计算导数的方法,广泛应用于深度学习框架中。AD通过将计算过程分解为基本操作,并利用链式法则自动计算导数,避免了数值微分和符号微分的缺点。 AD主要有两种模式:

  • 前向模式(Forward Mode):适用于输入变量较少的情况,通过跟踪每个变量的导数来计算最终结果的导数。
  • 反向模式(Reverse Mode):适用于输出变量较少的情况,通过从输出反向传播导数信息,计算输入变量的导数。

3.4 反向传播

反向传播(Backpropagation)是训练神经网络的核心算法,利用链式法则高效计算损失函数对模型参数的梯度。反向传播通过以下步骤实现:

  1. 前向传播:计算网络的输出和损失函数值。
  2. 反向传播:从输出层开始,逐层计算损失函数对每个参数的导数,利用链式法则将导数信息传递回输入层。
  3. 参数更新:使用计算得到的梯度,通过优化算法(如梯度下降)更新模型参数。 反向传播的关键在于有效地组织计算过程,避免重复计算,从而提高训练效率。