矩阵乘

在实现矩阵乘的反向传播时,才忽然发觉自己其实不太清楚应该怎么乘。整理思路,记录一下,可能有点不太严谨。
先是结论



这里的dX表示X矩阵中各个元素微小的变化,可以表示梯度grad_X的方向。也就是说grad_X=W.transpose() @ grad_Y因为梯度的物理含义就是输入x向哪个方向微小的变化后,输出变化最大
比如:

想最高效的通过变动x让y变大,就是说要在给定dx向量的模长时,让dy最大。这时dx向量与梯度同向

如果g是一个多输入多输出的函数

中间那个矩阵就是这个多输入多输出函数的梯度,这个矩阵也叫雅可比矩阵 (Jacobian matrix)
时(y,x为对应列向量),雅可比矩阵就是W

面对输入输出非常多的情况时,这个矩阵会非常大。为了避免这个问题,深度学习一般都只是求多输入单输出函数的梯度。即使面对一个多输出的函数,也会在把多输出转化成一个单一的损失,如下所示。如果对下面的函数g和f都取微分,这就相当于在原来的雅可比矩阵左边乘一个行向量。

比如:

上面的式子就表示,通过对右乘对应的雅可比矩阵(如果g是矩阵乘就是W),我们求得了,也就是x相对于输出的梯度

所以时,,转置后就是

因为左乘是行变换,所以对,X的每列之间无关,所以

两边同时转置,然后变量代换,可以推得