引言

前面我分析了Word2vec的一种模型叫做skip-gram模型。在这篇文章中,我将讲述另一个word2vec模型——连续词袋模型(CBOW)模型。如果你理解skip-gram模型,那么接下来的CBOW模型就更好理解了,因为两者模型互为镜像。我们先来看看CBOW模型与skip-gram模型对比图:

轻松理解CBOW模型_权重


如何,这是不是镜像关系?所以接下来的讲解也会和skip-gram那篇文章极其类似。

前向传播

接下来我们来看下CBOW神经网络模型,CBOW的神经网络模型与skip-gram的神经网络模型也是互为镜像的

轻松理解CBOW模型_word_02


在上图中,该模型的输入输出与skip-gram模型的输入输出是相反的。这里输入层是由one-hot编码的输入上下文{轻松理解CBOW模型_权重_03,…,轻松理解CBOW模型_NLP_04}组成,其中窗口大小为C,词汇表大小为V。隐藏层是N维的向量。最后输出层是也被one-hot编码的输出单词轻松理解CBOW模型_CBOW_05。被one-hot编码的输入向量通过一个轻松理解CBOW模型_神经网络模型_06维的权重矩阵轻松理解CBOW模型_CBOW_07连接到隐藏层;隐藏层通过一个轻松理解CBOW模型_NLP_08的权重矩阵轻松理解CBOW模型_神经网络模型_09连接到输出层。

接下来,我们假设我们知道输入与输出权重矩阵的大小。

  • 第一步就是去计算隐藏层轻松理解CBOW模型_NLP_10的输出。如下:
    轻松理解CBOW模型_CBOW_11
    该输出就是输入向量的加权平均。这里的隐藏层与skip-gram的隐藏层明显不同。
  • 第二部就是计算在输出层每个结点的输入。如下:
    轻松理解CBOW模型_神经网络模型_12
    其中轻松理解CBOW模型_word_13是输出矩阵轻松理解CBOW模型_word_14的第轻松理解CBOW模型_CBOW_15列。
  • 最后我们计算输出层的输出,输出轻松理解CBOW模型_CBOW_16如下:
    轻松理解CBOW模型_神经网络模型_17

通过BP(反向传播)算法及随机梯度下降来学习权重

在学习权重矩阵轻松理解CBOW模型_CBOW_07轻松理解CBOW模型_神经网络模型_09过程中,我们可以给这些权重赋一个随机值来初始化。然后按序训练样本,逐个观察输出与真实值之间的误差,并计算这些误差的梯度。并在梯度方向纠正权重矩阵。这种方法被称为随机梯度下降。但这个衍生出来的方法叫做反向传播误差算法。
具体推导步骤就不详写了:

  • 首先就是定义损失函数,这个损失函数就是给定输入上下文的输出单词的条件概率,一般都是取对数,如下所示:
    轻松理解CBOW模型_NLP_20
    轻松理解CBOW模型_NLP_21
    接下来就是对上面的概率求导,具体推导过程可以去看BP算法,我们得到输出权重矩阵轻松理解CBOW模型_word_14的更新规则:
    轻松理解CBOW模型_神经网络模型_23
    同理权重轻松理解CBOW模型_神经网络模型_24的更新规则如下:
    轻松理解CBOW模型_神经网络模型_25