Soptq

Soptq

Probably a full-stack, mainly focusing on Distributed System / Consensus / Privacy-preserving Tech etc. Decentralization is a trend, privacy must be protected.
twitter
github
bilibili

矩陣求導

矩陣求導(Matrix Derivative)也稱作矩陣微分(Matrix Differential),在機器學習、圖像處理、最優化等領域的公式推導中經常用到。矩陣求導實際上是多元變量的微積分問題,只是應用在矩陣空間上而已,即為標量求導的一個推廣,它的定義為將自變量中的每一個數與因變量中的每一個數求導。

具體地,假設存在 Am×nA_{m \times n}Bp×qB_{p \times q} ,則 AB\frac{\partial A}{\partial B} 會將 AA 中的每一個值對 BB 中的每一個值求導,最後一共會得到 m×n×p×qm \times n \times p \times q 個導數值。這麼多的導數值,最後是排布成一個 m×(n×p×q)m \times (n \times p \times q) 的矩陣還是一個 (m×n×p)×q(m \times n \times p) \times q 的矩陣呢?矩陣求導的關鍵就在於規定如何排布這麼多的導數值。

以分布佈局為例子,一共有以下幾個矩陣求導法則。分母佈局是什麼意思呢?簡單的說就是以分母為一個基準,希望求導出來的結果和分母的維度相同。除了分母佈局以外還有分子佈局。分子佈局和分母佈局的求導結果通常相差一個轉置。

基本法則#

法則 0 :標量對標量求導#

略。詳細的請參考高等數學。

法則 1 :標量對向量求導#

考慮我們有 ff 是一個標量, x=[x1x2xp]Tx = \begin{bmatrix} x_1 & x_2 & \cdots & x_p \end{bmatrix}^{T} 是一個 p×1p \times 1 的列向量。則有:

fx=[fx1fx2fxp]T\frac{\partial f}{\partial x}=\begin{bmatrix}\frac{\partial f}{\partial x_1} & \frac{\partial f}{\partial x_2} & \cdots & \frac{\partial f}{\partial x_p}\end{bmatrix}^{T}

可以看得出,求導出來的結果維度是和分母 xx 相同的。若 xx 為行向量同理。

法則 2 :向量對標量求導#

考慮我們有 f=[f1f2fm]Tf = \begin{bmatrix} f_1 & f_2 & \cdots & f_m \end{bmatrix}^{T} 是一個 m×1 m \times 1 的列向量, xx 是一個標量。則有:

fx=[f1xf2xfmx]\frac{\partial f}{\partial x}=\begin{bmatrix}\frac{\partial f_1}{\partial x} & \frac{\partial f_2}{\partial x} & \cdots & \frac{\partial f_m}{\partial x}\end{bmatrix}

可以看得出,這個時候求導出來的結果維度和分子 ff 是相反的。若 ff 為行向量同理。

法則 3 :向量對向量求導#

考慮我們有 f=[f1f2fm]Tf = \begin{bmatrix} f_1 & f_2 & \cdots & f_m \end{bmatrix}^{T} 是一個 m×1 m \times 1 的列向量, x=[x1x2xp]Tx = \begin{bmatrix} x_1 & x_2 & \cdots & x_p \end{bmatrix}^{T} 是一個 p×1p \times 1 的列向量。則有:

fx=[f1x1f2x1fmx1f1x2f2x2fmx2f1xpf2xpfmxp]\frac{\partial f}{\partial x}=\begin{bmatrix}\frac{\partial f_1}{\partial x_1} & \frac{\partial f_2}{\partial x_1} & \cdots & \frac{\partial f_m}{\partial x_1} \\ \frac{\partial f_1}{\partial x_2} & \frac{\partial f_2}{\partial x_2} & \cdots & \frac{\partial f_m}{\partial x_2} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial f_1}{\partial x_p} & \frac{\partial f_2}{\partial x_p} & \cdots & \frac{\partial f_m}{\partial x_p} \end{bmatrix}

這時求導結果的維度為 p×mp \times m

法則 4 :標量對矩陣求導#

考慮我們有 ff 是一個標量, xp×qx_{p \times q} 是一個矩陣。則有:

fx=[fx11fx12fx1qfx21fx22fx2qfxp1fxp2fxpq]\frac{\partial f}{\partial x}=\begin{bmatrix}\frac{\partial f}{\partial x_{11}} & \frac{\partial f}{\partial x_{12}} & \cdots & \frac{\partial f}{\partial x_{1q}} \\ \frac{\partial f}{\partial x_{21}} & \frac{\partial f}{\partial x_{22}} & \cdots & \frac{\partial f}{\partial x_{2q}} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial f}{\partial x_{p1}} & \frac{\partial f}{\partial x_{p2}} & \cdots & \frac{\partial f}{\partial x_{pq}} \end{bmatrix}

