矩阵求导

矩阵求导结果的布局

functon \input 标量变元 向量变元 矩阵变元
实值标量函数 f(x) f(x) f(X)
实向量函数 f(x) f(x) f(X)
实矩阵函数 F(x) F(x) F(X)

一般向量默认为列向量

Example

f(X3×2)=a1x112+a2x122++a6x322F3×2(x3×1)=(x1+x2+x3x2x3x1x32x1+x2x1x2x3)

矩阵求导即每个 f 对变元中的每个元素逐个求偏导。其中有两种形式

f2×1T(x)x3×1=[f1x1f2x1f1x2f2x2f1x3f2x3]3×2

向量变元,标量函数

Dxf(x)=f(x)xT=[fx1,fx2,,fxn] (4)xf(x)=f(x)x=[fx1,fx2,,fxn]T

两种形式互为转置

矩阵变元,标量函数

vec(X)按列堆栈来向量化

(5)vec(X)=[x11,x21,,xm1,x12,x22,,xm2,,x1n,x2n,,xmn]T (6)DvecXf(X)=f(X)vecT(X)=[fx11,fx21,,fxm1,fx12,fx22,,fxm2,,fx1n,fx2n,fxmn] vecXf(X)=f(X)vecX=[fx11,fx21,,fxm1,fx12,fx22,,fxm2,,fx1n,fx2n,,fxmn]T DXf(X)=f(X)Xm×nT=[fx11fx21fxm1fx12fx22fxm2fx1nfx2nfxmn]n×m Xf(X)=f(X)Xm×n=[fx11fx12fx1nfx21fx22fx2nfxm1fxm2fxmn]m×n

矩阵变元,矩阵函数

Xm×n=(xij)i=1,j=1m,n,Fp×q=(fij)i=1,j=1p,q

DXF(X)=vecpq×1(F(X))vecmn×1TX=[f11x11f11xmnfpqx11fpqxmn]pq×mn XF(X)=vecpq×1T(F(X))vecmn×1X=[f11x11fpqx11f11xpqfpqxmn]mn×pq

矩阵求导公式

矩阵微分

基本形式

df(x)=fx1dx1+fx2dx2++fxndxn=(fx1,fx2,,fxn)[dx1dx2dxn]=tr((fx1,fx2,,fxn)[dx1dx2dxn])d(f(X))=fx11dx11+fx12dx12++fx1ndx1n+fx21dx21+fx22dx22++fx2ndx2n++fxm1dxm1+fxm2dxm2++fxmndxmn=tr([fx11fx21fxm1fx12fx22fxm2fx1nfx2nfxmn]n×m[dx11dx12dx1ndx21dx22dx2ndxm1dxm2dxmn]m×n)

可以看出 d(f(X))=tr(f(X)XTdX),因此如果能全微分成 tr(dX),则可直接求出导数。

且该结果已证明唯一。即若 df(X)=tr(A1dX)=tr(A2dX),则 A1=A2
当矩阵“退化”为向量时仍成立

dFp×q(X)=[df11(X)df12(X)df1q(X)df21(X)df22(X)df2q(X)dfp1(X)dfp2(X)dfpq(X)]p×q

微分基本公式

此时的微分是矩阵,不能交换乘积的左右顺序。
d(AXB)=Ad(X)B d|X|=|X|tr(X1dX)=tr(|X|X1dX) d(X1)=X1d(X)X1

证明思路即 XX1=E 两边同时微分得到

常用例

均可对应[[#矩阵求导公式]]
对于实值标量函数求导:

df(X)=d(trf(X))=tr(df(X))

如果是迹形式的实值标量函数同理:

d(trFp×p(X))=d(i=1pfii(X))=i=1pd(fii(X))=tr(dFp×p(X))

如果是矢量或矩阵函数,则需对每个函数元素微分求导
【例 1】

(aTXXTb)X=abTX+baTX

【例 2】

tr(XTX)X=2X

【例 3】

log|X|X=(X1)T

其中 X 为方阵
【例 4】

|X1|X=|X1|(X1)T

其中 X 为方阵
【例 5】

tr(X+A)1X=((X+A)2)T

其中 X,A 均为方阵,A 为常数阵
【例 6】

|X3|X=|X|3X=3|X|3(X1)T=3|X3|(X1)T

其中 X 为方阵

参考


© 2024 LiQ :) 由 Obsidian&Github 强力驱动