文章目录
一、Sequence-to-sequence
1. 输入一个sequence,输出一个长度由机器决定的sequence,下面举例说明。
2. 语音辨识,输入是声音讯号,输出是语音辨识的结果。输入和输出的长度不是绝对关系,输出内容的长度由机器决定。
3. 机器翻译,输入是一种语音的句子,输出是另一种语音的句子。
4. 语音翻译,输入是一段话,输出是这段话的中文文字。做语音翻译的原因是全世界很多语言没有文字,于是我们就把它翻译成我们能够阅读的文字。
二、Seq2seq for chatbot
如下图所示,训练聊天机器人。输入是一段话,输出是回复问题的一段话。因此要训练聊天机器人,我们需要收集大量的聊天资料,让机器人的输出与训练的结果越接近越好。
三、Seq2seq for Syntactic Parsing
如下图所示,举例说明句法分析的例子。Syntactic Parsing就是给机器一段文字,机器产生一颗句法分析树,图中的deep+learning是名词片语,very+powerful是形容词片语,再加上is是动词片语,然后动词片语+名词片语是一个句子。因此,句法分析的输入是一个句子,输出是一个树状结构(也可以看作是一个sequence)。
四、Seq2seq for Multi-label Classification
比较Multi-class Classification与Multi-label Classification,Multi-class Classification是指我们有多个class,机器要从多个class中选择出某一个class出来,Multi-label Classification是指同一个东西可以属于多个class。如下图所示,Multi-label Classification使用seq2seq时,输入是一篇文章,输出是它属于哪几个class。
五、Seq2seq的组成
Seq2seq分成两部分,一部分是Encoder,另一部分是Decoder。整个过程是输入一个sequence,然后交给Encoder处理后,由Decoder决定要输出哪一个sequence。
六、Encoder
1. Encoder做的事情是输入一排向量,输出一排向量。与之类似的操作,RNN与CNN也能够做到。如下图所示,Transformer的Encoder用的是Self-attention。
2. 如下图所示,Encoder分成了很多Block,Block都是输入一排向量,输出一排向量,直到最后的Block输出最终的vector sequence。Block中做的事情是先做Self-attention,然后把输出的vector放入Fully-connected里面,然后输出一排vector,这也就是Block的输出。
3. 如下图所示,在原来的Transformer里面,它的过程更加复杂。在Transformer中,会把Self-attention输出的vector加上之前输入的vector当作新的输出(residual connection),然后做一次Layer norm作为Fully-connected的输入,这里也用到了residual的架构得到新的输出,再做一次Layer norm得到最终的输出。
4. 如下图所示,右边那个图是把Block更换顺序后的Transformer,它比左边那个图的表现更好。
七、Decoder-Autoregressive
1. 举例语音辨识的例子说明Autoregressive Decoder,如下图所示。Decoder的运作是先把Encoder的输出读入作为输入,同时输入一个special token为START(假设要处理的是NLP问题, 每一个token都用one-hot的vector表示 ),代表开始工作,然后Decoder通过这两个输入,输出一个经过softmax处理后的长度为vocabulary size的输出向量,向量中的每一个中文字会对应一个分数,分数最大的中文字就为最终输出的中文字。
2. 输出“机”后,接下来会把“机”作为Decoder新的输入,根据BEGIN和“机”然后输出新的输出“器”,上述操作会被反复进行下去。如下图所示,我们会发现Decoder会把自己的输出当作接下来的输入。
3. 如下图所示,对比Encoder和Decoder的结构,我们可以发现Decoder就比Encoder多了中间的Multi-Head Attention,并且使用了Masked Multi-Head Attention。
4. 对比Self-attention,Masked Self-attention不考虑右边的输入。
5. 如下图所示,具体说明Masked Self-attention。加入Masked的原因是因为Decoder的输出是一个一个产生,因此Decoder只考虑前面的输出,不考虑后面的输出,Masked Multi-Head attention的计算顺序和Decoder的串行计算顺序是相对应的。
6. Decoder自己决定输出sequence的长度,会添加一个Stop Token(END),在输出里面出现,代表结束工作。
八、Decoder-Non-autoregressive
NAT Decoder的输入是一排的BEGIN(4个),就会输出一排中文字(4个)并结束。对于NAT Decoder的输出长度,我们可以先输出一个很长的sequence,然后在某个位置输出END后,忽略掉后面的输出。NAT Decoder的优势是平行化,并且可以控制Decoder输出的长度,但是NAT Decoder的表现不如AT Decoder(原因是Multi-modality)。
九、Encoder-Decoder
1. 如下图所示,Decoder中间那一个块是Cross attention,里面两个输入来自Encoder,一个输入来自Decoder。
2. 如下图所示,Cross attention的具体运作过程。
3. 如下图所示,有很多人尝试不同Cross Attention的方式。
十、Training
1. 训练首先要收集大量的训练资料,如下图所示。第一个输出要跟Ground truth“机”越接近越好,因为“机”被表示成one-hot vector,并且只有“机”的维度是1,其它是0。Decoder的是一个distribution(机率分布),因此我们会去与计算输出与Ground truth的cross entropy,并且希望这个值越小越好(跟分类问题相似)。
2. 如下图所示,实际的训练情况。在这个训练过程中,有“END”来结束工作,并且这里会用到Teacher Forcing,会把正确答案当作输入。
十一、Tips
1. Copy Mechanism
1) 从输入中复制得到输出的内容。
2) 训练一个model,从文章中提取出摘要。
2. Guided Attention
Guided Attention要求机器去领导attention的过程,并且有固定的方式。
3. Beam Search
如下图所示,Greedy Decoding是把每一次最高分数作为输出的中文字,但它不一定是最好的方法,在图中green path明显是更好的。现在要找到green path的方法可以把所以路径搜索一遍,但实际操作不可行,于是用Beam Search有效地找到green path。
十二、Optimizing Evaluation Metrics?
我们将Decoder的输出与正确答案做比较,然后计算出BLUE score。我们可以把BLUE score当作训练最大化的目标,但是BLUE score很复杂、不能微分,因此采用cross entropy,而且把每一个中文字分开计算。
遇到Optimizing不能解决的问题,用Reinforcement Learning硬train一发。
十三、Scheduled Sampling
在训练过程中,我们会得到完全正确的结果,而在实际测试中,会出现错误情况导致一步错步步错,这种情况时exposure bias。因此我们需要在训练中,加入错误情况,会得到更好的情况。