矩阵求导(一)
在计算神经网络的反馈时,有可能会遇到矩阵求导的问题。这个问题困扰了我一段时间,相关的参考资料也是云里雾里。最终找到了一篇英文参考资料。这里记录一下我的理解。
对于矩阵求导来说,利用矩阵乘法的基本原理将结果写为两个矩阵的各个元素相城并相加的等式,比较容易理解。
这么说估计还是晦涩难懂。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\)
好了,对于矩阵的导数我们有个一个初步的印象。在下面一篇,会作更多的介绍。