计算矩阵函数的导数(以 Word2vec 为例)

Chenxiao Ma | March 8, 2018

定义

向量函数是指输入或者输出都为向量的函数。向量函数 的导数是著名的雅可比矩阵:

根据定义, 的微小变动等于导数乘 的微小变动, 此时的乘法是矩阵点乘。

矩阵函数是指输入或者输出都为矩阵的函数, 矩阵函数 的导数仍然要满足 。 此时, 是与 大小相同的矩阵, 是与 大小相同的矩阵。那么 应该是一个张量, 此时的乘法是张量点乘。 假设 的大小是 的大小是 , 那么这个(广义)雅可比张量的大小是

很直观地,这个四维张量的每一个元素都对应了一个 中的元素对一个 中的元素的偏导。

在反向传播(Back Propagation)中的应用

神经网络中使用到的矩阵函数几乎都是简单的线性变换,即 。 反向传播时通常也并不需要计算出雅可比张量,而是要把它应用在链式法则中, 与其他的偏导数相乘。比如神经网络最终的损失函数是 ,更新 时, 只需要知道 , 也就是 即可。 假如 已知,那么此时这个乘积其实可以直接用 计算。 假设 的大小为 的大小为 的大小为 ,证明如下:

首先损失函数 是一个常数, 所以 是一个大小为 的张量, 是一个大小为 的张量。 对于 的每一个元素:

因为 , 所以 的第 行与 的第 列对应元素相乘的和, 当 时, 并不参与 的计算,对应的偏导数为 , 也就是说,这个矩阵只有第 列的元素不为

又因为

所以

根据张量乘法的定义

自然

同理

Word2vec

在最简单的 Word2vec 模型中,我们计算每一个单词周围的一些单词出现的可能性, 把所有这样的可能性乘起来得到整个句子的可能性。最大化这个可能性就是我们的目标。

假定词向量是维度为 的列向量。词表中单词总数为

为了更新词向量 ,我们需要求出 对他们的导数。 先定义 , 那么我们已知,。 直接应用上面的结果得到: