《word2vec Parameter Learning Explained》论文学习笔记

目录:

  • 1 Continuous Bag-of-Word Model
    • 1.1 One-word context
      • Update equation for hidden→output weights
      • Update equation for input→hidden weights
    • 1.2 Multi-word context
  • 2 Skip-Gram Model
  • 3 Optimizing Computational Efficiency
    • 3.1 Hierarchical Softmax
    • 3.2 Negative Sampling


由于word2vec模型学习生成的词向量表示方法能够携带句子的语义信息(semantic meanings),因此非常适用于多种NLP任务。
这篇论文详细地推导和解释了word2vec模型的参数更新公式,包括:CBOW(continuous bag-of-word)模型和SG(skip-gram)模型,以及两种参数优化技术:hierarchical softmaxnegative sampling.


1 Continuous Bag-of-Word Model


1.1 One-word context


我们从CBOW模型的最简单版本开始介绍——One-word context。即我们假定context(预测目标单词的上下文信息)只有一个单词,也就是说One-word context 模型是在只要一个上下文单词(one context word)的情况下来预测一个目标单词(one target word)的。(注:对于初学神经网络的读者,建议先看完附录A之后,在回到此处阅读下文)。
《word2vec Parameter Learning Explained》论文学习笔记_第1张图片

如图1描述的就是One-word context定义之下的神经网络模型。这里我们假设文本词汇量的大小为V,隐藏层的大小为N,相邻层的神经元是全连接的。输入层是一个用one-hot方式编码的单词向量 x=(x1,...,xV) x = ( x 1 , . . . , x V ) ,其中只有一个 xi x i 为1,其余均为0。
从输入层到 隐藏层的权重值可以用一个 V×N V × N 维的矩阵 W W 来表示,即

W=ω11ω21...ωV1ω12ω22...ωV2............ω1Nω2N...ωVN W = ( ω 11 ω 12 . . . ω 1 N ω 21 ω 22 . . . ω 2 N . . . . . . . . . . . . ω V 1 ω V 2 . . . ω V N )

其中 W W 矩阵的每一行代表的是一个与输入层相关的单词的N维向量表示形式 vω v ω 。那么假设我们给定了一个输入单词(a context),其单词向量的第k个元素 xk=1 x k = 1 ,其余均为0,则有

h=WTx=WT(k,)xk=vTωI(1) (1) h = W T x = W ( k , ∙ ) T x k = v ω I T

从(1)式我们可以看出, h h 向量完全是从 W W 矩阵第k行复制过来的(同 vωI v ω I 均为N维向量)。 vωI v ω I 即为输入单词 ωI ω I 的一种向量表示(其实就是输入向量,我们后面会提到)。

分析完输入层到隐藏层之后,我们再看隐藏层到输出层,同样连接权重用一个新的N × V矩阵 W={ωij} W ′ = { ω i j ′ } 来表示如下:

W=ω11ω21...ωN1ω12ω22...ωN2............ω1Vω2V...ωNV W ′ = ( ω 11 ′ ω 12 ′ . . . ω 1 V ′ ω 21 ′ ω 22 ′ . . . ω 2 V ′ . . . . . . . . . . . . ω N 1 ′ ω N 2 ′ . . . ω N V ′ )

通过这些权重,我们可以为词表中的每一个单词都计算出一个得分 μj μ j

μj=vωjTh(2) (2) μ j = v ω j ′ T h

其中, vωj v ω j ′ 即为矩阵 W W ′ 的第j列向量(也是N维向量,其实就是单词w的输出向量,我们后面会提到)。

经过以上讨论之后,我们可以使用一种对数-线性分类模型softmax函数来计算单词的后验分布(是多项式分布)

p(ωj|ωI)=yj=exp(μj)Vj=1exp(μj)(3) (3) p ( ω j | ω I ) = y j = exp ⁡ ( μ j ) ∑ j ′ = 1 V exp ⁡ ( μ j ′ )

其中, yj y j 表示输出层第j个神经单元的输出值。将(1)式和(2)式代入(3)式我们可以得到:

p(ωj|ωI)=exp(vωjTvωI)Vj=1exp(vωjTvωI)(4) (4) p ( ω j | ω I ) = exp ⁡ ( v ω j ′ T v ω I ) ∑ j ′ = 1 V exp ⁡ ( v ω j ′ T v ω I )

注意:正如前文所述, vω v ω vω v ω ′ 是单词的两种向量表示形式。其中 vω v ω 实际上是权重矩阵 W W (input->hidden)的某一行向量, vω v ω ′ 则是权重矩阵 W W ′ (hidden->output)的某一列向量。我们将 vω v ω vω v ω ′ 分别称为“输入向量(input vector)”和“输出向量(output vector)”(二者均为N维向量)。


Update equation for hidden→output weights


接下来让我们推到权重矩阵的更新公式,尽管在实际的计算过程中这样做是不切实际的(我们在之后再谈)。
在我们推导hidden→output权重的更新公式的过程中,需要用到神经网络的反向传播算法,对这部分内容不熟悉的读者可以参考附录A的内容。
由以上描述可知,该模型训练的目标就是求公式(4)的最大值。公式(4)代表的就是给定上下文信息(这里为一个单词 ωI ω I )以及其权重矩阵的情况下,预测其实际输出单词(即上下文信息的中心词 ωO ω O )的条件概率。

maxp(ωO|ωI)=maxyj=maxlogyj=μjlogj=1Vexp(μj):=E(5)(6)(7) (5) max p ( ω O | ω I ) = max y j ∗ (6) = max log ⁡ y j ∗ (7) = μ j ∗ − log ⁡ ∑ j ′ = 1 V exp ⁡ ( μ j ′ ) := − E

其中, E=logp(ωO|ωI) E = − log ⁡ p ( ω O | ω I ) 为该模型的损失函数(我们需要找出它的最小值), μj μ j ∗ 的表示方式由公式( 2)而来, j j ∗ 则为实际输出单词的索引下标。我们注意到该损失函数可以理解为一种特殊情形下的 交叉熵计算。

现在我们开始推导从隐藏层到输出层的权重矩阵在模型训练过程中的参数更新公式。首先我们对损失函数 E=logp(ωO|ωI) E = − log ⁡ p ( ω O | ω I ) 求关于得分 μj μ j 的偏导数,得结果为:

Eμj=yjtj:=ej(8) (8) ∂ E ∂ μ j = y j − t j := e j

其中, tj=1(j=j) t j = 1 ( j = j ∗ ) ,即当且仅当输出层的第j个神经单元为真实的输出单词时 tj t j 的取值为1。接下来我们根据链式法则求出损失函数 E E 关于矩阵 W W ′ 元素 ωij ω i j ′ 的偏导数为:

Eωij=Eμjμjωij=ejhi(9) (9) ∂ E ∂ ω i j ′ = ∂ E ∂ μ j ⋅ ∂ μ j ∂ ω i j ′ = e j ⋅ h i

因此,采用随机梯度下降算法(SGD),我们最终得到了隐藏层到输出层(hidden output)权重的更新公式如下:

ωij(new)=ωij(old)ηejhi(10) (10) ω i j ′ ( n e w ) = ω i j ′ ( o l d ) − η ⋅ e j ⋅ h i

or
vωj(new)=vωj(old)ηejh  for j=1,2,...V.(11) (11) v ω j ′ ( n e w ) = v ω j ′ ( o l d ) − η ⋅ e j ⋅ h     f o r   j = 1 , 2 , . . . V .

其中, η>0 η > 0 为参数更新的学习速率; ej=yjtj e j = y j − t j hi h i 为隐藏层的第i个神经单元; vωj v ω j ′ ωj ω j 的输出向量。

由公式(11)我们可以看出:在更新权重参数的过程中,我们需要检查词汇表中的每一个单词,计算出它的输出概率 yj y j ,并与期望输出 tj t j (取值只能为0或者1)进行比较。比较过程如下:

1)如果 yj>tj y j > t j (“overestimating”),那么就从向量 vωj v ω j ′ 中减去隐藏向量 h h 的一部分(例如 vωI v ω I ),这样向量 vωj v ω j ′ 就会与向量 vωI v ω I 相差更远。
2)如果 yj<tj y j < t j (“underestimating”,这种情况只有在 tj=1 t j = 1 时,才会发生,此时 ωj=ωO ω j = ω O ),则将隐藏向量 h h 的一部分加入 vωO v ω O ′ ,使得 vωO v ω O ′ vωI v ω I 更接近。
3)如果 yj y j tj t j 非常接近,则此时 ej=yjtj e j = y j − t j 由于(公式(8))非常接近于0,故更新参数基本上没什么变化。

这里需要再次提醒的是: vω v ω vω v ω ′ 是单词 ω ω 的两种不同的向量表示形式。


Update equation for input→hidden weights


