天天看點

機器學習中的矩陣向量求導(一) 求導定義與求導布局

    在之前寫的上百篇機器學習部落格中,不時會使用矩陣向量求導的方法來簡化公式推演,但是并沒有系統性的進行過講解,是以讓很多朋友迷惑矩陣向量求導的具體過程為什麼會是這樣的。這裡準備用幾篇博文來讨論下機器學習中的矩陣向量求導,今天是第一篇。

    本系列主要參考文獻為維基百科的Matrix Caculas和張賢達的《矩陣分析與應用》。

1. 矩陣向量求導引入

    在高等數學裡面,我們已經學過了标量對标量的求導,比如标量$y$對标量$x$的求導,可以表示為$\frac{\partial y}{\partial x}$。

    有些時候,我們會有一組标量$y_i,i=1,2,...,m$來對一個标量$x$的求導,那麼我們會得到一組标量求導的結果:$$\frac{\partial y_i}{\partial x}, i=1,2.,,,m$$

    如果我們把這組标量寫成向量的形式,即得到次元為m的一個向量$\mathbf{y}$對一個标量$x$的求導,那麼結果也是一個m維的向量:$\frac{\partial \mathbf{y}}{\partial x}$

    可見,所謂向量對标量的求導,其實就是向量裡的每個分量分别對标量求導,最後把求導的結果排列在一起,按一個向量表示而已。類似的結論也存在于标量對向量的求導,向量對向量的求導,向量對矩陣的求導,矩陣對向量的求導,以及矩陣對矩陣的求導等。

    總而言之,所謂的向量矩陣求導本質上就是多元函數求導,僅僅是把把函數的自變量,因變量以及标量求導的結果排列成了向量矩陣的形式,友善表達與計算,更加簡潔而已。

    為了便于描述,後面如果沒有指明,則求導的自變量用$x$表示标量,$\mathbf{x}$表示n維向量,$\mathbf{X}$表示$m \times n$次元的矩陣,求導的因變量用$y$表示标量,$\mathbf{y}$表示m維向量,$\mathbf{Y}$表示$p \times q$次元的矩陣。

2. 矩陣向量求導定義

    根據求導的自變量和因變量是标量,向量還是矩陣,我們有9種可能的矩陣求導定義,如下:

自變量\因變量 标量$y$ 向量$\mathbf{y}$ 矩陣$\mathbf{Y}$
标量$x$ $\frac{\partial y}{\partial x}$ $\frac{\partial  \mathbf{y}}{\partial x}$ $\frac{\partial  \mathbf{Y}}{\partial x}$
向量$\mathbf{x}$ $\frac{\partial y}{\partial \mathbf{x}}$ $\frac{\partial  \mathbf{y}}{\partial \mathbf{x}}$ $\frac{\partial  \mathbf{Y}}{\partial \mathbf{x}}$
矩陣$\mathbf{X}$ $\frac{\partial y}{\partial \mathbf{X}}$ $\frac{\partial  \mathbf{y}}{\partial \mathbf{X}}$ $\frac{\partial  \mathbf{Y}}{\partial \mathbf{X}}$

    這9種裡面,标量對标量的求導高數裡面就有,不需要我們單獨讨論,在剩下的8種情況裡面,我們先讨論上圖中标量對向量或矩陣求導,向量或矩陣對标量求導,以及向量對向量求導這5種情況。另外三種向量對矩陣的求導,矩陣對向量的求導,以及矩陣對矩陣的求導我們在後面再講。

    現在我們回看第一節講到的例子,次元為m的一個向量$\mathbf{y}$對一個标量$x$的求導,那麼結果也是一個m維的向量:$\frac{\partial \mathbf{y}}{\partial x}$。這是我們表格裡面向量對标量求導的情況。這裡有一個問題沒有講到,就是這個m維的求導結果排列成的m維向量到底應該是列向量還是行向量?

    這個問題的答案是:行向量或者列向量皆可!畢竟我們求導的本質隻是把标量求導的結果排列起來,至于是按行排列還是按列排列都是可以的。但是這樣也有問題,在我們機器學習算法法優化過程中,如果行向量或者列向量随便寫,那麼結果就不唯一,亂套了。

    為了解決這個問題,我們引入求導布局的概念。

