seq2seq简介
Seq2seq将输入序列转换为输出序列。它通过利用循环神经网络(递归神经网络)或更常用的LSTM、GRU 网络来避免梯度消失问题。当前项的内容总来源于前一步的输出。Seq2seq主要由一个编码器和一个解码器。 编码器将输入转换为一个隐藏状态向量,其中包含输入项的内容。 解码器进行相反的过程,将向量转换成输出序列,并使用前一步的输出作为下一步的输入。
维基百科:https://zh.wikipedia.org/zh-hans/Seq2seq
通过最简单的seq2seq图看以看出,seq2seq的基本原理在于将模型分为encode和decode两部分,encode用来输入生成语义编码,传入语义编码到decoder中,输出预测值,encoder和Dcoder通常用lstm或者gru来构建。往往在进行神将网络翻译(NMT)和对答系统中常常用到,而这只是最简单的seq2seq模型。
seq2seq基本模型
基本流程:
如图所示为seq2seq的训练过程,首先将输入的句子放入encoder中,通过一些列lstm和线性变化可以得出一个内容context。然后将context放入decoder进行训练,decoder的训练过程是逐步进行的,前一个词的输出作为后一个词的输入,最后得出一个完整的句子。
缺点即改进:
- 由于后一个预测值受前一个的影响,所以很容易发生蝴蝶效应,从而导致一长串的预测值全部失效,所以很难训练下去。(这就好比学生在学完部分单词后直接去蒙其他生词,这样学习的效率极低)
改进方法:scheduled sampling(计划采样)
计划采样的主要过程就是在decoder训练过程中并不是完全的将输入等于前一个输出,而是适当的将真实值放入输入当中。即随机使用模型真实label来作为下一个时刻的输入,而不像原先那样只会使用预测输出。(这就好比学生在蒙其他单词的过程中老师会时不时的给他几个提示,让他不至于往一个方向一直错下去)
- 输入与输出长度不等,在翻译过程中这样情况经常发生,无法预测翻译的长度到底是多少。
改进方法:存入桶:通过填补0,这可以控制的输入和输出的长度。 而且如果的序列长度为100和输入只有3的长度时、昂贵的空间被浪费。 桶可以不同规模和指定的输入和输出的长度。
- 在原seq2seq中decoder之根据encoder中最后得出的一个context进行译码,这样肯定是不好的,比如在机器翻译的过程中汉语的某个词和英语的某个单词是对应的,而普通的seq2seq模型并没有考虑这一点。
改进方法:Attention机制
Attention机制
基本简介:
在Attention机制中decoder不在只被encoder最后输出的一个context影响,而是encoder中每个单词共同赋予权重来生成一个context,而在decoder的过程中,每次输入的计算都会与encoder所有单词进行权重计算,导致每一个decoder的输入所获得的context都是不同的。
Attention计算方法(Soft Attention):
通过当前decoder输入与encoder个输入进行相识度计算得出权重,将权重进行softmax(概率化,所有概率加起来等于1);然后进行与encode输入进行乘法运算得出一个attention。
Attention分类:
- Spatial Attention:空间注意力(图像处理)
- Temporal Attention:时间注意力 (自然语言)
- Hard Attention:会在生成注意力权重后筛选掉一部分不符合条件的注意力
- Soft Attention:所有的数据都会注意,都会计算出相应的注意力权值,不会设置筛选条件。
总结:
上面所说的Attention的计算方法只是一个常规的方法,其实还有很多不同的方法,如transfrom中的self-attention等等,之后后慢慢详解。