基础部分

基本法则

根据$df=f’(x)dx$,我们定义向量微分和矩阵微分

此外,定义两个矩阵的内积

罗辑就是在此基础上发现了黑暗森林法则,bushi

运算法则

  1. 加减法: $d(\mathbf{X \pm Y}) = d\mathbf{X} \pm d\mathbf{Y}$; 矩阵乘法: $d(\mathbf{XY}) = (d\mathbf{X})\mathbf{Y}+ \mathbf{X}d\mathbf{Y}$; 转置: $d(\mathbf{X}^T) = (d\mathbf{X})^T$; 迹: $d\text{tr}(\mathbf{X}) = \text{tr}(d\mathbf{X})$。
  2. 逆: $d\mathbf{X}^{-1} = -\mathbf{X}^{-1}d\mathbf{XX}^{-1}$。此式可在$\mathbf{XX}^{-1} = I$两侧求微分来证明。
  3. 行列式: $ d|\mathbf{X} | = \operatorname{tr} ( adj(\mathbf{X})^T d\mathbf{X})$, 其中$adj(\mathbf{X})$表示$\mathbf{X}$的伴随矩阵, 在X可逆时又可以写作$d|\mathbf{X}| = |\mathbf{X}|\operatorname{tr}(\mathbf{X}^{-1}d\mathbf{X})$。
  4. 逐元素乘法: $d(\mathbf{X} \odot \mathbf{Y}) = d\mathbf{X} \odot \mathbf{Y} + \mathbf{X} \odot d\mathbf{Y}$, $\odot$表示尺寸相同的矩阵$\mathbf{X},\mathbf{Y}$逐元素相乘。
  5. 逐元素函数: $d\sigma(\mathbf{X}) = \sigma’(\mathbf{X}) \odot d\mathbf{X}$, $\sigma(X) = [\sigma(X_{ij})]$是逐元素标量函数运算, $\sigma’(\mathbf{X}) = [\sigma’(X_{ij})]$是逐元素求导数。例如$\mathbf{X} = \left[\begin{matrix} X_{11} & X_{12} \\ X_{21} & X_{22} \end{matrix}\right]$, $d|\sin \mathbf{X}| = \left[\begin{matrix} \cos X_{11} dX_{11} & \cos X_{12} dX_{12} \\ \cos X_{21} dX_{21} & \cos X_{22} dX_{22} \end{matrix}\right] = |\cos \mathbf{X}| \odot d\mathbf{X}$。

矩阵计算基础

1.标量套上迹:$a=\operatorname{tr}(a)$

2.转置:tr$(\mathbf{A}^T)=$tr$(\mathbf{A})$。

3.线性:$\operatorname{tr}(\mathbf{A}\pm \mathbf{B})=\operatorname{tr}(\mathbf{A})\pm\operatorname{tr}(\mathbf{B})$。

4.矩阵乘法交换:$\operatorname{tr}(\mathbf{AB})=\operatorname{tr}(\mathbf{BA})$,$\mathbf{A}$与$\mathbf{B}^T$尺寸相同。两侧都等于$\sum_{i,j}A_{ij}B_{ji}$。

5.矩阵乘法/逐元素乘法交换:$\operatorname{tr}(\mathbf{A}^T(\mathbf{B}\odot \mathbf{C}))=\operatorname{tr}((\mathbf{A}\odot \mathbf{B})^TC)$,其中$\mathbf{A,B,C}$尺寸相同。两侧都等于$\sum_{i,j}A_{ij}B_{ij}{C}_{ij}$。

针对向量求导

