深入理解深度学习——Word Embedding(五):基于哈夫曼树(Huffman Tree)的Hierarchical Softmax优化

分类目录:《深入理解深度学习》总目录
相关文章:
· Word Embedding(一):word2vec
· Word Embedding(二):连续词袋模型(CBOW, The Continuous Bag-of-Words Model)
· Word Embedding(三):Skip-Gram模型
· Word Embedding(四):Skip-Gram模型的数学原理
· Word Embedding(五):基于哈夫曼树(Huffman Tree)的Hierarchical Softmax优化
· Word Embedding(六):负采样(Negative Sampling)优化
· 机器学习中的数学——激活函数(七):Softmax函数
· 算法设计与分析——哈夫曼树/赫夫曼树(Huffman Tree)和哈夫曼编码/赫夫曼编码(Huffman Coding)


在文章《Skip-Gram模型的数学原理》中,我们需要更新两个矩阵 W W W W ’ W^’ W,但这两个矩阵涉及的词汇量较大(即 V V V较大),所以更新时需要消耗大量资源,尤其是更新矩阵 W ’ W^’ W。正如前面一直提到的,无论是CBOW模型还是Skip-Gram模型,每个训练样本(或者Mini Batch)从梯度更新时都需要对 W ’ W^’ W的所有 V × N V\times N V×N个元素进行更新,这个计算成本是巨大的。此外,在计算Softmax函数时,计算量也很大。为此,人们开始思考如何优化这些计算。

考虑到计算量大的部分都是在隐藏层到输出层阶段,尤其是 W ’ W^’ W的更新。因此word2vec使用了两种优化策略:Hierarchical Softmax和Negative Sampling。二者的出发点一致,即在每个训练样本中,不再完全计算或者更新 W ′ W^′ W矩阵,换句话说,两种策略中均不再显式使用 W ’ W^’ W这个矩阵。同时,考虑到上述训练和推理的复杂度高是因Softmax分母上的求和过程导致,因此上述的两种优化策略是对Softmax的优化,而不仅仅是对word2vec的优化。

通过优化,word2vec的训练速度大大提升,词向量的质量也几乎没有下降,这也是word2vec在NLP领域如此流行的原因。Hierarchical SoftMax并不是由word2vec首先提出的,而是由Yoshua Bengio在2005年最早提出来的专门用于加速计算神经语言模型中的Softmax的一种方式。下面主要介绍如何在word2vec中使用 Hierarchical Softmax优化。 Hierarchical Softmax的实质是基于哈夫曼树(一种二叉树)将计算量大的部分变为一种二分类问题。如下图所示,原来的模型在隐藏层之后通过 W ′ W^′ W连接输出层,经过Hierarchical Softmax优化后则去掉了 W ′ W^′ W,由隐藏层 h h h直接与下面的二叉树的根节点相连:
哈夫曼树
其中,白色的叶子节点表示词汇表中的所有词(这里有 V V V个),灰色节点表示非叶子节点,每一个叶子节点其实就是一个单词,且都对应唯一的一条从根节点出发的路径。图中用 n ( w , j ) n(w, j) n(w,j)表示从根节点到叶子节点 w w w的路径上的第 j j j个非叶子节点,并且每个非叶子节点都对应一个向量 ,其维度与 h h h相同。

为了后续的数学推导过程,我们依照上图重新定义一下各个量: p w p^w pw为从根节点到词汇 w w w叶子节点对应的路径,而 p 1 w p^w_1 p1w p 2 w p^w_2 p2w ⋯ \cdots p I w w p^w_{I^w} pIww表示 p w p^w pw中的各个节点,其中 I w I^w Iw代表了路径 p w p^w pw的节点总数。 d 1 w d^w_1 d1w d 2 w d^w_2 d2w ⋯ \cdots d I w w d^w_{I^w} dIww为词汇 w w w的编码,取值为0或1,其中 d j w d^w_j djw表示 p w p^w pw中第 j j j个节点对应的编码,而 θ 1 w \theta^w_1 θ1w θ 2 w \theta^w_2 θ2w ⋯ \cdots θ I w w \theta^w_{I^w} θIww表示路径 p w p^w pw中的参数向量。

连续词袋模型(CBOW)的Hierarchical Softmax优化

连续词袋模型(CBOW)是已知上下文,估算当前词语的语言模型。其学习目标是最大化对数似然函数:
L = ∑ w ∈ C log ⁡ p ( w ∣ context ( w ) ) L=\sum_{w\in C}\log p(w|\text{context}(w)) L=wClogp(wcontext(w))

