-
这个部分是论文的核心 ,到这个位置我们只讨论如何减少计算下面公式的复杂度:
p(yt│y<t,x)=Z1exp{wtT∅(yt−1,zt,ct)+bt}减少该公式的时间复杂度重点是减少归一化项
Z的复杂度:
Z=k,yk∈V∑exp{wkT∅(yt−1,zt,ct)+bk}
-
论文提出的方法属于model-specific approach,该方法使得我们训练模型的时间复杂度与词汇表的长度无关
-
神经机器翻译的训练的过程就是不断最大化正确目标词的概率或对数概率,这里我们选择对数概率:
p(yt│y<t,x)=∑k,yk∈Vexp{wkT∅(yt−1,zt,ct)+bk}exp{wtT∅(yt−1,zt,ct)+bt}令:
ε(yj)=wjT∅(yt−1,zt,ct)+bj,表示词汇表的第
i个词得到的非规范化概率分数,则:
p(yt│y<t,x)=∑k,yk∈Vexp(ε(yk))exp(ε(yj))对数概率为:
logp(yt│y<t,x)=ε(yj)−log(k,yk∈V∑exp{ε(yk)})
-
神经网络的优化是使用梯度下降法,那么我们就来计算一下对数概率的梯度:
∇logp(yt│y<t,x)=∇ε(yt)−∑k,yk∈Vexp(ε(yk)))1k,yk∈V∑exp(ε(yk))∇ε(yk)=∇ε(yt)−k,yk∈V∑p(yk│y<t,x)∇ε(yk)上式的第二项可以写成期望形式:
k,yk∈V∑p(yk│y<t,x)∇ε(yk)k,yk∈V∑P(yk)∇ε(yk)=EP[∇ε(y)]其中:
P为
p(y∣y<t,x)
-
最终上式可以写作:
∇logp(yt│y<t,x)=∇ε(yt)−EP[∇ε(y)]计算量主要落在
EP[∇ε(y)]上,所以我们主要优化这个地方。
-
通过重要性采样(mportance sampling) 来近视计算这个期望
EP[∇ε(y)]:
- 首先我们预先给定一个概率分布
Q
- 然后根据
Q对词汇表V进行采样得到词汇表V的一个子集
V′
- 然后用下面公式来近似计算
EP[∇ε(y)]:
EP[∇ε(y)]≈k,yk∈V′∑∑k′:yk′∈V′θk′θk∇ε(yk)其中:
θk=exp{ε(yk)−logQ(yk)}
-
重要性采样可以参考连接:蒙特卡洛积分和重要性采样
-
论文中上面
EP[∇ε(y)]近似公式是用了两次重要性采样才得到的论文中没有进行推导,这里我们简单推导一下:
-
首先我们预先给定一个概率分布
Q
-
然后根据
Q对词汇表V进行采样得到词汇表V的一个子集
V′
-
然后根据重要性采样公式我们得到:
EP[∇ε(y)]≈N1k,yk∈V′∑Q(yk)P(yk)∇ε(yk)其中
P(yk)=p(yk│y<t,x)=∑k,yk∈Vexp(ε(yk))exp(ε(yk)
-
然而我们发现依然需要计算
P(yk)依然需要计算归一化常量
Z,所以计算量没有下降。那么我们来分析一些分母这个 归一化因子:
Z=k,yk∈V∑exp(ε(yk))将其进行配方变形:
Z=Mk,yk∈V∑M1exp(ε(yk))
M为词汇表的长度,这样可以将
M1视为概率分布,这样
Z可以写为:
Z=MEI[exp(ε(yk))]其中
I=M1
-
对这个数学期望我们同样可以用
Q分布重要性采样来估计该期望:
EI[exp(ε(yk))]≈N1k,yk∈V′∑MQ(yk)1exp(ε(yk))则归一化因子
Z的估计量为:
Z=MEI[exp(ε(yk))]≈NMk,yk∈V′∑MQ(yk)1exp(ε(yk))=N1k,yk∈V′∑Q(yk)1exp(ε(yk))
-
将上面的推到合并,可以得到
EP[∇ε(y)]的估值:
EP[∇ε(y)]≈N1k,yk∈V′∑∑k,yk∈Vexp(ε(yk))exp(ε(yk)Q(yk)1∇ε(yk)≈N1k,yk∈V′∑N1∑i,yi∈V′Q(yi)1exp(ε(yi))exp(ε(yk)Q(yk)1∇ε(yk)=k,yk∈V′∑∑i,yi∈V′exp(log(Q(yi)))1exp(ε(yi))exp(ε(yk)exp(log(Q(yk)))1∇ε(yk)=k,yk∈V′∑∑i,yi∈V′exp(ε(yi)−log(Q(yi)))exp(ε(yk)−log(Q(yk)))∇ε(yk)令
θk=exp(ε(yk)−log(Q(yk)))则:
EP[∇ε(y)]≈k,yk∈V′∑∑i,yi∈V′θi)θk∇ε(yk)
-
到此我们估计
EP[∇ε(y)]只依赖采样集合
V′,这样个减少计算的时间复杂度了。
-
现在我们分析一下Sampling softmax的一些特性
- 使用这种近似方法:训练的每一步只需要更新正确目标词的
wj向量,和
V′中词对应的
wi向量。
- 这种方法虽然减少了训练的时间复杂度但并没有减少空间复杂度,因为单纯的使用此方法我们始终要将softmax层的权值矩阵
W∈R∣V∣×d(
∣V∣是词汇表的大小)。这样对于内存有限的GPU上这个内存问题就会比较突出。
- 为了解决内存不足问题,我们将训练语料库
C分词几个部分,并未每个部分建立词汇表
V′:
- 我们依次扫描语料库的每个目标句子,将目标词依次加入词汇表,当然词汇表没有重复的词,直到词汇表的大小达到上限
T,则停止扫描,形成一个语料库的子集
Ci和其对应的词汇表
Vi′
- 重复上面的过程,直到扫描完整个语料库,这样语料库被分成几个部分并形成个部分的词汇表。
- 这个过程相当与我们为每个语料库的子集
Ci,设置了一个采样分布
Qi,并且满足下面公式:
Qi(yk)={∣Vi′∣1,0,yt∈Vi′其他这相当于将概率等价的分给词汇表子集
Vi′中的每个单词,而对
Vi′以外的单词分布0概率。
-
整个过程可以简单的概述为(个人的理解):
- 第一步:我们定义softmax层的参数矩阵
W∈R(∣V∣×d)(
∣V∣是词汇表的大小),每个行代表一个词,与embedding向量有点像。
- 第二步:我们依次扫描语料库的每个目标句子,将目标词依次加入词汇表
Vi′中,当然词汇表没有重复的词,直到词汇表的大小达到上限
T,则停止扫描,形成一个语料库的子集
Ci和其对应的词汇表
Vi′
- 第三步:我们将
Vi′中词汇在矩阵
W∈R(∣V∣×d)中对应的向量提取出来,形成新矩阵
Wi′∈R(∣Vi′∣×d),
Wi′与
W是共享的,可以理解
Wi′是
W的一个视图。
- 第四步:然后我们使用:
Ci,
Vi′,
Wi′进行训练。这时候的训练使用的full softmax层:
p(yt│y<t,x)=∑k,yk∈Vi′exp{wkT∅(yt−1,zt,ct)+bk}exp{wtT∅(yt−1,zt,ct)+bt}其中
wtT使用的是
Wi′中的行向量。
- 第五步:重复上面第二步到第四步,直到语料库被扫描完,则完成一轮训练。
-
机器翻译中softmax层的训练分析
- 在机器翻译中输出层的softmax层主要的任务是将当前隐藏层状态向量
ht转化为词汇表词汇概率。通过将词汇表中第
i个词对应的权重向量
wi与
ht进行乘积再经过归一化得到当前输出第
i个词的概率。
- 经过训练后我们得到的是softmax的权重矩阵
W∈R∣V∣×d(
∣V∣是词汇表的长度,
d是隐藏层状态向量
ht的维度)。W每一行对应目标词汇表中的一个单词。
- 在full softmax中训练的每一步都是:将正确的目标词对应的权重向量
wi向
ht方向移动,使得KaTeX parse error: Expected group after '_' at position 2: w_̲与
ht内积更大,从而使得对应概率更大;并且将词汇表中的其他词对应的权重向量
wj向远离
ht方向移动使得,得
wj与
ht内积更小,从而对应的概率更小,间接的使得正确词对应的概率更大。
- 在论文中提出的sampling softmax中训练的每一步都是:也将正确的目标词对应的权重向量
wi向
ht方向移动,使得
wi与
ht内积更大,从而使得对应概率更大;并且将词汇表子集
V’中的其他词对应的权重向量
wj向远离
ht方向移动使得,得
wj与
ht内积更小,从而对应的概率更小,间接的使得正确词对应的概率更大。