1. 求梯度的公式
在矩阵乘法的情况下,设有一个特征矩阵为X XX,一个权值矩阵为W WW,输出:Y = X W Y = XWY=XW。
如果我们要得到Y YY关于W WW的梯度,则可以使用公式:d W = X ⊤ d Y dW=X ^\top dYdW=X
⊤
dY
同样的,如果求Y YY关于X XX的梯度,则可以使用公式:d X = d Y W ⊤ dX=dYW^\topdX=dYW
⊤
那么,为什么上面的公式确实可以求出我们所需要的梯度呢?
2. “举个栗子”:两个矩阵相乘
我们不妨看看两个简单矩阵相乘的过程,并将目光聚焦到求关于W WW的梯度
求关于W WW的梯度,则我们得到的d W dWdW的形状应当是与W WW相同的,即每个元素都有一个对应的梯度。我们看和W 11 W_{11}W
11有关的部分:
不难发现,W 11 W_{11}W 11 的系数有三个,那么W 11 W_{11}W 11 的梯度就是这三个系数的和:X 11 + X 21 + X 31 X_{11}+X_{21}+X_{31}X 11+X 21+X31。
对应的系数作为梯度很好理解,可为什么是和呢?而不是平均数?又或者其它的?
我现在也没有很明白,求得的梯度为什么是它所有系数的和值,主要是对这个梯度值所代表的意义有些困惑。不过平均数其实没有什么意义,不过是给所有求得的梯度等比缩小了而已。
相应的,W WW第一行的元素,其梯度都是X XX第一列的和;第二行的元素,其梯度都是X XX第二列的和。
于是可以发现,通过公式 d W = X ⊤ d Y dW=X ^\top dYdW=X ⊤ dY,如果d Y dYdY的元素值都为1,我们就恰巧能得到上面的结果。
在实际的模型中,矩阵乘法的运算只是作为很小的一个部分,d Y dYdY的值接受自下一层,而非简单的全为1 11,因此不必担心出现每一行的权值只能同步更新的问题
3. 从计算图看:误差反向传播
前面我们是从表达式的系数得出的规律,接下来再从计算图来看一下反向传播求梯度的过程。
在考虑神经网络中的误差的反向传播时,计算图确实是一个很棒的工具。对于复杂的矩阵乘法运算,我们可以把它分解成许多简单的加法和乘法运算来考虑。
求W11有关的部分计算图——正向推理
误差反向传播
这里我们得到:
这里只画出了举例子所需要的小部分计算图,将一个矩阵乘法运算完整地用计算图呈现出来,会显得比较错综复杂,也比较麻烦。但使用部分计算图来以点带面、帮助理解还是非常不错的。