同樣,我們求導結果和分母 xx 的維度一致,是 p×qp \times q

法則 5 :矩陣對向量求導#

考慮我們有 fm×nf_{m \times n} 是一個矩陣, xx 是一個標量。則有:

fx=[f11xf21xfm1xf21xf22xfm2x2qfn1xfn2xfnmx]\frac{\partial f}{\partial x}=\begin{bmatrix}\frac{\partial f_{11}}{\partial x} & \frac{\partial f_{21}}{\partial x} & \cdots & \frac{\partial f_{m1}}{\partial x} \\ \frac{\partial f_{21}}{\partial x} & \frac{\partial f_{22}}{\partial x} & \cdots & \frac{\partial f_{m2}}{\partial x_{2q}} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial f_{n1}}{\partial x} & \frac{\partial f_{n2}}{\partial x} & \cdots & \frac{\partial f_{nm}}{\partial x} \end{bmatrix}

我們求導的結果與分子相反,為 n×mn \times m

其餘:向量與矩陣之間以及矩陣與矩陣之間的求導#

當我們的自變量與因變量都不為標量時,根據我們對矩陣求導實質的討論,勢必會得出大量的導數難以被排列。例如,一般情況下,假設我們有 fm×nf_{m \times n} 以及 xp×qx_{p \times q} ,則求導後我們會得到 m×n×p×qm \times n \times p \times q 個導數結果。這時對這些導數一般有兩種定義方法。

第一種定義#

我們按照之前的法則,將 fx\frac{\partial f}{\partial x} 理解為對每一個 ff 中的標量,使其對 xx 求導,然後將其放回矩陣 ff 中的原位。即我們使用 fijx\frac{\partial f_{ij}}{\partial x} 替換 fijf_{ij} ,最後會得到一個 mp×nqmp \times nq 的導數矩陣。

第二種定義(主流)#

這種定義是將矩陣對矩陣求導問題歸約到向量對向量求導。即對矩陣先做向量化處理,然後再求導:

fx=vec(f)vec(x) \frac{\partial f}{\partial x}=\frac{\partial vec(f)}{\partial vec(x)}

其中,向量化的實現方法分為列向量化和行向量化。我們以列向量化為例,將 fm×nf_{m \times n}xp×qx_{p \times q} 向量化為 fmn×1f_{mn \times 1}xpq×1x_{pq \times 1} ,然後利用法則 3 求導得到維度為 pq×mnpq \times mn 的導數結果。

有用的公式#

下列公式中,Am×1A_{m \times 1}xm×1x_{m \times 1} 是列向量, Bm×mB_{m \times m} 是矩陣。下面 3 個公式在文末有證明。

編號公式
1xTAx=ATxx=A\frac{\partial{x^{T}A}}{\partial{x}} = \frac{\partial{A^{T}x}}{\partial{x}} = A
2xTxx=x\frac{\partial{x^{T}x}}{\partial{x}} = x
3xTBxx=(B+BT)x\frac{\partial{x^{T}Bx}}{\partial{x}} = (B + B^{T})x

下列公式是一些關於矩陣跡的公式。其中, aa 是一個標量, AA, BB, CC 分為三個矩陣。

編號公式
1tr(a)=atr(a) = a
2tr(A)=tr(AT)tr(A) = tr(A^T)
3tr(AB)=tr(BA)tr(AB) = tr(BA)
4tr(ABC)=tr(CAB)=tr(BCA)tr(ABC) = tr(CAB) = tr(BCA)
5tr(AB)A=BT\frac{\partial{tr(AB)}}{\partial{A}} = B^T
6tr(ABATC)A=CAB+CTABT\frac{\partial{tr(ABA^{T}C)}}{\partial{A}} = CAB + C^{T}AB^{T}

一些公式的證明#

令:

Am×1=[A1A2Am]TA_{m \times 1} = \begin{bmatrix} A_1 & A_2 & \cdots & A_m \end{bmatrix} ^ {T}

Bm×m=Bm×m=[B11B12B1mB21B22B2mBm1Bm2Bmm]B_{m \times m} = B_{m \times m} = \begin{bmatrix} B_{11} & B_{12} & \cdots & B_{1m} \\ B_{21} & B_{22} & \cdots & B_{2m} \\ \vdots & \vdots & \ddots & \vdots \\ B_{m1} & B_{m2} & \cdots & B_{mm} \end{bmatrix}

xm×1=[x1x2xm]Tx_{m \times 1} = \begin{bmatrix} x_1 & x_2 & \cdots & x_m \end{bmatrix} ^ {T}

公式 1#

