矩阵微分
标签(空格分隔): 矩阵微分
在学习机器学习算法时,发现对矩阵求导很不熟悉,去看了张贤达的矩阵分析,发现标量对矩阵求导的问题说的很清楚.关于如何求解 hessian矩阵,日后再来补上.
重要的事情说三遍
损失函数是标量函数!!!
损失函数是标量函数!!!
损失函数是标量函数!!!
主要介绍实值函数相对于实向量变量或者矩阵变量的偏导.这里首先对变元和函数符号做统一的规定以便后面介绍.
xx=[x1,...,xm]T∈Rm
为实向量变元
XX=[xx1,...,xxm]T∈Rm×n
为矩阵变元
f(xx)∈R为实值标量函数,其变元xx∈Rm,记做f:Rm→R
f(XX)∈R为实值标量函数,其变元XX∈Rm×n,记做f:Rm×n→R
ff(xx)∈Rp为p维实列向量函数,其变元xx∈Rm,记做f:Rm→Rp
ff(XX)∈Rp为p维实列向量函数,其变元XX∈Rm×n,记做f:Rm×n→Rp
FF(xx)∈Rp×q为p×q实矩阵函数,其变元xx∈Rm,记做f:Rm→Rp×q
FF(XX)∈Rp×q为p×q实矩阵函数,其变元XX∈Rm×n,记做f:Rm×n→Rp×q
Jacobian 矩阵
采用
1×m
行向量作为偏导算子,记为
Dxx=def[∂∂x1,...,∂∂xm]
实值标量函数
f(xx)在xx的偏导向量为1×m行向量,定义如下
Dxxf(xx)=∂f(xx)∂xxT=[∂f(xx)∂x1,...,∂f(xx)∂xm]
当实值标量函数
f(XX)的变元是p×q
维矩阵的时候,他有两种定义:Jacobian矩阵和行向量偏导.他的Jacobian矩阵定义为如下
DXXf(XX)=∂f(XX)∂XXT
而他的行向量偏导定义为
DvecXXf(XX)=∂f(XX)∂vec(XX)T=[∂f(xx)∂x1,...∂f(xx)∂xm1,...,∂f(xx)∂x1n,...,∂f(xx)∂xmn]
这里需要注意的是,实值标量函数
f(XX)
的Jacobian矩阵的转置
DTXXf(XX)
的列向量化后即为他的行向量偏导
DvecXXf(XX)
,这是后面介绍Jacobian矩阵相关知识的基础
当FF(XX)为p×q实矩阵函数时,定义他的Jacobian矩阵如下
DXXFF(XX)=def∂vec(FF(XX))∂(vecXX)T
梯度矩阵
采用列向量形式的偏导算子称为列向量偏导算子,也称为梯度算子
采用
1×m
向量作为偏导算子,记为
∇xx=def[∂∂x1,...,∂∂xm]T
实值标量函数
f(xx)在xx的梯度向量为m×1列向量,定义如下
∇xxf(xx)=[∂f(xx)∂x1,...,∂f(xx)∂xm]T
实值标量函数
f(XX)的变元XX列向量化后,可以定义其矩阵变元XX的梯度向量为
∇vecXXf(XX)=∂f(XX)∂vec(XX)=[∂f(xx)∂x1,...∂f(xx)∂xm1,...,∂f(xx)∂x1n,...,∂f(xx)∂xmn]T
定义
f(XX)的其关于矩阵变元XX的梯度矩阵为
∇XXf(XX)=∂f(XX)∂XX
比较
f(XX)
的梯度矩阵和Jacobian矩阵,可以发现梯度矩阵即为Jacobian矩阵的转置
当实值标量函数数
f(XX)的变元是p×q维矩阵的时候,他的梯度向量定义为如下
∇XXFF(XX)=def∂vec(FF(XX))∂(vecXX)T
标量函数
f(xx)
与Jacobian矩阵
以向量为变元的标量函数
f(xx)
的全微分形式可以写为
df(xx)=∂f(xx)∂x1dx1+...+∂f(xx)∂xmdxm=∂f(xx)∂xxTdxx
记AA=∂f(xx)∂xxT
,则有如下等价关系
df(xx)=tr(Adxx)⟺Dxxf(xx)=∂f(xx)∂xxT=A
也就是标量函数
f(xx)
的Jacobian矩阵和微分矩阵存在着等价关系
标量函数
f(XX)
与Jacobian矩阵
标量函数
f(XX)
和上面类似,其全微分可以写成如下形式
df(XX)=∂f(XX)∂xxT1dxx1+...+∂f(XX)∂xxTndxxn=∂f(XX)∂vecT((X)d(vecXX)=DvecXXf(XX)d(vecXX)
这里再利用行向量偏导和Jacobian矩阵的关系
DvecXXf(XX)=(vec(DTXXf(XX)))T,并令A=DTXXf(XX)
可以得到
df(XX)=(vec(AT))Td(vecXX)
由向量化算子vec与迹函数的关系式
tr(BTC)=(vec(B))Tvec(C),令B=AT,C=dXX
,则上式可以重写为
df(XX)=tr(AAdXX)
综合以上,可以得到如下结论:
Jacobian矩阵可以通过以下式子等价确定
df(xx)=tr(Adxx)⟺Dxxf(xx)=Adf(XX)=tr(AdXX)⟺DXXf(XX)=A
矩阵微分
df(XX)
可以通过简单的变化转化为矩阵微分的标准形式
df(XX)=tr(AdXX)
.再由Jacobian和梯度矩阵的关系,进一步可以得到梯度矩阵.因而对求解梯度矩阵可以由矩阵微分的标准形式
df(XX)=tr(AdXX)
得到.
如下:
对于
tr(XXTXX)
我们可以得到
dtr(XXTXX)=tr(d(XXTXX))=tr(d(XX)TXX+XXTdXX)=tr(d(XX)TXX)+tr(XXTdXX)=tr(XXTd(XX))+tr(XXTdXX)=tr(2XXTd(XX))
由以上结论,可以得到
XXTXX
关于
XX
的梯度矩阵为
∂tr(XXTXX)∂XX=(2XXT)T=2XX
求解梯度矩阵是进行一阶优化算法的基础部分.
参考文献&学习资料
矩阵分析与应用 -张贤达
矩阵求导术-知乎
The Matrix Cookbook.