AI

梯度详解

·14 分钟阅读·5309 字

梳理梯度的核心概念、实现思路与学习要点

📋 目录

梯度详解

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

1. 梯度的定义

1.1. 前提条件

函数 f:Rn→Rf: \mathbb{R}^n \to \mathbb{R}:

  • 输入:nn 维向量 x=[x1,x2,…,xn]T\boldsymbol{x}=[x_1,x_2,\dots,x_n]^T
  • 输出:单个数字(标量),如损失函数

1.2. 梯度公式

∇xf(x)=[∂f(x)∂x1,  ∂f(x)∂x2,  …,  ∂f(x)∂xn]T\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

通俗解释: 把函数 ff 对每一个自变量 x1,x2..xnx_1,x_2..x_n 分别求偏导,再把所有偏导数按顺序拼成一个列向量,这个向量就叫梯度 ∇f\nabla f。

符号 ∇\nabla 读作 nabla,∇xf\nabla_{\boldsymbol{x}} f 表示”对变量 x\boldsymbol{x} 求梯度”。

示例: 二元函数 f(x1,x2)=3x12+x1x2f(x_1,x_2)=3x_1^2 + x_1x_2

∂f∂x1=6x1+x2,∂f∂x2=x1\frac{\partial f}{\partial x_1}=6x_1+x_2,\quad \frac{\partial f}{\partial x_2}=x_1

梯度向量:

∇f=[6x1+x2x1]\nabla f = \begin{bmatrix}6x_1+x_2 \\ x_1\end{bmatrix}

2. 四个常用向量梯度公式

设 x\boldsymbol{x} 是 nn 维列向量,A\boldsymbol{A} 是常数矩阵(不随 x\boldsymbol{x} 变化):

公式 1: ∇xAx=AT\nabla_{\boldsymbol{x}} \boldsymbol{A}\boldsymbol{x} = \boldsymbol{A}^T

Ax\boldsymbol{A}\boldsymbol{x} 是矩阵乘向量,结果是向量;对 x\boldsymbol{x} 求梯度得到 A\boldsymbol{A} 的转置。

公式 2: ∇xxTA=A\nabla_{\boldsymbol{x}} \boldsymbol{x}^T \boldsymbol{A} = \boldsymbol{A}

行向量 xT\boldsymbol{x}^T 乘矩阵 A\boldsymbol{A},梯度直接等于 A\boldsymbol{A}。

公式 3: ∇xxTAx=(A+AT)x\nabla_{\boldsymbol{x}} \boldsymbol{x}^T \boldsymbol{A}\boldsymbol{x} = (\boldsymbol{A}+\boldsymbol{A}^T)\boldsymbol{x}

二次型函数(损失函数、正则项大量用到)。当 A\boldsymbol{A} 对称时简化为 2Ax2\boldsymbol{A}\boldsymbol{x}。

公式 4: ∇x∥x∥2=∇xxTx=2x\nabla_{\boldsymbol{x}} \|\boldsymbol{x}\|^2 = \nabla_{\boldsymbol{x}} \boldsymbol{x}^T\boldsymbol{x} = 2\boldsymbol{x}

∥x∥2\|\boldsymbol{x}\|^2 是向量 L2 范数平方:x12+x22+⋯+xn2x_1^2+x_2^2+\dots+x_n^2。L2 正则的核心公式。

3. 矩阵变量的梯度

如果变量是矩阵 X\boldsymbol{X}:

∇X∥X∥F2=2X\nabla_{\boldsymbol{X}} \|\boldsymbol{X}\|_F^2 = 2\boldsymbol{X}

∥X∥F\|\boldsymbol{X}\|_F 是矩阵 Frobenius 范数(所有元素平方和开根号),矩阵权重衰减的关键公式。

4. 梯度在深度学习中的作用

训练神经网络就是不断减小损失函数 L(w)L(\boldsymbol{w}),梯度 ∇L(w)\nabla L(\boldsymbol{w}) 告诉我们两件事:

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

这是 SGD、Adam 等优化器的底层原理。

5. 链式法则铺垫

深度学习网络是多层复合函数,直接求偏导极其麻烦,需要通过链式法则拆分梯度计算 — 这是自动微分和反向传播的数学基础。


6. 四个向量梯度公式完整证明

约定:x∈Rn×1\boldsymbol{x}\in\mathbb{R}^{n\times 1} 列向量,A\boldsymbol{A} 是常数矩阵。

6.1. 公式 1:∇xAx=A⊤\nabla_{\boldsymbol{x}} \boldsymbol{A}\boldsymbol{x} = \boldsymbol{A}^\top

设 A∈Rm×n\boldsymbol{A}\in\mathbb{R}^{m\times n},令 y=Ax∈Rm×1\boldsymbol{y}=\boldsymbol{A}\boldsymbol{x}\in\mathbb{R}^{m\times 1}:

yi=∑k=1nAikxky_i = \sum_{k=1}^n A_{ik}x_k

梯度定义:∇xyi\nabla_{\boldsymbol{x}} y_i 是对 x\boldsymbol{x} 各分量偏导组成的列向量:

∂yi∂xj=Aij\frac{\partial y_i}{\partial x_j} = A_{ij}

把所有 ii 堆叠成矩阵(雅可比矩阵),再转置为梯度列向量,即得 A⊤\boldsymbol{A}^\top。

6.2. 公式 2:∇xx⊤A=A\nabla_{\boldsymbol{x}} \boldsymbol{x}^\top \boldsymbol{A} = \boldsymbol{A}

设 A∈Rn×m\boldsymbol{A}\in\mathbb{R}^{n\times m},令 y=x⊤A∈R1×my = \boldsymbol{x}^\top \boldsymbol{A} \in \mathbb{R}^{1\times m}:

yj=∑k=1nxkAkjy_j = \sum_{k=1}^n x_k A_{kj}

对 xix_i 求偏导:

∂yj∂xi=Aij\frac{\partial y_j}{\partial x_i} = A_{ij}

按梯度定义堆叠,结果为矩阵 A\boldsymbol{A} 本身。

6.3. 公式 3:∇xx⊤Ax=(A+A⊤)x\nabla_{\boldsymbol{x}} \boldsymbol{x}^\top \boldsymbol{A}\boldsymbol{x} = (\boldsymbol{A}+\boldsymbol{A}^\top)\boldsymbol{x}

令标量 f=x⊤Axf = \boldsymbol{x}^\top \boldsymbol{A}\boldsymbol{x},展开为分量求和形式:

f=∑i=1n∑j=1nxiAijxjf = \sum_{i=1}^n \sum_{j=1}^n x_i A_{ij} x_j

对 xkx_k 求偏导(分 i=ki=k 和 j=kj=k 两部分):

∂f∂xk=∑j=1nAkjxj+∑i=1nxiAik\frac{\partial f}{\partial x_k} = \sum_{j=1}^n A_{kj} x_j + \sum_{i=1}^n x_i A_{ik}

写成向量形式:

∇f=Ax+A⊤x=(A+A⊤)x\nabla f = \boldsymbol{A}\boldsymbol{x} + \boldsymbol{A}^\top\boldsymbol{x} = (\boldsymbol{A}+\boldsymbol{A}^\top)\boldsymbol{x}

当 A\boldsymbol{A} 对称时,A⊤=A\boldsymbol{A}^\top=\boldsymbol{A},简化为 2Ax2\boldsymbol{A}\boldsymbol{x}。

6.4. 公式 4:∇x∥x∥2=2x\nabla_{\boldsymbol{x}} \|\boldsymbol{x}\|^2 = 2\boldsymbol{x}

令公式 3 中 A=I\boldsymbol{A}=\boldsymbol{I}(单位矩阵,对称):

∇xx⊤Ix=2Ix=2x\nabla_{\boldsymbol{x}}\boldsymbol{x}^\top \boldsymbol{I} \boldsymbol{x} = 2\boldsymbol{I}\boldsymbol{x}=2\boldsymbol{x}

直接展开验证:

∥x∥2=x12+x22+⋯+xn2,∂∥x∥2∂xi=2xi\|\boldsymbol{x}\|^2 = x_1^2+x_2^2+\dots+x_n^2,\quad \frac{\partial \|\boldsymbol{x}\|^2}{\partial x_i}=2x_i

拼成列向量即 2x2\boldsymbol{x}。

6.5. 矩阵梯度拓展:∇X∥X∥F2=2X\nabla_{\boldsymbol{X}}\|\boldsymbol{X}\|_F^2 = 2\boldsymbol{X}

F 范数平方 ∥X∥F2=∑i,jXij2\|\boldsymbol{X}\|_F^2 = \sum_{i,j}X_{ij}^2,对每个元素求偏导 ∂∥X∥F2∂Xij=2Xij\frac{\partial \|\boldsymbol{X}\|_F^2}{\partial X_{ij}} = 2X_{ij},整体矩阵梯度就是 2X2\boldsymbol{X}。


7. 为什么深度学习要用向量/矩阵梯度?

7.1. 神经网络权重天然是向量/矩阵

  • 单层权重 W∈Rm×n\boldsymbol{W}\in\mathbb{R}^{m\times n},偏置 b∈Rm\boldsymbol{b}\in\mathbb{R}^m
  • 损失函数 LL 是标量输出,输入是高维权重向量

7.2. 批量运算,GPU 友好

梯度把所有偏导数打包成向量/矩阵,能使用 GPU 矩阵并行加速,代码一行完成更新。

7.3. 反向传播简洁

链式法则对向量、矩阵有统一矩阵形式,反向传播全程只用矩阵运算推导。

7.4. 优化算法的方向依赖整体向量

梯度下降需要所有参数同步更新,必须一次性拿到全部参数的梯度向量。


8. 为什么梯度指向函数增长最快的方向?

8.1. 方向导数

设标量函数 f(x)f(\boldsymbol{x}),单位方向向量 u\boldsymbol{u},方向导数:

Duf=∇f⋅u=∥∇f∥∥u∥cos⁡θ=∥∇f∥cos⁡θD_{\boldsymbol{u}}f = \nabla f \cdot \boldsymbol{u} = \|\nabla f\| \|\boldsymbol{u}\|\cos\theta = \|\nabla f\| \cos\theta

θ\theta 是梯度 ∇f\nabla f 和方向 u\boldsymbol{u} 的夹角。

  • θ=0∘\theta=0^\circ(同向):方向导数最大 =∥∇f∥=\|\nabla f\|,函数上升最快
  • θ=180∘\theta=180^\circ(反向):方向导数最小,函数下降最快

损失函数 LL 越小越好,所以沿梯度反方向更新权重。


9. 沿梯度反方向更新权重,更新的是矩阵吗?

9.1. 参数是向量

梯度 ∇bL\nabla_{\boldsymbol{b}} L 是和 b\boldsymbol{b} 同维度向量:

b=b−η⋅∇bL\boldsymbol{b} = \boldsymbol{b} - \eta \cdot \nabla_{\boldsymbol{b}} L

η\eta 是学习率。

9.2. 参数是矩阵

梯度 ∇WL\nabla_{\boldsymbol{W}} L 和 W\boldsymbol{W} 完全同尺寸的矩阵:

W=W−η⋅∇WL\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