Seq2Seq
视频:https://www.youtube.com/watch?v=ZjfjPzXw6og
回顾RNN
下面的, , 等input vector都是一组向量,RNN模块是同一个网络,只是在不同时间的使用。
在Naive RNN中,计算h和y的通用方法。
对比Naive RNN,LSTM可以视为将原先的h拆分为两个输入:c和h,其中,c的变化比较小,h的变化比较大
在LSTM中,使用h和x合并作为输入,计算出,作为不同的gate。下面的粗箭头,都是一种transform。
也可以将c与h,x一起作为input,那么,在设计Weights的时候,最后的部分,用diagonal来计算,便于减少参数。
LSTM block内部的实现方式,就是像下面的描述。
两个LSTM block串联在一起的样子,如下所示。
除了LSTM,另一种常用的是GRU。
GRU只有三个transform,相较于LSTM而言,少了一个。
Sequence Generation
seq2seq model的使用过程
BOS(begin of sentence),EOS(end of sentence)
seq2seq model的训练过程
和一般的RNN training过程差不多
应用
产生文章,产生图像,都可以。。。
Conditional Generation
应用1 - Image Caption Generation
使用CNN对图像抽取vector,然后,将vector作为每一次input的一部分,喂给RNN。
应用2 - chat bot
在encoder的RNN中,memory中的vector就是一种representation。
应用3 - 语音合成
Dynamic Conditional Generation
对于最后的representation无法表示所有encoder input的情况,Dynamic Conditional Generation是希望在decoder的输入,每一次都喂入不同的vector,具体喂入什么,由模型自己决定。
应用1-机器翻译
下面以机器翻译为例,介绍attention-based model的方法。下面省去RNN模型的部分,所有的输入都是经过RNN。
match的过程就是attention,match的分数也称为attention score。
对每一个都做attention,输出,然后,再做softmax,变成,然后,再去加权求和,得到。
和一起作为decoder的input,产生。
注意:也是被训练出来的。
后续的操作与前面的一样,重复直至结束。
应用2-语音识别
应用3-Image Caption Generation
论文的效果,正确的答案
不正确,但是合理的答案
下面是对video caption generation的效果。
Tips
Bad Attention
attention的分布可能不平均,比较集中在某一个地方。可以对attention做reguization。
训练和预测不一致
训练阶段使用的是正确答案,而预测时,使用的是模型预测的答案。
这个问题叫做“Exposure Bias”
那么,怎么解决呢?
在训练过程中,使用预测结果,很难训练出来。
可以将预测结果和真实结果,通过掷色子的方式,选取出来。当然,前期从真实结果中选取的机率要大一些,后面随着模型越来越稳定,就可以增加从预测结果中选取的机率。
另一种方式是使用beam search
原始的方式其实是一种greed search,使用beam search以后,就可以保留前N个较大的结果。
那么,能不能使用平均值呢?
可能会有问题,下面是一个例子。
评估标准的选择
对于生成句子的情况,如果使用单个字或词来判断,效果可能还不如对完整句子的判断。