AI

梯度详解

·14 分钟阅读·5251 字

梯度详解 的详细笔记

📋 目录

梯度详解

核心概念 梯度是深度学习中梯度下降法的核心,决定模型参数的更新方向和步长。 梯度下降示意 - 从初始点沿负梯度方向逐步收敛到最小值|593x395

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})$ 告诉我们两件事:

  1. 梯度向量指向损失增长最快的方向
  2. 沿着梯度反方向更新权重,就能一步步降低损失

这是 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 计算极快。拆成标量循环会慢成千上万倍。


极简总结

  1. 梯度是多元标量函数所有偏导数拼成的向量,给出函数增减最快的方向
  2. 四个常用向量梯度公式是梯度下降优化神经网络的数学工具
  3. 由方向导数可知:梯度同向上升最快、反向下降最快
  4. 更新对象和参数维度一致:参数是矩阵就整体更新矩阵,向量则更新向量

关联文档

Yanche Blog

记录云原生、Linux、数据库等技术领域的学习心得,以及日常生活的思考与感悟。

© 2026 Yanche Blog. All rights reserved.

Powered by Astro