补充知识
对向量与矩阵求导
把它们看作普通标量微分的成批处理。
在普通微分中,我们研究一个数如何影响另一个数:\(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\)$
- 对 \(x_1\) 求偏导:\(\displaystyle \frac{\partial f}{\partial x_1} = 2ax_1 + (b+c)x_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\) 这种简单代数的感觉,去处理成千上万维的数据。