1. 程式人生 > >矩陣求導(一)

矩陣求導(一)

矩陣求導術(上)

矩陣求導的技術,在統計學、控制論、機器學習等領域有廣泛的應用。鑑於我看過的一些資料或言之不詳、或繁亂無緒,本文來做個科普,分作兩篇,上篇講標量對矩陣的求導術,下篇講矩陣對矩陣的求導術。本文使用小寫字母x表示標量,粗體小寫字母x 表示向量,大寫字母X表示矩陣。

首先來琢磨一下定義,標量f對矩陣X的導數,定義為

fX:=[fXij]即f對X逐元素求導排成與X尺寸相同的矩陣。然而,這個定義在計算中並不好用,實用上的原因是在對較複雜的函式難以逐元素求導;哲理上的原因是逐元素求導破壞了整體性。試想,為何要將f看做矩陣X而不是各元素Xij的函式呢?答案是用矩陣運算更整潔。所以在求導時不宜拆開矩陣,而是要找一個從整體出發的演算法。為此,我們來回顧,一元微積分中的導數(標量對標量的導數)與微分有聯絡:d
f=f(x)dx
;多元微積分中的梯度(標量對向量的導數)也與微分有聯絡:df=ifxidxi=fxTdx這裡第一個等號是全微分公式,第二個等號表達了梯度fx與微分的聯絡;受此啟發,我們將矩陣導數與微分建立聯絡:df=i,jfXijdXij=tr(fXTdX)這裡tr代表跡(trace)是方陣對角線元素之和,滿足性質:對尺寸相同的矩陣A,B,tr(ATB)=i,jAijBij,這用泛函分析的語言來說tr(ATB)是矩陣A,B的內積,因此上式與原定義相容。

然後來建立運演算法則。回想遇到較複雜的一元函式如f=log(2+sinx)ex,我們是如何求導的呢?通常不是從定義開始求極限,而是先建立了初等函式求導和四則運算、複合等法則,再來運用這些法則。故而,我們來創立常用的矩陣微分的運演算法則:

