矩阵梯度

目录

1 简介

在信息论或者机器学习的论文中,有很多黑体矢量的微分或者积分,再加上梯度函数,简直让人眼花缭乱。于是下定决心把这些黑体的矩阵语言仔细学习一下。出来混迟早是要还的,记得在大学的时候这个矩阵语言属于三不管:数学分析和线性代数都不管,其他课程就更不管了。今天属于还债日。

2 实值函数相对于实向量的梯度

相对于n×1向量x的梯度算子记作x,定义为:

x=[x1,x2,,xn]T=x

因此,n×1实向量x为变元的实标量函数f(x)相对于x的梯度为一n×1的列向量,定义为:

xf(x)=[f(x)x1,f(x)x2,,f(x)xn]T=f(x)x

梯度方向的负方向成为变元x的梯度流(gradient flow),记为:

x=xf(x)

从梯度的定义式可以看出:

  1. 一个以向量为变元的变量函数的梯度为一向量。
  2. 梯度的每个分量给出了变量函数在该分量方向上的变化率

梯度向量最重要的性质之一是,它指出了当变元增大时函数f的最大增大率。相反,梯度的负值(负梯度)指出了当变元增大时函数f的最大减小率。根据这样一种性质,即可设计出求一函数极小值的迭代算法。

类似地,实值函数f(x)相对于1×n行向量xT的梯度为1×n行向量,定义为:

xTf(x)=[f(x)x1,f(x)x2,,f(x)xn]=f(x)xT

m维行向量函数f(x)=[f1(x),,fm(x)]相对于n维实向量x的梯度为一n×m矩阵定义为:

f(x)x=[f1(x)x1f2(x)x1fm(x)x1f1(x)x2f2(x)x2fm(x)x2f1(x)xnf2(x)xnfm(x)xn]=xf(x)

m×1向量函数f(x)=y=[y1,,ym]T,其中y1,y2,,ym是向量的标量函数,一阶梯度:

yxT=[y1x1y1x2y1xny2x1y2x2y2xnymx1ymx2ymxn]

yxT是一个m×n的矩阵,称为向量函数y=[y1,y2,,ym]T的 Jacobi 矩阵。

f(x)=[x1,x2,,xn],则:

xTx=I

这是一个非常有用的结论,将帮助我们导出更多非常有用的结论。

Ay均和x无关,则:

xTAyx=xTxAy=Ay

因为yTAx=ATy,x=x,ATy=xTATy,则:

yTAxx=ATy

由于:

xTAx=ni=1nj=1Aijxixj

所以梯度xTAxx的第k个分量为:

[xTAxx]k=xkni=1nj=1Aijxixj=ni=1Aikxi+nj=1Akjxj

即有:

xTAxx=Ax+ATx

特别的如果A为对称矩阵则有:

xTAxx=2Ax

归纳以上三个例子的结果以及其他结果,便得到实值函数f(x)相对于列向量x的一下几个常用的梯度公式。

f(x)=c为常数,则梯度cx=0

线性法则:若f(x)g(x)分别是向量x的实值函数,c1c2为实常数,则:

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

乘法法则:若f(x)g(x)都是向量x的实值函数,则:

f(x)g(x)x=g(x)f(x)x+f(x)g(x)x

商法则:若g(x)0,则:

f(x)/g(x)x=1g2(x)[g(x)f(x)xf(x)g(x)x]

链式法则:若y(x)x的向量值函数,则:

f(y(x))x=yT(x)xf(y)y

式中yT(x)xn×n矩阵。

n×1向量ax是无关的常数向量,则:

aTxx=axTax=a

n×1向量ax是无关的常数向量,则:

aTy(x)x=yT(x)xayT(x)ax=yT(x)xa

Ay均与x无关,则:

xTAyx=AyyTAxx=ATy

A是与x无关,而y(x)与向量x的元素有关,则:

[y(x)]TAy(x)x=[y(x)]Tx(A+AT)y(x)

A是一个与向量x无关的矩阵,而y(x)z(x)是与向量x的元素有关的列向量,则:

[y(x)]TAz(x)x=[y(x)]TxAz(x)+[z(x)]TxATy(x)

xn×1向量,am×1常数向量,AB分别为m×nm×m常数矩阵,且B为对称矩阵,则:

(aAx)TB(aAx)x=2ATB(aAx)

3 实值函数的梯度矩阵

