Skip to main content

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的矩阵WW中的每一行都是输入层相关单词v_wN维的向量表示,一般地,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行复制到hv_{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_wv_w’是单词w的两种表示。v_wW的行,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_jh_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

这就等价于xEH的张量积,例如:

\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.

打赏
微信扫一扫支付
微信logo微信扫一扫, 打赏作者吧~

mickey

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注