在介绍完hidden output的权重矩阵更新公式之后,我们接着介绍input hidden的权重矩阵 W W 的更新过程。我们继续对损失函数 E E 求关于隐藏层 hi h i 的偏导数,得:

Ehi=Vj=1Eμjμjhi=Vj=1ejωij:=EHi(12) (12) ∂ E ∂ h i = ∑ j = 1 V ∂ E ∂ μ j ⋅ ∂ μ j ∂ h i = ∑ j = 1 V e j ⋅ ω i j ′ := E H i

其中 hi h i 为隐藏层第i个神经单元的输出; μj μ j 在公式(2)中已经定义,表示输出层第j个神经单元的输入; ej=yjtj e j = y j − t j 为输出层第j个单词的预测误差。因此EH应该是一个N维向量,它的每一个元素代表的是词汇表中的每个单词的预测误差 ej e j ωij ω i j ′ 在j=1到V上的乘积之和。

接下来,我们需要求出损失函数 E E 关于权重矩阵 W W 的偏导数。首先,分解公式(1),我们知道隐藏层激活单元的输出 hi h i 是输入层 x x 与权重的线性组合,即

hi=Vk=1xkωki(13) (13) h i = ∑ k = 1 V x k ⋅ ω k i

因此对于权重矩阵 W W 的每一个元素,我们求关于 E E 的偏导数,得到:

Eωki=Ehihiωki=EHixk(14) (14) ∂ E ∂ ω k i = ∂ E ∂ h i ⋅ ∂ h i ∂ ω k i = E H i ⋅ x k

因此我们利用张量乘积的方式,便可得到:

EW=xEH=xEHT(15) (15) ∂ E ∂ W = x ⊗ E H = x E H T

我们再次得到了一个 N×V N × V 的矩阵。由于 x x 向量只有一个非0元素,因此 EW ∂ E ∂ W 只有一行是N维非0向量 EHT E H T ,因此矩阵 W W 的更新公式为:

vωI(new)=vωI(old)ηEHT(16) (16) v ω I ( n e w ) = v ω I ( o l d ) − η ⋅ E H T

其中 vωI v ω I 是矩阵 W W 的其中一行,是唯一的上下文单词(context word)的“输入向量”,也是矩阵 W W 唯一的导数非0的行向量。 除了 vωI v ω I 以外,矩阵 W W 的其他行向量在参数更新迭代过程中都会保持不变(因为其导数为0)。

与矩阵 W W ′ 的更新过程相似,对于公式(16),我们分析如下:

1)如果过高地估计了某个单词 ωj ω j 作为最终输出单词的概率(即: yj>tj y j > t j ),则上下文单词 ωI ω I (context word )的输入向量与单词 ωj ω j 的输出向量在更新的过程中会相差越来越大。

2)如果相反,某个单词 ωj ω j 作为最终输出单词的概率被低估(即: yj<tj y j < t j ),则单词 ωI ω I 的输入向量与单词 ωj ω j 的输出向量在更新过程中会越来越接近。

3)如果对于单词 ωI ω I 的概率预测是准确的,则对于单词的输入向量在更新过程中几乎保持不变。

因此,上下文单词 ωI ω I (context word )的输入向量的更新取决于词汇表中所有单词的预测误差。预测误差越大,则该单词对于上下文单词的输入向量的更新过程影响越大。

在介绍完One-word context的CBOW模型之后,我们接着介绍multi-word context下的CBOW模型。


1.2 Multi-word context


根据字面意思我们就可以看出,基于multi-word context的CBOW模型就是利用多个上下文单词来推测中心单词target word的一种模型。其结构如图2所示:
《word2vec Parameter Learning Explained》论文学习笔记_第2张图片

其隐藏层的输出值的计算过程为:首先将输入的上下文单词(context words)的向量叠加起来并取其平均值,接着与input hidden的权重矩阵相乘,作为最终的结果,公式如下:

h=1CWT(x1+x2++xC)=1C(vω1+vω2++vωC)T(17)(18) (17) h = 1 C W T ( x 1 + x 2 + ⋯ + x C ) (18) = 1 C ( v ω 1 + v ω 2 + ⋯ + v ω C ) T

其中 C C 为上下文单词的个数, ω1,...,ωC ω 1 , . . . , ω C 为上下文单词, vω v ω 为单词 ω ω 输入向量。损失函数为:

E=logp(ωO|ωI,1,...,ωI,C)=μj+logj=1Vexp(μj)=vωOTh+logj=1Vexp(vωjTh)(19)(20)(21) (19) E = − log ⁡ p ( ω O | ω I , 1 , . . . , ω I , C ) (20) = − μ j ∗ + log ⁡ ∑ j ′ = 1 V e x p ( μ j ′ ) (21) = − v ω O ′ T ⋅ h + log ⁡ ∑ j ′ = 1 V exp ⁡ ( v ω j ′ T ⋅ h )

同样,由hidden output的权重更新公式与one-word-context模型下的一模一样,即类似于公式(11),我们直接写在下面:

vωj(new)=vωj(old)ηejh   for  j=1,2,...,V(22) (22) v ω j ′ ( n e w ) = v ω j ′ ( o l d ) − η ⋅ e j ⋅ h       f o r     j = 1 , 2 , . . . , V

由input hidden 的权重矩阵更新公式与公式(16)类似,只不过现在我们需要对每一个上下文单词 ωI,c ω I , c 都执行如下更新公式:

vωI,c(new)=vωI,c(old)1CηEHT  for  c=1,2,...,C.(23) (23) v ω I , c ( n e w ) = v ω I , c ( o l d ) − 1 C ⋅ η ⋅ E H T     f o r     c = 1 , 2 , . . . , C .

其中 vωI,c v ω I , c 为上下文context中第c 个单词的输入向量; η η 为正学习速率; EH=Ehi E H = ∂ E ∂ h i 由公式(12)给出。


2 Skip-Gram Model


与CBOW模型正好相反,Skip-Gram模型是根据中心单词(target word)来预测其上上下文信息(context words)。如图3所示,为Skip-Gram模型的结构示意图。
《word2vec Parameter Learning Explained》论文学习笔记_第3张图片

我们仍然使用 vωI v ω I 来表示输入层上唯一的那个单词的输入向量,因此,我们对于隐藏层的输出值 h h 的计算公式与第一节公式(1)相同,表示如下:

h=WT(k,):=vωI(24) (24) h = W ( k , ∙ ) T := v ω I
公式(24)显示: h h 向量其实就是input->hidden权重矩阵 W W 的某一行结合输入单词 ωI ω I 的向量拷贝。在输出层,与CBOW模型的输出为单个多项式分布不同的是,SG模型在输出层输出了C个多项式分布。每个输出都使用相同的hidden->output矩阵计算:

p(ωc,j=ωO,c|ωI)=yc,j=exp(μc,j)Vj=1exp(μj)(25) (25) p ( ω c , j = ω O , c | ω I ) = y c , j = exp ⁡ ( μ c , j ) ∑ j ′ = 1 V exp ⁡ ( μ j ′ )

其中, ωc,j ω c , j 表示输出层的第c个panel的第j个单词(何为panel?就是输出层的表示每个上下文单词的神经元的组合,图中一种有C个context words,所以总共有C个panel); ωO,c ω O , c 实际上表示的是输出上下文单词(output context words)的第c个单词; ωI ω I 是唯一的输入单词; yc,j y c , j 为输出层的第c个panel上的第j个神经单元的概率输出值; μc,j μ c , j 表示的是输出层第c个panel的第j个神经元的输入值;由于输出层的所有panels共享同一权重矩阵 W W ′ ,因此:

μc,j=μj=vωjTh, for c=1,2,...,C(26) (26) μ c , j = μ j = v ω j ′ T ⋅ h ,   f o r   c = 1 , 2 , . . . , C
其中, vωj v ω j ′ 为词汇表第j个单词 ωj ω j 的输出向量;同样,它也是取自于hidden output权重矩阵 W W ′ 的一列。


SG模型参数更新公式的推导过程与one-word-context 模型的推导过程大体上一样。这里我们将损失函数变为:

E=logp(ωO,1,ωO,2,...,ωO,C|ωI)=logc=1Cexp(μc,jc)Vj=1exp(μj)=c=1Cμjc+Clogj=1Vexp(μj)(27)(28)(29) (27) E = − log ⁡ p ( ω O , 1 , ω O , 2 , . . . , ω O , C | ω I ) (28) = − log ⁡ ∏ c = 1 C exp ⁡ ( μ c , j c ∗ ) ∑ j ′ = 1 V exp ⁡ ( μ j ′ ) (29) = − ∑ c = 1 C μ j c ∗ + C ⋅ log ⁡ ∑ j ′ = 1 V exp ⁡ ( μ j ′ )

其中, jc j c ∗ 为第c个输出层输出的上下文单词在词汇表中的真实索引。
在得到损失函数 E E 之后,我们对输出层的每一个panel上的所有激活单元的输入值 μc,j μ c , j ,均求其关于 E E 的偏导数,得:

Eμc,j=yc,jtc,j:=ec,j(30) (30) ∂ E ∂ μ c , j = y c , j − t c , j := e c , j
其中 ec,j e c , j 为输出层神经元的预测误差,与公式(8)类似。为了简化符号,我们定义一个 V V 维的向量 EI={EI1,...,EIV} E I = { E I 1 , . . . , E I V } 作为所有上下文单词的预测误差之和, EIj E I j 用公式定义如下:

EIj=Cc=1ec,j(31) (31) E I j = ∑ c = 1 C e c , j

接下来,我们计算hidden->output权重矩阵 W W ′ 关于 E E 的偏导数为:

Eωij=Cc=1Eμc,jμc,jωij=EIjhi(32) (32) ∂ E ∂ ω i j ′ = ∑ c = 1 C ∂ E ∂ μ c , j ⋅ ∂ μ c , j ∂ ω i j ′ = E I j ⋅ h i

这样,我们就得到了hidden output权重矩阵 W W ′ 的参数更新公式为:

ωij(new)=ωij(old)ηEIjhi(33) (33) ω i j ′ ( n e w ) = ω i j ′ ( o l d ) − η ⋅ E I j ⋅ h i
或者

vωj(new)=vωj(old)ηEIjh   for j=1,2,...,V.(34) (34) v ω j ′ ( n e w ) = v ω j ′ ( o l d ) − η ⋅ E I j ⋅ h       f o r   j = 1 , 2 , . . . , V .

上述参数更新公式的直观概念理解与上文公式(11)无二,除了一点就是:输出层的预测误差的计算是基于多个上下文单词context words,而不是单个目标单词 target word;需注意的是对于每一个训练样本,我们都要利用该参数更新公式来更新hidden output权重矩阵 W W ′ 的每个元素。

同样,对于input hidden权重矩阵 W W 的参数更新公式的推导过程,除了考虑要将预测误差 ej e j 替换为 EIj E I j 外,其他也与上文公式(12)到公式(16)类似。这里我们直接给出更新公式:

vωI(new)=vωI(old)ηEHT(35) (35) v ω I ( n e w ) = v ω I ( o l d ) − η ⋅ E H T

其中, EH E H 是一个 N N 维向量,组成该向量的每一个元素可以用如下公式表示:
EHi=Vj=1EIjωij(36) (36) E H i = ∑ j = 1 V E I j ⋅ ω i j ′
公式(36)的直观理解与公式(16)类似,这里不作描述。


3 Optimizing Computational Efficiency


总结以上的模型介绍,我们发现所有模型的词汇表中的每个单词都存在两个向量表示形式:输入向量 vω v ω 与输出向量 vω v ω ′ .对于输入向量的参数学习成本并不高,但对于输出向量的学习成本代价是非常昂贵的。根据更新公式(22)和(23),我们可以发现,为了更新输出向量 vω v ω ′ ,对于每一个训练样例,我们必须迭代遍历词汇表中所有的单词 ωj ω j ,计算出它们的输入值 μj μ j 、概率预测值 yj y j (或者SG模型中的 yc,j y c , j ),预测误差 ej e j (或者SG模型的 EIj E I j )。最终使用预测误差更新它们的输出向量 vj v j ′ .
显然,对于每一个训练样例都要对所有单词计算上述各值,其成本是昂贵的。特别是对于大型的词汇表,这种计算方式是不切实际的。因此为了解决这个问题,直观的方式是限制必须要更新的训练样例的输出向量的数目。一种有效的实现方式就是:hierarchical softmax(分层softmax),另一种实现通过采样的方式解决,我们在下个章节来讨论。
这两种方法都是通过只优化输出向量更新的计算过程来实现的。在我们的公式推导过程中,我们关心的有三个值:(1) E E ,新的目标函数;(2) Evω ∂ E ∂ v ω ′ ,新的关于输出向量的更新公式;(3) Eh ∂ E ∂ h ,为了更新输入向量反向传播的预测误差的加权和。


3.1 Hierarchical Softmax


