矩陣求導(dǎo)術(shù)(上)

對(duì)原文進(jìn)行了重新整理排版:
轉(zhuǎn)自知乎長(zhǎng)軀鬼俠的專欄,(根據(jù)我的推測(cè)作者本科是清華大學(xué)電子工程系,現(xiàn)在卡內(nèi)基梅隆大學(xué)(世界第一CS大學(xué))計(jì)算機(jī)工程學(xué)博士生),在此獻(xiàn)上我的膝蓋.
原文地址:https://zhuanlan.zhihu.com/p/24709748


正文:

矩陣求導(dǎo)的技術(shù),在統(tǒng)計(jì)學(xué)、控制論、機(jī)器學(xué)習(xí)等領(lǐng)域有廣泛的應(yīng)用。鑒于我看過的一些資料或言之不詳、或繁亂無緒,本文來做個(gè)科普,分作兩篇,上篇講標(biāo)量對(duì)矩陣的求導(dǎo)術(shù),下篇講矩陣對(duì)矩陣的求導(dǎo)術(shù)。本文使用小寫字母x表示標(biāo)量,粗體小寫字母x表示(列)向量,大寫字母X表示矩陣。

首先來琢磨一下定義,標(biāo)量f對(duì)矩陣X的導(dǎo)數(shù),定義為

\frac{\partial f}{\partial X} = \left[\frac{\partial f }{\partial X_{ij}}\right]

f對(duì)X逐元素求導(dǎo)排成與X尺寸相同的矩陣。然而,這個(gè)定義在計(jì)算中并不好用,實(shí)用上的原因是對(duì)函數(shù)較復(fù)雜的情形難以逐元素求導(dǎo);哲理上的原因是逐元素求導(dǎo)破壞了整體性。試想,為何要將f看做矩陣X而不是各元素X_{ij}的函數(shù)呢?答案是用矩陣運(yùn)算更整潔。所以在求導(dǎo)時(shí)不宜拆開矩陣,而是要找一個(gè)從整體出發(fā)的算法。

為此,我們來回顧,一元微積分中的導(dǎo)數(shù)(標(biāo)量對(duì)標(biāo)量的導(dǎo)數(shù))與微分有聯(lián)系:

df = f'(x)dx

多元微積分中的梯度(標(biāo)量對(duì)向量的導(dǎo)數(shù))也與微分有聯(lián)系:

df = \sum_{i=1}^n \frac{\partial f}{\partial x_i}dx_i = \frac{\partial f}{\partial \boldsymbol{x}}^T d\boldsymbol{x}

這里第一個(gè)等號(hào)是全微分公式,第二個(gè)等號(hào)表達(dá)了梯度與微分的聯(lián)系:全微分df是梯度向量\frac{\partial f}{\partial \boldsymbol{x}}(n×1)與微分向量d\boldsymbol{x}(n×1)的內(nèi)積

受此啟發(fā),我們將矩陣導(dǎo)數(shù)與微分建立聯(lián)系:

df = \sum_{i=1}^m \sum_{j=1}^n \frac{\partial f}{\partial X_{ij}}dX_{ij} = \text{tr}\left(\frac{\partial f}{\partial X}^T dX\right)

其中tr代表跡(trace)是方陣對(duì)角線元素之和,滿足性質(zhì):對(duì)尺寸相同的矩陣A,B,\text{tr}(A^TB) = \sum_{i,j}A_{ij}B_{ij},即\text{tr}(A^TB)是矩陣A,B的內(nèi)積。與梯度相似,這里第一個(gè)等號(hào)是全微分公式,第二個(gè)等號(hào)表達(dá)了矩陣導(dǎo)數(shù)與微分的聯(lián)系:全微分df是導(dǎo)數(shù)\frac{\partial f}{\partial X}(m×n)與微分矩陣dX(m×n)的內(nèi)積。


運(yùn)算法則