其中, w w w表示语料库 C C C中任意一个词。对于连续词袋模型,输入层是上下文的词语的词向量,投影层对其求和,所谓求和,就是简单的向量加法,输出层则输出最可能的 w w w。由于语料库中词汇量是固定的 ∣ C ∣ |C| C个,所以上述过程其实可以看做一个多分类问题。即给定特征后从 ∣ C ∣ |C| C个分类中挑一个最可能的词语输出。

对于神经网络模型多分类,最朴素的做法是Softmax回归:
Softmax ( x ) = e x i ∑ i e x i \text{Softmax}(x)=\frac{e^{x_i}}{\sum_ie^{x_i}} Softmax(x)=iexiexi

而Softmax回归需要对语料库中每个词语都计算一遍输出概率并进行归一化,在超大词汇量的语料上效率是十分低下的。根据上图,非叶子节点相当于一个神经元(Logistic回归),二分类决策输出1或0,分别代表向下左转或向下右转,而每个叶子节点代表语料库中的一个词语,于是每个词语都可以被0和1唯一地编码,并且其编码序列对应一个事件序列,于是我们可以计算条件概率 p ( w ∣ context ( w ) ) p(w|\text{context}(w)) p(wcontext(w))

根据上述定义,我们可以写出基于Hierarchical Softmax优化的连续词袋模型(CBOW)的条件概率:
p ( w ∣ context ( w ) ) = ∏ j = 1 I w p ( d j w ∣ x w ; θ j − 1 w ) p(w|\text{context}(w))=\prod_{j=1}^{I^w}p(d^w_j|x_w;\theta_{j-1}^w) p(wcontext(w))=j=1Iwp(djwxw;θj1w)

