目录
1. 回顾GRU和LSTM
2. 机器翻译的评估方法
3. 解决NMT中大词表问题的方法
\newline
\newline
\newline
1. 回顾GRU和LSTM的门单元
由前面几几节课我们知道了梯度消失的原因,是由于小于1的梯度连乘导致的梯度传播最终无限接近于0,而使得参数不更新,出现梯度消失。下面我们就详细介绍一下GRU的框架,以及他是如何缓解梯度消失现象的。
GRU的流程图如下:
GRU改进主要的思想是使RNN单元更复杂,加入了‘门’的概念,这样做:
(1)使RNN单元能够保留住长距离依赖的记忆,类似于建立残差网络,作用效果如下:(更新门)
(2)基于输入,RNN单元能够使一些错误信息或者无用的信息消失,作用效果如下:(重置门)
标准的RNN不经过任何门,直接通过此时输入
x
t
x_t
xt和上一时刻的隐状态
h
t
−
1
h_{t-1}
ht−1计算,如下式:
h
t
=
ϕ
(
h
t
−
1
,
x
t
)
=
f
(
W
h
h
h
t
−
1
,
W
h
x
x
t
)
h_t=\phi(h_{t-1},x_t)=f(W^{hh}h_{t-1},W^{hx}x_t)
ht=ϕ(ht−1,xt)=f(Whhht−1,Whxxt)
但是此时GRU复杂化了这个过程,完成了上面的两个改进思想;
GRU基于此时输入
x
t
x_t
xt和上一时刻的隐状态
h
t
−
1
h_{t-1}
ht−1计算出了自己设计的更新门(update gate)和重置门(reset gate);
更新门(update gate)的计算公式:
z
t
=
σ
(
W
(
z
)
h
t
−
1
+
U
(
z
)
x
t
)
z_t=\sigma(W^{(z)}h_{t-1}+U^{(z)}x_t)
zt=σ(W(z)ht−1+U(z)xt)
重置门(reset gate)的计算公式:
r
t
=
σ
(
W
(
r
)
h
t
−
1
+
U
(
r
)
x
t
)
r_t=\sigma(W^{(r)}h_{t-1}+U^{(r)}x_t)
rt=σ(W(r)ht−1+U(r)xt)
SIGMOD函数会使更新门和重置门会计算出两个值在0-1之间的权重向量
下面我们就来看看这两个门是如何发挥作用的:
-
重置门计算出当前时刻输入的新记忆:
h t ^ = t a n h ( W x t + r t ⨀ U h t − 1 ) \hat{h_t}=tanh(Wx_{t}+r_t \bigodot Uh_{t-1}) ht^=tanh(Wxt+rt⨀Uht−1)
其中 ⨀ \bigodot ⨀是哈达玛集(对应位置元素相乘);
如果重置门的 r t r_t rt权重值为0,则计算出来的 h ^ t \hat h_t h^t忽略前面时刻传入的信息,只保留输入的 x t x_t xt的信息。 -
更新门帮助计算出当前时刻形成的最终的记忆(上一时刻传过来的记忆+当前时刻输入的记忆):
h t = z t ⨀ h t − 1 + ( 1 − z t ) ⨀ h ^ t h_t=z_t\bigodot h_{t-1} + (1-z_t)\bigodot \hat h_t ht=zt⨀ht−1+(1−zt)⨀h^t
更新门的 z t z_t zt的权重值越接近1,则说明最终记忆更依赖于前面时刻传入的记忆;反之,则说明最终记忆更依赖于当前时刻传入的新记忆。
下面我们再通过寄存器的形式来理解一下GRU对一般RNN的改进:
一般的RNN会不管需不需要,全部将寄存器中的信息全部读取,然后更新整个寄存器中的信息;
而GRU会根据重置门决定读取寄存器(
h
t
−
1
h_{t-1}
ht−1)中的哪些信息,更新门会决定更新寄存器中的哪些信息。这样读取寄存器中部分信息,更新寄存器中部分信息的做法,能够保护寄存器中其他未更新部分的信息,使长期依赖的信息能够传递的更远而不消失。
下面对比一下GRU(2014年)和LSTM(1997年):
其实前面第九节课已经讲过LSTM和GRU的具体细节,此处就不再赘述。只讲一下这节课提到的一些比较有意思的问题。
其实GRU就是LSTM的一种简化形式或者说是特殊形式,GRU由于参数少一些,可能在运算时间和数据量上会占优势,如果数据和时间充足,LSTM可能表现效果会更好一点。
课程中学生问到为什么LSTM中的 h t h_t ht最后采用了tanh非线性激活函数,而GRU的 h t h_t ht没有采用,老师的回答是可能最后加一个非线性函数能够更好的拟合结果(PS:佩服国外学生问各种问题的水平和积极性)
还有就是LSTM有一个输出门,对输出进行了一下过滤,而GRU没有。对于LSTM来说,是为了让此时输出的隐状态和此刻的输入相关,而不需要输出所有的记忆。至于GRU没有这样做,我也不是很理解why。
下面解释一下为什么GRU能够缓解梯度消失?
课程中讲到,由于我们的GRU中隐状态的计算是
h
t
=
z
t
⨀
h
t
−
1
+
(
1
−
z
t
)
⨀
h
^
t
h_t=z_t\bigodot h_{t-1} + (1-z_t)\bigodot \hat h_t
ht=zt⨀ht−1+(1−zt)⨀h^t,此时
h
t
h_t
ht是由加法构成的,不再是RNN中的乘积,所以GRU中不再会出现梯度的连乘,因此缓解了梯度消失现象。LSTM同理。
对于此部分,知乎上有更详细的解答。
训练LSTM或者GRU(带门的RNN)的技巧:
-
将权值矩阵初始化为正交矩阵(有了使用线性代数的机会);
-
将其他矩阵初始化为较小的值;
-
将遗忘门的偏置初始化为1:默认为不遗忘;
-
使用自适应的学习率算法:Adam、AdaDelta,效果会比SGD好;
-
裁剪梯度的规则制定;
-
垂直应用Dropout(比较常见)而不是水平Dropout(罕见,但是也有人在研究),因为水平dorupout可能会使神经元都失效,每一个维度都被dropout,就没有了信息流;
-
要有耐心,因为他们的训练时间通常都会比较长。
模型的集成使提升实验效果的tric
通过下图我们可以看到,训练多个模型,然后采用投票原则,得到最后的效果会比使用单一模型要好。
2. 机器翻译的评估方法
其实总的来说,机器翻译效果的评估方法分为三种:人工评判、任务评判、自动评判。
(1)人工评判
人工评判的方法就是由人去评判翻译效果的好坏;
缺点:主观因素太强,而且费事费力,因此pass。
(2)任务评判
任务判断就是,将翻译结果作为某一个任务的底层,比如跨语言的问答系统,根据任务的完成效果来评判翻译模型的效果。
缺点:任务不同,效果也不同。如果上层任务是跨语言搜索,即使翻译的效果不好,语言不通顺,只要有主要的关键词,就可以很好的完成搜索任务,因此pass
(3)自动评判
自动评判目前比较流行的有BLEU值。这是一种直接又廉价的评价方式。
要了解BLEU值,就要了解下面几点:
- N-gram
N-gram是一种统计语言模型,该模型可以将一句话表示n个连续的单词序列,利用上下文中相邻词间的搭配信息,计算出句子的概率,从而判断一句话是否通顺。
以2-gram为例,切割句子“The cat sat on the mat.”后的形式为下图中的样子
N-gram就是将机器翻译文本和参考文本(ground-truth)切割的一种方式,然后统计切块的相同计数,从而体现翻译文本和参考文本的相似度,这种方式不是死板的严格比较对应位置的文本,所以能够很好地体现一句话不同形式的表达的相似度(比如主动句和被动句,他们切割后还是很相似的,因为N-gram即尊重了语序信息,又忽略了部分语序信息) - 惩罚因子
有了上面的N-gram,为了解决短文本问题,又提出了惩罚因子,下面通过一个例子来看看什么是短文本问题:
如果出现这种短句子,你会发现计算N-gram的精度会得很高分,很显然这次的得分为1,但实际上它的得分应该是比较低的。针对翻译译文长度比参考译文要短的情况,就需要一个惩罚的机制去控制。
这里的c是机器译文的词数,r是参考译文的词数。
-BLEU公式
经过不断的改进,BLEU的计算公式诞生了:
一般N-gram中的N最多取4,因为N越大,整体的精度就会下降的很快。
再回头看看惩罚因子公式:
在机器翻译的词数大于参考译文的词数的时候,惩罚因子就是1(根据最后的公式我们知道是想让BLEU值最大化,所以惩罚值为1,相当于没惩罚);
在参考翻译的词数大于机器译文的词数的时候,惩罚因子小于1,这时候才是对最终的结果做出了惩罚。
我自己在公司实习的时候用过BLEU这个工具,当时是为了将中英文匹配,判断哪句中文对应哪句英文,我们就通过翻译引擎翻译中文,然后计算翻译结果和英文之间计算BLEU值,通过下面公式来判断是否为匹配文本:
score=BLEU(A,B)+BLEU(B,A)- | BLEU(A,B)-BLEU(B, A))|
需要说明的一点是,bleu值不遵循交换律,所以BLEU(A,B)和BLEU(B,A)不一定相等。
3. 解决NMT中大词表问题的方法
由上图和以前学习过的内容我们可以知道,在机器翻译的解码过程中,我们可以知道,最终词汇的选择我们需要通过一个词汇表|V|大小的softmax来选择,这个过程是花销特别大的。
- 刚开始人们通过直接减小词汇表来解决这个问题,但是最终翻译结果会由于词汇表的减小而出现大量未知词:
- 后来人们通过改进softmax来减少计算量:
(1)H-softmax(层次softmax),其实就是把查找过程转化成了一个二叉树的查找,将时间复杂度降低为了log级别。
(2)噪音对比估计(转化成二分类问题,没仔细看)
这两种方法都不能有效的利用GPU,所以pass - 最终人们根据训练集中的相似词汇,将训练集划分成几个子集(由于待翻译的词汇相似,那他们的目标语言词汇也就可能相似,目标语言的词汇表就会比较小)。
然后在测试的时候,先将目标语言中常使用的K个单词加入备选词表,再加上K’个候选的单词,两者构成候选列表;基于此选出翻译。一般而言,Kʹ = 10 or 20, K = 15k, 30k, or 50k.
总结:本节课更加深入的讲解了GRU中门的工作原理和机器翻译的评价标准,我觉得最主要的还是本节课讲了很多实际工程中遇到问题的解决方法。给教授点个赞,给学生的提问水平点个赞(PS:把教授都问懵了,哈哈)