然后來建立運(yùn)算法則?;叵胗龅捷^復(fù)雜的一元函數(shù)如f = \log(2+\sin x)e^{\sqrt{x}},我們是如何求導(dǎo)的呢?通常不是從定義開始求極限,而是先建立了初等函數(shù)求導(dǎo)和四則運(yùn)算、復(fù)合等法則,再來運(yùn)用這些法則。故而,我們來創(chuàng)立常用的矩陣微分的運(yùn)算法則:

  1. 加減法:d(X\pm Y) = dX \pm dY;矩陣乘法:d(XY) = (dX)Y + X (dY) ;轉(zhuǎn)置:d(X^T) = (dX)^T;跡:d\text{tr}(X) = \text{tr}(dX)。
  2. 逆:dX^{-1} = -X^{-1}dX X^{-1}。此式可在XX^{-1}=I兩側(cè)求微分來證明。
  3. 行列式:d|X| = \text{tr}(X^{\#}dX) ,其中X^{\#}表示X的伴隨矩陣,在X可逆時(shí)又可以寫作d|X|= |X|\text{tr}(X^{-1}dX)。此式可用Laplace展開來證明,詳見張賢達(dá)《矩陣分析與應(yīng)用》第279頁。
  4. 逐元素乘法:d(X\odot Y) = dX\odot Y + X\odot dY,\odot表示尺寸相同的矩陣X,Y逐元素相乘。
  5. 逐元素函數(shù):d\sigma(X) = \sigma'(X)\odot dX ,\sigma(X) = \left[\sigma(X_{ij})\right]是逐元素標(biāo)量函數(shù)運(yùn)算, \sigma'(X)=[\sigma'(X_{ij})]是逐元素求導(dǎo)數(shù)。舉個(gè)例子,

X=\left[\begin{matrix}x_{11} & x_{12} \\ x_{21} & x_{22}\end{matrix}\right], d \sin(X) = \left[\begin{matrix}\cos x_{11} dx_{11} & \cos x_{12} d x_{12}\\ \cos x_{21} d x_{21}& \cos x_{22} dx_{22}\end{matrix}\right] = \cos(X)\odot dX


跡技巧

我們?cè)噲D利用矩陣導(dǎo)數(shù)與微分的聯(lián)系df = \text{tr}\left(\frac{\partial f}{\partial X}^T dX\right) ,在求出左側(cè)的微分df后,該如何寫成右側(cè)的形式并得到導(dǎo)數(shù)呢?這需要一些跡技巧(trace trick):

  1. 標(biāo)量套上跡:a = \text{tr}(a)
  2. 轉(zhuǎn)置:\mathrm{tr}(A^T) = \mathrm{tr}(A)
  3. 線性:\text{tr}(A\pm B) = \text{tr}(A)\pm \text{tr}(B)。
  4. 矩陣乘法交換:\text{tr}(AB) = \text{tr}(BA),其中AB^T尺寸相同。兩側(cè)都等于\sum_{i,j}A_{ij}B_{ji}
  5. 矩陣乘法/逐元素乘法交換:\text{tr}(A^T(B\odot C)) = \text{tr}((A\odot B)^TC),其中A,B,C尺寸相同。兩側(cè)都等于\sum_{i,j}A_{ij}B_{ij}C_{ij}。

觀察一下可以斷言,若標(biāo)量函數(shù)f是矩陣X經(jīng)加減乘法、逆、行列式、逐元素函數(shù)等運(yùn)算構(gòu)成,則使用相應(yīng)的運(yùn)算法則對(duì)f求微分,再使用跡技巧給df套上跡并將其它項(xiàng)交換至dX左側(cè),對(duì)照導(dǎo)數(shù)與微分的聯(lián)系df = \text{tr}\left(\frac{\partial f}{\partial X}^T dX\right),即能得到導(dǎo)數(shù)。

特別地,若矩陣退化為向量,對(duì)照導(dǎo)數(shù)與微分的聯(lián)系df = \frac{\partial f}{\partial \boldsymbol{x}}^T d\boldsymbol{x} ,即能得到導(dǎo)數(shù)。

在建立法則的最后,來談一談復(fù)合:假設(shè)已求得\frac{\partial f}{\partial Y},而YX的函數(shù),如何求\frac{\partial f}{\partial X}呢?在微積分中有標(biāo)量求導(dǎo)的鏈?zhǔn)椒▌t\frac{\partial f}{\partial x} = \frac{\partial f}{\partial y} \frac{\partial y}{\partial x},但這里我們不能隨意沿用標(biāo)量的鏈?zhǔn)椒▌t,因?yàn)榫仃噷?duì)矩陣的導(dǎo)數(shù)\frac{\partial Y}{\partial X}截至目前仍是未定義的。于是我們繼續(xù)追本溯源,鏈?zhǔn)椒▌t是從何而來?源頭仍然是微分。我們直接從微分入手建立復(fù)合法則:先寫出df = \text{tr}\left(\frac{\partial f}{\partial Y}^T dY\right),再將dYdX表示出來代入,并使用跡技巧將其他項(xiàng)交換至dX左側(cè),即可得到\frac{\partial f}{\partial X}

