“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。
地址: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 无关的。 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,那这个理由似乎不那么有说服力。
本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。
“源头活水”历史文章
更多源头活水专栏文章, 请点击文章底部“阅读原文 ”查看
分享、在看,给个三连击呗!