在計算神經網絡的反饋時,有可能會遇到矩陣求導的問題。這個問題困擾了我一段時間,相關的參考資料也是雲里霧里。最終找到了一篇英文參考資料。這里記錄一下我的理解。
對於矩陣求導來說,利用矩陣乘法的基本原理將結果寫為兩個矩陣的各個元素相城並相加的等式,比較容易理解。
這么說估計還是晦澀難懂。so,舉個栗子:
該例子來源於《Vector, Matrix, and Tensor Derivatives》
有一個長度為C的列向量\(\vec{y}\),一個具有C行、D列的矩陣\(W\),還有一個長度為D的列向量\(\vec{x}\),有如下關系:
\(\vec{y}=W\vec{x}\)
現在我們開始求一下\(\vec{y}\)對\(\vec{x}\)的導數。其實這個導數等於\(\vec{y}\)中的每一個元素,對於\(\vec{x}\)中的每一個元素求導(或者是偏導)。在當前的這個例子中,導數應該是一個C行D列的矩陣:
\(\begin{bmatrix}
\frac{\partial y_{1}}{\partial x_{1}} & \frac{\partial y_{1}}{\partial x_{2}} & \frac{\partial y_{1}}{\partial x_{3}} &... & \frac{\partial y_{1}}{\partial x_{D}}\\
\frac{\partial y_{2}}{\partial x_{1}}& \frac{\partial y_{2}}{\partial x_{2}}& \frac{\partial y_{2}}{\partial x_{3}}& ... & \frac{\partial y_{2}}{\partial x_{D}}\\
... & ... & ... &... & ...\\
\frac{\partial y_{C}}{\partial x_{1}}& \frac{\partial y_{C}}{\partial x_{2}}&\frac{\partial y_{C}}{\partial x_{3}}& ...&\frac{\partial y_{C}}{\partial x_{D}}
\end{bmatrix}\)
現在我們不妨來看一下這個矩陣當中,每一個元素的情況。我們選取\(\frac{\partial \vec{y}_{3}}{\partial \vec{x}_{7}}\),來看一下導數如何求得的。
根據矩陣的乘法,我們知道對於\(\vec{y}\)中的元素\(\vec{y}_{3}\),有:
\(\vec{y}_3=\sum_{j=1}^{D}W_{3,j}\vec{x}_{j}\)
這樣\(\vec{y}\)中的每一個元素都可以寫成類似的形式。這樣,我們就將矩陣的關系,轉化成了標量的關系。
\(\vec{y}_3=W_{3,1}\vec{x}_{1}+W_{3,2}\vec{x}_{2}+...+W_{3,7}\vec{x}_{7}+...W_{3,D}\vec{x}_{D}\)
所以對於我們所關心的\(\frac{\partial \vec{y}_{3}}{\partial \vec{x}_{7}}\),有
\(\frac{\partial \vec{y}_{3}}{\partial \vec{x}_{7}}=\frac{\partial{}}{\partial{\vec{x}_{7}}}[W_{3,1}\vec{x}_{1}+W_{3,2}\vec{x}_{2}+...+W_{3,7}\vec{x}_{7}+...W_{3,D}\vec{x}_{D}]\)
\(=\frac{\partial{}}{\partial{\vec{x}_{7}}}[0+0+...++W_{3,7}\vec{x}_{7}+...+0]\)
\(=\frac{\partial{}}{\partial{\vec{x}_{7}}}[W_{3,7}\vec{x}_{7}]\)
\(=W_{3,7}\)
解釋一下,因為是對於\(\vec{x}_{7}\)求導,所以其他不含 \(\vec{x}_{7}\)的項,導數都為0。
\(W_{3,7}\)???看到這里我們很容就能發現,對於每一個\(\frac{\partial \vec{y}_{i}}{\partial \vec{x}_{j}}\)都有:
\(\frac{\partial \vec{y}_{i}}{\partial \vec{x}_{j}}=W_{i,j}\)
所以我們可以得出一個結論:
\(\begin{bmatrix}
\frac{\partial y_{1}}{\partial x_{1}} & \frac{\partial y_{1}}{\partial x_{2}} & \frac{\partial y_{1}}{\partial x_{3}} &... & \frac{\partial y_{1}}{\partial x_{D}}\\
\frac{\partial y_{2}}{\partial x_{1}}& \frac{\partial y_{2}}{\partial x_{2}}& \frac{\partial y_{2}}{\partial x_{3}}& ... & \frac{\partial y_{2}}{\partial x_{D}}\\
... & ... & ... &... & ...\\
\frac{\partial y_{C}}{\partial x_{1}}& \frac{\partial y_{C}}{\partial x_{2}}&\frac{\partial y_{C}}{\partial x_{3}}& ...&\frac{\partial y_{C}}{\partial x_{D}}
\end{bmatrix}=\begin{bmatrix}
W_{1,1}&W_{1,2}&W_{1,3}&...&W_{1,D}\\
W_{2,1}&W_{2,2}&W_{2,3}&...&W_{2,D}\\
...&...&...&...&...\\
W_{C,1}&W_{C,2}&W_{C,3}&...&W_{C,D}\\
\end{bmatrix}\)
所以我們可以得到第一個導數
\(\frac{\partial \vec{y}}{\partial \vec{x}}=W\)
好了,對於矩陣的導數我們有個一個初步的印象。在下面一篇,會作更多的介紹。