目錄
- 一、分子布局與分母布局
- 二、向量導數
- 2.1 向量對標量求導
- 2.2 標量對向量求導
- 2.3 向量對向量求導
- 三、矩陣導數
- 3.1 矩陣對標量求導
- 3.2 標量對矩陣求導
- 參考
向量導數與矩陣導數是機器學習的數學基礎,認真讀完本文,相信你會有不少識訓~
提 及 向 量 時 , 若 無 特 殊 說 明 , 我 們 默 認 為 列 向 量 \textcolor{red}{提及向量時,若無特殊說明,我們默認為{\bf 列向量}} 提及向量時,若無特殊說明,我們默認為列向量
一、分子布局與分母布局
我們知道,標量(Scalar)、向量(Vector)和矩陣(Matrix)它們三者滿足如下關系:
標 量 ? 向 量 ? 矩 陣 標量 \subset 向量 \subset 矩陣 標量?向量?矩陣
即向量可以理解為一種特殊的矩陣(列數為 1 1 1 的矩陣),標量可以理解為一種特殊的向量(維度為 1 1 1 的向量),也可以理解為一個 1 × 1 1\times 1 1×1 的矩陣,所以今天我們討論的向量導數和矩陣導數可以統稱為 “矩陣導數”.
常見的矩陣導數有以下六種:

