分类目录:《深入理解深度学习》总目录
相关文章:
· 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=w∈C∑logp(w∣context(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(w∣context(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(w∣context(w))=j=1∏Iwp(djw∣xw;θj−1w)
其中,每一项都是一个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(djw∣xw;θj−1w)={σ(xwT;θj−1w),1−σ(xwT;θj−1w),djw=0djw=1=[σ(xwT;θj−1w)]1−djw⋅[1−σ(xwT;θj−1w)]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=w∈C∑logp(w∣context(w))=w∈C∑logj=1∏Iw{[σ(xwT;θj−1w)]1−djw⋅[1−σ(xwT;θj−1w)]djw}=w∈C∑j=1∑Iw{(1−djw)⋅log[σ(xwT;θj−1w)]+djw⋅log[1−σ(xwT;θj−1w)]}
我们可以把为词汇
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)=(1−djw)⋅log[σ(xwT;θj−1w)]+djw⋅log[1−σ(xwT;θj−1w)]
由于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
θj−1w的梯度:
∂
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
∂θj−1w∂L(w,j)=[1−djw−σ(xwT;θj−1w)]⋅xw
所以
θ
j
−
1
w
\theta_{j-1}^w
θj−1w在梯度下降法中的更新表达式为:
θ
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
θj−1w:=θj−1w+η[1−djw−σ(xwT;θj−1w)]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=1∑Iw[1−djw−σ(xwT;θj−1w)]θj−1w
不过
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=1∑Iw∂xw∂L(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)=w∈context(w)∏p(u∣w)
这里面的每个
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(u∣w)=j=1∏Iwp(djw∣v(w);θj−1w)
与连续词袋模型(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(djw∣v(w);θj−1w)=[σ(v(w)T;θj−1w)]1−djw⋅[1−σ(v(w)T;θj−1w)]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=w∈C∑logu∈C(w)∏j=1∏Iw{[σ(v(w)T;θj−1w)]1−djw⋅[1−σ(v(w)T;θj−1w)]djw}=w∈C∑u∈C(w)∑j=1∑Iw{(1−djw)⋅log[σ(v(w)T;θj−1w)]+djw⋅log[1−σ(v(w)T;θj−1w)]}
与连续词袋模型(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)=(1−djw)⋅log[σ(v(w)T;θj−1w)]+djw⋅log[1−σ(v(w)T;θj−1w)]
虽然上式对比连续词袋模型(CBOW)多了一个
u
u
u,但在给定训练实例时,
u
u
u也是固定的。所以上式其实依然只有两个变量
x
w
x_w
xw和
θ
j
−
1
w
\theta_{j-1}^w
θj−1w,对其求偏导数:
∂
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)
∂θj−1w∂L(w,u,j)=[1−djw−σ(v(w)T;θj−1w)]⋅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)
θj−1w:=θj−1w+η[1−djw−σ(v(w)T;θj−1w)]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)+ηu∈C(w)∑j=1∑Iw[1−djw−σ(v(w)T;θj−1w)]θj−1w