约定与形状
矩阵求导第一戒律:先问形状。不要一上来就挥舞公式。公式像出租车,方向对了才有用;方向错了,跑得越快越离谱。
| 对象 | 形状 | 常见导数 | 答案形状 |
|---|---|---|---|
| 标量 \(f\) | \(1\times 1\) | \(\partial f/\partial \boldsymbol{x}\) | 与 \(\boldsymbol{x}\) 同形,通常是列向量 |
| 标量 \(f\) | \(1\times 1\) | \(\partial f/\partial \boldsymbol{X}\) | 与 \(\boldsymbol{X}\) 同形 |
| 向量 \(\boldsymbol{y}\) | \(m\times 1\) | \(\partial \boldsymbol{y}/\partial \boldsymbol{x}\) | Jacobian,通常 \(m\times n\) |
| 矩阵 \(\boldsymbol{Y}\) | \(m\times n\) | \(\partial \boldsymbol{Y}/\partial \boldsymbol{X}\) | 线性算子;向量化后是矩阵 |
分子布局与分母布局
向量求导有两大门派:分子布局和分母布局。它们像两种地图投影,不能说谁绝对正确,但你不能今天用一种,明天用另一种,然后怪指南针不忠诚。
对向量 \(\boldsymbol{y}\in\mathbb{\boldsymbol{R}}^m\)、\(\boldsymbol{x}\in\mathbb{\boldsymbol{R}}^n\),本文采用常见机器学习写法:
\[ J = \frac{\partial \boldsymbol{y}}{\partial \boldsymbol{x}} \in \mathbb{\boldsymbol{R}}^{m\times n}, \qquad J_{ij}=\frac{\partial y_i}{\partial x_j}. \]这意味着若 \(f\) 是标量,\(\nabla_{\boldsymbol{x}} f\) 是与 \(\boldsymbol{x}\) 同形的列向量。这个约定适合优化和反向传播,因为梯度像一张账单:变量有几项,账单就有几项。
本文采用的梯度定义
若 \(f\) 是标量,\(\boldsymbol{X}\in\mathbb{\boldsymbol{R}}^{m\times n}\),我们定义 \(\nabla_{\boldsymbol{X}} f\) 与 \(\boldsymbol{X}\) 同形,并满足:
\[ df = \mathrm{tr}\left((\nabla_{\boldsymbol{X}} f)^T dX\right). \]这句话极其重要。它就像机场行李牌:最后只要你能把 \(df\) 整理成 \(\mathrm{tr}(\boldsymbol{G}^T dX)\),那么 \(\boldsymbol{G}\) 就是 \(\nabla_{\boldsymbol{X}} f\)。中间出现过多少转置、乘法、迹和逆矩阵,都只是安检队伍里的乘客。