Hierarchical softmax 是一种有效的计算 softmax 的方式。该模型使用一棵二叉树来表示词汇表中的所有单词。所有的 V V 个单词都在二叉树的叶节点上。非叶子节点一共有 V1 V − 1 个。对于每个叶子节点,从根节点root到该叶子节点只有一条路径;这条路径用来评估用该叶子节点代表该叶子节点上单词的概率值。二叉树的结构如图4所示:
《word2vec Parameter Learning Explained》论文学习笔记_第4张图片
Figure 4: An example binary tree for the hierarchical softmax model.
其中白色的树节点代表的是词汇表中的单词,灰色节点为内部节点。图中高亮显示的是一条从根节点到 ω2 ω 2 的路径。该条路径的长度为 L(ω2)=4 L ( ω 2 ) = 4 n(ω,j) n ( ω , j ) 表示从根节点到单词 ω ω 的路径上的第j个节点。

在hierarchical softmax模型中,所有的词汇单词没有输出向量表示形式。不同的是,二叉树的每一个内部节点都有一个输出向量 vn(ω,j) v n ( ω , j ) ′ 。因此一个单词作为输出单词的概率计算公式定义如下:

p(ω=ωO)=L(ω)1j=1σ([[n(ω,j+1)=ch(n(ω,j))]]vn(w,j)Th)(37) (37) p ( ω = ω O ) = ∏ j = 1 L ( ω ) − 1 σ ( [ [ n ( ω , j + 1 ) = c h ( n ( ω , j ) ) ] ] ⋅ v n ( w , j ) ′ T h )

其中, ch(n) c h ( n ) 为节点 n n 的左孩子节点; vn(ω,j) v n ( ω , j ) ′ 是内部节点 n(ω,j) n ( ω , j ) 的向量表示(输出向量); h h 是隐藏层的输出值(在SG模型中, h=vωI h = v ω I ;而在CBOW模型中, h=1CCc=1vωc h = 1 C ∑ c = 1 C v ω c ); [[x]] [ [ x ] ] 是一种特殊的函数定义如下:

[[x]]={11,if x is trueotherwise(38) (38) [ [ x ] ] = { 1 if  x  is true − 1 , otherwise

接下来,我们通过一个直观地例子来理解公式(37)。如图4所示,假定我们需要计算单词 ω2 ω 2 作为输出单词的概率。我们将这个概率定义为从根节点开始随机游走到叶节点 ω2 ω 2 的概率。则在每一个内部节点(包括根节点),我们都需要确定其路径指向左孩子节点还是右孩子节点的概率。我们将经过内部节点的路径指向左孩子的概率定义为:

p(n,left)=σ(vnTh)(39) (39) p ( n , l e f t ) = σ ( v n ′ T ⋅ h )

我们可以看出,公式(39)的值取决于内部节点的向量表示 vn v n ′ 和隐藏层的输出值 h h ( h h 的值取决于输入单词的向量表示)。显然,内部节点的路径指向右孩子的概率则可以表示为:

p(n,right)=1σ(vnTh)=σ(vnTh)(40) (40) p ( n , r i g h t ) = 1 − σ ( v n ′ T ⋅ h ) = σ ( − v n ′ T ⋅ h )

顺着图4中从根节点到单词 ω2 ω 2 节点的路径,我们可以计算出 ω2 ω 2 作为输出单词的概率为:

p(ω2=ωO)=p(n(ω2,1),left)p(n(ω2,2),left)p(n(ω2,3),right)=σ(vn(ω2,1)Th)σ(vn(ω2,2)Th)σ(vn(ω2,3)Th)(41)(42) (41) p ( ω 2 = ω O ) = p ( n ( ω 2 , 1 ) , l e f t ) ⋅ p ( n ( ω 2 , 2 ) , l e f t ) ⋅ p ( n ( ω 2 , 3 ) , r i g h t ) (42) = σ ( v n ( ω 2 , 1 ) ′ T h ) ⋅ σ ( v n ( ω 2 , 2 ) ′ T h ) ⋅ σ ( − v n ( ω 2 , 3 ) ′ T h ) ⋅

不难证明
Vi=1p(ωi=ωO)=1(43) (43) ∑ i = 1 V p ( ω i = ω O ) = 1

现在我们开始推导内部节点的向量表示形式的参数更新公式。为了简化步骤,我们首先考虑单个上下文单词(one-word context)的模型。
为了简化公式,我们定义子公式的简化符号如下:

[[]]:=[[n(ω,j+1)=ch(n(ω,j))]](44) (44) [ [ ⋅ ] ] := [ [ n ( ω , j + 1 ) = c h ( n ( ω , j ) ) ] ]
vj:=vnω,j(45) (45) v j ′ := v n ω , j ′

则,给定一个训练样例,其误差函数我们可以定义如下:

E=logp(ω=ωO|ωI)=L(ω)1j=1logσ([[]]vjTh

你可能感兴趣的:(深度学习—自然语言处理)