Jacobian矩阵和梯度矩阵

pytorchautograd包中,利用Jacobian(雅格比)矩阵进行梯度的计算。学习实值标量函数、实值向量函数和实值矩阵函数相对于实向量变元或矩阵变元的偏导

计算符号

  • 实向量变元:x=[x1,...,xm]TRm
  • 实矩阵变元:X=[x1,...,xn]Rm×n
  • 实值标量函数
    • f(X)R,其变元是m×1实值向量x,记作f:RmR
    • f(X)R,其变元是m×n实矩阵X,记作f:Rm×nR
  • p维实列向量函数
    • f(x)Rp,其变元是m×1实值向量x,记作f:RmRp
    • f(X)Rp,其变元是m×n实矩阵X,记作f:RmRp
  • p×q维实矩阵函数
    • f(x)Rp×q,其变元是m×1实值向量x,记作f:RmRp×q
    • f(X)Rp×q,其变元是m×n实矩阵X,记作f:RmRp×q

实值函数的分类

函数类型向量变元xRm矩阵变元XRm×n
标量函数fRf(x), f:RmRf(X), f:Rm×nR
向量函数fRpf(x), f:RmRpf(X), f:Rm×nRp
矩阵函数FRp×qF(x), f:RmRp×qF(X), F:Rm×nRp×q

行向量偏导算子和Jacobian矩阵

实值标量函数

定义实向量变元x=[x1,...,xm]T1×m行向量偏导算子记为

Dx=xT=[x1,...,xm]

对于实值标量函数f(x)而言,对于x的偏导向量是一个1×m行向量

Dxf(x)=f(x)xT=[f(x)x1,...,f(x)xm]

当变元为实值矩阵XRm×n时,其偏导向量有两种表示形式

DXf(X)=f(X)XT=[f(X)x11f(X)xm1f(X)x1nf(X)xmn]Rn×m

或者

DvecXf(X)=[f(X)x11,...,f(X)xm1,...,f(X)x1n,...,f(X)xmn]

DXf(X)称为实值标量函数f(X)关于矩阵变元XJacobian矩阵

DvecXf(X)称为实值标量函数f(X)关于矩阵变元X行偏导向量

两者之间关系

DvecXf(X)=rvec(DXf(X))=(vec(DXTf(X)))T