最常見的情形是Y = AXB,此時(shí)

df = \text{tr}\left(\frac{\partial f}{\partial Y}^T dY\right) = \text{tr}\left(\frac{\partial f}{\partial Y}^T AdXB\right) = \text{tr}\left(B\frac{\partial f}{\partial Y}^T AdX\right) = \text{tr}\left((A^T\frac{\partial f}{\partial Y}B^T)^T dX\right)

可得到

\frac{\partial f}{\partial X}=A^T\frac{\partial f}{\partial Y}B^T


例子

接下來演示一些算例。特別提醒要依據(jù)已經(jīng)建立的運(yùn)算法則來計(jì)算,不能隨意套用微積分中標(biāo)量導(dǎo)數(shù)的結(jié)論,比如認(rèn)為AX對(duì)X的導(dǎo)數(shù)為A,這是沒有根據(jù)、意義不明的。

例1:

f = \boldsymbol{a}^T X\boldsymbol,求\frac{\partial f}{\partial X}。其中\boldsymbol{a}m\times 1列向量,Xm\times n矩陣,\boldsymboln×1列向量,f是標(biāo)量。

解:

先使用矩陣乘法法則求微分,df = d\boldsymbol{a}^TX\boldsymbol+\boldsymbol{a}^TdX\boldsymbol+\boldsymbol{a}^TXd\boldsymbol,注意這里的\boldsymbol{a},\boldsymbol是常量,d\boldsymbol{a} = \boldsymbol{0},d\boldsymbol = \boldsymbol{0},得到:df = \boldsymbol{a}^T dX\boldsymbol 。

由于df是標(biāo)量,它的跡等于自身,df = \text{tr}(df),套上跡并做矩陣乘法交換:df = \text{tr}(\boldsymbol{a}^TdX\boldsymbol) = \text{tr}(\boldsymbol\boldsymbol{a}^TdX),注意這里我們根據(jù)\text{tr}(AB) = \text{tr}(BA)交換了\boldsymbol{a}^TdX\boldsymbol

對(duì)照導(dǎo)數(shù)與微分的聯(lián)系df = \text{tr}\left(\frac{\partial f}{\partial X}^T dX\right),得到\frac{\partial f}{\partial X} = (\boldsymbol\boldsymbol{a}^T)^T= \boldsymbol{a}\boldsymbol^T。

注意:這里不能用\frac{\partial f}{\partial X} =\boldsymbol{a}^T \frac{\partial X}{\partial X}\boldsymbol=?,導(dǎo)數(shù)與矩陣乘法的交換是不合法則的運(yùn)算(而微分是合法的)。有些資料在計(jì)算矩陣導(dǎo)數(shù)時(shí),會(huì)略過求微分這一步,這是邏輯上解釋不通的。

例2:

f = \boldsymbol{a}^T \exp(X\boldsymbol),求\frac{\partial f}{\partial X}。其中\boldsymbol{a}m×1列向量,Xm\times n矩陣,\boldsymboln×1列向量,exp表示逐元素求指數(shù),f是標(biāo)量。

解:

先使用矩陣乘法、逐元素函數(shù)法則求微分:df = \boldsymbol{a}^T(\exp(X\boldsymbol)\odot (dX\boldsymbol))

再套上跡并做交換:

df = \text{tr}( \boldsymbol{a}^T(\exp(X\boldsymbol)\odot (dX\boldsymbol))) =\text{tr}((\boldsymbol{a}\odot \exp(X\boldsymbol))^TdX \boldsymbol) = \text{tr}(\boldsymbol(\boldsymbol{a}\odot \exp(X\boldsymbol))^TdX)

注意這里我們先根據(jù)\text{tr}(A^T(B\odot C)) = \text{tr}((A\odot B)^TC)交換了\boldsymbol{a}\exp(X\boldsymbol)dX\boldsymbol,再根據(jù)\text{tr}(AB) = \text{tr}(BA)交換了(\boldsymbol{a}\odot \exp(X\boldsymbol))^TdX\boldsymbol。

對(duì)照導(dǎo)數(shù)與微分的聯(lián)系df = \text{tr}\left(\frac{\partial f}{\partial X}^T dX\right),得到

\frac{\partial f}{\partial X} = (\boldsymbol(\boldsymbol{a}\odot \exp(X\boldsymbol))^T)^T= (\boldsymbol{a}\odot \exp(X\boldsymbol))\boldsymbol^T

