1. 程式人生 > 其它 >矩陣求導

矩陣求導

https://zhuanlan.zhihu.com/p/137702347

這篇文章講得不錯

好像下面這篇文章也寫得不錯,之後有空再看

https://zhuanlan.zhihu.com/p/24709748

 

 

 

 

雖然說學過微積分理論上就能推匯出矩陣求導的法則,但是矩陣求導的確是很麻煩,先不提張量相關,簡單的來組合一下就很多可能:

向量對標量求導 (Vector-by-scalar)

向量  ,對標量  求導,一般寫為:

常見例子是位移對時間求導, 速度對時間求導。

標量對向量求導(Scalar-by-vector)

標量 y 對 向量  求導寫作:

這裡可能會讓人疑惑,為什麼上面是列向量而這裡則是行向量。

這是矩陣求導可能會比較麻煩的第二個地方,可能有不同的佈局方式:

  • 分子佈局(Numerator Layout):分子不變,分母轉置
  • 分母佈局(Denominator Layout):分母不變,分子轉置

當然還有混合佈局。

用分子佈局因為 wikipedia 裡就是這樣做的,而且有些只能有分子佈局表示。

這裡可能會分子佈局可能會有點讓人不習慣,因為比如梯度,我們很經常會把它看成列向量:

但實質上有些地方也把梯度看成/寫成行向量,重要的是比如你在使用的時候根據自己所預設的認為是行向量還是列向量的不同在做不同的操作的時候稍加註意就ok了,比如下面這個式子列向量無所謂,因為是點乘,但是如果看成矩陣之間的乘法當然我們就需要轉置作為列向量的梯度了:

向量對向量求導(Vector-by-vector)

向量  對向量  求導,同樣分子佈局:

正好是雅克比矩陣:

這是使用分子佈局的好處,否則就是雅克比的轉置了。

這樣的好處是寫下這個式子也很自然:

矩陣對標量求導 (Matrix-by-scalar)

標量對矩陣求導(Scalar-by-matrix)

例子

之所以說矩陣求導本質上還是對單個變數求導,來看一個例子,比如:

先來計算  :

, 利用上面的向量對向量求導,使用雅克比矩陣:

同時也可以嘗試使用分母佈局,求出來對應為 

計算

wikipedia 上的表格可以用來速查。除此之外還有一個網站可以用來計算矩陣求導:

Matrix Calculus​www.matrixcalculus.org

試一下:

 

還可以匯出為 Python code 或者 Latex , cool,再試一個:

 

增加條件, 為對稱矩陣:

looks good, cool!