word2vec参数学习解释 (一)

本周主要阅读了Xin Rongword2vec Parameter Learning Explained的第一部分,主要介绍了连续词袋模型中一个单词上下文的情况。下周将介绍多个单词模型、Skip-Gram模型以及一些优化方法等。敬请期待~

摘要

Mikolov等人提出的word2vec模型和应用在最近几年吸引了大量的关注。word2vec学习到的词向量表示中包含了许多语义信息,在多种NLP任务中都非常有用。正如许多研究人员希望使用word2vec或者相似的技术进行实验,作者发现缺少资料能够详细完整地介绍词嵌入模型的参数学习过程,从而使得许多非神经网络的专家难以理解这些模型的工作机制。

本笔记提供了word2vec模型的参数更新等式的推导和解释,包括:原始的CBOW(continuous bag-of-word,连续词袋)模型,和SG(skip-gram)模型,以及比较先进的优化技术,包括层次softmax和负抽样等。此外,本文还提供了梯度等式的直观解释以及数学推导,

连续词袋模型

一个单词的上下文

Mikolov等人[1]提出的CBOWcontinuous bag of word,连续词袋模型)的最简单版本开始介绍。假设每个上下文只考虑一个单词,这就意味着模型在给定一个上下文词的情况下预测一个目标单词,就类似于一个二元模型。(对于那些神经网络的初学者而言,推荐大家先浏览下一些基础知识:反向传播多层网络的后向传播,在继续阅读之前快速浏览下重要的概念和术语)。

图1 展示了在简化的上下文定义中的神经网络模型。在我们的设置中,词典大小是$$V$$,隐层的大小是$$N$$,连接层上的单元是全连接。输入是one-hot编码的向量:针对一个给定的输入上下文单词,在$$V$$个单元$${x_1,…,x_V}$$中有且仅有一个值为1,其它所有单元均为0

输入层和输出层之间的权重可以表示为一个$$V\times N$$的矩阵$$W$$。$$W$$中的每一行都是输入层相关单词$$v_w$$的$$N$$维的向量表示,一般地,$$W$$的第$$i$$行为$$v_w^T$$。给定一个上下文(一个单词),假设$$x_k=1$$,并且对于所有$$k’\neq k$$,均有$$x_{k’}=0$$,有:

$$
h=W^Tx=W^T_{(k,\cdot)} := v^T_{w_I}
$$
公式1

在本质上是将$$W$$的第$$k$$行复制到$$h$$。$$v_{w_I}$$是输入单词$$w_I$$的向量表示。这就意味着隐层单元的链接(激活)函数是简单的线性函数(例如,直接将输入层加权的输入和传递给下一层)。

从隐层到输出层,有一个不同的权重矩阵$$W’={w_{ij}’}$$,是一个$$N\times V$$的矩阵。通过使用这些矩阵,我们可以计算出词汇中每个单词的评分$$u_j$$:

$$
u_j = v_{w_j}’^Th
$$
公式2

其中,$$v_{w_j}’$$表示矩阵$$W’$$的第$$j$$列。然后,我们可以使用softmax,一个对数线性分类模型来获得单词的后验分布,该分布为一个多项式分布:

$$
p(w_j|w_I)=y_j=\frac{\exp(u_j)}{\sum_{j’=1}^{V}\exp(u_{j’})}
$$
公式3

其中,$$y_j$$为输出层的第$$j$$个单元的输出。将公式12替换到公式3中,可以获得:

$$
p(w_j|w_I)=\frac{\exp(v_{w_j}’^Tv_{w_I})}{\sum_{j’=1^V \exp(v_{w_j’}’^Tv_{w_I})}}
$$
公式4

注意:$$v_w$$和$$v_w’$$是单词$$w$$的两种表示。$$v_w$$是$$W$$的行,$$W$$是输入到隐层的权重矩阵,而$$v_w’$$是$$W’$$的列,$$W’$$是隐层到输出层的矩阵。在接下来的分析中,我们将$$v_w$$称为$$w$$的输入向量,将$$v_w’$$称为单词$$w$$的输出向量

隐层到输出层权重的更新公式

接下来让我们一起来推导下该模型的权重更新公式。尽管真实计算是不切实际的(接下来会解释),我们只是希望通过推导来获得对没有使用任何技巧的原始模型有个初步的认识,可以查阅之前的博客,来了解反向传播的基础知识。

针对一个训练样本的训练目标是最大化公式4,在给定输入上下文单词$$w_I$$和权重的情况下,获得真实输出单词$$w_O$$(将其在输出层的索引表示为$$j^*$$)的条件概率为:

$$
\max p(w_O|w_I) = \max y_{y^*}
= \max \log y_{j^*}
= u_{j^*} – \log {\sum_{j’=1}^V \exp(u_j’)} : = -E
$$
公式5

其中,$$E=-\log p(w_Ow_I)$$是我们的损失函数(我们希望最小化$$E$$),$$j^*$$是真实输出单词在输出层的索引。注意:该损失函数可以看做是两个概率分布之间的交叉熵度量的特例。

接下来,让我们推导隐层和输出层之间权重的更新公式。针对第$$j$$个单元的网络输入$$u_j$$,我们可以得到$$E$$的导数为:

