1.encoder-decoder模型
不是具体的某一种算法,而是一类算法的统称,经常用于NLP领域(比如 中文翻英文)
在这里,encoder和decoder都可以选择cnn,rnn,lstm,birnn,gru等(可以自由组合)
2.seqtoseq
seqtoseq是根据rnn引申出来的变种,但后续又跳出rnn的概念,加入了cnn,lstm网络以进行应用
我理解的seqtoseq就是把两个rnn结合在一起(有三种结合方法)以实现输入N输出M,很好地发挥输入的全部信息
上段提到了三种结合方法,但是他们的encoder部分都是一样的:把所有的输入整合到仅仅一个输出 向量c上。但后边的decoder有三种方式了。
由于最开始的seqtoseq概念是用rnn引申出来的,后续facebook又提出了用cnn代替rnn(注意:已经加入了attention),又有人提出了用lstm代替rnn等。
如:
rnn+seqtoseq
cnn+seqtoseq+attention
3.attention
而单纯的结合在一起又不能很好的满足性能,因为输入的全部信息太多导致网络只对离它最近的输入记忆性强而对远处的记忆性弱
所以在decoder处加入attention。保证了我想要哪方面的输入就把极大部分的注意力放在哪方面的输入。这样的话,输出会准确。
如:
lstm+seqtoseq+attention
4.transformer
这是针对于cnn+seqtoseq以及rnn+seqtoseq的改进,完全抛弃cnn和rnn,只采用attention来构造encoder和decoder。
有一句话:transformer is Seq2seq model with many "self-Attention"