例3:

f = \text{tr}(Y^T M Y), Y = \sigma(WX),求\frac{\partial f}{\partial X}。其中Wl×m列向量,Xm\times n矩陣,Yl\times n矩陣,Ml×l對(duì)稱矩陣,\sigma是逐元素函數(shù),f是標(biāo)量。

解:

先求\frac{\partial f}{\partial Y},求微分,使用矩陣乘法、轉(zhuǎn)置法則:df = \text{tr}((dY)^TMY) + \text{tr}(Y^TMdY) = \text{tr}(Y^TM^TdY) + \text{tr}(Y^TMdY) = \text{tr}(Y^T(M+M^T)dY),對(duì)照導(dǎo)數(shù)與微分的聯(lián)系,得到\frac{\partial f}{\partial Y}=(M+M^T)Y = 2MY,這里M是對(duì)稱矩陣。

為求\frac{\partial f}{\partial X},寫出df = \text{tr}\left(\frac{\partial f}{\partial Y}^T dY\right),再將dYdX表示出來代入,并使用矩陣乘法/逐元素乘法交換:df = \text{tr}\left(\frac{\partial f}{\partial Y}^T (\sigma'(WX)\odot (WdX))\right) = \text{tr}\left(\left(\frac{\partial f}{\partial Y} \odot \sigma'(WX)\right)^T W dX\right),對(duì)照導(dǎo)數(shù)與微分的聯(lián)系,得到\frac{\partial f}{\partial X}=W^T \left(\frac{\partial f}{\partial Y}\odot \sigma'(WX)\right)=W^T((2M\sigma(WX))\odot\sigma'(WX))。

例4【線性回歸】:

l = \|X\boldsymbol{w}- \boldsymbol{y}\|^2, 求\boldsymbol{w}的最小二乘估計(jì),即求\frac{\partial l}{\partial \boldsymbol{w}}的零點(diǎn)。其中\boldsymbol{y}m×1列向量,Xm\times n矩陣,\boldsymbol{w}n×1列向量,l是標(biāo)量。

解:

這是標(biāo)量對(duì)向量的導(dǎo)數(shù),不過可以把向量看做矩陣的特例。

先將向量模平方改寫成向量與自身的內(nèi)積:l = (X\boldsymbol{w}- \boldsymbol{y})^T(X\boldsymbol{w}- \boldsymbol{y})

求微分,使用矩陣乘法、轉(zhuǎn)置等法則:

dl = (Xd\boldsymbol{w})^T(X\boldsymbol{w}-\boldsymbol{y})+(X\boldsymbol{w}-\boldsymbol{y})^T(Xd\boldsymbol{w}) = 2(X\boldsymbol{w}-\boldsymbol{y})^TXd\boldsymbol{w}。

對(duì)照導(dǎo)數(shù)與微分的聯(lián)系dl = \frac{\partial l}{\partial \boldsymbol{w}}^Td\boldsymbol{w},得到\frac{\partial l}{\partial \boldsymbol{w}}= (2(X\boldsymbol{w}-\boldsymbol{y})^TX)^T = 2X^T(X\boldsymbol{w}-\boldsymbol{y})。

\frac{\partial l}{\partial \boldsymbol{w}}的零點(diǎn)即\boldsymbol{w}的最小二乘估計(jì)為\boldsymbol{w} = (X^TX)^{-1}X^T\boldsymbol{y}

例5【方差的最大似然估計(jì)】:

樣本\boldsymbol{x}_1,\dots, \boldsymbol{x}_N \sim \mathcal{N}(\boldsymbol{\mu}, \Sigma),求方差\Sigma的最大似然估計(jì)。

寫成數(shù)學(xué)式是:l = \log|\Sigma|+\frac{1}{N}\sum_{i=1}^N(\boldsymbol{x}_i-\boldsymbol{\bar{x}})^T\Sigma^{-1}(\boldsymbol{x}_i-\boldsymbol{\bar{x}}),求\frac{\partial l }{\partial \Sigma}的零點(diǎn)。其中\boldsymbol{x}_im\times 1列向量,\bar{\boldsymbol{x}}=\frac{1}{N}\sum_{i=1}^N \boldsymbol{x}_i是樣本均值,\Sigma是m\times m對(duì)稱正定矩陣,l是標(biāo)量,log表示自然對(duì)數(shù)。

解:
首先求微分,使用矩陣乘法、行列式、逆等運(yùn)算法則,