$$
\frac{\delta E}{\delta u_j}=y_j – t_j := e_j
$$
公式6

其中,$$t_j=1(j=j^*)$$,只有在第$$j$$个单元是真实的输出单词时,$$t_j=1$$,否则的话,$$t_j=0$$。注意:该导数知识输出层的预测误差$$e_j$$。

接下来,我们获得在$$w_{ij}’$$上的导数来获得隐层到输出层的梯度:

$$
\frac{\delta E}{\delta w_{ij}’} = \frac{\delta E}{\delta u_j} \cdot \frac{\delta u_j}{\delta w_{ij}’}=e_j \cdot h_i
$$
公式7

因此,通过使用随机梯度下降,我们可以获得隐层到输出层权重的更新公式:

$$
w_{ij}’^{(new)} = w_{ij}’^{(old)} – \eta \cdot e_j \cdot h_i
$$
公式8

或者,对于$$j=1,2,..V$$,我们有:

$$
v_{w_j}’^{(new)} = v_{w_j}’^{(old)} = \eta \cdot e_j \cdot h
$$
公式9

其中,$$\eta>0$$为学习率。$$e_j=y_j-t_j$$,$$h_i$$为隐层的第$$i$$个单元;$$v_{w_j}’$$是$$w_j$$的输出向量。注意:该更新公式表明:我们必须遍历词典中的每个可能的单词,检查它的输出概率$$y_j$$,然后将其与期望的输出$$t_j$$(01)进行比较。如果$$y_j>t_j$$(过高估计),我们就可以从$$v_{w_j}’$$中减去隐层向量$$h$$的一部分(例如,$$v_{w_I}$$),从而使得$$v_{w_j}’$$远离$$v_{w_I}$$;如果$$y_j再次注意:$$v_w$$(输入向量)和$$v_w’$$(输出向量)是单词w的两种不同的向量表示形式。

在这里,我们说到“更近”或者“更远”的时候,表示的是使用内积而不是欧氏距离度量方法。

输入层到隐层权重的更新公式

获得了$$W’$$的更新公式之后,我们接下来对$$W$$的更新公式进行推导。针对隐层的输出,我们对$$E$$进行求导,有:

$$
\frac{\delta E}{\delta h_j} = \sum_{j=1}^{V} \frac{\delta E}{\delta u_j} \cdot \frac{\delta u_j}{\delta h_i} = \sum_{j=1}^{V} {e_j \cdot w_{ij}’} := EH_i
$$
公式10

其中,$$h_i$$是隐层的第$$i$$个输出单元,$$u_j$$
的定义在公式2中,是输出层的第$$j$$个单元的网络输入,$$e_j=y_j-t_j$$是输出层中第$$j$$个单词的预测误差。$$EH$$,是一个$$N$$维向量,为词典中所有单词的输出向量和,通过它们的预测误差进行加权。

接下来,我们应该在$$W$$上求$$E$$的导数。首先,回忆一下:隐层在输出层的值上进行了一个线性计算,对公式1中的向量标识进行拓展,有:

$$
h_i=\sum_{k=1}^V x_k \cdot w_{ki}
$$
公式11

现在,我们可以针对$$W$$中的每一个元素对$$E$$进行求导,得到:

$$
\frac{\delta E}{\delta w_{ki}}=\frac{\delta E}{\delta h_i} \cdot \frac{\delta h_i}{\delta w_{ki}} = EH_i \cdot x_k
$$
公式12

这就等价于$$x$$和$$EH$$的张量积,例如:

$$
\frac{\delta E}{\delta W}=x\otimes EH=xEH^T
$$
公式13

通过这里,我们获得了一个$$V \times N$$的矩阵。由于$$x$$中只有一个元素为非0,因此$$\frac{\delta E}{\delta w}$$中只有一行为非0,并且该列的值为$$EH^T$$,是一个$$N$$维的向量。$$W$$的更新公式计算如下:

$$
v_{w_I}^{(new)}=v_{w_I}^{(old)}-\eta EH^T
$$
公式14

其中,$$v_{w_I}$$是$$W$$的一行,是这个唯一的上下文单词的“输入向量”,也是$$W$$中导数为非0值的唯一行。在本次迭代之后,$$W$$的其他行将会保持不变,因为它们的导数为0

直觉上说来,由于向量$$EH$$是词典中所有单词的输出向量的和,并且通过它们的预测误差$$e_j=y_j-t_j$$进行加权,我们可以将公式14看做是向上下文单词的输入向量中增加词典中每个输出向量的一个部分。如果在输出层中,一个单词$$w_j$$是输出单词的概率大于真实值($$y_j>t_j$$),那么上下文单词$$w_I$$的输入向量将会倾向于向$$w_j$$的输出向量远离;相反,如果$$w_j$$是输出单词的概率小于真实值($$y_j参考文献

[1] Mikolov, T., Chen, K., Corrado, G., and Dean, J. (2013a). E cient estimation of word representations in vector space. arXiv preprint arXiv:1301.3781.

打赏

mickey

记录生活,写给几十年后的自己。