在機器學習中的矩陣向量求導(一) 求導定義與求導佈局中,咱們討論了向量矩陣求導的9種定義與求導佈局的概念。今天咱們就討論下其中的標量對向量求導,標量對矩陣求導, 以及向量對向量求導這三種場景的基本求解思路。html
對於本文中的標量對向量或矩陣求導這兩種狀況,如前文所說,以分母佈局爲默認佈局。向量對向量求導,以分子佈局爲默認佈局。如遇到其餘文章中的求導結果和本文不一樣,請先確認使用的求導佈局是否同樣。另外,因爲機器學習中向量或矩陣對標量求導的場景不多見,本系列不會單獨討論這兩種求導過程。機器學習
標量對向量求導,嚴格來講是實值函數對向量的求導。即定義實值函數$f: R^{n} \to R$,自變量$\mathbf{x}$是n維向量,而輸出$y$是標量。對於一個給定的實值函數,如何求解$\frac{\partial y}{\partial \mathbf{x}}$呢?函數
首先咱們想到的是基於矩陣求導的定義來作,因爲所謂標量對向量的求導,其實就是標量對向量裏的每一個份量分別求導,最後把求導的結果排列在一塊兒,按一個向量表示而已。那麼咱們能夠將實值函數對向量的每個份量來求導,最後找到規律,獲得求導的結果向量。佈局
首先咱們來看一個簡單的例子:$y=\mathbf{a}^T\mathbf{x}$,求解$\frac{\partial \mathbf{a}^T\mathbf{x}}{\partial \mathbf{x}}$post
根據定義,咱們先對$\mathbf{x}$的第i個份量進行求導,這是一個標量對標量的求導,以下:學習
$$\frac{\partial \mathbf{a}^T\mathbf{x}}{\partial x_i} = \frac{\partial \sum\limits_{j=1}^n a_jx_j}{\partial x_i} = \frac{\partial a_ix_i}{\partial x_i} =a_i$$測試
可見,對向量的第i個份量的求導結果就等於向量$\mathbf{a}$的第i個份量。因爲咱們是分母佈局,最後全部求導結果的份量組成的是一個n維向量。那麼其實就是向量$\mathbf{a}$。也就是說:$$\frac{\partial \mathbf{a}^T\mathbf{x}}{\partial \mathbf{x}} = \mathbf{a}$$htm
一樣的思路,咱們也能夠直接獲得:$$\frac{\partial \mathbf{x}^T\mathbf{a}}{\partial \mathbf{x}} = \mathbf{a}$$blog
給一個簡單的測試,你們看看本身能不能按定義法推導出:$$\frac{\partial \mathbf{x}^T\mathbf{x}}{\partial \mathbf{x}} =2\mathbf{x}$$get
再來看一個複雜一點點的例子:$y=\mathbf{x}^T\mathbf{A}\mathbf{x}$,求解$\frac{\partial \mathbf{x}^T\mathbf{A}\mathbf{x}}{\partial \mathbf{x}}$
咱們對$\mathbf{x}$的第k個份量進行求導以下:
$$\frac{\partial \mathbf{x}^T\mathbf{A}\mathbf{x}}{\partial x_k} = \frac{\partial \sum\limits_{i=1}^n\sum\limits_{j=1}^n x_iA_{ij}x_j}{\partial x_k} = \sum\limits_{i=1}^n A_{ik}x_i + \sum\limits_{j=1}^n A_{kj}x_j $$
這個第k個份量的求導結果稍微複雜些了,仔細觀察一下,第一部分是矩陣$\mathbf{A}$的第k列轉置後和$x$相乘獲得,第二部分是矩陣$\mathbf{A}$的第k行和$x$相乘獲得,排列好就是: $$\frac{\partial \mathbf{x}^T\mathbf{A}\mathbf{x}}{\partial \mathbf{x}} = \mathbf{A}^T\mathbf{x} + \mathbf{A}\mathbf{x}$$
從上面能夠看出,定義法求導對於簡單的實值函數是很容易的,可是複雜的實值函數就算求出了任意一個份量的導數,要排列出最終的求導結果還挺麻煩的,所以咱們須要找到其餘的簡便一些的方法來總體求導,而不是每次都先去針對任意一個份量,再進行排列。
在咱們尋找一些簡單的方法前,咱們簡單看下標量對向量求導的一些基本法則,這些法則和標量對標量求導的過程相似。
1) 常量對向量的求導結果爲0。
2)線性法則:若是$f,g$都是實值函數,$c_1,c_2$爲常數,則:$$\frac{\partial (c_1f(\mathbf{x})+c_2g(\mathbf{x})}{\partial \mathbf{x}} = c_1\frac{\partial f(\mathbf{x})}{\partial \mathbf{x}} +c_2\frac{\partial g(\mathbf{x})}{\partial \mathbf{x}} $$
3) 乘法法則:若是$f,g$都是實值函數,則:$$\frac{\partial f(\mathbf{x})g(\mathbf{x})}{\partial \mathbf{x}} = f(\mathbf{x})\frac{\partial g(\mathbf{x})}{\partial \mathbf{x}} +\frac{\partial f(\mathbf{x})}{\partial \mathbf{x}} g(\mathbf{x}) $$
要注意的是若是不是實值函數,則不能這麼使用乘法法則。
4) 除法法則:若是$f,g$都是實值函數,且$g(\mathbf{x}) \neq 0$,則:$$\frac{\partial f(\mathbf{x})/g(\mathbf{x})}{\partial \mathbf{x}} = \frac{1}{g^2(\mathbf{x})}(g(\mathbf{x})\frac{\partial f(\mathbf{x})}{\partial \mathbf{x}} - f(\mathbf{x})\frac{\partial g(\mathbf{x})}{\partial \mathbf{x}})$$
如今咱們來看看定義法如何解決標量對矩陣的求導問題。其實思路和第一節的標量對向量的求導是相似的,只是最後的結果是一個和自變量同型的矩陣。
咱們仍是以一個例子來講明。$y=\mathbf{a}^T\mathbf{X}\mathbf{b}$,求解$\frac{\partial \mathbf{a}^T\mathbf{X}\mathbf{b}}{\partial \mathbf{X}}$
其中, $\mathbf{a}$是m維向量,$\mathbf{b}$是n維向量, $\mathbf{X}$是$m \times n$的矩陣。
咱們對矩陣$\mathbf{X}$的任意一個位置的$X_{ij}$求導,以下:$$\frac{\partial \mathbf{a}^T\mathbf{X}\mathbf{b}}{\partial X_{ij}} = \frac{\partial \sum\limits_{p=1}^m\sum\limits_{q=1}^n a_pA_{pq}b_q}{\partial X_{ij}} = \frac{\partial a_iA_{ij}b_j}{\partial X_{ij}} = a_ib_j$$
即求導結果在$(i.j)$位置的求導結果是$\mathbf{a}$向量第i個份量和$\mathbf{b}$第j個份量的乘積,將全部的位置的求導結果排列成一個$m \times n$的矩陣,即爲$ab^T$,這樣最後的求導結果爲:$$\frac{\partial \mathbf{a}^T\mathbf{X}\mathbf{b}}{\partial \mathbf{X}} = ab^T$$
簡單的求導的確不難,可是若是是比較複雜的標量對矩陣求導,好比$y=\mathbf{a}^Texp(\mathbf{X}\mathbf{b})$,對任意標量求導容易,排列起來仍是蠻麻煩的,也就是咱們遇到了和標量對向量求導同樣的問題,定義法比較適合解決簡單的問題,複雜的求導須要更簡便的方法。這個方法咱們在下一篇來說。
同時,標量對矩陣求導也有和第二節對向量求導相似的基本法則,這裏就不累述了。
這裏咱們也一樣給出向量對向量求導的定義法的具體例子。
先來一個簡單的例子: $\mathbf{y} = \mathbf{A} \mathbf{x} $,其中$ \mathbf{A}$爲$n \times m$的矩陣。$\mathbf{x}, \mathbf{y}$分別爲$m,n$維向量。須要求導$\frac{\partial \mathbf{A}\mathbf{x}}{\partial \mathbf{x}}$,根據定義,結果應該是一個$n \times m$的矩陣
先求矩陣的第i行和向量的內積對向量的第j份量求導,用定義法求解過程以下:$$\frac{\partial \mathbf{A_i}\mathbf{x}}{\partial \mathbf{x_j}} = \frac{\partial A_{ij}x_j}{\partial \mathbf{x_j}}= A_{ij}$$
可見矩陣 $\mathbf{A}$的第i行和向量的內積對向量的第j份量求導的結果就是矩陣 $\mathbf{A}$的$(i,j)$位置的值。排列起來就是一個矩陣了,因爲咱們分子佈局,因此排列出的結果是$ \mathbf{A}$,而不是 $\mathbf{A}^T$
使用定義法雖然已經求出一些簡單的向量矩陣求導的結果,可是對於複雜的求導式子,則中間運算會很複雜,同時求導出的結果排列也是很頭痛的。下一篇咱們討論使使用矩陣微分和跡函數的方法來求解矩陣向量求導。
(歡迎轉載,轉載請註明出處。歡迎溝通交流: liujianping-ok@163.com)