RNN、CNN、Transformer 三大特征抽取器,孰占鳌头?

从头到尾看完了知乎大佬的博文,笔记如下,以此来发布小白本白的第一篇CSDN。
本文以个人学习记录为主,如果有在此领域想得到灵魂深度启迪的朋友,强烈建议去看原文《放弃幻想,全面拥抱Transformer:自然语言处理三大特征抽取器(CNN/RNN/TF)比较》 https://zhuanlan.zhihu.com/p/54743941 这里给原作者隔空一万个赞。

NLP 任务的特点

  • 输入是一个一维线性序列
  • 输入不定长
  • 单词或者句子的相对位置关系很重要
  • 句子中的长距离特征对于理解语义非常关键,这要求特征抽取器具备长距离特征捕获能力

NLP的四大类任务

a) 序列标注

  • 模型根据上下文给句子中的每个单词一个分类类别
  • 中文分词、词性标注、命名实体识别、语义角色标注

b) 分类任务

  • 不管文章多长,总体给出一个分类即可
  • 文本分类、情感计算

c) 句子关系判断

  • 给定两个句子,判断两个句子是否具备某种语义关系
  • QA、自然语言推理(文本间的推理关系,又称entailment,其中一个文本作为前提premise,另一个作为假设hypothesis,如果premise能够推理出hypothesis,则P能够推理出H)

d) 生成式任务

  • 输入文本后,需要自主生成另外一段文字
  • 机器翻译、文本摘要、写诗造句、看图说话

RNN —— 廉颇老矣,尚能饭否

a) Problems

  • 采取线性序列结构从前往后收集输入信息,但这种线性序列结构在反向传播时存在优化困难问题。
  • 反向传播路径太长,容易导致严重的梯度消失或梯度爆炸
  • LSTM/GRU通过增加中间状态信息直接向后传播(HighwayNet/ResNet中的skip connection就是致敬了LSTM的隐层传递机制)
  • RNN序列结构对于大规模并行计算来说相当不友好,因此没有实际落地应用支撑其存在价值

b) 曾经的辉煌

  • RNN的结构天然适配NLP问题领域。NLP的出入是不定长的线性序列句子,而RNN本身结构就是可以接纳不定长输入的。
  • 在引入LSTM三个门后,捕获长距离特征也十分有效

c) 命悬一线,无力回天 (企图并行计算的方法)

  • 隐层神经元之间的并行:每一路神经元不再和上一step所有隐层神经元连接,而是只与相对应的隐层神经元连接。其并行计算是在隐层神经元之间发生的,而不是在不同时间步之间发生的
  • Sliced RNN:企图在不同时间步之间进行并行,这就需要打断不同时间步的隐层神经元之间的连接,但又不能全部打断,策略只能是部分打断,比如每两个step打断一次。但距离稍远的组合特征如何捕获呢?只能通过增加层深,在高层把打断的再连起来(其实就慢慢变成了披着RNN皮的CNN)
  • 对于RNN的并行计算能力持悲哀态度:1)若选择打断隐层不同时间步的连接,它就慢慢的不再是RNN了;2)为了让它还是RNN,在打断的片段里面仍然采取RNN结构,但就会拉慢速度,这样它既有点像CNN,但又比CNN慢,就还不如直接用CNN;3)若不打断step之间的连接,貌似只能在隐层神经元之间进行并行,但并行能力上限很低,且仍然依赖序列计算。

CNN —— 物竞天择,绝地求生


问题:1. 单层卷积核无法捕获长距离特征

  • Dilated CNN:仍然用单层卷积核且在卷积核大小不变的情况下,可以跳着覆盖。如size=3的filter,采用x1,x3,x5作为输入。但是纯采用dilated CNN可能错过一些邻近的特征组合
  • 加深CNN(需要解决难以优化的问题,比如加入skip connection)

问题:2. maxPooling 层无法捕获单词位置信息。

  • 要么放弃pooling层,要么在输入部分专门给每个单词层架position embedding

Transformer —— 荣升头牌,大放异彩

  • 我们只谈论encoder的部分,实质上就是一个特征抽取器
  • 解决句子不定长问题:设定输入的最大长度,未达到的用padding填充
  • 解决保留位置信息问题:在输入端将position编码进去
  • 解决捕获长距离特征问题:self-attention自带本领,因为做attention时,当前单词和句子中的任意单词都发生了联系,直接简单粗暴

华山论剑:三大特征抽取器比较

a) 语义特征提取能力:Transformer>>CNN=RNN
b) 长距离特征捕获能力:Transformer=RNN>>CNN

  • 对于Transformer来说,multi-head attention的head数量严重影响长距离特征捕获能力。Head越多越好

c) 任务综合特征抽取能力:Transformer>CNN=RNN

  • 机器翻译:可以评定综合能力,是对NLP各项处理能力综合要求最高的任务之一,需要对句法,语义,上下文关联,长距离特征等各方面综合把握。

d) 并行计算能力:Transformer=CNN>>RNN
e) 计算效率:One Transformer block>单层CNN>单层RNN

  • Self-attention的平方项是句子长度,RNN和CNN的平方项是embedding size。但其实大多数任务里句子长度都远小于embedding size。

三者合流,移花接木:将RNN或CNN塞到Transformer的block里

  • 把multi-head替换成RNN或CNN或者在原生RNN/CNN基础上不断加入Transformer构件 —— 原生RNN/CNN效果在稳定提升,但与土生土长的Transformer相比,性能仍有差距。
  • Why?Transformer中不仅仅多头注意力在发挥作用,几乎每个构件在共同发挥作用,是个系统工程。因此RNN/CNN要想寄居在Transformer block里,也要选取一些新型模型,以配合Transformer其他构件。

我们的明天:要么出众,要么出局

a) RNN 最后的挣扎

  • RNN发展历史长,有大量知名度高的优秀框架,包括前任摸索出的调参经验。而Transformer公开调参经验少,比较费劲。但未来优秀框架会越来越多,这不再会是问题。
  • RNN对于小数据集更好用。这跟Transformer参数量比较大有关系,可以降低block个数,或者像BERT那样引入两阶段训练,在小数据集上只需要fine-tuning即可。Fine-tuning确立了一个整体风貌的发展方向。
  • 貌似RNN的优势,其实反映的是对Transformer整体经验的不足。

b) CNN 一息尚存

  • 天生自带高并行计算能力,这对于延长它的寿命起到很大的作用,因为它并不存在无法克服的困难
  • CNN抓取特征能力不好的原因是网络深度做不起来,但随着不断借鉴图像领域的架构经验,及深层网络优化的trick,它在捕获长距离特征上的先天缺陷得到了很大的缓解

c) Transformer 稳操胜券

  • 还是有一些缺点:对于长输入的任务(比如篇章级别的任务:文本摘要)会有巨大的计算复杂度,导致速度急剧下降。
  • 解决办法:把长输入切断,套上Transformer,高层可以再用RNN或者另外一层Transformer接力,形成层级结构
  • 目前Transformer的整体结构也显得复杂了些,而且结构的作用机理还未探索清楚。

来源:本文图片来自知乎 https://zhuanlan.zhihu.com/p/54743941

猜你喜欢

转载自blog.csdn.net/weixin_43928665/article/details/90105266