第一項(xiàng)是d\log|\Sigma| = |\Sigma|^{-1}d|\Sigma| = \text{tr}(\Sigma^{-1}d\Sigma)
第二項(xiàng)是\frac{1}{N}\sum_{i=1}^N(\boldsymbol{x}_i-\boldsymbol{\bar{x}})^Td\Sigma^{-1}(\boldsymbol{x}_i-\boldsymbol{\bar{x}}) = -\frac{1}{N}\sum_{i=1}^N(\boldsymbol{x}_i-\boldsymbol{\bar{x}})^T\Sigma^{-1}d\Sigma\Sigma^{-1}(\boldsymbol{x}_i-\boldsymbol{\bar{x}})。

再給第二項(xiàng)套上跡做交換:
\text{tr}\left(\frac{1}{N}\sum_{i=1}^N(\boldsymbol{x}_i-\boldsymbol{\bar{x}})^T\Sigma^{-1}d\Sigma\Sigma^{-1}(\boldsymbol{x}_i-\boldsymbol{\bar{x}})\right) = \frac{1}{N} \sum_{i=1}^N \text{tr}((\boldsymbol{x}_i-\boldsymbol{\bar{x}})^T\Sigma^{-1} d\Sigma \Sigma^{-1}(\boldsymbol{x}_i-\boldsymbol{\bar{x}}))= \frac{1}{N}\sum_{i=1}^N\text{tr}\left(\Sigma^{-1}(\boldsymbol{x}_i-\boldsymbol{\bar{x}})(\boldsymbol{x}_i-\boldsymbol{\bar{x}})^T\Sigma^{-1}d\Sigma\right)=\text{tr}(\Sigma^{-1}S\Sigma^{-1}d\Sigma),

其中先交換跡與求和,然后將 \Sigma^{-1} (\boldsymbol{x}_i-\boldsymbol{\bar{x}})交換到左邊,最后再交換跡與求和,并定義S = \frac{1}{N}\sum_{i=1}^N(\boldsymbol{x}_i-\boldsymbol{\bar{x}})(\boldsymbol{x}_i-\boldsymbol{\bar{x}})^T為樣本方差矩陣。
得到dl = \text{tr}\left(\left(\Sigma^{-1}-\Sigma^{-1}S\Sigma^{-1}\right)d\Sigma\right)。對(duì)照導(dǎo)數(shù)與微分的聯(lián)系,有\frac{\partial l }{\partial \Sigma}=(\Sigma^{-1}-\Sigma^{-1}S\Sigma^{-1})^T,其零點(diǎn)即\Sigma的最大似然估計(jì)為\Sigma = S。

例6【多元logistic回歸】:

l = -\boldsymbol{y}^T\log\text{softmax}(W\boldsymbol{x}),求\frac{\partial l}{\partial W}。其中\boldsymbol{y}是除一個(gè)元素為1外其它元素為0的m×1列向量,Wm\times n矩陣,\boldsymbol{x}n×1列向量,l是標(biāo)量;log表示自然對(duì)數(shù),\text{softmax}(\boldsymbol{a}) = \frac{\exp(\boldsymbol{a})}{\boldsymbol{1}^T\exp(\boldsymbol{a})},其中\exp(\boldsymbol{a})表示逐元素求指數(shù),\boldsymbol{1}代表全1向量。

解1:

首先將softmax函數(shù)代入并寫成l = -\boldsymbol{y}^T \left(\log (\exp(W\boldsymbol{x}))-\boldsymbol{1}\log(\boldsymbol{1}^T\exp(W\boldsymbol{x}))\right) = -\boldsymbol{y}^TW\boldsymbol{x} + \log(\boldsymbol{1}^T\exp(W\boldsymbol{x})),這里要注意逐元素log滿足等式\log(\boldsymbol{u}/c) = \log(\boldsymbol{u}) - \boldsymbol{1}\log(c),以及\boldsymbol{y}滿足\boldsymbol{y}^T \boldsymbol{1} = 1

求微分,使用矩陣乘法、逐元素函數(shù)等法則:dl =- \boldsymbol{y}^TdW\boldsymbol{x}+\frac{\boldsymbol{1}^T\left(\exp(W\boldsymbol{x})\odot(dW\boldsymbol{x})\right)}{\boldsymbol{1}^T\exp(W\boldsymbol{x})}。

