矩陣微分
標籤(空格分隔): 矩陣微分
矩陣微分
在學習機器學習算法時,發現對矩陣求導很不熟悉,去看了張賢達的矩陣分析,發現標量對矩陣求導的問題說的很清楚.關於如何求解 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
梯度矩陣
採用列向量形式的偏導算子稱爲列向量偏導算子,也稱爲梯度算子
採用m×1 向量作爲偏導算子,記爲
∇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.