標量對標量求導相信大家再熟悉不過了( f ′ ( x ) f'(x) f′(x) 就是一個很典型的例子), 這里我們不再討論. 事實上我們還可以討論矩陣與向量之間的導數,矩陣與矩陣之間的導數,即表格中空著的地方,但因為這些導數的結果涉及到維數大于 2 2 2 的張量(tensor),我們無法再用矩陣的形式去表示,因此也不再討論.
接下來我們會把重心放在剩余的五個矩陣導數上,即:
- 向量對標量求導
- 標量對向量求導
- 向量對向量求導
- 矩陣對標量求導
- 標量對矩陣求導
假設我們有 x = ( x 1 , ? ? , x n ) T \boldsymbol{x}=(x_1,\cdots,x_n)^{\mathrm T} x=(x1?,?,xn?)T 和 y = ( y 1 , ? ? , y m ) T \boldsymbol{y}=(y_1,\cdots,y_m)^{\mathrm T} y=(y1?,?,ym?)T 兩個向量,則 ? y ? x \displaystyle \frac{\partial \boldsymbol{y}}{\partial \boldsymbol{x}} ?x?y? 共有 m n mn mn 個分量:
? y i ? x j , i = 1 , ? ? , m j = 1 , ? ? , n \frac{\partial y_i}{\partial x_j},\quad i=1,\cdots,m\quad j=1,\cdots,n ?xj??yi??,i=1,?,mj=1,?,n
我們該如何去排列這 m n mn mn 個分量呢?這就要用到我們的分子布局(Numerator Layout)和分母布局(Denominator Layout)了. 所謂布局,無非就是對上面結果的一種排列,若不對排列方式加以規定,則很有可能導致數學運算程序中出現錯誤(例如因矩陣維數原因導致不能相乘).
在談向量導數時,我們有兩個很重要的前提:
① 分子和分母都是向量,且其中一個是行向量,另外一個是列向量
② 分子和分母其中一個是標量,另外一個是行/列向量
當 ① 或 ② 滿足時,我們接下來的討論才有意義.
我們先看 ①:
- 若分母是列向量,分子是行向量,則稱之為分母布局
- 若分子是列向量,分母是行向量,則稱之為分子布局
用一句話概括就是:誰是列向量就是什么布局.
對于 ②,我們可以依然采用 “誰是列向量就是什么布局” 來判斷,但如果分子分母都不是列向量時,該如何判斷呢?
這種情形下也是一句話概括:誰是標量就是什么布局.
我們可以將這些討論匯總在下表中:

對于矩陣導數,情況就有些不一樣了:

此外,我們還有以下重要等式:
分 子 布 局 的 結 果 = 分 母 布 局 的 結 果 T , 分 母 布 局 的 結 果 = 分 子 布 局 的 結 果 T 分子布局的結果=分母布局的結果^{\mathrm{T}},\qquad 分母布局的結果=分子布局的結果^{\mathrm{T}} 分子布局的結果=分母布局的結果T,分母布局的結果=分子布局的結果T
以上所有結果都可以匯總成下面三張圖:



更為直觀的表示:

接下來我們的討論都將基于分子布局.
二、向量導數
2.1 向量對標量求導
向量對標量求導的一些法則:

2.2 標量對向量求導
標量對向量求導的一些法則:

標量對向量求導的一些重要結論:
? a ? x = 0 T (2.2.A) \frac{\partial a }{\partial \boldsymbol x}={\bf 0}^{\mathrm T}\tag{2.2.A} ?x?a?=0T(2.2.A)
? a T x ? x = ? x T a ? x = a T (2.2.B) \frac{\partial \boldsymbol a^{\mathrm T}\boldsymbol x }{\partial \boldsymbol x}=\frac{\partial \boldsymbol x^{\mathrm T}\boldsymbol a }{\partial \boldsymbol x}=\boldsymbol a^{\mathrm T} \tag{2.2.B} ?x?aTx?=?x?xTa?=aT(2.2.B)
? x T x ? x = 2 x T (2.2.C) \frac{\partial \boldsymbol x^{\mathrm T}\boldsymbol x }{\partial \boldsymbol x}=2\boldsymbol x^{\mathrm T} \tag{2.2.C} ?x?xTx?=2xT(2.2.C)
? x T A x ? x = x T ( A + A T ) (2.2.D) \frac{\partial \boldsymbol x^{\mathrm T}{\bf A}\boldsymbol x }{\partial \boldsymbol x}=\boldsymbol x^{\mathrm T}({\bf A}+{\bf A}^{\mathrm T}) \tag{2.2.D} ?x?xTAx?=xT(A+AT)(2.2.D)
2.3 向量對向量求導
向量對向量求導的一些法則:

向量對向量求導的一些重要結論:
? a ? x = O (2.3.A) \frac{\partial \boldsymbol a }{\partial \boldsymbol x}={\bf O}\tag{2.3.A} ?x?a?=O(2.3.A)
? x ? x = I (2.3.B) \frac{\partial \boldsymbol x }{\partial \boldsymbol x}={\bf I}\tag{2.3.B} ?x?x?=I(2.3.B)
? A x ? x = A (2.3.C) \frac{\partial {\bf A}\boldsymbol x }{\partial \boldsymbol x}={\bf A}\tag{2.3.C} ?x?Ax?=A(2.3.C)
三、矩陣導數
3.1 矩陣對標量求導
矩陣對標量求導的一些法則:

3.2 標量對矩陣求導
標量對矩陣求導的一些法則:

標量對矩陣求導的一些重要結論:
? a ? X = O (3.2.A) \frac{\partial a }{\partial {\bf X}}={\bf O}\tag{3.2.A} ?X?a?=O(3.2.A)
? a T X b ? X = b a T (3.2.B) \frac{\partial \boldsymbol a^{\mathrm T}{\bf X}\boldsymbol b }{\partial {\bf X}}=\boldsymbol{ba}^{\mathrm T}\tag{3.2.B} ?X?aTXb?=baT(3.2.B)
? a T X T b ? X = a b T (3.2.C) \frac{\partial \boldsymbol a^{\mathrm T}{\bf X}^{\mathrm T}\boldsymbol b }{\partial {\bf X}}=\boldsymbol{ab}^{\mathrm T}\tag{3.2.C} ?X?aTXTb?=abT(3.2.C)
此外,我們經常會遇到跡對矩陣求導的情形,相關結論如下:
? t r ( X ) ? X = I (3.2.D) \frac{\partial \mathrm{tr}({\bf X})}{\partial {\bf X}}={\bf I}\tag{3.2.D} ?X?tr(X)?=I(3.2.D)
? t r ( X k ) ? X = k X k ? 1 (3.2.E) \frac{\partial \mathrm{tr}({\bf X}^{k})}{\partial {\bf X}}=k{\bf X}^{k-1}\tag{3.2.E} ?X?tr(Xk)?=kXk?1(3.2.E)
? t r ( A X ) ? X = ? t r ( X A ) ? X = A (3.2.F) \frac{\partial \mathrm{tr}({\bf AX})}{\partial {\bf X}}=\frac{\partial \mathrm{tr}({\bf XA})}{\partial {\bf X}}={\bf A}\tag{3.2.F} ?X?tr(AX)?=?X?tr(XA)?=A(3.2.F)
? t r ( A X T ) ? X = ? t r ( X T A ) ? X = A T (3.2.G) \frac{\partial \mathrm{tr}({\bf AX}^{\mathrm T})}{\partial {\bf X}}=\frac{\partial \mathrm{tr}({\bf X}^{\mathrm T}{\bf A})}{\partial {\bf X}}={\bf A}^{\mathrm T}\tag{3.2.G} ?X?tr(AXT)?=?X?tr(XTA)?=AT(3.2.G)
? t r ( X T A X ) ? X = X T ( A + A T ) (3.2.H) \frac{\partial \mathrm{tr}({\bf X}^{\mathrm T}{\bf AX})}{\partial {\bf X}}={\bf X}^{\mathrm T}({\bf A}+{\bf A}^{\mathrm T})\tag{3.2.H} ?X?tr(XTAX)?=XT(A+AT)(3.2.H)
? t r ( X ? 1 A ) ? X = ? X ? 1 A X ? 1 (3.2.I) \frac{\partial \mathrm{tr}({\bf X}^{-1}{\bf A})}{\partial {\bf X}}=-{\bf X}^{-1}{\bf AX}^{-1}\tag{3.2.I} ?X?tr(X?1A)?=?X?1AX?1(3.2.I)
? t r ( A X B ) ? X = ? t r ( B A X ) ? X = B A (3.2.J) \frac{\partial \mathrm{tr}({\bf AXB})}{\partial {\bf X}}=\frac{\partial \mathrm{tr}({\bf BAX})}{\partial {\bf X}}={\bf BA}\tag{3.2.J} ?X?tr(AXB)?=?X?tr(BAX)?=BA(3.2.J)
? t r ( A X B X T C ) ? X = B X T C A + B T X T A T C T (3.2.K) \frac{\partial \mathrm{tr}({\bf AXBX}^{\mathrm T}{\bf C})}{\partial {\bf X}}={\bf BX}^{\mathrm T}{\bf CA}+{\bf B}^{\mathrm T}{\bf X}^{\mathrm T}{\bf A}^{\mathrm T}{\bf C}^{\mathrm T} \tag{3.2.K} ?X?tr(AXBXTC)?=BXTCA+BTXTATCT(3.2.K)
參考
[1] https://zhuanlan.zhihu.com/p/263777564
[2] https://www.zhihu.com/question/352174717
[3] https://cloud.tencent.com/developer/article/1551901
[4] https://en.wikipedia.org/wiki/Matrix_calculus
[5] https://www.comp.nus.edu.sg/~cs5240/lecture/matrix-diff.pdf
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/423257.html
標籤:AI
