矩阵求导术

1 矩阵求导的本质结构

对于向量和标量的函数/自变量, 我们常常对他们的导数的定义感到困惑. 这里简单看几个例子回顾一下定义.

输出\输入 标量 向量 矩阵
标量 f(x) f(x→) f(X)
向量 f→(x) f→(x→) f→(X)
矩阵 F(x) F(x→) F(X)
例子

  1. f:R3×1→R,f(x→)=x12+x1x2+x2x3. 则 ∂f(x→)∂x→3×1=[∂f∂x1 ∂f∂x2 ∂f∂x3]T=[2x1+x2 x1+x3 x2]T.
  2. f→:R3×1→R2×1, f→(x)=(x1+x2,x1+x3)T, 则 ∂f→∂x→T=(∂f1∂x1⋯∂f1∂x3∂f2∂x1⋯∂f2∂x3)2×3.

一般地,

  1. f:Rn×1→R, 则 Dxf(x→)=∂f(x)∂xT=(∂f∂x1,⋯,∂f∂xn),∇xf(x)=∂f(x)∂x.
  2. f:Rm×n→R, 定义 vec(X)=(x11,⋯,xn1,x12,⋯,xm2,⋯,x1n,⋯,xmn)T [1], 定义 Dvec(X)f(X)=∂f(X)∂vecT(X)=(∂f∂x11,⋯,∂f∂xm1,⋯,∂f∂x1n,⋯,∂f∂xmn),DXf(X)=∂f(X)∂Xm×nT=(∂f∂X11⋯∂f∂Xm1⋮⋱⋮∂f∂X1n⋯∂f∂Xmn)n×m, 以及类似的 ∇vec(X)f(X),∇Xf(X).
  3. F:Rm×n→Rp×q, 则类似地可定义 vec(F(X)), 则 DXF(X)=(∂vecpq×1(F(X))∂vecmn×1T(X))pq×mn,∇XF(X)=(∂vecpq×1T(F(X))∂vecmn×1(X))mn×pq.

2 基于本质结构的数学推导

也即, 直接采用定义计算.

  1. x→=(x1,⋯,xn)T, 用上述定义计算得:
    1. 设 c∈R. ∂c∂x=0n×1,∂[c1f(x)+c2g(x)]∂x=c1∂f∂x+c2∂g∂x,∂(f⋅g)∂x=∂f∂xg(x)+∂g∂xf(x),∂(f/g)∂x=1g2(x)(∂f∂xg(x)−f∂g∂x).
    2. 设 a=(a1,⋯,an)T, A=(aij)n×n. ∂xTa∂x=∂(aTx)∂x=a,∂(xTx)∂x=2x,∂(xTAx)∂x=(A+AT)x,∂(aTxxTb)∂x=(abT+baT)x.
  1. X=(xij)m×n,
    1. 与 1 (1) 完全相同
    2. \begin{align*}

\frac{\partial (a ^{\mathrm{T}}X ^{\mathrm{T}}b)}{\partial X}&= ba ^{\mathrm{T}},\
\frac{\partial (a ^{\mathrm{T}}XX ^{\mathrm{T}}b)}{\partial X}&= (ab ^{\mathrm{T}}+ba ^{\mathrm{T}})X,\
\frac{\partial (a ^{\mathrm{T}}X ^{\mathrm{T}}Xb)}{\partial X}&= X(ba ^{\mathrm{T}}+ab ^{\mathrm{T}}).
\end{align*}$$

3 基于迹的快速求导法

首先回顾迹的性质: tr(AT)=tr(A),tr(AB)=tr(BA).
此外, 定义全微分. 若 f:Rm×n→R, ∂f∂X∈Rm×n, 则 df=∑i=1m∑j=1n∂f∂XijdXij. 又 tr(ATB)=∑i=1m∑j=1nAijBij, 则联立两式得 (3.1)df=tr((∂f∂X)T⋅dX).

全微分的性质

0. 常数、线性和、乘除同前; dFp×qT(x)=(dFp×q(x))T.

  1. d(AF(X)B)=Ad(F(X))B.
  2. d|X|=|X|tr(X−1dX).
  3. d(X−1)=\tr|F(X)|F(X)−1dF(X).

接下来我们来看一些具体的例子. 首先注意, 对 f:Rm×n→R, (3.2)\tr(f(X))=f(X)⇒dtrf(X)=df(X)=trdf(X).

例子

  1. ∂aTXXTb∂X=(abT+baT)X. 这是因为首先根据 (3.2) 和迹的基本性质: d(aTXXTb)=\tr(d(aTXXTb))=\tr(aT(d(X)XT+Xd(XT))b)=\tr(aTdXXTb)+\tr(aTXdXTb)=\tr(XTbaTdX)+\tr(bTdXXTa)=\tr(XTbaTdX)+\tr(XTabTdX)=\tr(XT(baT+abT)dX), 从而结果为 (XT(baT+abT))T=(abT+baT)X.
  2. ∂\tr(XTX)∂X=2X. 因为 d(\tr(XTX))=\tr(dXTX+dXXT)=\tr(2XTdX).
  3. ∂log⁡|X|∂X=(X−1)T. 利用性质第二条: dlog⁡|X|=\tr(dlog⁡|X|)=\tr(1|X|d|X|)=\tr(\tr(X−1dX))=\tr(X−1dX).
  4. ∂|X−1|∂X=−|X−1|(X−1)T. 同上, 利用性质第二、三条: d|X−1|=|X−1|\tr((X−1)−1d(X−1))=|X−1|\tr(XdX−1)=|X−1|\tr(−XX−1dXX−1)=|X−1|\tr(−X−1dX).
  5. ∂\tr(X+A)−1∂X=−((X+A)−2)T. 因为\tr(d(X+A)−1)=\tr(−(X+A)−1(d(X+A))(X+A)−1)=\tr(−(X+A)−2dX).
  6. ∂|X3|∂X=3|X|3(X−1)T. 因为 d|X3|=\tr(d|X|3)=\tr(3|X|2d|X|)=\tr(3|X|3\tr(X−1dX))=\tr(3|X|3X−1dX).


  1. 也即顺着矩阵纵向行进, 然后回到第二列, 继续纵向行进, 如此往复 ↩︎