再套上跡并做交換,注意可化簡(jiǎn)\boldsymbol{1}^T\left(\exp(W\boldsymbol{x})\odot(dW\boldsymbol{x})\right) = \exp(W\boldsymbol{x})^TdW\boldsymbol{x},這是根據(jù)等式\boldsymbol{1}^T (\boldsymbol{u}\odot \boldsymbol{v}) = \boldsymbol{u}^T \boldsymbol{v},

dl = \text{tr}\left(-\boldsymbol{y}^TdW\boldsymbol{x}+\frac{\exp(W\boldsymbol{x})^TdW\boldsymbol{x}}{\boldsymbol{1}^T\exp(W\boldsymbol{x})}\right)
= \text{tr}(-\boldsymbol{y}^TdW\boldsymbol{x}+\text{softmax}(W\boldsymbol{x})^TdW\boldsymbol{x})
= \text{tr}(\boldsymbol{x}(\text{softmax}(W\boldsymbol{x})-\boldsymbol{y})^TdW)。

對(duì)照導(dǎo)數(shù)與微分的聯(lián)系,得到\frac{\partial l}{\partial W}= (\text{softmax}(W\boldsymbol{x})-\boldsymbol{y})\boldsymbol{x}^T。

解2:

定義\boldsymbol{a} = W\boldsymbol{x},則l = -\boldsymbol{y}^T\log\text{softmax}(\boldsymbol{a}),先同上求出\frac{\partial l}{\partial \boldsymbol{a}} = \text{softmax}(\boldsymbol{a})-\boldsymbol{y} ,再利用復(fù)合法則:dl = \text{tr}\left(\frac{\partial l}{\partial \boldsymbol{a}}^Td\boldsymbol{a}\right) = \text{tr}\left(\frac{\partial l}{\partial \boldsymbol{a}}^TdW \boldsymbol{x}\right) = \text{tr}\left(\boldsymbol{x}\frac{\partial l}{\partial \boldsymbol{a}}^TdW\right)
得到\frac{\partial l}{\partial W}= \frac{\partial l}{\partial\boldsymbol{a}}\boldsymbol{x}^T

最后一例留給經(jīng)典的神經(jīng)網(wǎng)絡(luò)。神經(jīng)網(wǎng)絡(luò)的求導(dǎo)術(shù)是學(xué)術(shù)史上的重要成果,還有個(gè)專門的名字叫做BP算法,我相信如今很多人在初次推導(dǎo)BP算法時(shí)也會(huì)頗費(fèi)一番腦筋,事實(shí)上使用矩陣求導(dǎo)術(shù)來推導(dǎo)并不復(fù)雜。為簡(jiǎn)化起見,我們推導(dǎo)二層神經(jīng)網(wǎng)絡(luò)的BP算法。

例7【二層神經(jīng)網(wǎng)絡(luò)】:

l = -\boldsymbol{y}^T\log\text{softmax}(W_2\sigma(W_1\boldsymbol{x})),求\frac{\partial l}{\partial W_1}\frac{\partial l}{\partial W_2}。其中\boldsymbol{y}是除一個(gè)元素為1外其它元素為0的的m×1列向量,W_2m\times p矩陣,W_1p \times n矩陣,\boldsymbol{x}n×1列向量,l是標(biāo)量;log表示自然對(duì)數(shù),\text{softmax}(\boldsymbol{a}) = \frac{\exp(\boldsymbol{a})}{\boldsymbol{1}^T\exp(\boldsymbol{a})}同上,\sigma是逐元素sigmoid函數(shù)\sigma(a) = \frac{1}{1+\exp(-a)}。

解:

定義\boldsymbol{a}_1=W_1\boldsymbol{x}\boldsymbol{h}_1 = \sigma(\boldsymbol{a}_1),\boldsymbol{a}_2 = W_2 \boldsymbol{h}_1,則l =-\boldsymbol{y}^T\log\text{softmax}(\boldsymbol{a}_2)。在前例中已求出\frac{\partial l}{\partial \boldsymbol{a}_2} = \text{softmax}(\boldsymbol{a}_2)-\boldsymbol{y} 。

使用復(fù)合法則,
dl = \text{tr}\left(\frac{\partial l}{\partial \boldsymbol{a}_2}^Td\boldsymbol{a}_2\right)
= \text{tr}\left(\frac{\partial l}{\partial \boldsymbol{a}_2}^TdW_2 \boldsymbol{h}_1\right) + \underbrace{ \text{tr}\left(\frac{\partial l}{\partial \boldsymbol{a}_2}^TW_2 d\boldsymbol{h}_1\right)}_{dl_2},

