CNN/RNN/Transformer比较
内容摘自https://zhuanlan.zhihu.com/p/54743941
1.NLP四大任务
2.RNN
2.1 RNN为什么在NLP流行并占据主导地位呢?
1、适合解决线性序列问题;2、可以接纳不定长输入;3、LSTM三门的引入,捕获长距离依赖能力加强。
2.2 RNN面临的问题
RNN本身的序列依赖结构对于大规模并行计算来说相当之不友好。
为什么并行差?因为s(t)的计算依赖于s(t-1),且不同step的隐层之间全连接。就是说T时刻某个隐层神经元与T-1时刻所有隐层神经元都有连接。
2.3 RNN如何改造
方案1:各隐层神经元之间并行计算
首先,T时刻和T-1时刻是不可能并行计算的,但是可以把T时刻与T-1时刻的神经元全连接改成单连接,使得各隐层之间并行计算。
缺点在于:并行程度上限低。
方案2:间歇打断各step之间的连接
每隔2个时间步打断一次,通过层深来建立远距离特征之间的联系。类似于CNN。
缺点在于:本质上是CNN,速度又比CNN慢。
3.CNN
3.1 CNN的问题
早期的CNN问题在于:单层卷积无法捕获远距离特征,受感受野限制。
通过把CNN做深和跳跃覆盖来解决这一问题。
Pooling层会抛弃位置信息,造成信息损失。
3.1 CNN跳跃覆盖
Dilated CNN,需要精心调节参数搭配,保证所有可能组合都被覆盖到。
3.2 做深CNN
3.3 抛弃Pooling层,辅助Skip Connection,引入GLU,在输入层加position embedding
4.Transformer
1.不是只有self-attention在起作用
能让Transformer效果好的,不仅仅是Self attention,这个Block里所有元素,包括Multi-head self attention,Skip connection,LayerNorm,FF一起在发挥作用。
5.RNN,CNN,Transformer的特征抽取能力比较
5.1 比较维度
1、句法特征提取能力
2、语义特征提取能力;
3、长距离特征捕获能力;
4、任务综合特征抽取能力;
5、并行计算能力及运行效率
5.2 句法特征抽取能力
CNN强于RNN
5.3 语义特征提取能力
比较三者在‘考察语义类能力的任务’上的表现,比如翻译。Transformer >> RNN == CNN
5.4 长距离特征捕获能力
比较三者在“主语-谓语一致性检测”任务上的能力。Transformer == RNN >> CNN
对于Transformer来说,Multi-head attention的head数量严重影响NLP任务中Long-range特征捕获能力:结论是head越多越有利于捕获long-range特征。
5.5 任务综合特征抽取能力
在众多NLP任务上的表现,选择机器翻译,因为它是考验NLP各项处理能力综合要求最高的任务。
Transformer >> RNN == CNN
5.6 并行计算能力及运行效率
transformer实际的计算复杂度是self-attention+全连接。self-attention是n平方d,全连接是d平方n。RNN是d平方n,CNN是kd平方*n,k是kernel size。
从复杂度上来说,单个Transformer Block计算量大于单层RNN和CNN。
但是结合可并行,实际运行效率:Transformer Base最快,CNN次之,再次Transformer Big,最慢的是RNN。RNN比前两者慢了3倍到几十倍之间。
6.RNN和CNN向Transformer靠拢
6.1 寄居蟹策略
即用双向RNN或CNN替掉self attention,把RNN或者CNN塞到Transformer Block。
6.2 效果
1、逐步加入Transformer的各个构件,效果不断稳定提升;
2、但与Transformer相比,性能仍然有差距。