其中,每一项都是一个Logistic回归:
p ( d j w ∣ x w ; θ j − 1 w ) = { σ ( x w T ; θ j − 1 w ) , d j w = 0 1 − σ ( x w T ; θ j − 1 w ) , d j w = 1 = [ σ ( x w T ; θ j − 1 w ) ] 1 − d j w ⋅ [ 1 − σ ( x w T ; θ j − 1 w ) ] d j w p(d^w_j|x_w;\theta_{j-1}^w)=\begin{cases} \sigma(x_w^T;\theta_{j-1}^w),& d^w_j=0\\ 1-\sigma(x_w^T;\theta_{j-1}^w),& d^w_j=1 \end{cases}=[\sigma(x_w^T;\theta_{j-1}^w)]^{1-d^w_j}\cdot[1-\sigma(x_w^T;\theta_{j-1}^w)]^{d^w_j} p(djwxw;θj1w)={σ(xwT;θj1w),1σ(xwT;θj1w),djw=0djw=1=[σ(xwT;θj1w)]1djw[1σ(xwT;θj1w)]djw

则我们的目标函数可以写为:
L = ∑ w ∈ C log ⁡ p ( w ∣ context ( w ) ) = ∑ w ∈ C log ⁡ ∏ j = 1 I w { [ σ ( x w T ; θ j − 1 w ) ] 1 − d j w ⋅ [ 1 − σ ( x w T ; θ j − 1 w ) ] d j w } = ∑ w ∈ C ∑ j = 1 I w { ( 1 − d j w ) ⋅ log ⁡ [ σ ( x w T ; θ j − 1 w ) ] + d j w ⋅ log ⁡ [ 1 − σ ( x w T ; θ j − 1 w ) ] } \begin{aligned} L&=\sum_{w\in C}\log p(w|\text{context}(w))\\ &=\sum_{w\in C}\log\prod_{j=1}^{I^w}\{[\sigma(x_w^T;\theta_{j-1}^w)]^{1-d^w_j}\cdot[1-\sigma(x_w^T;\theta_{j-1}^w)]^{d^w_j}\}\\ &=\sum_{w\in C}\sum_{j=1}^{I^w}\{(1-d^w_j)\cdot\log[\sigma(x_w^T;\theta_{j-1}^w)]^{}+d^w_j\cdot\log[1-\sigma(x_w^T;\theta_{j-1}^w)]\}\end{aligned} L=wClogp(wcontext(w))=wClogj=1Iw{[σ(xwT;θj1w)]1djw[1σ(xwT;θj1w)]djw}=wCj=1Iw{(1djw)log[σ(xwT;θj1w)]+djwlog[1σ(xwT;θj1w)]}

我们可以把为词汇 w w w求和过程中的第 j j j项记为:
L ( w , j ) = ( 1 − d j w ) ⋅ log ⁡ [ σ ( x w T ; θ j − 1 w ) ] + d j w ⋅ log ⁡ [ 1 − σ ( x w T ; θ j − 1 w ) ] L(w, j)=(1-d^w_j)\cdot\log[\sigma(x_w^T;\theta_{j-1}^w)]^{}+d^w_j\cdot\log[1-\sigma(x_w^T;\theta_{j-1}^w)] L(w,j)=(1djw)log[σ(xwT;θj1w)]+djwlog[1σ(xwT;θj1w)]

由于Sigmoid函数的导数:
σ ′ ( x ) = σ ( x ) [ 1 − σ ( x ) ] \sigma'(x)=\sigma(x)[1-\sigma(x)] σ(x)=σ(x)[1σ(x)]

我们可以得到 L ( w , j ) L(w, j) L(w,j)关于 θ j − 1 w \theta_{j-1}^w θj1w的梯度:
∂ L ( w , j ) ∂ θ j − 1 w = [ 1 − d j w − σ ( x w T ; θ j − 1 w ) ] ⋅ x w \frac{\partial L(w, j)}{\partial \theta_{j-1}^w}=[1-d^w_j-\sigma(x_w^T;\theta_{j-1}^w)]\cdot x_w θj1wL(w,j)=[1djwσ(xwT;θj1w)]xw

所以 θ j − 1 w \theta_{j-1}^w θj1w在梯度下降法中的更新表达式为:
θ j − 1 w : = θ j − 1 w + η [ 1 − d j w − σ ( x w T ; θ j − 1 w ) ] x w \theta_{j-1}^w:=\theta_{j-1}^w+\eta[1-d^w_j-\sigma(x_w^T;\theta_{j-1}^w)]x_w θj1w:=θj1w+η[1djwσ(xwT;θj1w)]xw

其中 η \eta η为学习率。同理 x w x_w xw的更新表达式为:
x w : = x w + η ∑ j = 1 I w [ 1 − d j w − σ ( x w T ; θ j − 1 w ) ] θ j − 1 w x_w:=x_w+\eta\sum_{j=1}^{I^w}[1-d^w_j-\sigma(x_w^T;\theta_{j-1}^w)]\theta_{j-1}^w xw:=xw+ηj=1Iw[1djwσ(xwT;θj1w)]θj1w

不过 x w x_w xw是上下文的词向量的和,不是上下文单个词的词向量,word2vec采取的是直接将 x w x_w xw的更新量应用到每个单词的词向量上去:
v ( w ~ ) : = v ( w ~ ) + η ∑ j = 1 I w ∂ L ( w , j ) ∂ x w , w ~ ∈ context ( w ) v(\tilde{w}):=v(\tilde{w})+\eta\sum_{j=1}^{I^w}\frac{\partial L(w, j)}{\partial x_w},\qquad \tilde{w}\in \text{context}(w) v(w~):=v(w~)+ηj=1IwxwL(w,j),w~context(w)

Skip-Gram的Hierarchical Softmax优化

Skip-Gram与 连续词袋模型(CBOW)类似,这两个模型的区别在于:输入层不再是多个词向量,而是一个词向量,输出层同理。所以我们引入一个新的记号 u u u用来表示 w w w上下文中的一个词语,这概率可以写为:
p ( context ( w ) ∣ w ) = ∏ w ∈ context ( w ) p ( u ∣ w ) p(\text{context}(w)|w)=\prod_{w\in\text{context}(w)}p(u|w) p(context(w)w)=wcontext(w)p(uw)

这里面的每个 u u u都是无序的,或者说说相互独立的。则在Hierarchical Softmax思想下,每个 u u u都可以编码为一条路径:
p ( u ∣ w ) = ∏ j = 1 I w p ( d j w ∣ v ( w ) ; θ j − 1 w ) p(u|w)=\prod_{j=1}^{I^w}p(d^w_j|v(w);\theta_{j-1}^w) p(uw)=j=1Iwp(djwv(w);θj1w)

与连续词袋模型(CBOW)类似:
p ( d j w ∣ v ( w ) ; θ j − 1 w ) = [ σ ( v ( w ) T ; θ j − 1 w ) ] 1 − d j w ⋅ [ 1 − σ ( v ( w ) T ; θ j − 1 w ) ] d j w p(d^w_j|v(w);\theta_{j-1}^w)=[\sigma(v(w)^T;\theta_{j-1}^w)]^{1-d^w_j}\cdot[1-\sigma(v(w)^T;\theta_{j-1}^w)]^{d^w_j} p(djwv(w);θj1w)=[σ(v(w)T;θj1w)]1djw[1σ(v(w)T;θj1w)]djw

所以目标函数为,其中 C ( x ) \text{C}(x) C(x)表示 context ( x ) \text{context}(x) context(x)
L = ∑ w ∈ C log ⁡ ∏ u ∈ C ( w ) ∏ j = 1 I w { [ σ ( v ( w ) T ; θ j − 1 w ) ] 1 − d j w ⋅ [ 1 − σ ( v ( w ) T ; θ j − 1 w ) ] d j w } = ∑ w ∈ C ∑ u ∈ C ( w ) ∑ j = 1 I w { ( 1 − d j w ) ⋅ log ⁡ [ σ ( v ( w ) T ; θ j − 1 w ) ] + d j w ⋅ log ⁡ [ 1 − σ ( v ( w ) T ; θ j − 1 w ) ] } \begin{aligned} L&=\sum_{w\in C}\log\prod_{u\in\text{C}(w)}\prod_{j=1}^{I^w}\{[\sigma(v(w)^T;\theta_{j-1}^w)]^{1-d^w_j}\cdot[1-\sigma(v(w)^T;\theta_{j-1}^w)]^{d^w_j}\}\\ &=\sum_{w\in C}\sum_{u\in\text{C}(w)}\sum_{j=1}^{I^w}\{(1-d^w_j)\cdot\log[\sigma(v(w)^T;\theta_{j-1}^w)]^{}+d^w_j\cdot\log[1-\sigma(v(w)^T;\theta_{j-1}^w)]\}\end{aligned} L=wCloguC(w)j=1Iw{[σ(v(w)T;θj1w)]1djw[1σ(v(w)T;θj1w)]djw}=wCuC(w)j=1Iw{(1djw)log[σ(v(w)T;θj1w)]+djwlog[1σ(v(w)T;θj1w)]}

与连续词袋模型(CBOW)类似,我们可以将每一项简记为:
L ( w , u , j ) = ( 1 − d j w ) ⋅ log ⁡ [ σ ( v ( w ) T ; θ j − 1 w ) ] + d j w ⋅ log ⁡ [ 1 − σ ( v ( w ) T ; θ j − 1 w ) ] L(w,u,j)=(1-d^w_j)\cdot\log[\sigma(v(w)^T;\theta_{j-1}^w)]^{}+d^w_j\cdot\log[1-\sigma(v(w)^T;\theta_{j-1}^w)] L(w,u,j)=(1djw)log[σ(v(w)T;θj1w)]+djwlog[1σ(v(w)T;θj1w)]

虽然上式对比连续词袋模型(CBOW)多了一个 u u u,但在给定训练实例时, u u u也是固定的。所以上式其实依然只有两个变量 x w x_w xw θ j − 1 w \theta_{j-1}^w θj1w,对其求偏导数:
∂ L ( w , u , j ) ∂ θ j − 1 w = [ 1 − d j w − σ ( v ( w ) T ; θ j − 1 w ) ] ⋅ v ( w ) \frac{\partial L(w, u, j)}{\partial \theta_{j-1}^w}=[1-d^w_j-\sigma(v(w)^T;\theta_{j-1}^w)]\cdot v(w) θj1wL(w,u,j)=[1djwσ(v(w)T;θj1w)]v(w)

所以我们可以得到Skip-Gram的更新表达式:
θ j − 1 w : = θ j − 1 w + η [ 1 − d j w − σ ( v ( w ) T ; θ j − 1 w ) ] v ( w ) \theta_{j-1}^w:=\theta_{j-1}^w+\eta[1-d^w_j-\sigma(v(w)^T;\theta_{j-1}^w)]v(w) θj1w:=θj1w+η[1djwσ(v(w)T;θj1w)]v(w)

同理 x w x_w xw的更新表达式为:
v ( w ) : = v ( w ) + η ∑ u ∈ C ( w ) ∑ j = 1 I w [ 1 − d j w − σ ( v ( w ) T ; θ j − 1 w ) ] θ j − 1 w v(w):=v(w)+\eta\sum_{u\in\text{C}(w)}\sum_{j=1}^{I^w}[1-d^w_j-\sigma(v(w)^T;\theta_{j-1}^w)]\theta_{j-1}^w v(w):=v(w)+ηuC(w)j=1Iw[1djwσ(v(w)T;θj1w)]θj1w

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

von Neumann

您的赞赏是我创作最大的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值