矩阵微积分

Image of the author

CrazySpottedDove github

记号约定:标量用普通斜体(如 xx),向量用粗体(如 x\mathbf{x}),矩阵用大写字母(如 A,J,H,XA, J, H, X)。


1. 微分运算律

  1. 乘积微分
d(UV)=dU V+U dV\mathrm{d}(UV)=\mathrm{d}U\,V+U\,\mathrm{d}V
  1. 转置微分
d(U⊤)=(dU)⊤\mathrm{d}(U^\top)=(\mathrm{d}U)^\top
  1. 标量转置不变(非常常用)
s=s⊤s=s^\top
  1. 迹的循环不变(维度匹配时)
tr(UVW)=tr(WUV)=tr(VWU)\mathrm{tr}(UVW)=\mathrm{tr}(WUV)=\mathrm{tr}(VWU)
  1. 用微分读梯度(列向量约定)
df=(∇xf)⊤dx\mathrm{d}f=(\nabla_{\mathbf{x}} f)^\top \mathrm{d}\mathbf{x}

2. 二次型我到底是怎么推出来的

目标:

f(x)=x⊤Axf(\mathbf{x})=\mathbf{x}^\top A\mathbf{x}

第一步,直接对乘积微分:

df=d(x⊤Ax)=dx⊤Ax+x⊤A dx\mathrm{d}f=\mathrm{d}(\mathbf{x}^\top A\mathbf{x}) =\mathrm{d}\mathbf{x}^\top A\mathbf{x}+\mathbf{x}^\top A\,\mathrm{d}\mathbf{x}

用“标量转置不变”处理它:

dx⊤Ax=(dx⊤Ax)⊤=x⊤A⊤dx\mathrm{d}\mathbf{x}^\top A\mathbf{x} =\left(\mathrm{d}\mathbf{x}^\top A\mathbf{x}\right)^\top =\mathbf{x}^\top A^\top \mathrm{d}\mathbf{x}

代回去:

df=x⊤A⊤dx+x⊤Adx=x⊤(A⊤+A)dx\mathrm{d}f=\mathbf{x}^\top A^\top \mathrm{d}\mathbf{x}+\mathbf{x}^\top A\mathrm{d}\mathbf{x} =\mathbf{x}^\top (A^\top+A)\mathrm{d}\mathbf{x}

再改成“梯度点乘”格式:

df=((A+A⊤)x)⊤dx\mathrm{d}f=\left((A+A^\top)\mathbf{x}\right)^\top \mathrm{d}\mathbf{x}

所以:

∇xf=(A+A⊤)x\nabla_{\mathbf{x}} f=(A+A^\top)\mathbf{x}

若 AA 对称(A=A⊤A=A^\top):

∇xf=2Ax\nabla_{\mathbf{x}} f=2A\mathbf{x}

3. 最小二乘

f(x)=12∥Ax−b∥22=12(Ax−b)⊤(Ax−b)f(\mathbf{x})=\frac12\|A\mathbf{x}-\mathbf{b}\|_2^2 =\frac12(A\mathbf{x}-\mathbf{b})^\top(A\mathbf{x}-\mathbf{b})

设残差 r=Ax−b\mathbf{r}=A\mathbf{x}-\mathbf{b},则

f=12r⊤rf=\frac12\mathbf{r}^\top\mathbf{r}

先对 r\mathbf{r} 微分:

dr=A dx\mathrm{d}\mathbf{r}=A\,\mathrm{d}\mathbf{x}

再微分 ff:

df=12(dr⊤r+r⊤dr)=r⊤dr=r⊤A dx\mathrm{d}f=\frac12\left(\mathrm{d}\mathbf{r}^\top\mathbf{r}+\mathbf{r}^\top\mathrm{d}\mathbf{r}\right) =\mathbf{r}^\top\mathrm{d}\mathbf{r} =\mathbf{r}^\top A\,\mathrm{d}\mathbf{x}

整理成读梯度格式:

df=(A⊤r)⊤dx\mathrm{d}f=(A^\top\mathbf{r})^\top\mathrm{d}\mathbf{x}

所以:

∇xf=A⊤(Ax−b)\nabla_{\mathbf{x}} f=A^\top(A\mathbf{x}-\mathbf{b})

4. 我常用的两个矩阵微分公式(附来路)

4.1 逆矩阵微分

从恒等式 XX−1=IXX^{-1}=I 出发:

d(XX−1)=0\mathrm{d}(XX^{-1})=0 dX X−1+X d(X−1)=0\mathrm{d}X\,X^{-1}+X\,\mathrm{d}(X^{-1})=0

左乘 X−1X^{-1}:

d(X−1)=−X−1(dX)X−1\mathrm{d}(X^{-1})=-X^{-1}(\mathrm{d}X)X^{-1}

4.2 log⁡det⁡X\log\det X 的微分

dlog⁡det⁡X=tr(X−1dX)\mathrm{d}\log\det X=\mathrm{tr}(X^{-1}\mathrm{d}X)

于是可读出:

∂∂Xlog⁡det⁡X=(X−1)⊤\frac{\partial}{\partial X}\log\det X=(X^{-1})^\top