由实际统计中,代价函数往往是标量函数,对其他高维函数不再深究

  • $\frac{\partial \mathbf{x}^T \mathbf{a}}{\partial \mathbf{x}} = \frac{\partial \mathbf{a}^T \mathbf{x}}{\partial \mathbf{x}} = \mathbf{a}$
  • $\frac{\partial}{\partial \mathbf{x}} ||\mathbf{x} - \mathbf{a}||_2 = \frac{\mathbf{x} - \mathbf{a}}{||\mathbf{x} - \mathbf{a}||_2}$
  • $\frac{\partial ||\mathbf{x}||_2^2}{\partial \mathbf{x}} = \frac{\partial \mathbf{x}^T \mathbf{x}}{\partial \mathbf{x}} = 2\mathbf{x}$

  • $\frac{\partial \mathbf{x}^T \mathbf{B} \mathbf{x}}{\partial \mathbf{x}} = (\mathbf{B} + \mathbf{B}^T) \mathbf{x}$

针对矩阵求导

标量对矩阵求导

  • $f=\boldsymbol{a}^TX\boldsymbol{b} \Rightarrow \nabla f = \mathbf{ab}^T$ (其中$\mathbf{a}$是mx1列向量,$\mathbf{X}$是$m\times n$矩阵,$\mathbf{b}$是$n\times 1$列向量,$f$是标量)

  • $f(\mathbf{A})=\operatorname{tr}(\mathbf{A}) \Rightarrow \nabla f = I$

  • $f(\mathbf{A})=||\mathbf{A}||_2 \Rightarrow \nabla f = \mathbf{A}/||\mathbf{A}||_2$
  • $f(\mathbf{A})=|\mathbf{A}|\Rightarrow \nabla f = |\mathbf{A}|(\mathbf{A}^{-1})^{T} = adj( \mathbf{A})^T$

矩阵对矩阵的求导

在此引入Kronecker积,待补充……

高阶示例

逐元素函数

向量逐元素:

$f = \mathbf{a}^\top \exp(Xb)$,求 $\frac{\partial f}{\partial X}$。其中 $\mathbf{a}$ 是 $\mathbf{m}\times 1$ 列向量,$X$ 是 $\mathbf{m}\times \mathbf{n}$ 矩阵,$b$ 是 $\mathbf{n}\times 1$ 列向量,exp表示逐元素求指数,$f$ 是标量。

解:

先使用矩阵乘法、逐元素函数法则求微分:

再套上述并做交换:

注意这里我们先根据 $\text{tr}(\mathbf{A}^T(\mathbf{B} \odot \mathbf{C})) = \text{tr}((\mathbf{A} \odot \mathbf{B})^T \mathbf{C})$ 交换了 $\mathbf{a}$、$\exp(Xb)$ 与 $dX\mathbf{b}$,再根据 $\text{tr}(AB) = \text{tr}(BA)$ 交换了 $(\mathbf{a} \odot \exp(\mathbf{Xb}))^T d\mathbf{X}$ 与 $b$。对照导数与微分的联系 $df = \text{tr}\left(\frac{\partial f}{\partial \mathbf{X}}^\top d\mathbf{X}\right)$,得到

矩阵逐元素:

$f = \text{tr}(\mathbf{Y}^\top \mathbf{M}\mathbf{Y}), \mathbf{Y} = \sigma(\mathbf{W}\mathbf{X})$,求 $\frac{\partial f}{\partial \mathbf{X}}$。其中 $\mathbf{W}$ 是 $l\times m$ 矩阵,$\mathbf{X}$ 是 $m\times n$ 矩阵,$\mathbf{Y}$ 是 $l\times n$ 矩阵,$\mathbf{M}$ 是 $l\times l$ 对称矩阵,$\sigma$ 是逐元素函数,$f$ 是标量。

解:

先求 $\frac{\partial f}{\partial \mathbf{Y}}$,求微分,使用矩阵乘法、转置法则:

对照导数与微分的联系,得到 $\frac{\partial f}{\partial \mathbf{Y}} = (\mathbf{M} + \mathbf{M}^T)\mathbf{Y} = 2\mathbf{M}\mathbf{Y}$,注意这里 $\mathbf{M}$ 是对称矩阵。为求 $\frac{\partial f}{\partial \mathbf{X}}$,写出 $df = \text{tr}\left(\frac{\partial f}{\partial \mathbf{Y}}^\top d\mathbf{Y}\right)$,再将 $d\mathbf{Y}$ 用 $d\mathbf{X}$ 表示出来代入,并使用矩阵乘法/逐元素乘法交换:

对照导数与微分的联系,得到

回归代价函数

线性回归
设损失函数为

求 $w$ 的最小二乘估计,即求 $\ell$ 对 $w$ 的零点。其中 $y$ 是 $m\times 1$ 列向量, $X$ 是 $m\times n$ 矩阵 , $w$ 是 $n\times 1$ 列向量, $\ell$ 为标量


这是标量对向量的导数,不过可以把向量看作矩阵的特例。先将向量模平方改写成向量与自身的内积:

求微分,使用矩阵乘法、转置等法则:

(注意:$X\,dw$ 与 $Xw - y$ 均为向量,两个向量的内积满足 $u^\top v = v^\top u$。)

对照导数与微分的联系

得到梯度

令梯度为零,解得最小二乘估计:

Logistic回归

$l = -\mathbf{y}^\top \log \text{softmax}(\mathbf{Wx})$,求 $\frac{\partial l}{\partial \mathbf{W}}$。

其中 $\mathbf{y}$ 是除一个元素为1外其它元素为0的 $\mathbf{m}\times 1$ 列向量,$\mathbf{W}$ 是 $\mathbf{m}\times \mathbf{n}$ 矩阵,$\mathbf{x}$ 是 $\mathbf{n}\times 1$ 列向量,$l$ 是标量;log表示自然对数,softmax($\mathbf{a}$) = $\frac{\exp(\mathbf{a})}{\mathbf{1}^\top \exp(\mathbf{a})}$,其中exp($\mathbf{a}$)表示逐元素求指数,$\mathbf{1}$代表全1向量。

解1:首先将softmax函数代入并写成

这里要注意逐元素log满足等式 $\log(u/c) = \log(u) - \log(c)$,以及 $\mathbf{y}$ 满足 $\mathbf{y}^\top \mathbf{1} = 1$。求微分,使用矩阵乘法、逐元素函数等法则:

再套上述并做变换,注意可化简 $1^\top (\exp(\mathbf{Wx}) \odot (d\mathbf{Wx})) = \exp(\mathbf{Wx})^\top d\mathbf{Wx}$,这是根据等式 $1^\top (u \odot v) = u^\top v$,故

对照导数与微分的联系,得到

神经网络

$l = -\mathbf{y}^\top \log \text{softmax}(\mathbf{W}_2 \sigma(\mathbf{W}_1 \mathbf{x}))$,求 $\frac{\partial l}{\partial \mathbf{W}_1}$ 和 $\frac{\partial l}{\partial \mathbf{W}_2}$?

$\mathbf{y}$ 是一个元素为 1、其余元素为 0 的 $m!\times!1$ 列向量; $\mathbf{W}_2$ 是 $m!\times!p$ 矩阵; $\mathbf{W}_1$ 是 $p!\times!n$ 矩阵; sigmoid 函数定义$\sigma(a)=\frac{1}{1+\exp(-a)}.$

定义:$\mathbf{a}_1 = \mathbf{W}_1 \mathbf{x}$,$\mathbf{h}_1 = \sigma(\mathbf{a}_1)$,$\mathbf{a}_2 = \mathbf{W}_2 \mathbf{h}_1$.

则 $l = -\mathbf{y}^\top \log \text{softmax}(\mathbf{a}_2)$。在前例Logistic回归中中已求出

使用复合法则,

使用矩阵乘法交换的迹技巧从第一项得到

从第二项得到

接下来对第二项继续使用复合法则来求 $\frac{\partial l}{\partial \mathbf{a}_1}$,并利用矩阵乘法和逐元素乘法交换的迹技巧:

得到

为求 $\frac{\partial l}{\partial \mathbf{W}_1}$,再用一次复合法则:

得到

资源分享

参考文献:

[1] https://zhuanlan.zhihu.com/p/24709748

[2]https://zhuanlan.zhihu.com/p/24863977

[3]https://github.com/mitmath/matrixcalc

[4]matrixcookbook