矩阵求导术

1 矩阵求导的本质结构

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

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

  1. f:R3×1R,f(x)=x12+x1x2+x2x3. 则 f(x)x3×1=[fx1 fx2 fx3]T=[2x1+x2 x1+x3 x2]T.
  2. f:R3×1R2×1, f(x)=(x1+x2,x1+x3)T, 则 fxT=(f1x1f1x3f2x1f2x3)2×3.

一般地,

  1. f:Rn×1R, 则 Dxf(x)=f(x)xT=(fx1,,fxn),xf(x)=f(x)x.
  2. f:Rm×nR, 定义 vec(X)=(x11,,xn1,x12,,xm2,,x1n,,xmn)T [1], 定义 Dvec(X)f(X)=f(X)vecT(X)=(fx11,,fxm1,,fx1n,,fxmn),DXf(X)=f(X)Xm×nT=(fX11fXm1fX1nfXmn)n×m, 以及类似的 vec(X)f(X),Xf(X).
  3. F:Rm×nRp×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. cR. cx=0n×1,[c1f(x)+c2g(x)]x=c1fx+c2gx,(fg)x=fxg(x)+gxf(x),(f/g)x=1g2(x)(fxg(x)fgx).
    2. a=(a1,,an)T, A=(aij)n×n. xTax=(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×nR, fXRm×n, 则 df=i=1mj=1nfXijdXij.tr(ATB)=i=1mj=1nAijBij, 则联立两式得 (3.1)df=tr((fX)TdX).

全微分的性质

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

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

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

例子

  1. aTXXTbX=(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=(X1)T. 利用性质第二条: dlog|X|=\tr(dlog|X|)=\tr(1|X|d|X|)=\tr(\tr(X1dX))=\tr(X1dX).
  4. |X1|X=|X1|(X1)T. 同上, 利用性质第二、三条: d|X1|=|X1|\tr((X1)1d(X1))=|X1|\tr(XdX1)=|X1|\tr(XX1dXX1)=|X1|\tr(X1dX).
  5. \tr(X+A)1X=((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(X1)T. 因为 d|X3|=\tr(d|X|3)=\tr(3|X|2d|X|)=\tr(3|X|3\tr(X1dX))=\tr(3|X|3X1dX).


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