Skip to content

补充知识

对向量与矩阵求导

把它们看作普通标量微分的成批处理

在普通微分中,我们研究一个数如何影响另一个数:\(y = f(x) \implies \frac{dy}{dx}\)。 而在向量/矩阵求导中,我们研究的是一组数(输入向量 \(x\))如何影响另一组数(输出)

  • 向量对标量求导:结果是一个向量(梯度)。
  • 向量对向量求导:结果是一个矩阵(雅可比矩阵)。

所有的矩阵/向量求导公式,本质上都是为了保持形式上的统一。 例如:

  • 标量:\(\frac{d}{dx}(ax) = a\)
  • 向量:\(\nabla_x(a^T x) = a\)

常用求导:

(1)线性项:\(f(x) = a^T x\) (内积)

  • 计算: 这相当于 \(a_1 x_1 + a_2 x_2 + \dots\)。如果对 \(x_i\) 求偏导,只剩下 \(a_i\)
  • 结果: \(\nabla_x (a^T x) = a\)
  • 意义: 这代表了函数的坡度在各个坐标轴方向上是恒定的,大小就是向量 \(a\)

(2)二次项:\(f(x) = x^T A x\) (二次型)

  • 计算: 如果对 \(x\) 求导,逻辑类似于标量的 \(\frac{d}{dx}(ax^2) = 2ax\)
  • 结论: \(\nabla_x (x^T A x) = (A + A^T)x\)
  • 特例: 如果 \(A\)对称矩阵(如证明中的 \(A^TA\)),那么 \(A^T = A\),结果就是 \(2Ax\)
  • 意义: 这描述了曲面的“曲率”。在机器学习中,这通常代表“能量”或“误差平方和”的变化率。

结论的简单解释:

理解二次型求导\(x^T A x\)\(x\) 求导)最好的办法是先把它“拆散”看个究竟,再把它“打包”还原回去

我们分三步来彻底拆解它:


第一步:拆散成最简单的 2D 情况

假设向量 \(x\) 只有两个分量 \(\begin{pmatrix} x_1 \\ x_2 \end{pmatrix}\),矩阵 \(A\)\(\begin{pmatrix} a & b \\ c & d \end{pmatrix}\)

二次型 \(f(x) = x^T A x\) 展开后是: $\(f(x) = \begin{pmatrix} x_1 & x_2 \end{pmatrix} \begin{pmatrix} a & b \\ c & d \end{pmatrix} \begin{pmatrix} x_1 \\ x_2 \end{pmatrix}\)$ $\(= \begin{pmatrix} x_1 & x_2 \end{pmatrix} \begin{pmatrix} ax_1 + bx_2 \\ cx_1 + dx_2 \end{pmatrix}\)$ $\(= x_1(ax_1 + bx_2) + x_2(cx_1 + dx_2)\)$ $\(= ax_1^2 + bx_1x_2 + cx_2x_1 + dx_2^2\)$

  1. \(x_1\) 求偏导:\(\displaystyle \frac{\partial f}{\partial x_1} = 2ax_1 + (b+c)x_2\)
  2. \(x_2\) 求偏导:\(\displaystyle \frac{\partial f}{\partial x_2} = (b+c)x_1 + 2dx_2\)

把两个结果写成向量形式: $\(\nabla_x f = \begin{pmatrix} 2ax_1 + (b+c)x_2 \\ (b+c)x_1 + 2dx_2 \end{pmatrix}\)$

把这个向量拆成两个矩阵运算: $\(\nabla_x f = \begin{pmatrix} a & b \\ c & d \end{pmatrix} \begin{pmatrix} x_1 \\ x_2 \end{pmatrix} + \begin{pmatrix} a & c \\ b & d \end{pmatrix} \begin{pmatrix} x_1 \\ x_2 \end{pmatrix}\)$ 即: $\(\nabla_x f = Ax + A^T x = (A + A^T)x\)$

(3)长度平方:\(f(x) = \|x\|^2 = x^T x\)

  • 结论: \(\nabla_x (x^T x) = 2x\)
  • 意义: 随着你远离原点,长度增加的速度与你当前的位置 \(x\) 成正比。

(1)几何意义:寻找最陡方向

  • 向量求导的结果就是一个梯度。
  • 如果你站在一个山坡上,梯度向量指向的就是坡度最陡的正上方

(2)物理意义:敏感度分析

  • 求导本质上是在问:“如果我把输入的某个分量 \(x_i\) 稍微动一点点,输出会改变多少?”
  • 矩阵求导的结果把所有这些“敏感度”打包成了一个简洁的数学对象。在神经网络中,这就是“反向传播”的数学基础。

(3)代数意义:简化复杂方程

  • 如果不使用矩阵求导,你可能需要写出成千上万个求和符号(\(\sum \sum\))。
  • 矩阵求导就像是数学里的“打包压缩”。它让你能用处理 \(2ax\) 这种简单代数的感觉,去处理成千上万维的数据。