在最优化问题中,需要最优化的对象可能是某个加权矩阵。因此,有必要分析实值函数相对于矩阵变元的梯度。

实值函数f(A)相对于m×n是矩阵A的梯度为一m×n矩阵,简称梯度矩阵,定义为:

f(A)A=[f(A)A11f(A)A12f(A)A1nf(A)A21f(A)A22f(A)A2nf(A)Am1f(A)Am2f(A)Amn]

式中AijA的元素。

实值函数相对于矩阵变元的梯度具有以下性质:

f(A)=c是常数,其中Am×n矩阵,则梯度cA=Om×n

线性法则:若f(A)g(A)分别是矩阵A的实值函数,c1,c2均为实常数,则:

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

乘积法则:若f(A)g(A)都是矩阵A的实值函数,则:

f(A)g(A)A=f(A)g(A)A+g(A)f(A)A

商法则:若g(A)0,则:

f(A)/g(A)A=1[g(A)]2[g(A)f(A)Af(A)g(A)A]

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

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

ARm×n,xRm×1,yRn×1,则:

xTAyA=xyT

ARn×n非奇异,xRn×1,yRn×1,则:

xTA1yA=ATxyTAT

ARm×n,xRn×1,yRn×1,则:

xTATAyA=A(xyT+yxT)

ARm×n,x,yRm×1,则:

xTAATyA=(xyT+yxT)A

指数函数的梯度:

exp(xTAy)A=xyTexp(xTAy)

4 迹函数的梯度矩阵

有时候,二次型目标函数可以利用矩阵的迹加以重写。因为一标量可以视为1×1的矩阵,所以二次型目标函数的迹直接等同于函数本身,即f(x)=xTAx=tr(xTAx) 利用迹的性质,又可以将目标函数进一步表示为:

f(x)=xTAx=tr(xTAx)=tr(AxxT)

因此,二次型目标函数xTAx等于核矩阵A和向量外积xxT的乘积的迹tr(AxxT)

对于n×n矩阵A,由于tr(A)=ni=1Aii,故梯度tr(A)A(i,j)元素为:

[tr(A)A]ij=Aijnk=1Akk={1j=i0ji

所以有tr(A)A=I

考察目标函数f(A)=tr(AB),其中AB分别为m×nn×m实矩阵。首先,矩阵乘积的元素为[AB]ij=nl=1AilBlj,故矩阵乘积的迹tr(AB)=mp=1nl=1AplBlp,于是,梯度tr(AB)A是一个m×n矩阵,其元素为:

[tr(AB)A]ij=Aij(mp=1nl=1AplBlp)=Bji

所以有:

tr(AB)A=Atr(AB)=BT

由于tr(BA)=tr(AB)所以:

tr(AB)A=tr(BA)A=BT

同理,由于tr(xyT)=tr(yxT)=xTy,所以有:

tr(xyT)x=tr(yxT)x=y

5 Hessian 矩阵

实值函数f(x)相对于m×1实向量x的二阶偏导是一个由m2个二阶偏导组成的矩阵,称为 Hessian 矩阵,定义为:

2f(x)xxT=xT[f(x)x]

或者简写为梯度的梯度:

2xf(x)=x(xf(x))

根据定义,Hessian 矩阵的第j列是梯度f(x)x=xf(x)j个分量的梯度,即:

[2f(x)xxT]i,j=2f(x)xixj

或者可以写作:

2f(x)xxT=[2fx1x12fx1x22fx1xn2fx2x12fx2x22fx2xn2fxnx12fxnx22fxnxn]

因此,Hessian 矩阵可以通过两个步骤计算得出:

  1. 求实值函数f(x)关于向量变元x的偏导数,得到实值函数的梯度f(x)x
  2. 再求梯度f(x)x相对于1×n行向量xT的偏导数,得到梯度的梯度即 Hessian 矩阵

根据以上步骤,得到 Hessian 矩阵的下列公式。

对于n×1的常数向量aT,有:

2aTxxxT=On×n

An×n矩阵,则:

2xTAxxxT=A+AT

xn×1向量,am×1常数向量,AB分别为m×nm×m常数矩阵,且B为对称矩阵,则:

2(aAx)TB(aAx)xxT=2ATBA

6 尾声

矩阵的语言非常的丰富,如果再加上随机矩阵,则又会有更多的结论。这些仅在一篇博文中恐怕难以详述。本文只大概的给出一些经常用到的结论。在实际应用中,还要多多查阅相关书籍。