即实值标量函数f(X)的行向量偏导DvecXf(X)等于Jacobian矩阵的转置DXTf(X)的列向量化vec(DXTf(X)的转置

实值矩阵函数

计算实值矩阵函数F(X)=[fkl]k=1,l=1p,qRp×q对于矩阵变元XRm×n的行偏导矩阵:

先通过列向量化,将p×q矩阵函数F(X)转换成pq×1列向量

vec(F(X))=[f11(X),...,fp1(X),...,f1q(X),...,fpq(X)]TRpq

然后,将该列向量对变元X的列向量化的转置(vecX)T求偏导,给出pq×mnJacobian矩阵

DXF(X)=vec(F(X))(vecX)TRpq×mn

具体表达式如下:

DXF(X)=[f11(vecX)Tfp1(vecX)Tf1q(vecX)Tfpq(vecX)T]=[f11x11f11xm1f11x1nf11xmnfp1x11fp1xm1fp1x1nfp1xmnf1qx11f1qxm1f1qx1nf1qxmnfpqx11fpqxm1fpqx1nfpqxmn]

列向量偏导算子和梯度矩阵

采用列向量形式定义的偏导算子称为列向量偏导算子,又称为梯度算子

实值标量函数

定义实向量变元x=[x1,...,xm]T1×m行向量偏导算子记为

x=xT=[x1,...,xm]T

对于实值标量函数f(x)而言,对于x的偏导向量xf(x)是一个m×1列向量

Dxf(x)=f(x)x=[f(x)x1,...,f(x)xm]T

将实值矩阵变元XRm×n列向量化后,关于矩阵变元X的梯度向量为

vecXf(X)=f(X)vecX=[f(X)x11,...,f(X)xm1,...,f(X)x1n,...,f(X)xmn]T

或者

Xf(X)=f(X)X=[f(X)x11f(X)x1nf(X)xm1f(X)xmn]

前者称为实值标量函数f(X)关于实值矩阵变元X的列向量偏导算子

后者称为实值标量函数f(X)关于实值矩阵变元X的梯度矩阵

所以实值标量函数f(X)的梯度矩阵等于Jacobian矩阵的转置

Xf(X)=DXTf(X)

实值矩阵函数

计算实值矩阵函数F(X)Rp×q对于矩阵变元XRm×n的梯度矩阵

先通过列向量化,将p×q矩阵函数F(X)转换成pq×1列向量

vec(F(X))=[f11(X),...,fp1(X),...,f1q(X),...,fpq(X)]TRpq

然后,将该列向量对变元X的列向量化vecX求偏导,给出pq×mn维梯度矩阵

具体表达式如下:

XF(X)=[f11vecXfp1vecXf1qvecXfpqvecX]=[f11x11f11x11f11x11f11x11fp1xm1fp1xm1fp1xm1fp1xm1f1qx1nf1qx1nf1qx1nf1qx1nfpqxmnfpqxmnfpqxmnfpqxmn]

所以实值矩阵函数f(X)的梯度矩阵等于Jacobian矩阵的转置

XF(X)=(DXF(X))T

偏导和梯度计算

实值函数对于矩阵变元X的梯度计算有如下性质和法则

  1. f(X)=c为常数,其中XRm×n,则梯度cX=Om×n维数相容原则
  2. 线性法则。若f(X)g(X)分别是矩阵X的实值函数,c1c2为实常数,那么

[c1f(X)+c2g(X)]X=c1f(X)X+c2g(X)X

  1. 乘积法则。若f(X),g(X)h(X)都是矩阵X的实值函数,则

[f(X)g(X)]X=g(X)f(X)X+f(X)g(X)X

以及

[f(X)g(X)h(X)]X=g(X)h(X)f(X)X+f(X)h(X)g(X)X+f(X)g(X)h(X)X

  1. 商法则。若g(X)0,则

[f(X)/g(X)]X=1g(X)2[g(X)f(X)Xf(X)g(X)X]

  1. 链式法则。令Xm×n矩阵,且y=f(X)g(y)分别是以矩阵X和标量y为变元的实值函数,则

g(f(X))X=dg(y)dyf(X)X

实值标量函数

针对实值标量函数有如下推论

  1. 实值函数f(x)=xTAx的行偏导向量为Df(x)=xT(A+AT),梯度向量为Xf(x)=(Df(X))T=(AT+A)x
  2. 实值函数f(x)=aTXXTb,其中XRm×n,a,bRn×1Jacobian矩阵为DXf(X)=XT(baT+abT),梯度矩阵为Xf(x)=(abT+baT)X
  3. 实值函数f(X)=tr(XB),其中XRm×n,bRn×m,tr(BX)=tr(XB),所以Jacobian矩阵为DXtr(XB)=DXtr(BX)=B,梯度矩阵为Xtr(XB)=Xtr(BX)=BT

以推论一为例,假设

x=[x1x2] A=[a11a12a21a22]

所以

f(x)=xTAx=[x1x2][a11a12a21a22][x1x2]=k=12l=12aklxkxl

=[x1a11+x2a21,x1a12+x2a22][x1x2]=x1a11x1+x2a21x1+x1a12x2+x2a22x2

Df(X)=f(x)x=[x1a11+a11x1+x2a21+a12x2,a21x1+x1a12+x2a22+a22x2]=[x1a11+x2a21,x1a12+x2a22]+[a11x1+a12x2,a21x1+a22x2]=[x1,x2][a11a12a21a22]+[x1,x2][a11a21a12a22]=xTA+xTAT=xT(A+AT)

相关阅读

  • 《矩阵分析与应用》第3章 3.1 Jacobian矩阵与梯度矩阵