文章目录
神经翻译笔记3扩展e第1部分. Word2Vec原理及若干关于词向量的扩展知识
本文共分为三节,由若干文章拼接而成。第一节具体推导word2vec参数的更新规则,第二节介绍在词表比较大时对softmax做近似的方法,第三部分介绍如何生成好的词向量
Word2vec的参数学习
本节内容完全来自于[Rong2014]
连续词袋模型(CBOW)
上下文仅有一个单词的情况
上下文只有一个单词时,网络做的事情其实类似于二元语法模型。假设词表大小为 V V V,隐藏层大小为 N N N,输入层到隐藏层及隐藏层到输出层都是全连接,输入为独热编码向量,那么网络的示意图如下图所示
从图中可知,输入层和隐藏层之间的权重可以使用 V × N V \times N V×N的矩阵 W \boldsymbol{W} W表示。假设输入的语境单词为词表中的第 k k k个单词,则输入向量 x \boldsymbol{x} x满足 x k = 1 x_k = 1 xk=1且 ∀ k ′ ̸ = k → x k ′ = 0 \forall k' \not= k \rightarrow x_{k'} = 0 ∀k′̸=k→xk′=0,因此有
h = W T x = w ( k , ⋅ ) T : = v w I T \boldsymbol{h} = \boldsymbol{W}^\mathsf{T}\boldsymbol{x} = \boldsymbol{w}_{(k, \cdot)}^\mathsf{T} := \boldsymbol{v}_{w_I}^\mathsf{T} h=WTx=w(k,⋅)T:=vwIT
即 W \boldsymbol{W} W的第k行行向量实际上就是词表中第k个单词词向量的转置,记输入单词词向量为 v w I \boldsymbol{v}_{w_I} vwI
假设最后得到的得分向量为 u \boldsymbol{u} u,则从隐藏层到输出层有
(1) u = W ′ T h \boldsymbol{u} = \boldsymbol{W}'^\mathsf{T}\boldsymbol{h} \tag{1} u=W′Th(1)
其中 u \boldsymbol{u} u的第 j j j行元素 u j u_j uj为
(2) u j = w ( ⋅ , j ) ′ T h u_j = \boldsymbol{w}_{(\cdot, j)}'^\mathsf{T}\boldsymbol{h} \tag{2} uj=w(⋅,j)′Th(2)
这里 w ( ⋅ , j ) ′ \boldsymbol{w}_{(\cdot, j)}' w(⋅,j)′是 W ′ \boldsymbol{W}' W′的第 j j j列。记 w ( ⋅ , j ) ′ \boldsymbol{w}_{(\cdot, j)}' w(⋅,j)′为 v w O ′ \boldsymbol{v}'_{w_O} vwO′
得到 u \boldsymbol{u} u以后,可以使用softmax来得到单词的后验分布:给定上文单词为 w I w_I wI的情况下,出现单词 w O w_O wO的概率为
(3) P ( w O ∣ w I ) = y j = exp ( u j ) ∑ j ′ = 1 V exp ( u j ′ ) P(w_O|w_I) = y_j = \frac{\exp(u_j)}{\sum_{j'=1}^V \exp(u_{j'})} \tag{3} P(wO∣wI)=yj=∑j′=1Vexp(uj′)exp(uj)(3)
将式(1)和(2)代入(3)可得
(4) P ( w O ∣ w I ) = exp ( v w O ′ T v w I ) ∑ j ′ = 1 V exp ( v w j ′ ′ T v w I ) P(w_O|w_I) = \frac{\exp\left(\boldsymbol{v}_{w_O}'^\mathsf{T}\boldsymbol{v}_{w_I}\right)}{\sum_{j'=1}^V \exp\left(\boldsymbol{v}_{w_j'}'^\mathsf{T}\boldsymbol{v}_{w_I}\right)} \tag{4} P(wO∣wI)=∑j′=1Vexp(vwj′′TvwI)exp(vwO′TvwI)(4)
可见对同一个单词 w w w来说,会有两个嵌入表示 v w \boldsymbol{v}_{w} vw和 v w ′ \boldsymbol{v}_{w}' vw′,前者是 W \boldsymbol{W} W的第 i i i行行向量,后者是 W ′ \boldsymbol{W}' W′的第 i i i列列向量。在后续的分析中,称前者为单词 w w w的输入向量,后者为单词 w w w的输出向量
隐藏层到输出层权重的更新
假设给定单词 w k w_k wk,期望输出是单词 w j ∗ w_{j^\ast} wj∗,那么模型优化的目标是要最大化正确单词对应的概率 y j ∗ y_{j^\ast} yj∗,有
arg max W ′ p ( w O ∣ w I ) = arg max W ′ y j ∗ = arg max W ′ log y j ∗ = arg max W ′ ( u j ∗ − log ∑ j ′ = 1 V exp ( u j ′ ) ) \begin{aligned} \mathop{ {\rm \arg}\max}_{\boldsymbol{W}'} p(w_O|w_I) &= \mathop{ {\rm \arg}\max}_{\boldsymbol{W}'} y_{j^\ast} \\ &= \mathop{ {\rm \arg}\max}_{\boldsymbol{W}'} \log y_{j^\ast} \\ &= \mathop{ {\rm \arg}\max}_{\boldsymbol{W}'} \left(u_{j^\ast} - \log \sum_{j'=1}^V \exp(u_{j'})\right) \end{aligned} argmaxW′p(wO∣wI)=argmaxW′yj∗=argmaxW′logyj∗=argmaxW′⎝⎛uj∗−logj′=1∑Vexp(uj′)⎠⎞
记 E = − log p ( w O ∣ w I ) E = -\log p(w_O|w_I) E=−logp(wO∣wI) 为学习的目标函数,那么学习的目的就是最小化 E E E。可知
∂ E ∂ u j = y j − t j : = e j \frac{\partial E}{\partial u_j} = y_j - t_j := e_j ∂uj∂E=yj−tj:=ej
其中 t j = 1 ( j = j ∗ ) t_j = \mathbb{1}(j = j^\ast) tj=1(j=j∗)。或者可以写为
∂ E ∂ u j = { y j − 1 j = j ∗ y j e l s e w h e r e \frac{\partial E}{\partial u_j} = \begin{cases}y_j - 1 & j = j^\ast \\ y_j & {\rm elsewhere}\end{cases} ∂uj∂E={
yj−1yjj=j∗elsewhere
接着可以求出 E E E对 W ′ \boldsymbol{W}' W′中每个元素 w i j ′ w_{ij}' wij′的偏导数
∂ E ∂ w i j ′ = ∂ E ∂ u j ⋅ ∂ u j ∂ w i j ′ = e j ⋅ h i \frac{\partial E}{\partial w_{ij}'} = \frac{\partial E}{\partial u_j}\cdot \frac{\partial u_j}{\partial w_{ij}'} = e_j \cdot h_i ∂wij′∂E=∂uj∂E⋅∂wij′∂uj=ej⋅hi
因此梯度下降的更新方法为
w i j ′ ( n e w ) = w i j ′ ( o l d ) − η ⋅ e j ⋅ h i w_{ij}'^{(\rm new)} = w_{ij}'^{(\rm old)} - \eta \cdot e_j\cdot h_i wij′(new)=wij′(old)−η⋅ej⋅hi
向量化的形式为
v w j ′ ( n e w ) = v w j ′ ( o l d ) − η ⋅ e j ⋅ h \boldsymbol{v}_{w_j}'^{(\rm new)} = \boldsymbol{v}_{w_j}'^{(\rm old)} - \eta \cdot e_j \cdot \boldsymbol{h} vwj′(new)=vwj′(old)−η⋅ej⋅h
这意味着,当 y j > t j y_j > t_j yj>tj时, e j e_j ej为正值, v w j ′ \boldsymbol{v}_{w_j}' vwj′会变小。由于 t j t_j tj只能为0或1,因此这说明给定输入单词为 w I w_I wI时,对不是期望单词序号 j ∗ j^\ast j∗的 j j j, w j w_j wj的输出向量会变小,反之相反
输入层到隐藏层权重的更新
首先计算目标函数 E E E对隐藏层每个输出元素 h i h_i hi的偏导数。由于隐藏层到输出层是全连接的,因此 h i h_i hi对每个 u j u_j uj都有贡献,使用全微分公式有
∂ E ∂ h i = ∑ j = 1 V ∂ E ∂ u j ⋅ ∂ u j ∂ h i = ∑ j = 1 V e j ⋅ w i j ′ : = e i ′ \frac{\partial E}{\partial h_i} = \sum_{j=1}^V \frac{\partial E}{\partial u_j} \cdot \frac{\partial u_j}{\partial h_i} = \sum_{j=1}^V e_j \cdot w_{ij}' := e'_i ∂hi∂E=j=1∑V∂uj∂E⋅∂hi∂uj=j=1∑Vej⋅wij′:=ei′
其中 e i ′ e'_i ei′是 N N N维向量 e ′ \boldsymbol{e}' e′的第 i i i个元素。由于输入层到隐藏层也是一个全连接,因此有
h i = ∑ k = 1 V x k ⋅ w k i