查看原文
其他

【源头活水】预训练卷积超越预训练Transformer?

“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。

来源:知乎—DengBoCong
地址:https://zhuanlan.zhihu.com/p/380195756

https://arxiv.org/pdf/2105.03322.pdf

nlp-paper:https://github.com/DengBoCong/nlp-paper

nlp-dialogue:https://github.com/DengBoCong/nlp-dialogue

text-similarity:https://github.com/DengBoCong/text-similarity

说明:阅读原文时进行相关思想、结构、优缺点,内容进行提炼和记录,原文和相关引用会标明出处,引用之处如有侵权,烦请告知删除。

Transformer诞生到现在,从NLP领域到CV领域,可以说是两开花。特别是在预训练模型中,BERT相关系列近些年屡屡突破,在各种下游任务中,不仅能提速还有效果上的提升。所以在NLP的相关任务中,提及Transformer和CNN时,Transformer一般都会优先考虑,更何况是在预训练语言模型方面,我以前都没有想过将CNN用在预训练,直到看到这篇文章,才打开了新思路,看来还是我格局小了呀。
正如论文标题一样:Are Pre-trained Convolutions Better than Pre-trained Transformers?这篇文章并没有能够将“CNN预训练优于Transformer预训练”这个结论石锤,不过从某种程度上说,还是将BERT、transformers和大规模预训练模型进行解耦,给我们打开了新世界,接下来我们就一起来品一品这篇文章。


01

前情提要
这篇文章其实围绕三个问题要讨论:
1. 只有类Transformers的结构才适合预训练?
2. 如果使用不同于Transformers结构的模型来进行预训练,是否能够提高收益?
3. 使用卷积进行预训练是否在特定的场景表现更好?
在正式研究和讨论之前,还有几点需要达成共识的,根据以往的研究表明,卷积有着如下的优势:
1. CNN 比 self-attention 快得多:CNN 是线性复杂度,self-attention 是平方复杂度(甚至因此诞生了《轻量 transformers》这个分支领域)。
2. CNN 是按顺序进行的,因此不需要如Transformers那样,需要额外的位置编码。
不过还是需要注意的是,CNN 在单层的感受野大小是有限且固定的,只能通过堆叠层数来增大感受野,而self-attention 在一层就可以捕捉所有 token 之间的关系,这对于捕捉长距离依赖非常关键。同时,self-attention 聚合的权重是与输入 token 相关的,而 CNN 的聚合权重是与输入 token 无关的。
文章涉及到对比卷积的运行速度,我之前写过一篇如何根据FLOPs或MACC去大致的计算模型的速度,感兴趣的可以参考如下:教你如何估计各种神经网络的计算量和参数量
我们来简单过一遍论文中使用到的卷积:
Depthwise Convolutions:深度可分离卷积中,每个通道只被一个卷积核所卷积,这里我们假设输入的张量  的维度大小为  ,那么深度可分离卷积  可以被定义为:

其中,  是可训练参数,  是通道  的第  个位置的输出,输出的shape和输入的shape相同,都是  
Lightweight Convolutions:轻量化卷积对深度可分离卷积做了进一步地简化,这里我们令  是深度可分离卷积,并做了softmax处理,如下:

其中,,也就是说每个的输出通道共享参数,其中  ,这是相当于共享所有通道的所有权重。简单来说,(1)相邻通道的卷积核可进行参数共享;(2)卷积核参数在其长度的维度上被 softmax 归一化:

其中,  和  分别是卷积核的数量,以及卷积核的长度。

Dynamic Convolutions:动态卷积是对轻量化卷积的进一步改进,如下:

其中,是  线性变换,用于学习卷积核的生成与其顺序输入的不同token  的关系,其参数可表示为。通过这种方式,使得卷积核  的生成与其顺序输入的不同 token  有关,而不是对整个文本序列固定的卷积核。而且,这里的卷积核参数只与当前被卷积核覆盖的几个 token 相关,而不像 self-attention 那样,需要与全部 token 交互计算。因此整体上,动态卷积还是线性复杂度。
对上面三种卷积想要图形化理解的话,可以参考这篇文章:
https://qiita.com/koreyou/items/328fa92a1d3a7e680376


02

预训练细节
在开始细节前,我们来感受一下原文的描述:
We implement a Seq2Seq (Sutskever et al., 2014) architecture similar to (Wu et al., 2019). The key difference when compared with Transformer architectures is that we replace the multi-headed selfattention with convolutional blocks. Instead of query-key-value transforms, we use gated linear unit projections following (Wu et al., 2019).
说白了,本文的卷积预训练模型结构依然在模仿基于 transformers 的预训练模型结构,只不过是将其中的 multi-head self-attention 换成了上面说的卷积操作,query-key-value 的结构换成了类似的线性门控(Gated Linear Units)结构。每个 convolution block 的结构如下图所示(图源来自https://arxiv.org/pdf/1901.10430.pdf):
我们可以从上图看出,论文所用的卷积是一种“线性门控 + 卷积 + 线性映射”的结构,可以表示为:

其中,  都是可训练参数,论文中实验了轻量化卷积,动态卷积和空洞卷积。
对于整体的卷积预训练模型,本文也是使用类似 transformers 的方式将 convolution blocks 进行堆叠:

其中,Conv表示实验的卷积,FFN则是用ReLU的前馈神经网络,看起来是不是简直就是Transformer,哈哈哈。
训练模型时,损失使用的是token-wise的交叉熵,并通过 teacher forcing进行训练,如下:

其中,在  时刻对类别  预测值,而  是类别  在时刻  的真实标签值。


03

实验
模型在 Colossal Cleaned CommonCrawl Corpus (C4) 数据集上进行了预训练。预训练时,模型的 seq2seq 的结构、MLM 任务依然是模拟 transformers;层数、序列长度等参数也与 BART-base 保持了一致。
在实验部分,这篇文章希望探究如下五个问题:
卷积也能在预训练中获益,学到丰富的先验知识吗?
卷积预训练和 transformers 相比,性能怎么样?
卷积预训练和 transformers 相比,有什么优点?会更快吗?
什么情景下,卷积预训练会失败?
不同的卷积模块之间,有很大的差别吗?
上面的实验可以回答提出的几个问题:
卷积网络也能在预训练中获益,只是不如 transformers 大。
无论是否预训练,卷积的性能优于或与 transformers 一致。
空洞卷积和动态卷积似乎好于轻量化卷积。
作者在实验中发现,与训练卷积结构缺少相互的 attention 结构,因此在需要构建多个事物之间关系的任务上,卷积预训练结构似乎并不适合。另外,卷积预训练模型更快,因此能被运用到更长的序列。随着序列长度的增加,卷积预训练模型的速度优势将更加显著:


04

总结
这篇论文给我们的主要启发是:预训练改进与模型改进不应该混为一谈,预训练技术本身往往能给各种模型都带来提升,不应该一提到预训练就想到Transformer,也不应该只把预训练跟Transformer结合。这篇论文给出了一个新的视野,但是并不能实质性的影响类Transformer在预训练中作用,毕竟CNN有着根本的缺陷,即无法捕捉足够远的长程依赖,虽然通过膨胀卷积等方式,可以快速增大CNN的感受野,但也只是比较大,不是Transformer理论上的一步到位。其次,如果单纯看提高效率角度,Transformer本身也有很多优化空间,如果只是为了执行效率而转向CNN,那这个理由似乎不那么有说服力。

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“源头活水”历史文章


更多源头活水专栏文章,

请点击文章底部“阅读原文”查看



分享、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存