矩阵乘法的梯度计算
在神经网络中,我们经常要用到矩阵乘法,而BackProp过程中,要对系数矩阵的每一个元素求偏导数。这里来推导一下。
我们假设有如下一个函数:$y=f(AB)$,其中
1、$A$是$n\times m$矩阵,$B$是$m\times k$矩阵。
2、f是一个标量函数,参数是一个矩阵。
我们现在要求$\frac{\partial y}{\partial A}$和$\frac{\partial y}{\partial B}$
可以看到, $y$是一个复合函数,我们令乘式$AB=C$,有$y=f(C)$。通过$f$的具体表达式(这里未知),我们可以求出y对C每个元素的偏导数:$\frac{\partial y}{\partial C_{i,j}}$,
根据多元函数的链式求导法则,我们有:
$\frac{\partial y}{\partial A_{p,q}}=\sum_{i,j} \frac{\partial y}{\partial C_{i,j}}\frac{\partial C_{i,j}}{\partial A_{p,q}}$
那么$\frac{\partial C_{i,j}}{\partial A_{p,q}}$怎么求呢?我们注意到:
$C_{i,j}=\sum_h A_{i,h}B_{h,j}$
所以$\frac{\partial C_{i,j}}{\partial A_{p,q}}=\begin{cases} B_{q,j} & i=p \\0 & i\ne p\end{cases}$
带入前面的式子,我们有:
$\frac{\partial y}{\partial A_{p,q}}=\sum_{i,j} \frac{\partial y}{\partial C_{i,j}}\frac{\partial C_{i,j}}{\partial A_{p,q}}=\sum_{j} \frac{\partial y}{\partial C_{p,j}}\frac{\partial C_{p,j}}{\partial A_{p,q}}=\sum_{j} \frac{\partial y}{\partial C_{p,j}}B_{q,j}=\sum_{j} \frac{\partial y}{\partial C_{p,j}}B_{j,q}^T$
观察上面的式子,这就是矩阵乘法$\frac{\partial y}{\partial A_{p,q}}=\frac{\partial y}{\partial C}B^T$的定义。
同理可证:$\frac{\partial y}{\partial B_{p,q}}=A^T\frac{\partial y}{\partial C}$