有了Transformer框架后是不是RNN完全可以废弃了？
结论是很显然的，目前很多研究表明Transformer在各方面相对CNN和RNN占据优势，尤其RNN劣势非常明显。 可以参考分析文章：放弃幻想，全面拥抱Transformer：自然语言处理三大特征抽取器（CNN/RNN/TF）比较 进退维谷的RNN 为什么说RNN进退维谷呢？有几个原因。 首先，如果靠原生的RNN（包括LSTM，GRU以及引入Attention以及堆叠层次等各种你能想到的改进方法，可以一起上），目前很多实验已经证明效果比起Transformer有较大差距，现在看基本没有迎头赶上的可能，所以原生的RNN从效果来讲是处于明显劣势的。 其次，原生的RNN还有一个致命的问题：并行计算能力受限制太严重。想要大规模实用化应用？目前看希望渺茫。我们前面说过，决定了RNN本身的根本特质是：T时刻隐层节点对前向输入及中间计算结果的序列依赖，因为它要线形序列收集前面的信息，这是RNN之所以是RNN的最主要特点。正是它的这个根本特质，使得RNN的并行计算能力想要获得根本解决基本陷入了一个两难的境地：要么仍然保持RNN序列依赖的根本特性，这样不论怎么改造，因为这个根本还在，所以RNN依旧是RNN，所谓“我就是我，是不一样的烟火”，但是如果这样，那么其并行能力基本无法有力发挥，天花板很低；当然除此外，还有另外一条路可走，就是把这种序列依赖关系打掉，如果这样，那么这种打掉序列依赖关系的模型虽然看上去仍然保留了部分RNN整形前的样貌，其实它骨子里已经是另外一个人了，这已经不是你记忆中的RNN了。就是说，对RNN来说，要么就认命接受慢的事实，躲进小楼成一统，管他春夏与秋冬，仅仅是学术界用来发表论文的一种载体，不考虑大规模实用化的问题。要么就彻底改头换面变成另外一个人，如果真走到这一步，我想问的是：你被别人称为高效版本的RNN，你自己好意思答应吗？这就是RNN面临的两难境地。 再次，假设我们再乐观一点，把对RNN的改造方向定位为将RNN改造成类似Transformer的结构这种思路算进来：无非就是在Transformer的Block里，把某些部件，当然最可行的是把Multi-head  self  attention部件换成RNN。我们就算退一步讲，且将这种大幅结构改造的模型也算做是RNN模型吧。即使这样，已经把自己整形成长得很像Transformer了，RNN依然面临上述原生RNN所面临的同样两个困境：一方面即使这种连变性削骨都上的大幅度整容版本的RNN，效果虽然有明显提升，但是仍然比不过Transformer；另外，一旦引入RNN构件，同样会触发Transformer结构的并行计算能力问题。所以，目前Transformer发动机看上去有点带不动RNN这个队友。 综合以上几个因素，我们可以看出，RNN目前处于进退两难的地步，我觉得它被其它模型替换掉只是时间问题，而且好像留给它的时间不多了。当然，这是我个人意见。我说这番话的时候，你是不是又听到了水声？ 我看到网上很多人还在推RNN说：其实还是RNN好用。我觉得这其实是一种错觉。之所以会产生这个错觉，原因来自两个方面：一方面是因为RNN发展历史长，所以有大量经过优化的RNN框架可用，这对技术选型选择困难症患者来说是个福音，因为你随手选一个知名度还可以的估计效果就不错，包括对一些数据集的前人摸索出的超参数或者调参经验；而Transformer因为历史太短，所以各种高效的语言版本的优秀框架还少，选择不多。另外，其实我们对Transformer为何有效目前还不是特别清楚，包括相关的各种数据集合上的调参经验公开的也少，所以会觉得调起来比较费劲。随着框架越来越多，以及经验分享越来越充分，这个不再会是问题。这是一方面。另外一方面，很多人反馈对于小数据集RNN更好用，这固然跟Transformer的参数量比较多有关系，但是也不是没有解决办法，一种方式是把Block数目降低，减少参数量；第二种办法是引入Bert两阶段训练模型，那么对于小数据集合来说会极大缓解效果问题。所以综合这两方面看，RNN貌似在某些场合还有优势，但是这些所谓的优势是很脆弱的，这其实反映的是我们对Transformer整体经验不足的事实，随着经验越来越丰富，RNN被Transformer取代基本不会有什么疑问。  一希尚存的CNN CNN在14年左右在NLP界刚出道的时候，貌似跟RNN比起来表现并不算太好，算是落后生，但是用发展的眼光看，未来的处境反而看上去比RNN的状态还要占优一些。之所以造成这个奇怪现象，最主要的原因有两个：一个是因为CNN的天生自带的高并行计算能力，这对于延长它的生命力发挥了很大作用。这就决定了与Transformer比起来，它并不存在无法克服的困难，所以仍然有希望；第二，早期的CNN做不好NLP的一个很大原因是网络深度做不起来，随着不断借鉴图像处理的新型CNN模型的构造经验，以及一些深度网络的优化trick，CNN在NLP领域里的深度逐步能做起来了。而既然深度能做起来，那么本来CNN做NLP天然的一个缺陷：无法有效捕获长距离特征的问题，就得到了极大缓解。目前看可以靠堆深度或者结合dilated  CNN来一定程度上解决这个问题，虽然还不够好，但是仍然是那句话，希望还在。 但是，上面所说只是从道理分析角度来讲CNN的希望所在，话分两头，我们说回来，目前也有很多实验证明了原生的CNN在很多方面仍然是比不过Transformer的，典型的还是长距离特征捕获能力方面，原生的CNN版本模型仍然极为显著地弱于RNN和Transformer，而这点在NLP界算是比较严重的缺陷。好，你可以说：那我们把CNN引到Transformer结构里，比如代替掉Self  attention，这样和Transformer还有一战吧？嗯，是的，目前看貌似只有这条路是能走的通的，引入depth separate  CNN可以达到和Transformer接近的效果。但是，我想问的是：你确认长成这样的CNN，就是把CNN塞到Transformer  Block的肚子里，你确认它的亲朋好友还能认出它吗？ 当然，我之所以写CNN一希尚存，是因为我觉得把CNN塞到Transformer肚子里这种方案，对于篇章级别的NLP任务来说，跟采取self  attention作为发动机的Transformer方案对比起来，是具有极大优势的领域，也是适合它的战场，后面我估计会出现一些这方面的论文。为什么这么讲？原因下面会说。  稳操胜券的transformer 我们在分析未来NLP的三大特征抽取器哪个会胜出，我认为，起码根据目前的信息来看，其实Transformer在很多战场已经赢了，在这些场地，它未来还会继续赢。为什么呢？上面不是说了吗，原生的RNN和CNN，总有一些方面显著弱于Transformer（并行计算能力或者效果，或者两者同时都比Transformer弱）。那么他们未来的希望，目前大家都寄托在把RNN和CNN寄生在Transformer   Block里。RNN不用说了，上面说过它的进退维艰的现状。单说CNN吧，还是上一部分的那句话，我想问的是：你确认长成这样的CNN，就是把CNN塞到Transformer  Block的肚子里，你确认它的亲朋还能认出它吗？