3. 矩陣向量求導布局

    為了解決矩陣向量求導的結果不唯一,我們引入求導布局。最基本的求導布局有兩個:分子布局(numerator layout)和分母布局(denominator layout )。

    對于分子布局來說,我們求導結果的次元以分子為主,比如對于我們上面對标量求導的例子,結果的次元和分子的次元是一緻的。也就是說,如果向量$\mathbf{y}$是一個m維的列向量,那麼求導結果$\frac{\partial \mathbf{y}}{\partial x}$也是一個m維列向量。如果如果向量$\mathbf{y}$是一個m維的行向量,那麼求導結果$\frac{\partial \mathbf{y}}{\partial x}$也是一個m維行向量。

    對于分母布局來說,我們求導結果的次元以分母為主,比如對于我們上面對标量求導的例子,如果向量$\mathbf{y}$是一個m維的列向量,那麼求導結果$\frac{\partial \mathbf{y}}{\partial x}$是一個m維行向量。如果如果向量$\mathbf{y}$是一個m維的行向量,那麼求導結果$\frac{\partial \mathbf{y}}{\partial x}$是一個m維的列向量向量。

    可見,對于分子布局和分母布局的結果來說,兩者相差一個轉置。

    再舉一個例子,标量$y$對矩陣$ \mathbf{X}$求導,那麼如果按分母布局,則求導結果的次元和矩陣$X$的次元$m \times n$是一緻的。如果是分子布局,則求導結果的次元為$n \times m$。

    這樣,對于标量對向量或者矩陣求導,向量或者矩陣對标量求導這4種情況,對應的分子布局和分母布局的排列方式已經确定了。

    稍微麻煩點的是向量對向量的求導,本文隻讨論列向量對列向量的求導,其他的行向量求導隻是差一個轉置而已。比如m維列向量$\mathbf{y}$對n維列向量$\mathbf{x}$求導。它的求導結果在分子布局和分母布局各是什麼呢?對于這2個向量求導,那麼一共有$mn$個标量對标量的求導。求導的結果一般是排列為一個矩陣。如果是分子布局,則矩陣的第一個次元以分子為準,即結果是一個$m \times n$的矩陣,如下:$$ \frac{\partial  \mathbf{y}}{\partial \mathbf{x}} = \left( \begin{array}{ccc} \frac{\partial y_1}{\partial x_1}& \frac{\partial y_1}{\partial x_2}& \ldots & \frac{\partial y_1}{\partial x_n}\\  \frac{\partial y_2}{\partial x_1}& \frac{\partial y_2}{\partial x_2} & \ldots & \frac{\partial y_2}{\partial x_n}\\   \vdots&  \vdots &  \ddots & \vdots \\ \frac{\partial y_m}{\partial x_1}& \frac{\partial y_m}{\partial x_2} & \ldots & \frac{\partial y_m}{\partial x_n}  \end{array} \right)$$

    上邊這個按分子布局的向量對向量求導的結果矩陣,我們一般叫做雅克比 (Jacobian)矩陣。有的資料上會使用$ \frac{\partial  \mathbf{y}}{\partial \mathbf{x^T}}$來定義雅克比矩陣,意義是一樣的。

    如果是按分母布局,則求導的結果矩陣的第一次元會以分母為準,即結果是一個$n \times m$的矩陣,如下:$$ \frac{\partial  \mathbf{y}}{\partial \mathbf{x}} = \left( \begin{array}{ccc} \frac{\partial y_1}{\partial x_1}& \frac{\partial y_2}{\partial x_1}& \ldots & \frac{\partial y_m}{\partial x_1}\\  \frac{\partial y_1}{\partial x_2}& \frac{\partial y_2}{\partial x_2} & \ldots & \frac{\partial y_m}{\partial x_2}\\   \vdots&  \vdots &  \ddots & \vdots \\ \frac{\partial y_1}{\partial x_n}& \frac{\partial y_2}{\partial x_n} & \ldots & \frac{\partial y_m}{\partial x_n}  \end{array} \right)$$

    上邊這個按分母布局的向量對向量求導的結果矩陣,我們一般叫做梯度矩陣。有的資料上會使用$ \frac{\partial  \mathbf{y^T}}{\partial \mathbf{x}}$來定義梯度矩陣,意義是一樣的。

    有了布局的概念,我們對于上面5種求導類型,可以各選擇一種布局來求導。但是對于某一種求導類型,不能同時使用分子布局和分母布局求導。

    但是在機器學習算法原理的資料推導裡,我們并沒有看到說正在使用什麼布局,也就是說布局被隐含了,這就需要自己去推演,比較麻煩。但是一般來說我們會使用一種叫混合布局的思路,即如果是向量或者矩陣對标量求導,則使用分子布局為準,如果是标量對向量或者矩陣求導,則以分母布局為準。對于向量對對向量求導,有些分歧,我的所有文章中會以分子布局的雅克比矩陣為主。

    具體總結如下:

列向量$\mathbf{y}$
/

分子布局:m維列向量(預設布局)

分母布局:m維行向量

分子布局:$p \times q$矩陣(預設布局)

分母布局:$q \times p$矩陣

列向量$\mathbf{x}$

分子布局:n維行向量

分母布局:n維列向量(預設布局)

分子布局:$m \times n$雅克比矩陣(預設布局)

分母布局:$n \times m$梯度矩陣

分子布局:$n \times m$矩陣

分母布局:$m \times n$矩陣(預設布局)

4. 矩陣向量求導基礎總結

    有了矩陣向量求導的定義和預設布局,我們後續就可以對上表中的5種矩陣向量求導過程進行一些常見的求導推導總結求導方法,并讨論向量求導的鍊式法則。

(歡迎轉載,轉載請注明出處。歡迎溝通交流: [email protected])