梯度详解
核心概念 梯度是深度学习中梯度下降法的核心,决定模型参数的更新方向和步长。
1. 梯度的定义
1.1. 前提条件
函数 $f: \mathbb{R}^n \to \mathbb{R}$:
- 输入:$n$ 维向量 $\boldsymbol{x}=[x_1,x_2,\dots,x_n]^T$
- 输出:单个数字(标量),如损失函数
1.2. 梯度公式
$$ \nabla_{\boldsymbol{x}} f(\boldsymbol{x}) = \left[ \frac{\partial f(\boldsymbol{x})}{\partial x_1},; \frac{\partial f(\boldsymbol{x})}{\partial x_2},;\dots,; \frac{\partial f(\boldsymbol{x})}{\partial x_n} \right]^T $$
通俗解释: 把函数 $f$ 对每一个自变量 $x_1,x_2..x_n$ 分别求偏导,再把所有偏导数按顺序拼成一个列向量,这个向量就叫梯度 $\nabla f$。
符号 $\nabla$ 读作 nabla,$\nabla_{\boldsymbol{x}} f$ 表示”对变量 $\boldsymbol{x}$ 求梯度”。
示例: 二元函数 $f(x_1,x_2)=3x_1^2 + x_1x_2$
$$ \frac{\partial f}{\partial x_1}=6x_1+x_2,\quad \frac{\partial f}{\partial x_2}=x_1 $$
梯度向量:
$$ \nabla f = \begin{bmatrix}6x_1+x_2 \ x_1\end{bmatrix} $$
2. 四个常用向量梯度公式
设 $\boldsymbol{x}$ 是 $n$ 维列向量,$\boldsymbol{A}$ 是常数矩阵(不随 $\boldsymbol{x}$ 变化):
公式 1: $\nabla_{\boldsymbol{x}} \boldsymbol{A}\boldsymbol{x} = \boldsymbol{A}^T$
$\boldsymbol{A}\boldsymbol{x}$ 是矩阵乘向量,结果是向量;对 $\boldsymbol{x}$ 求梯度得到 $\boldsymbol{A}$ 的转置。
公式 2: $\nabla_{\boldsymbol{x}} \boldsymbol{x}^T \boldsymbol{A} = \boldsymbol{A}$
行向量 $\boldsymbol{x}^T$ 乘矩阵 $\boldsymbol{A}$,梯度直接等于 $\boldsymbol{A}$。
公式 3: $\nabla_{\boldsymbol{x}} \boldsymbol{x}^T \boldsymbol{A}\boldsymbol{x} = (\boldsymbol{A}+\boldsymbol{A}^T)\boldsymbol{x}$
二次型函数(损失函数、正则项大量用到)。当 $\boldsymbol{A}$ 对称时简化为 $2\boldsymbol{A}\boldsymbol{x}$。
公式 4: $\nabla_{\boldsymbol{x}} |\boldsymbol{x}|^2 = \nabla_{\boldsymbol{x}} \boldsymbol{x}^T\boldsymbol{x} = 2\boldsymbol{x}$
$|\boldsymbol{x}|^2$ 是向量 L2 范数平方:$x_1^2+x_2^2+\dots+x_n^2$。L2 正则的核心公式。
3. 矩阵变量的梯度
如果变量是矩阵 $\boldsymbol{X}$:
$$ \nabla_{\boldsymbol{X}} |\boldsymbol{X}|_F^2 = 2\boldsymbol{X} $$
$|\boldsymbol{X}|_F$ 是矩阵 Frobenius 范数(所有元素平方和开根号),矩阵权重衰减的关键公式。
4. 梯度在深度学习中的作用
训练神经网络就是不断减小损失函数 $L(\boldsymbol{w})$,梯度 $\nabla L(\boldsymbol{w})$ 告诉我们两件事:
- 梯度向量指向损失增长最快的方向
- 沿着梯度反方向更新权重,就能一步步降低损失
这是 SGD、Adam 等优化器的底层原理。
5. 链式法则铺垫
深度学习网络是多层复合函数,直接求偏导极其麻烦,需要通过链式法则拆分梯度计算 — 这是自动微分和反向传播的数学基础。
6. 四个向量梯度公式完整证明
约定:$\boldsymbol{x}\in\mathbb{R}^{n\times 1}$ 列向量,$\boldsymbol{A}$ 是常数矩阵。
6.1. 公式 1:$\nabla_{\boldsymbol{x}} \boldsymbol{A}\boldsymbol{x} = \boldsymbol{A}^\top$
设 $\boldsymbol{A}\in\mathbb{R}^{m\times n}$,令 $\boldsymbol{y}=\boldsymbol{A}\boldsymbol{x}\in\mathbb{R}^{m\times 1}$:
$$ y_i = \sum_{k=1}^n A_{ik}x_k $$
梯度定义:$\nabla_{\boldsymbol{x}} y_i$ 是对 $\boldsymbol{x}$ 各分量偏导组成的列向量:
$$ \frac{\partial y_i}{\partial x_j} = A_{ij} $$
把所有 $i$ 堆叠成矩阵(雅可比矩阵),再转置为梯度列向量,即得 $\boldsymbol{A}^\top$。
6.2. 公式 2:$\nabla_{\boldsymbol{x}} \boldsymbol{x}^\top \boldsymbol{A} = \boldsymbol{A}$
设 $\boldsymbol{A}\in\mathbb{R}^{n\times m}$,令 $y = \boldsymbol{x}^\top \boldsymbol{A} \in \mathbb{R}^{1\times m}$:
$$ y_j = \sum_{k=1}^n x_k A_{kj} $$
对 $x_i$ 求偏导:
$$ \frac{\partial y_j}{\partial x_i} = A_{ij} $$
按梯度定义堆叠,结果为矩阵 $\boldsymbol{A}$ 本身。
6.3. 公式 3:$\nabla_{\boldsymbol{x}} \boldsymbol{x}^\top \boldsymbol{A}\boldsymbol{x} = (\boldsymbol{A}+\boldsymbol{A}^\top)\boldsymbol{x}$
令标量 $f = \boldsymbol{x}^\top \boldsymbol{A}\boldsymbol{x}$,展开为分量求和形式:
$$ f = \sum_{i=1}^n \sum_{j=1}^n x_i A_{ij} x_j $$
对 $x_k$ 求偏导(分 $i=k$ 和 $j=k$ 两部分):
$$ \frac{\partial f}{\partial x_k} = \sum_{j=1}^n A_{kj} x_j + \sum_{i=1}^n x_i A_{ik} $$
写成向量形式:
$$ \nabla f = \boldsymbol{A}\boldsymbol{x} + \boldsymbol{A}^\top\boldsymbol{x} = (\boldsymbol{A}+\boldsymbol{A}^\top)\boldsymbol{x} $$
当 $\boldsymbol{A}$ 对称时,$\boldsymbol{A}^\top=\boldsymbol{A}$,简化为 $2\boldsymbol{A}\boldsymbol{x}$。
6.4. 公式 4:$\nabla_{\boldsymbol{x}} |\boldsymbol{x}|^2 = 2\boldsymbol{x}$
令公式 3 中 $\boldsymbol{A}=\boldsymbol{I}$(单位矩阵,对称):
$$ \nabla_{\boldsymbol{x}}\boldsymbol{x}^\top \boldsymbol{I} \boldsymbol{x} = 2\boldsymbol{I}\boldsymbol{x}=2\boldsymbol{x} $$
直接展开验证:
$$ |\boldsymbol{x}|^2 = x_1^2+x_2^2+\dots+x_n^2,\quad \frac{\partial |\boldsymbol{x}|^2}{\partial x_i}=2x_i $$
拼成列向量即 $2\boldsymbol{x}$。
6.5. 矩阵梯度拓展:$\nabla_{\boldsymbol{X}}|\boldsymbol{X}|_F^2 = 2\boldsymbol{X}$
F 范数平方 $|\boldsymbol{X}|F^2 = \sum{i,j}X_{ij}^2$,对每个元素求偏导 $\frac{\partial |\boldsymbol{X}|F^2}{\partial X{ij}} = 2X_{ij}$,整体矩阵梯度就是 $2\boldsymbol{X}$。
7. 为什么深度学习要用向量/矩阵梯度?
7.1. 神经网络权重天然是向量/矩阵
- 单层权重 $\boldsymbol{W}\in\mathbb{R}^{m\times n}$,偏置 $\boldsymbol{b}\in\mathbb{R}^m$
- 损失函数 $L$ 是标量输出,输入是高维权重向量
7.2. 批量运算,GPU 友好
梯度把所有偏导数打包成向量/矩阵,能使用 GPU 矩阵并行加速,代码一行完成更新。
7.3. 反向传播简洁
链式法则对向量、矩阵有统一矩阵形式,反向传播全程只用矩阵运算推导。
7.4. 优化算法的方向依赖整体向量
梯度下降需要所有参数同步更新,必须一次性拿到全部参数的梯度向量。
8. 为什么梯度指向函数增长最快的方向?
8.1. 方向导数
设标量函数 $f(\boldsymbol{x})$,单位方向向量 $\boldsymbol{u}$,方向导数:
$$ D_{\boldsymbol{u}}f = \nabla f \cdot \boldsymbol{u} = |\nabla f| |\boldsymbol{u}|\cos\theta = |\nabla f| \cos\theta $$
$\theta$ 是梯度 $\nabla f$ 和方向 $\boldsymbol{u}$ 的夹角。
- $\theta=0^\circ$(同向):方向导数最大 $=|\nabla f|$,函数上升最快
- $\theta=180^\circ$(反向):方向导数最小,函数下降最快
损失函数 $L$ 越小越好,所以沿梯度反方向更新权重。
9. 沿梯度反方向更新权重,更新的是矩阵吗?
9.1. 参数是向量
梯度 $\nabla_{\boldsymbol{b}} L$ 是和 $\boldsymbol{b}$ 同维度向量:
$$ \boldsymbol{b} = \boldsymbol{b} - \eta \cdot \nabla_{\boldsymbol{b}} L $$
$\eta$ 是学习率。
9.2. 参数是矩阵
梯度 $\nabla_{\boldsymbol{W}} L$ 和 $\boldsymbol{W}$ 完全同尺寸的矩阵:
$$ \boldsymbol{W} = \boldsymbol{W} - \eta \cdot \nabla_{\boldsymbol{W}} L $$
结论:权重是矩阵就更新矩阵,是向量就更新向量,规则完全统一。
9.3. 为什么不用拆开成标量更新?
矩阵形式是批量并行运算,GPU 计算极快。拆成标量循环会慢成千上万倍。
极简总结
- 梯度是多元标量函数所有偏导数拼成的向量,给出函数增减最快的方向
- 四个常用向量梯度公式是梯度下降优化神经网络的数学工具
- 由方向导数可知:梯度同向上升最快、反向下降最快
- 更新对象和参数维度一致:参数是矩阵就整体更新矩阵,向量则更新向量
关联文档