使用矩陣乘法交換的跡技巧從第一項(xiàng)得到\frac{\partial l}{\partial W_2}= \frac{\partial l}{\partial\boldsymbol{a}_2}\boldsymbol{h}_1^T,從第二項(xiàng)得到\frac{\partial l}{\partial \boldsymbol{h}_1} = W_2^T\frac{\partial l}{\partial\boldsymbol{a}_2}

接下來對(duì)第二項(xiàng)繼續(xù)使用復(fù)合法則來求\frac{\partial l}{\partial \boldsymbol{a}_1},并利用矩陣乘法和逐元素乘法交換的跡技巧:

dl_2 = \text{tr}\left(\frac{\partial l}{\partial\boldsymbol{h}_1}^Td\boldsymbol{h}_1\right) = \text{tr}\left(\frac{\partial l}{\partial\boldsymbol{h}_1}^T(\sigma'(\boldsymbol{a}_1)\odot d\boldsymbol{a}_1)\right) = \text{tr}\left(\left(\frac{\partial l}{\partial\boldsymbol{h}_1}\odot \sigma'(\boldsymbol{a}_1)\right)^Td\boldsymbol{a}_1\right),

得到\frac{\partial l}{\partial \boldsymbol{a}_1}= \frac{\partial l}{\partial\boldsymbol{h}_1}\odot\sigma'(\boldsymbol{a}_1)。為求\frac{\partial l}{\partial W_1},再用一次復(fù)合法則:dl_2 = \text{tr}\left(\frac{\partial l}{\partial\boldsymbol{a}_1}^Td\boldsymbol{a}_1\right) = \text{tr}\left(\frac{\partial l}{\partial\boldsymbol{a}_1}^TdW_1\boldsymbol{x}\right) = \text{tr}\left(\boldsymbol{x}\frac{\partial l}{\partial\boldsymbol{a}_1}^TdW_1\right),得到\frac{\partial l}{\partial W_1}= \frac{\partial l}{\partial\boldsymbol{a}_1}\boldsymbol{x}^T。

推廣:

樣本(\boldsymbol{x}_1, y_1), \dots, (\boldsymbol{x}_N,y_N),l = -\sum_{i=1}^N \boldsymbol{y}_i^T\log\text{softmax}(W_2\sigma(W_1\boldsymbol{x}_i + \boldsymbol_1) + \boldsymbol_2),其中\boldsymbol_1p \times 1列向量,\boldsymbol_2m\times 1列向量,其余定義同上。

解1:
定義\boldsymbol{a}_{1,i} = W_1 \boldsymbol{x}_i + \boldsymbol_1,\boldsymbol{h}_{1,i} = \sigma(\boldsymbol{a}_{1,i}),\boldsymbol{a}_{2,i} = W_2\boldsymbol{h}_{1,i} + \boldsymbol_2,則l = -\sum_{i=1}^N \boldsymbol{y}_i^T \log \text{softmax}(\boldsymbol{a}_{2,i})

先同上可求出\frac{\partial l}{\partial \boldsymbol{a}_{2,i}} = \text{softmax}(\boldsymbol{a}_{2,i})-\boldsymbol{y}_i 。

使用復(fù)合法則,dl = \text{tr}\left(\sum_{i=1}^N\frac{\partial l}{\partial \boldsymbol{a}_{2,i}}^T d \boldsymbol{a}_{2,i}\right) = \text{tr}\left( \sum_{i=1}^N \frac{\partial l}{\partial \boldsymbol{a}_{2,i}}^T dW_2 \boldsymbol{h}_{1,i}\right) + \underbrace{\text{tr}\left( \sum_{i=1}^N \frac{\partial l}{\partial \boldsymbol{a}_{2,i}}^T W_2 d\boldsymbol{h}_{1,i}\right)}_{dl_2} + \text{tr}\left( \sum_{i=1}^N \frac{\partial l}{\partial \boldsymbol{a}_{2,i}}^T d \boldsymbol_2\right),

從第一項(xiàng)得到得到\frac{\partial l}{\partial W_2}= \sum_{i=1}^N \frac{\partial l}{\partial\boldsymbol{a}_{2,i}}\boldsymbol{h}_{1,i}^T,

從第二項(xiàng)得到\frac{\partial l}{\partial \boldsymbol{h}_{1,i}}= W_2^T\frac{\partial l}{\partial\boldsymbol{a}_{2,i}},