xTAx=ATxx=A\frac{\partial{x^{T}A}}{\partial{x}} = \frac{\partial{A^{T}x}}{\partial{x}} = A

因為 Am×1A_{m \times 1}xm×1x_{m \times 1} 是列向量,所以 xTA=ATx=i=1mAixix^{T}A = A^{T}x = \sum_{i=1}^{m}{A_{i}x_{i}} 為一個標量,所以可以用法則 1 進行計算。

xTAx=ATxx\frac{\partial{x^{T}A}}{\partial{x}} = \frac{\partial{A^{T}x}}{\partial{x}}

=[i=1mAixix1i=1mAixix2i=1mAixixm]= \begin{bmatrix} \frac{\partial{\sum_{i=1}^{m}{A_{i}x_{i}}}}{\partial{x_1}} \\ \frac{\partial{\sum_{i=1}^{m}{A_{i}x_{i}}}}{\partial{x_2}} \\ \cdots \\ \frac{\partial{\sum_{i=1}^{m}{A_{i}x_{i}}}}{\partial{x_m}} \end{bmatrix}

=[A1A2Am]= \begin{bmatrix} A_1 \\ A_2 \\ \cdots \\ A_m \end{bmatrix}

=A= A

公式 2#

同理 公式 1

公式 3#

xTBxx=(B+BT)x\frac{\partial{x^{T}Bx}}{\partial{x}} = (B + B^{T})x

由題意可得, xTBxx^{T}Bx 為標量,則原式為標量對列向量求導,可以用法則 1 進行計算。

xTBxx\frac{\partial{x^{T}Bx}}{\partial{x}}

=[i=1mj=1mBijxixjx1i=1mj=1mBijxixjx2i=1mj=1mBijxixjxm] = \begin{bmatrix} \frac{\partial{\sum_{i=1}^{m}{\sum_{j=1}^{m}{B_{ij}x_{i}x_{j}}}}}{\partial{x_1}} \\ \frac{\partial{\sum_{i=1}^{m}{\sum_{j=1}^{m}{B_{ij}x_{i}x_{j}}}}}{\partial{x_2}} \\ \cdots \\ \frac{\partial{\sum_{i=1}^{m}{\sum_{j=1}^{m}{B_{ij}x_{i}x_{j}}}}}{\partial{x_m}} \end{bmatrix}

由導數法則有:

f(x)g(x)x=f(x)xg(x)+f(x)g(x)x \frac{\partial{f(x)g(x)}}{\partial{x}} = \frac{\partial{f(x)}}{x}g(x) + f(x)\frac{\partial{g(x)}}{\partial{x}}

於是,原式繼續有:

=[i=1mBi1xi+j=1mB1jxji=1mBi2xi+j=1mB2jxji=1mBimxi+j=1mBmjxj]= \begin{bmatrix} \sum_{i=1}^{m}{B_{i1}x_i} + \sum_{j=1}^{m}{B_{1j}x_j} \\ \sum_{i=1}^{m}{B_{i2}x_i} + \sum_{j=1}^{m}{B_{2j}x_j} \\ \cdots \\ \sum_{i=1}^{m}{B_{im}x_i} + \sum_{j=1}^{m}{B_{mj}x_j} \end{bmatrix}

=[i=1mBi1xii=1mBi2xii=1mBimxi]+[j=1mB1jxjj=1mB2jxjj=1mBmjxj]= \begin{bmatrix} \sum_{i=1}^{m}{B_{i1}x_i} \\ \sum_{i=1}^{m}{B_{i2}x_i} \\ \cdots \\ \sum_{i=1}^{m}{B_{im}x_i} \end{bmatrix} + \begin{bmatrix} \sum_{j=1}^{m}{B_{1j}x_j} \\ \sum_{j=1}^{m}{B_{2j}x_j} \\ \cdots \\ \sum_{j=1}^{m}{B_{mj}x_j} \end{bmatrix}

=[B11B21Bm1B12B22Bm2B1mB2mBmm][x1x2xm]+[B11B12B1mB21B22B2mBm1Bm2Bmm][x1x2xm]= \begin{bmatrix} B_{11} & B_{21} & \cdots & B_{m1} \\ B_{12} & B_{22} & \cdots & B_{m2} \\ \vdots & \vdots & \ddots & \vdots \\ B_{1m} & B_{2m} & \cdots & B_{mm} \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_m \end{bmatrix}+ \begin{bmatrix} B_{11} & B_{12} & \cdots & B_{1m} \\ B_{21} & B_{22} & \cdots & B_{2m} \\ \vdots & \vdots & \ddots & \vdots \\ B_{m1} & B_{m2} & \cdots & B_{mm} \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_m \end{bmatrix}

=(AT+A)x=(A+AT)x= (A^{T} + A)x = (A + A^{T})x

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。