上篇原文連接算法
下篇原文連接網絡
矩陣求導的技術,在統計學、控制論、機器學習等領域有普遍的應用。鑑於我看過的一些資料或言之不詳、或繁亂無緒,本文來作個科普,分做兩篇,上篇講標量對矩陣的求導術,下篇講矩陣對矩陣的求導術。本文使用小寫字母x表示標量,粗體小寫字母表示向量,大寫字母X表示矩陣。機器學習
首先來琢磨一下定義,標量f對矩陣X的導數,定義爲,即f對X逐元素求導排成與X尺寸相同的矩陣。然而,這個定義在計算中並很差用,實用上的緣由是在對較複雜的函數難以逐元素求導;哲理上的緣由是逐元素求導破壞了總體性。試想,爲什麼要將f看作矩陣X而不是各元素
的函數呢?答案是用矩陣運算更整潔。因此在求導時不宜拆開矩陣,而是要找一個從總體出發的算法。爲此,咱們來回顧,一元微積分中的導數(標量對標量的導數)與微分有聯繫:
;多元微積分中的梯度(標量對向量的導數)也與微分有聯繫:
,這裏第一個等號是全微分公式,第二個等號表達了梯度
與微分的聯繫;受此啓發,咱們將矩陣導數與微分創建聯繫:
,這裏tr表明跡(trace)是方陣對角線元素之和,知足性質:對尺寸相同的矩陣A,B,
,這用泛函分析的語言來講
是矩陣A,B的內積,所以上式與原定義相容。
函數
而後來創建運算法則。回想遇到較複雜的一元函數如,咱們是如何求導的呢?一般不是從定義開始求極限,而是先創建了初等函數求導和四則運算、複合等法則,再來運用這些法則。故而,咱們來創立經常使用的矩陣微分的運算法則:學習
咱們試圖利用矩陣導數與微分的聯繫,在求出左側的微分
後,該如何寫成右側的形式並獲得導數呢?這須要一些跡技巧(trace trick):優化
觀察一下能夠斷言,若標量函數f是矩陣X經加減乘法、行列式、逆、逐元素函數等運算構成,則使用相應的運算法則對f求微分,再使用跡技巧給df套上跡並將其它項交換至dX左側,即能獲得導數。get
在創建法則的最後,來談一談複合:假設已求得,而Y是X的函數,如何求
呢?在微積分中有標量求導的鏈式法則
,但這裏咱們不能沿用鏈式法則,由於矩陣對矩陣的導數
截至目前還是未定義的。因而咱們繼續追本溯源,鏈式法則是從何而來?源頭仍然是微分。咱們直接從微分入手創建複合法則:先寫出
,再將dY用dX表示出來代入,並使用跡技巧將其餘項交換至dX左側,便可獲得
。
數學
接下來演示一些算例。特別提醒要依據已經創建的運算法則來計算,不能隨意套用微積分中標量導數的結論,好比認爲AX對X的導數爲A,這是沒有根據、意義不明的。io
例1:,求
。變量
解:先使用矩陣乘法法則求微分:,再套上跡並作交換:
,對照導數與微分的聯繫,獲得
。
注意:這裏不能用,導數與乘常數矩陣的交換是不合法則的運算(而微分是合法的)。有些資料在計算矩陣導數時,會略過求微分這一步,這是邏輯上解釋不通的。
例2【線性迴歸】:,求
。
解:嚴格來講這是標量對向量的導數,不過能夠把向量看作矩陣的特例。將向量範數寫成,求微分,使用矩陣乘法、轉置等法則:
。對照導數與微分的聯繫,獲得
。
例3【多元logistic迴歸】:,求
。其中
是除一個元素爲1外其它元素爲0的向量;
,其中
表示逐元素求指數,
表明全1向量。
解:首先將softmax函數代入並寫成,這裏要注意向量除標量求逐元素log知足
,以及
知足
。求微分,使用矩陣乘法、逐元素函數等法則:
。再套上跡並作交換,其中第二項的分子是
,故
。對照導數與微分的聯繫,獲得
。
另解:定義,則
,先如上求出
,再利用複合法則:
,獲得
。
例4【方差的最大似然估計】:樣本,其中
是對稱正定矩陣,求方差
的最大似然估計。寫成數學式是:
,求
的零點。
解:首先求微分,使用矩陣乘法、行列式、逆等運算法則,第一項是,第二項是
。再給第二項套上跡作交換:
,其中
定義爲樣本方差。對照導數與微分的聯繫,有
,其零點即
的最大似然估計爲
。
最後一例留給經典的神經網絡。神經網絡的求導術是學術史上的重要成果,還有個專門的名字叫作BP算法,我相信現在不少人在初次推導BP算法時也會頗費一番腦筋,事實上使用矩陣求導術來推導並不複雜。爲簡化起見,咱們推導二層神經網絡的BP算法。
例5【二層神經網絡】:,求
和
。其中
是除一個元素爲1外其它元素爲0的向量,
同例3,
是逐元素sigmoid函數
。
解:定義,
,
,則
。在例3中已求出
。使用複合法則,注意此處
都是變量:
,使用矩陣乘法交換的跡技巧從第一項獲得
,從第二項獲得
。接下來求
,繼續使用複合法則,並利用矩陣乘法和逐元素乘法交換的跡技巧:
,獲得
。爲求
,再用一次複合法則:
,獲得
。
使用小寫字母x表示標量,粗體小寫字母表示列向量,大寫字母X表示矩陣。矩陣對矩陣的求導採用了向量化的思路,常應用於二階方法求解優化問題。
首先來琢磨一下定義。矩陣對矩陣的導數,須要什麼樣的定義?第一,矩陣F(p×q)對矩陣X(m×n)的導數應包含全部mnpq個偏導數,從而不損失信息;第二,導數與微分有簡明的聯繫,由於在計算導數和應用中須要這個聯繫;第三,導數有簡明的從總體出發的算法。咱們先定義向量
(p×1)對向量
(m×1)的導數
(m×p),有
;再定義矩陣的(按列優先)向量化
(mn×1),並定義矩陣F對矩陣X的導數
(mn×pq)。導數與微分有聯繫
。幾點說明以下:
而後來創建運算法則。仍然要利用導數與微分的聯繫,求微分的方法與上篇相同,而從微分獲得導數須要一些向量化的技巧:
觀察一下能夠斷言,若矩陣函數F是矩陣X經加減乘法、行列式、逆、逐元素函數等運算構成,則使用相應的運算法則對F求微分,再作向量化並使用技巧將其它項交換至vec(dX)左側,即能獲得導數。
再談一談複合:假設已求得,而Y是X的函數,如何求
呢?從導數與微分的聯繫入手,
,能夠推出鏈式法則
。
和標量對矩陣的導數相比,矩陣對矩陣的導數形式更加複雜,從不一樣角度出發常會獲得形式不一樣的結果。有一些Kronecker積和交換矩陣相關的恆等式,可用來作等價變形:
接下來演示一些算例。
例1:,X是m×n矩陣,求
。
解:先求微分:,再作向量化,使用矩陣乘法的技巧,注意在dX右側添加單位陣:
,對照導數與微分的關係獲得
。
例2:,X是n×n矩陣,求
和
。
解:使用上篇中的技術可求得。爲求
,先求微分:
,再作向量化,使用轉置和矩陣乘法的技巧
,對照導數與微分的關係獲得
。注意
是對稱矩陣。在
是對稱矩陣時,可簡化爲
。
例3:,A是l×m,X是m×n,B是n×p矩陣,exp()爲逐元素函數,求
。
解:先求微分:,再作向量化,使用矩陣乘法的技巧:
,再用逐元素乘法的技巧:
,再用矩陣乘法的技巧:
,對照導數與微分的關係獲得
。
最後作個小結。咱們發展了從總體出發的矩陣求導的技術,導數與微分的聯繫是計算的樞紐,標量對矩陣的導數與微分的聯繫是,先對f求微分,再使用跡技巧可求得導數;矩陣對矩陣的導數與微分的聯繫是
,先對F求微分,再使用向量化的技巧可求得導數。