從第三項(xiàng)得到到\frac{\partial l}{\partial \boldsymbol_2}= \sum_{i=1}^N \frac{\partial l}{\partial\boldsymbol{a}_{2,i}}。

接下來對(duì)第二項(xiàng)繼續(xù)使用復(fù)合法則,得到\frac{\partial l}{\partial \boldsymbol{a}_{1,i}}= \frac{\partial l}{\partial\boldsymbol{h}_{1,i}}\odot\sigma'(\boldsymbol{a}_{1,i})。

為求\frac{\partial l}{\partial W_1}, \frac{\partial l}{\partial \boldsymbol_1},

再用一次復(fù)合法則:dl_2 = \text{tr}\left(\sum_{i=1}^N \frac{\partial l}{\partial\boldsymbol{a}_{1,i}}^Td\boldsymbol{a}_{1,i}\right) = \text{tr}\left(\sum_{i=1}^N \frac{\partial l}{\partial\boldsymbol{a}_{1,i}}^TdW_1\boldsymbol{x}_i\right) + \text{tr}\left(\sum_{i=1}^N \frac{\partial l}{\partial\boldsymbol{a}_{1,i}}^Td\boldsymbol_1\right),

得到\frac{\partial l}{\partial W_1}= \sum_{i=1}^N \frac{\partial l}{\partial\boldsymbol{a}_{1,i}}\boldsymbol{x}_i^T,\frac{\partial l}{\partial \boldsymbol_1}= \sum_{i=1}^N \frac{\partial l}{\partial\boldsymbol{a}_{1,i}}。

解2:

可以用矩陣來表示N個(gè)樣本,以簡(jiǎn)化形式。
定義X = [\boldsymbol{x}_1, \cdots, \boldsymbol{x}_N]A_1 = [\boldsymbol{a}_{1,1},\cdots,\boldsymbol{a}_{1,N}] =W_1 X + \boldsymbol_1 \boldsymbol{1}^TH_1 = [\boldsymbol{h}_{1,1}, \cdots, \boldsymbol{h}_{1,N}] = \sigma(A_1),A_2 = [\boldsymbol{a}_{2,1},\cdots,\boldsymbol{a}_{2,N}] = W_2 H_1 + \boldsymbol_2 \boldsymbol{1}^T,注意這里使用全1向量來擴(kuò)展維度。先同上求出\frac{\partial l}{\partial A_2} = [\text{softmax}(\boldsymbol{a}_{2,1})-\boldsymbol{y}_1, \cdots, \text{softmax}(\boldsymbol{a}_{2,N})-\boldsymbol{y}_N] 。

使用復(fù)合法則,dl = \text{tr}\left(\frac{\partial l}{\partial A_2}^T d A_2\right) = \text{tr}\left( \frac{\partial l}{\partial A_2}^T dW_2 H_1 \right) + \underbrace{\text{tr}\left(\frac{\partial l}{\partial A_2}^T W_2 d H_1\right)}_{dl_2} + \text{tr}\left(\frac{\partial l}{\partial A_2}^T d \boldsymbol_2 \boldsymbol{1}^T\right)

從第一項(xiàng)得到\frac{\partial l}{\partial W_2}= \frac{\partial l}{\partial A_2}H_1^T,
從第二項(xiàng)得到\frac{\partial l}{\partial H_1}= W_2^T\frac{\partial l}{\partial A_{2}},
從第三項(xiàng)得到到\frac{\partial l}{\partial \boldsymbol_2}= \frac{\partial l}{\partial A_2}\boldsymbol{1}

接下來對(duì)第二項(xiàng)繼續(xù)使用復(fù)合法則,得到\frac{\partial l}{\partial A_1}= \frac{\partial l}{\partial H_1}\odot\sigma'(A_1)。

為求\frac{\partial l}{\partial W_1}, \frac{\partial l}{\partial \boldsymbol_1},再用一次復(fù)合法則:dl_2 = \text{tr}\left(\frac{\partial l}{\partial A_1}^TdA_1\right) = \text{tr}\left(\frac{\partial l}{\partial A_1}^TdW_1X\right) + \text{tr}\left( \frac{\partial l}{\partial A_1}^Td\boldsymbol_1 \boldsymbol{1}^T\right),得到\frac{\partial l}{\partial W_1}= \frac{\partial l}{\partial A_1}X^T,\frac{\partial l}{\partial \boldsymbol_1}= \frac{\partial l}{\partial A_1}\boldsymbol{1}。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容