[Quant 1.5] 矩陣微積分Matrix Calculus基礎 (2)
資源是MIT 2020年的一節(jié)網(wǎng)課,教授是Alan Edelman
https://www.youtube.com/watch?v=oGZK3yGF-6k
我在B站沒找到搬運的資源,所以要看這個視頻需要??
還有一個問答的鏈接,我下面也提到了
https://math.stackexchange.com/questions/3724359/does-there-exist-a-gradient-chain-rule-for-this-case
我沒有把兩個專欄放在一起是因為B站要求專欄圖片不能超過100個。而公式還算圖片,我寫公式寫的太多了,所以兩部分分開發(fā)了。

3. Matrix到Scalar的函數(shù)梯度
假設有一個的矩陣A,這個矩陣A是一個變量
函數(shù)的梯度就是

舉個例子,假設現(xiàn)在的變量是一個的矩陣A。函數(shù)
?的梯度就是:

但是在現(xiàn)實生活中,我們很難遇到上面這種奇怪的的函數(shù)。從函數(shù)形式上我們也能看出來,我們只是想做一個求導練習,這種函數(shù)不會出現(xiàn)在什么物理或者金融的應用上。而在線性代數(shù)的應用方面,尤其是AI,最常見的把Matrix轉化為Scalar的函數(shù)就是trace函數(shù),也就是一個
矩陣對角線所有項的和。我這里先復習一下trace的基本性質:
-?Lineartity:?
-?cyclic property:?
-?about trace of a product:?
-?equality with sum of the eigenvalues:?

那么我們可能碰到的Matrix到Scalar的函數(shù)都可能長什么樣呢,最簡單的一個例子就是
這個例子很直接,想想就知道,因為trace定義就是把對角線的項加到一起。

然后是二次的例子
這個函數(shù)的梯度看起來不像上一個那么直接,貌似需要把矩陣寫出來再相乘然后求偏導數(shù)。如果你覺得求梯度需要把矩陣的每一項設出來的時候,就可以試試AB公式!
現(xiàn)在問自己一個問題:。
毫無疑問這個等式是對的,兩個矩陣先做差再取trace和先取trace再做差結果是一樣的,因為trace本身是個線性函數(shù)。那么我們下面就可以在trace里面應用AB公式。
做到這里我們卡住了,因為我們無法從最后一行的trace函數(shù)中分離出,因此沒法直接看出函數(shù)
的梯度。所以我們需要一個定理來夸過這一步。這個定理在后面關于trace的Matrix到Scalar函數(shù)的求梯度問題也經(jīng)常用到。
是關于矩陣A的函數(shù),如果有等式
,那么
這個證明我就先不在這寫了,先功利的記下這個公式。所以上面的微分就可以寫成,所以就有

第三個例子:
似曾相識的例子,只不過這個函數(shù)的變量是矩陣A。我們再次用一下AB公式
等式右邊的兩項都是Scalar,所以每一項的轉置都等于它本身。我們把等號右邊第一項取轉置,發(fā)現(xiàn)這兩項都是一樣的
套用上面的定理,我們得到了

4. 矩陣微積分中的鏈式法則Chain rule
終于寫到這第四個標題了??,這個鏈式法則就是我當初要寫個專欄的原因。RNN和DNN一樣要做backward propogation,但是當變量含有向量或者矩陣的時候,我們需要求Loss在矩陣參數(shù)或者向量參數(shù)上的梯度。這一篇里面的數(shù)學就都能用上了。
我這里還是用了自己的習慣,那就是所有的向量變量都是列變量,所以所有梯度都是行變量。我知道這不是標準的,但我暫時不能理解要求梯度是列變量的好處在哪里,真的很麻煩。如果我以后知道了原因我會回來改的。。
我們先來關注Vector到Vector的復合函數(shù)求導:
求復合函數(shù)的梯度。梯度公式其實很簡單,和微積分中學過的是很類似的。
一切都是對應的,因為是
,所以
。而
所以右邊的兩個gradient矩陣(也就是Jacobian)相乘起來和左邊的矩陣維度是一樣的。因為法則簡單,我就不針對這個chain rule舉例子了。但是有另一個例子需要思考一下。

其中是一個element-wise函數(shù)(例如sigmoid函數(shù)),它作用于自變量矩陣/向量的每一項。因為element-wise函數(shù)針對矩陣的操作有別與矩陣乘法這類線性操作,我們不能像之前一樣用Jacobian相乘的方式來獲得這個函數(shù)
的梯度。
一個笨拙的方式思考一下,向量變化
后使得
的自變量變化
,所以
輸出的變化是
關于向量
的每一項的導數(shù)值再乘以
。這正對應著矩陣叉乘。所以可以得到
我們從這個公式是無法獲得Jacobian的,由于全微分中有矩陣叉乘。我們知道矩陣點乘是有結合律的,但是叉乘和點乘不能結合。因此我們要把上面等式中的一些矩陣和向量設出來,看看有沒有更好的表示方法來看出來Jacobian。
假設,我們設出矩陣
和向量
是一個
的向量,我們要研究它的第
項
因為累加的角標是
,所以我們可以把前面含
的
放到
里面去
考慮到所有的,等式右邊相當于什么?相當于把矩陣
的每一行都乘以
的對應項,得到新的矩陣之后,再和
做矩陣乘法。這樣我們就能把之前的叉乘轉化為點乘,再通過結合律,就可以得到Jacobian了。
所以
驗證一下,這個Jacobian確實是一個的矩陣,任務完成!
我這一篇寫的很細,希望如果以后有人能用到這篇文章的話,即使基礎相對薄弱也能看懂。令一點就是我隱約覺得這篇里面有些地方我自己的理解可能也會有問題,后續(xù)發(fā)現(xiàn)了會更新的。