基于RNN的seq2seq与基于CNN的seq2seq区别，为什么后者效果更好？
看到某答案，实在忍不住写个答案说点。 首先题目的描述并不严谨，「基于CNN的seq2seq」应该改成「使用了position embedding和multi-head self-attention的CNN seq2seq」，附带：LSTM上如果加上了multi-head self-attention，如果限定了模型参数规模，相同的训练数据，在大多数任务中依然是比CNN更广泛落地的。 1 position embedding，高赞已经分析了我不赘述，这是CNN用于seq2seq建模能work的关键。Hindon在提出Dynamic Routing Between Capsules的时候，动机就说了是为了弥补CNN+pooling会丢弃位置依存信息，可见这是CNN处理序列问题的硬伤，使用一个不能保存序列位置关系的模型建模序列，就必须弥补这个问题。然而RNN却可以非常轻松地学习到这些序列特征。 最早的position embedding包括硬性函数（线性函数、三角函数），后来发展为了类似word embedding的relative position representation「Self-Attention with Relative Position Representations-Peter Shaw et al」（也是Kaiser团队的工作，是SOTA，比硬函数好）。 2 self-attention，这个是从神经图灵机「Neural Turing Machines-Alex Graves」的内存改进演变而来的机制：初始的NTM内存是固定大小的，后来的两类演变是变成基于离散动作的线形增加和减少单元，另一类是连续化堆栈/队列/树数据结构的内存操作。self-attention就是将控制器自身所有的历史状态作为缓存内容的内存机制，这个做法的雏形个人认为就是Kaiser团队「Attention Is All You Need-Vaswani et al」的前任工作「Can Active Memory Replace Attention?-Lukasz Kaiser et al」出现的，出于工程优化目的，里面的前馈和全联接都是用conv的代码实现并行，对比传统的多层卷积pooling靠堆层数增加感受野，这显然是更优雅的实现方案。另，self-attention是一个通用的seq2seq优化trick，同样可以用到RNN上。 3 multi-head attention，这也是一个很强力的通用trick。上面提到的SOTA的CNN 模型transformer借鉴了NTM的multi-head trick。所有的attention都是multi-head的，弥补的是attention通过softmax之后的单热点/多热点弥散限制。 总结： 当前基于卷积的SOTA用于seq2seq就是google的Transformer「Attention Is All You Need et al」，Transformer实际上是加了很多trick的CNN，这些trick同样可以用到RNN上。但是因为Transformer这样的建模参数规模比RNN大了很多，反而对训练的数据量需求变大了。RNN只要有multi-head self-attention提供足够强的semantic disambiguation「Why Self-Attention? A Targeted Evaluation of Neural Machine ... 」同样可以把性能提的很高，关键是数据量需求比CNN小。