矩阵乘
在实现矩阵乘的反向传播时,才忽然发觉自己其实不太清楚应该怎么乘。整理思路,记录一下,可能有点不太严谨。
先是结论
这里的dX表示X矩阵中各个元素微小的变化,可以表示梯度grad_X的方向。也就是说grad_X=W.transpose() @ grad_Y
因为梯度的物理含义就是输入x向哪个方向微小的变化后,输出变化最大
比如:
想最高效的通过变动x让y变大,就是说要在给定dx向量的模长时,让dy最大。这时dx向量与梯度同向
如果g是一个多输入多输出的函数
中间那个矩阵就是这个多输入多输出函数的梯度,这个矩阵也叫雅可比矩阵 (Jacobian matrix)
当
面对输入输出非常多的情况时,这个矩阵会非常大。为了避免这个问题,深度学习一般都只是求多输入单输出函数的梯度。即使面对一个多输出的函数,也会在把多输出转化成一个单一的损失,如下所示。如果对下面的函数g和f都取微分,这就相当于在原来的雅可比矩阵左边乘一个行向量。
比如:
令
上面的式子就表示,通过对
所以
因为左乘是行变换,所以对
对