矩阵梯度
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)从梯度的定义式可以看出:
- 一个以向量为变元的变量函数的梯度为一向量。
- 梯度的每个分量给出了变量函数在该分量方向上的变化率
梯度向量最重要的性质之一是,它指出了当变元增大时函数f的最大增大率。相反,梯度的负值(负梯度)指出了当变元增大时函数f的最大减小率。根据这样一种性质,即可设计出求一函数极小值的迭代算法。
类似地,实值函数f(x)相对于1×n行向量xT的梯度为1×n行向量,定义为:
∇xTf(x)=[∂f(x)∂x1,∂f(x)∂x2,…,∂f(x)∂xn]=∂f(x)∂xTm维行向量函数f(x)=[f1(x),…,fm(x)]相对于n维实向量x的梯度为一n×m矩阵定义为:
∂f(x)∂x=[∂f1(x)∂x1∂f2(x)∂x1…∂fm(x)∂x1∂f1(x)∂x2∂f2(x)∂x2…∂fm(x)∂x2⋮⋮…⋮∂f1(x)∂xn∂f2(x)∂xn…∂fm(x)∂xn]=∇xf(x)若m×1向量函数f(x)=y=[y1,…,ym]T,其中y1,y2,…,ym是向量的标量函数,一阶梯度:
∂y∂xT=[∂y1∂x1∂y1∂x2…∂y1∂xn∂y2∂x1∂y2∂x2…∂y2∂xn⋮⋮…⋮∂ym∂x1∂ym∂x2…∂ym∂xn]∂y∂xT是一个m×n的矩阵,称为向量函数y=[y1,y2,…,ym]T的 Jacobi 矩阵。
若f(x)=[x1,x2,…,xn],则:
∂xT∂x=I这是一个非常有用的结论,将帮助我们导出更多非常有用的结论。
若A和y均和x无关,则:
∂xTAy∂x=∂xT∂xAy=Ay
因为yTAx=⟨ATy,x⟩=⟨x,ATy⟩=xTATy,则:
∂yTAx∂x=ATy由于:
xTAx=n∑i=1n∑j=1Aijxixj所以梯度∂xTAx∂x的第k个分量为:
[∂xTAx∂x]k=∂∂xkn∑i=1n∑j=1Aijxixj=n∑i=1Aikxi+n∑j=1Akjxj即有:
∂xTAx∂x=Ax+ATx特别的如果A为对称矩阵则有:
∂xTAx∂x=2Ax归纳以上三个例子的结果以及其他结果,便得到实值函数f(x)相对于列向量x的一下几个常用的梯度公式。
若f(x)=c为常数,则梯度∂c∂x=0
线性法则:若f(x)和g(x)分别是向量x的实值函数,c1和c2为实常数,则:
∂[c1f(x)+c2g(x)]∂x=c1∂f(x)∂x+c2∂g(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)∂x−f(x)∂g(x)∂x]链式法则:若y(x)是x的向量值函数,则:
∂f(y(x))∂x=∂yT(x)∂x∂f(y)∂y式中∂yT(x)∂x为n×n矩阵。
若n×1向量a与x是无关的常数向量,则:
∂aTx∂x=a∂xTa∂x=a若n×1向量a与x是无关的常数向量,则:
∂aTy(x)∂x=∂yT(x)∂xa∂yT(x)a∂x=∂yT(x)∂xa若A和y均与x无关,则:
∂xTAy∂x=Ay∂yTAx∂x=ATy若A是与x无关,而y(x)与向量x的元素有关,则:
∂[y(x)]TAy(x)∂x=∂[y(x)]T∂x(A+AT)y(x)若A是一个与向量x无关的矩阵,而y(x)和z(x)是与向量x的元素有关的列向量,则:
[y(x)]TAz(x)∂x=[y(x)]T∂xAz(x)+[z(x)]T∂xATy(x)令x为n×1向量,a为m×1常数向量,A和B分别为m×n和m×m常数矩阵,且B为对称矩阵,则:
∂(a−Ax)TB(a−Ax)∂x=−2ATB(a−Ax)3 实值函数的梯度矩阵
在最优化问题中,需要最优化的对象可能是某个加权矩阵。因此,有必要分析实值函数相对于矩阵变元的梯度。
实值函数f(A)相对于m×n是矩阵A的梯度为一m×n矩阵,简称梯度矩阵,定义为:
∂f(A)∂A=[∂f(A)∂A11∂f(A)∂A12…∂f(A)∂A1n∂f(A)∂A21∂f(A)∂A22…∂f(A)∂A2n⋮⋮…⋮∂f(A)∂Am1∂f(A)∂Am2…∂f(A)∂Amn]式中Aij是A的元素。
实值函数相对于矩阵变元的梯度具有以下性质:
若f(A)=c是常数,其中A为m×n矩阵,则梯度∂c∂A=Om×n
线性法则:若f(A)和g(A)分别是矩阵A的实值函数,c1,c2均为实常数,则:
∂[c1f(A)+c2g(A)]∂A=c1∂f(A)∂A+c2∂g(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)∂A−f(A)∂g(A)∂A]
链式法则:令A为m×n的矩阵,且y=f(A)和g(y)分别是以矩阵A和标量y为变元的实值函数,则:
∂g(f(A))∂A=dg(y)dy∂f(A)∂A
若A∈Rm×n,x∈Rm×1,y∈Rn×1,则:
∂xTAy∂A=xyT
若A∈Rn×n非奇异,x∈Rn×1,y∈Rn×1,则:
∂xTA−1y∂A=−A−TxyTA−T
若A∈Rm×n,x∈Rn×1,y∈Rn×1,则:
∂xTATAy∂A=A(xyT+yxT)若A∈Rm×n,x,y∈Rm×1,则:
∂xTAATy∂A=(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=∂∂Aijn∑k=1Akk={1j=i0j≠i所以有∂tr(A)∂A=I
考察目标函数f(A)=tr(AB),其中A和B分别为m×n和n×m实矩阵。首先,矩阵乘积的元素为[AB]ij=∑nl=1AilBlj,故矩阵乘积的迹tr(AB)=∑mp=1∑nl=1AplBlp,于是,梯度∂tr(AB)∂A是一个m×n矩阵,其元素为:
[∂tr(AB)∂A]ij=∂∂Aij(m∑p=1n∑l=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=y5 Hessian 矩阵
实值函数f(x)相对于m×1实向量x的二阶偏导是一个由m2个二阶偏导组成的矩阵,称为 Hessian 矩阵,定义为:
∂2f(x)∂x∂xT=∂∂xT[∂f(x)∂x]或者简写为梯度的梯度:
∇2xf(x)=∇x(∇xf(x))根据定义,Hessian 矩阵的第j列是梯度∂f(x)∂x=∇xf(x)第j个分量的梯度,即:
[∂2f(x)∂x∂xT]i,j=∂2f(x)∂xi∂xj或者可以写作:
∂2f(x)∂x∂xT=[∂2f∂x1∂x1∂2f∂x1∂x2…∂2f∂x1∂xn∂2f∂x2∂x1∂2f∂x2∂x2…∂2f∂x2∂xn⋮⋮⋱⋮∂2f∂xn∂x1∂2f∂xn∂x2…∂2f∂xn∂xn]因此,Hessian 矩阵可以通过两个步骤计算得出:
- 求实值函数f(x)关于向量变元x的偏导数,得到实值函数的梯度∂f(x)∂x
- 再求梯度∂f(x)∂x相对于1×n行向量xT的偏导数,得到梯度的梯度即 Hessian 矩阵
根据以上步骤,得到 Hessian 矩阵的下列公式。
对于n×1的常数向量aT,有:
∂2aTx∂x∂xT=On×n若A是n×n矩阵,则:
∂2xTAx∂x∂xT=A+AT令x为n×1向量,a为m×1常数向量,A和B分别为m×n和m×m常数矩阵,且B为对称矩阵,则:
∂2(a−Ax)TB(a−Ax)∂x∂xT=2ATBA6 尾声
矩阵的语言非常的丰富,如果再加上随机矩阵,则又会有更多的结论。这些仅在一篇博文中恐怕难以详述。本文只大概的给出一些经常用到的结论。在实际应用中,还要多多查阅相关书籍。