Seq2Seq,attention机制的一些问题及解决方案

概述

在生成模型中,rnn容易遗忘早期的信息,以及无法顾及历史输出等context信息,所以常见的方法是在time step每次输入context vector。

  • encoder decoder框架
  • Attention及一些应用
  • Attention机制在seq2seq的很多问题。

 

1. PixelRNN

考虑空间关系的RNN,它的直觉如左图,它不仅考虑序列关系,还考虑像素的的空间关系,它的模型,看起来是空间版的LSTM,感觉会很难实现。

 

 Seq2Seq,attention机制的一些问题及解决方案

2. Conditional Sequence Generation

因为LSTM短期记忆性,实际上我们想要模型更好考虑背景知识。以下两个例子。

2.1 在每次time step考虑Context

Image Caption Generation

生成文字的时候,我们想让它不要忘记图片的内容。用cnn向量化图片,不断输入RNN的每个time step,这招很管用。

Seq2Seq,attention机制的一些问题及解决方案 

 

Machine translation

右边是一个英文的generator,左边确是中文,同样使用RNN向量化。

 

Seq2Seq,attention机制的一些问题及解决方案 

像这个的架构,就是大名鼎鼎的Encoder-Decoder架构了。

Chat bot

想让机器知道对话的记录,作为背景知识。如下图,它是把每次的对话,每次都分布向量化,再接入LSTM向量化,最后输入decoder。

 

 Seq2Seq,attention机制的一些问题及解决方案

2.2 Dynamic Conditional Generation

attention是上述思想的进阶版,它可以动态决定什么时候要那几个输出。例如再machine translation中,我翻译hi可能只要看“你好”二字。而不需要看“小明”。

Attention base maxhine translation

Seq2Seq,attention机制的一些问题及解决方案

 

上述非常清楚了,那输出h生成权重序列α,得到加权向量c。其中h是encoder rnn hidden layer的output,而z是z是decoder的rnn hidden layer的output。——关键点,每个time step的attention值,都是由所有的h,和当前的z^i计算得来。

2.1.1 Attention可用于可视化

 

 Seq2Seq,attention机制的一些问题及解决方案

2.1.2 Memory Network

Memoryz指的是,network利用lstm attention进行很多的信息抽取,就像给模型以长期记忆一样。

这是一个自动回答问题的text,它是利用query去选取document中相关的部分(计算attention match),然后从文档中提取信息进行回答。这种memory network有更加复杂的版本,例如这个hopping——反复多次进行这样的思考过程,最终得到答案。

 

 Seq2Seq,attention机制的一些问题及解决方案

2.2.3 Neural Turing Machine ?

没听懂……大概就是memory network的进阶版,可以不断更新memory。

3. Tips of Attention

3.1 Attention Regularization

Attention训练的时候会出现一些奇怪的情况,例如,每个time step,attention值都集中在某个word/frame上,如下图,step 2和4都集中在frame 2中,这样就会生成奇怪的句子“x a women drying a women”之类。

所以我们会希望每一个component上的attention量差不多,直观上,我们希望模型应该把attention至少放在每一张图片上,于是我们设定一个阈值,作为每个component上的正则项。

Seq2Seq,attention机制的一些问题及解决方案

 

 

3.2 训练测试标签不匹配——Scheduled Sampling

这是seq2seq模型中的一个问题,大致就是训练的时候,按道理来说,使用label的标签输入每一步time step比较好,但是这会出现问题——test中并没有label,如果再test的时候,拿上一步的test结果输入这一步time step,那么performance很一般。

图中,上半部分是train,下半部分是test。用一句话来总结就是,在RNN based的模型中,每一步的预测值输入模型会对结果产生较大的影响。原因如图左半部分,这种叫做exposure bias

 

如下图:

 

 Seq2Seq,attention机制的一些问题及解决方案

3.3 Scheduled Sampling

这个可以解决上述问题,它的基本思想是,在前期更多使用label输入每次time step,而后期多使用prediction。实现的方式是,利用一个概率做sample,label和prediction二选一,而概率不断变化,这也就是scheduled的含义。如下图。

 

 Seq2Seq,attention机制的一些问题及解决方案

3.4 贪婪策略?——Beam Search

这是另一个问题,就是在decoder阶段每个time step,每次都取最大概率的的选择,整体结果是不是概率最大的?答案是否定的,如下图。红色的贪婪策略,而绿色是全局最优解。

Seq2Seq,attention机制的一些问题及解决方案

 

这件事很重要,以前没感觉,它其实关系到每次time step的输入。下图是beam search的一个例子,假设vocabulary dict size 为3,beam search size = 3,则它每次保存最大的三个结果。

Seq2Seq,attention机制的一些问题及解决方案

 

并且,在第二步的时候,它得到了6个值,仍是取最大的三个。所以beam search其实是很简单的,仍然是贪婪的搜索,只是它每次保存n个最大值,加大找到全局最优解的概率。

3.5 直接输入上一步输出分布有没有用?

看起来是一种更好的选择,实践中发现,这东西表现不好。老师给了一个解释,如果我们期望两个目标“高兴想笑”,“难过想哭”两种输出组合。如果是在模型一种,输入argmax(output)的话,那么就很容易得到“高兴想笑”“难过想哭”,不太可能得到“难过想笑”“高兴想哭”这种组合。而模型二,直接输入output,则相反,例如在“高兴”和“难过”出现概率接近但“高兴”略高的时候,则什么组合都较有可能出现。

我认为这是一种pratical的知识,训练过程中,从语料到模型学习,必然是一个概率逐渐变化的过程,这种argmax隔绝了上述所说随机组合出现的可能性。

 

 Seq2Seq,attention机制的一些问题及解决方案

3.6 目标函数设计,全局还是局部?

正常来说我们使用的是每个词的预测概率分布做cross entropy,这叫做component level,而如果我们用整句话的正确性描述,则是object level。前者的问题在于,训练到后期,loss差别很小,很难train。如下图。

Seq2Seq,attention机制的一些问题及解决方案

 

前期很好训练,但差一两个词的时候,就很难train,原因是loss差别太微弱。

但如果直接使用整句话和目标整句话做评价计算呢?这样的结果是,无法微分,这就和你不拿soft label去求损失,而拿hard label去求损失一个道理。——某个weight的微弱变化,使得某个分类概率略微升高一点,但不会影响结果,这就使得gradient必定为零,无法梯度下降。

把该问题看成Reinforcement learning能解决问题,但我没听懂。