加減法:d(X±Y)=dX±dY;矩陣乘法:d(XY)=dXY+XdY;轉置:d(XT)=(dX)T;跡:dtr(X)=tr(dX)
逆:dX1=X1dXX1。此式可在XX1=I兩側求微分來證明。
行列式:d|X|=tr(X#dX),其中X#表示X的伴隨矩陣,在X可逆時又可以寫作d|X|=|X|tr(X1dX)。此式可用Laplace展開來證明,詳見張賢達《矩陣分析與應用》第279頁。
逐元素乘法:d(XY)=dXY+XdY表示尺寸相同的矩陣X,Y逐元素相乘。
逐元素函式:dσ(X)=σ(X)dXσ(X)=[σ(Xij)

]是逐元素運算的標量函式。

我們試圖利用矩陣導數與微分的聯絡df=tr(fXTdX),在求出左側的微分df後,該如何寫成右側的形式並得到導數呢?這需要一些跡技巧(trace trick):

標量套上跡:a=tr(a)
轉置:tr(AT)=tr(A)
線性:tr(A±B)=tr(A)±tr(B)
矩陣乘法交換:tr(AB)=tr(BA)。兩側都等於

相關推薦

矩陣

矩陣求導術(上) 矩陣求導的技術,在統計學、控制論、機器學習等領域有廣泛的應用。鑑於我看過的一些資料或言之不詳、或繁亂無緒,本文來做個科普,分作兩篇,上篇講標量對矩陣的求導術,下篇講矩陣對矩陣的求導術。本文使用小寫字母x表示標量,粗體小寫字母x 表示向量,

矩陣——矩陣矩陣

參考:https://zhuanlan.zhihu.com/p/24863977 本篇使用小寫字母x表示標量,粗體小寫字母 x \boldsym

矩陣——標量對矩陣

參考:https://zhuanlan.zhihu.com/p/24709748 這部分內容分兩篇整理,上篇講標量對矩陣的求導,下篇講矩陣對矩陣的求導。 本文使用小寫字母x表示標量,粗體小寫字母

(PAT乙級)一元多項式Python

設計函式求一元多項式的導數。(注:xn(n為整數)的一階導數為n*xn-1。)輸入格式:以指數遞降方式輸入多項式非零項係數和指數(絕對值均為不超過1000的整數)。數字間以空格分隔。輸出格式:以與輸入相同的格式輸出導數多項式非零項的係數和指數。數字間以空格分隔,但結尾不能有多

矩陣基礎知識

矩陣陣列:一個矩陣是由域F中若干個純量組成的一個MxN陣列,如果M=N,則稱為方陣。F上所有MxN的矩陣集合(通常F=C(複數域))用表示。例如,如果:                                                       那麼,,如[π

PAT——乙級1010 一元多項式格式

一開始問題存在於如何輸入,可以yongEOF 學會用一個數組來儲存 #include<cstdio> #include<algorithm> using namespace std; int main() { int a[1010]={0}

gemm() 與 gesvd() 到矩陣inverse(根據 SVD 分解和矩陣乘法矩陣的逆)

可逆方陣 A 的逆記為,A−1,需滿足 AA−1=I。 在 BLAS 的各種實現中,一般都不會直接給出 matrix inverse 的直接實現,其實矩陣(方陣)的逆是可以通過 gemm()和gesv

1010 一元多項式~scanf

設計函式求一元多項式的導數。(注:x​n​​(n為整數)的一階導數為nx​n−1​​。) 輸入格式: 以指數遞降方式輸入多項式非零項係數和指數(絕對值均為不超過 1000 的整數)。數字間以空格分隔。 輸出格式: 以與輸入相同的格式輸出導數多項式非零項的係數和指數。數

用連結串列實現一元多項式加減、Java

Lnode.java package PloyItem; /** *@Author wzy *@Date 2017年11月12日 *@Version JDK 1.8 *@Description */ public class Lnode imp

基於Cuda的幾種並行稀疏矩陣乘法方法

  最近由於研究需要和興趣看了很多稀疏矩陣乘法的演算法,這方面的研究千奇百怪,研究人員真的是十八般武藝全都用上了,好吧,就讓我來說說這個東西吧,由於這個東西實在方法太多,所以請容許我一節一節地去完善。   1、儲存方式   稀疏矩陣的儲存方式真的非常多,也各

矩陣學習筆記

總的來說,涉及矩陣和向量的求導不外乎五大類別,- 向量對標量- 標量對向量- 向量對向量- 矩陣對標量- 標量對矩陣向量對標量求導分子佈局向量y--->標量x求導,我們假定所有的向量都是列向量,在

矩陣

法則 復雜 image 技術 新的 lan 深度學習 ice 真的是 深度學習我認為最核心的被部分,是求導,更新的這個過程! 這裏涉及的矩陣求導,我覺得很復雜,看了很多的方法,記憶法則,真的是越看越不懂! 清華那本書,也是太龐大了。 學習大佬這個矩陣求導術方法,矩陣求導,算

Math矩陣

前言 本文為維基百科上矩陣微積分部分的翻譯內容。本文為原文的翻譯與個人總結,非一一對照翻譯。由於水平不足理解不夠處,敬請原諒與指出。原文地址https://en.wikipedia.org/wiki/Matrix_calculus。原文為矩陣微積分,

Excel數據入___你hold住麽

excel表格 雲平臺 配置 關閉流 ads div size parent 解析 近期小編跟著團隊一起開發ITOO3.0高校雲平臺項目,當中的收獲是不言而喻滴,在項目中有個導入功能:導入學生信息;導入班級信息:導入教學樓信息等,在不知多

Java出txt模板——

qps ogl iar i++ vnr snv bho vra dsr 導出txt文件時候\r\n才能換行 java代碼 package DRDCWordTemplates; import java.io.BufferedWriter; import java.io.F

Spring思維

core 2-0 nal ase spring 解決 eba eas 轉載 關於Spring Spring是一個開源框架,是為了解決企業應用程序開發復雜性而創建的。框架的主要優勢之一就是其分層架構,分層架構允許您選擇使用哪一個組件,同時為 J2EE 應用程序開發提供

小程序思維

app data- class origin 鏈接 回顧 個人 分享 ges 寫在前面 首先,很感謝大家喜歡我的思維導圖。 有網友評論說:思維導圖實際就是一種比純文字更貼近人理解的模型——知識關系。的確,思維導圖又稱為腦圖,是一種適合頭腦風暴模式,同時又適合梳理點與

matlab矩陣--如何控制矩陣中小數點的位數

數字 hex git png 它的 類型 整型 cal -s format:設置輸出格式對浮點性變量,缺省為format short.format並不影響matlab如何計算和存儲變量的值。對浮點型變量的計算,即單精度或雙精度,按合適的浮點精度進行,而不論變量是如何顯示的。

PTA 數據結構 一元多項式 僅供參考

僅供參考 struct -o sca scanf scan -1 can 數組 請勿粘貼 輸入格式: 以指數遞降方式輸入多項式非零項系數和指數(絕對值均為不超過1000的整數)。數字間以空格分隔。 輸出格式: 以與輸入相同的格式輸出導數多項式非零項的系數和指數。數字間以空格

最短路徑算法 ——出路徑長度 (*^__^*) 嘻嘻……

沒有 str -1 man 最大 連線 問題 輸入 sha 【問題描述】: 平面上有n(n<=100)個點,每個點的坐標均在-10000~10000之間。 其中的一些點之間有連線。若有連線,則表示可以從一個點到