Transformer太大了,我要把它微调成RNN

文 | 炼丹学徒
编 | 小轶

从前车马很慢,显卡跑的也慢,一生只够爱一个RNN。后来时代进步了,数据量和计算力阔绰了,堆叠起来的Transformer能够在更深更宽的模型结构里吃下去更多的数据。从19年的预训练浪潮开始,暴力美学兴起,更深的Transformer更久的预训练更大的模型参数量,暴力出奇迹一个个NLP榜单被刷新,但谁又记得起来当初Transformer论文里“解决RNN无法并行化训练问题”的追求效率的motivation呢?身在普通高校,手握2080Ti和Titan V,向着大厂的预训练模型望洋兴叹,我们开始怀念起当初人人都训练得起的LSTM和GRU。那是精巧轻量的模型,那是人人都刷的起SOTA的时代。

今天这篇来自微软的论文告诉我们,大厂里有一些研究员也还是爱我们的,Finetuning Pretrained Transformers into RNNs,在保持性能的情况下,将预训练好的Transformer模型微调到其RNN变体,极大地降低显存使用和计算开销。

论文题目:
Finetuning Pretrained Transformers into RNNs

论文链接:
https://arxiv.org/abs/2103.13076

Arxiv访问慢的小伙伴也可以在 【夕小瑶的卖萌屋】订阅号后台回复关键词 【0407】 下载论文PDF~

本文提出的模型名为 T2R,代表 Transformer to RNN 。转换的过程为 swap-then-finetune ,即,对于一个预训练好的 Transformer 模型,我们将其 的注意力计算改为线性 的替换模块,然后进行微调。可以预感到,其核心就在于如何用线性的子层对注意力层进行模拟。接下来,我们对其进行详解。

概述

在2019年EMNLP论文 Transformer Disp [1] 中,作者提出:可以将注意力层的相似度计算()替换为核函数的分数

ICML'20的另一工作Transformers are RNNs [2]则在此基础上进一步优化,提出了的注意力计算替换为线性的模块

今天要讲的 T2R 这篇文章是紧随上面 ICML'20 这篇工作进行的。之前 Transformers are RNNs 的方法中,使用的核函数没有参数,不可训。而 T2R 把核函数里封装了一个MLP变成可训练的。T2R原文的推导直接使用了 Transformers are RNNsTransformer Disp 的结论,因而推导过程并不完整。我们今天也沿着T2R的思路进行讲解,如果想要更深入了解 Transformer 转 RNN 领域的,可以阅读下面两篇论文:

[1] Tsai et al. Transformer Disp: A Unified Understanding of Transformer's Attention via the Lens of Kernel. EMNLP 2019

[2] Katharopoulos et al. Transformers are RNNs: Fast autoregressive transformers with linear attention. ICML 2020

Transformer开销

Transformer 由多头注意力层、前馈层、层归一化层堆叠后组成。本篇论文中要替换的,就是其中的多头注意力层。

在开始讲解如何替换之前,我们还是先梳理一下传统Transformer的多头注意力层。整个计算过程可以总结如下图所示:

▲传统Transformer的多头注意力层计算过程

这张图我们自下往上看。首先,我们将多头注意力层的source隐状态记作,target隐状态记作

如何理解此处的source和target:比如,在解码器的编码器-解码器注意力层中,就是编码器端的序列长度,就是解码器端的长度。在自回归推断的解码器自注意力层中,就是已生成序列(加上自己)的长度,等于1,指当前要预测的这个字符。

从隐状态,我们通过线性变换得到。则,注意力层的输出为:

其中, 操作 旨在计算的相似度(这里划重点!等一会儿就要对这个计算动手脚了!):

上述的多头注意力的计算是我们熟知的。论文对其复杂度进行了分析。设多头数为,每个头的隐状态长度,每个的隐状态总长 ,则有如下结论:

  • 特征计算:即由隐状态计算得到的过程,复杂度分别为 ,

  • 注意力计算: 由 计算得到最终输出的过程,复杂度为 ,与 的长度成平方关系。

  • 推断时的显存,与已经解码的长度线性相关。

注意力层的RNN替代方案

T2R的注意力层计算过程则如下图所示:

首先,我们注意到原始的注意力计算中, 的相似度计算方式()需要先进行点乘,放缩后再进行指数运算,难以开展后续的近似优化。所以这里的关键之处就在于,T2R的相似度计算方案替换为核函数的乘积

此处,的参数都是通过一个单层MLP学习得到的。维矩阵,维bias向量,即,T2R的相似度计算核函数将原本维的向量降到了维然后进行相似度计算。对于多头计算中的每一个头,他们的是独立学出来的。因此,T2R在每一层中,共增加了个可学习的参数(小于总参数量的2%)。

我们把新的相似度计算方法代入到注意力的输出式中,得到:

,则:

而根据 Transformers are RNNs [2] 的结论,此处的可以视作RNN递归的隐状态。比如,在解码器端做自回归生成时,每个词向它前文的单词进行注意力计算来预测下一个词,可以被定义为递归的隐状态:

注意到我们主要讨论的函数是针对来计算相似度的,而是由喂入该层的隐状态线性变化得到的。为了加速推断速度,具体实现中把代入,得到从隐状态直接线性变换得到的结果,从而在推断的时候不需要计算,而从隐状态直接计算得到相似度的值,即:

其中,

此时的开销:

  • 特征计算:我们记输出维的特征向量,则生成的复杂度为 ,

  • 注意力计算: 由计算得到最终输出的过程,假设k<<M,N,此时复杂度为,与的长度成线性关系。

  • 推断时的显存:假设k<<M,则占用显存,为常数。

Transformer和T2R对比

讲到这里,我们再对比一下传统Transformer和T2R的差异:

  • 特征计算:计算不变,计算, 降为,

  • 注意力计算: 由降为,平方->线性。

  • 推断时的显存:由降为,线性->常数。

实验

数据集的效果

T2R主要使用ELU和RFA作为baseline进行比较。ELU和RFA为此前的另外两篇使用核函数转Transformer为RNN工作。因为ELU和RFA的核函数都是不可训练的,所以无法取代预训练好的模型里的注意力层进行功能上的替换和拟合。

首先,T2R在语言模型上开展了实验。数据集使用WikiText-103,评测指标使用困惑度 perplexity 。发现T2R因为在核函数中放置了可训练的MLP,在加载预训练模型时获得更大的收益。

此外,T2R在翻译任务上开展实验,使用数据集 WMT14 EN-DE,WMT14 EN-FR 和 WMT17 ZH-EN。研究员们发现虽然随机初始化时,T2R弱于另外两个baseline,但是加载预训练后反超另外两个baseline。

生成时的加速和显存节省

研究员发现 T2R 比另外两个模型的推断速度更快(如下左图所示),因为使用了更小的特征维度,以及更快的特征计算方法。对于推断时的显存占用,Transformer 随着输出序列的增长而线性增加,转为 RNN 结构的模型则保持常数(如下右图所示)。

消融实验

随着核函数输出特征尺寸的增大,其效果也更加接近Transformer。相比于之前的工作,T2R 可以通过控制特征尺寸从而在效果和速度间权衡。

小结

本文提出的T2R,在 Transformers are RNNs 的基础上,将无参数的核函数封装为 MLP 加激活函数,从而可训练。在此基础上,T2R 替换掉预训练 Transformer 的注意力层,从而降低了计算消耗和显存使用,并且得到和原预训练模型相似的结果。

后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

后台回复关键词【顶会

获取ACL、CIKM等各大顶会论文集!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文浅尝 - JWS2020 | FEEL: 实体抽取和链接的集成框架

论文笔记整理&#xff0c;谭亦鸣&#xff0c;东南大学博士生。来源&#xff1a;JWS 2020链接&#xff1a;https://www.sciencedirect.com/science/article/pii/S157082682030010X?via%3Dihub介绍实体抽取和链接&#xff08;Entity extraction and linking, EEL&#xff09;是语…

一步步手动实现热修复(一)-dex文件的生成与加载

*本篇文章已授权微信公众号 guolin_blog &#xff08;郭霖&#xff09;独家发布 热修复技术自从QQ空间团队搞出来之后便渐渐趋于成熟。 我们这个系列主要介绍如何一步步手动实现基本的热修复功能&#xff0c;无需使用第三方框架。 在开始学习之前&#xff0c;需要对基本的热…

美团酒旅实时数据规则引擎应用实践

背景 美团点评酒旅运营需求在离线场景下&#xff0c;已经得到了较为系统化的支持&#xff0c;通过对离线数据收集、挖掘&#xff0c;可对目标用户进行T1触达&#xff0c;通过向目标用户发送Push等多种方式&#xff0c;在一定程度上提高转化率。但T1本身的延迟性会导致用户在产生…

开直播辣!生成对抗网络全脉络梳理!

深度学习中最有趣的方法是什么&#xff1f;GAN&#xff01;最近最火的AI技术是什么&#xff1f;GAN&#xff01;&#xff01;你现在脑子里在想什么&#xff1f;搞定GAN&#xff01;&#xff01;&#xff01;【已经大彻大悟要直接报名公开课、挑战万元奖品池的请划到最后】GAN真…

论文浅尝 - ICLR2020 | 具有通用视觉表示的神经机器翻译

论文笔记整理&#xff1a;柏超宇&#xff0c;东南大学在读硕士。来源&#xff1a;ICLR2020 https://openreview.net/forum?idByl8hhNYPS代码链接&#xff1a;https://github.com/cooelf/UVR-NMT简介和动机近年来&#xff0c;不少工作已经证明了视觉信息在机器翻译&#xff08;…

知识图谱能否拯救NLP的未来?

文 | Luke知乎知识图谱是NLP的未来吗&#xff1f;2021年了&#xff0c;不少当年如日中天技术到今天早已无人问津&#xff0c;而知识图谱这个AI界的大IP最火的时候应该是18&#xff0c;19年&#xff0c;彼时上到头部大厂下到明星创业公司都在PR自己图谱NLP布局能够赋予AI认知能力…

论文浅尝 | Data Intelligence 已出版的知识图谱主题论文

本文转载自公众号&#xff1a;DI数据智能。 知识图谱被称为人工智能的基石&#xff0c;它的前身是语义网&#xff0c;由谷歌在2012年率先提出&#xff0c;用于改善自身的搜索业务。Data Intelligence执行…

一步步手动实现热修复(三)-Class文件的替换

*本篇文章已授权微信公众号 guolin_blog &#xff08;郭霖&#xff09;独家发布 本节课程主要分为3块&#xff1a; 1.一步步手动实现热修复(一)-dex文件的生成与加载2.一步步手动实现热修复(二)-类的加载机制简要介绍3.一步步手动实现热修复(三)-Class文件的替换 本节示例所…

Vision Transformer 论文解读

原文链接&#xff1a;https://blog.csdn.net/qq_16236875/article/details/108964948 扩展阅读&#xff1a;吸取CNN优点&#xff01;LeViT&#xff1a;用于快速推理的视觉Transformer https://zhuanlan.zhihu.com/p/363647380 Abstract: Transformer 架构早已在自然语言处理…

长这么大,才知道数据集不用下载可以直接在线使用

每天清晨打开电脑&#xff0c;搜索所需的数据集&#xff0c;点击“Download”&#xff0c;愉快地眯上眼睛&#xff0c;期待n个小时后醒来乖巧下载好的数据&#xff0c;开始放进模型像小仓鼠进滚轮一样快乐奔跑。梦醒时分&#xff0c;一个“Error”蹦进眼睛里&#xff0c;美好码…

会议交流 - CCKS2020 | 2020年全国知识图谱与语义计算大会

OpenKG开放知识图谱&#xff08;简称 OpenKG&#xff09;旨在促进中文知识图谱数据的开放与互联&#xff0c;促进知识图谱和语义技术的普及和广泛应用。

LeetCode 739. 每日温度(单调栈)

1. 题目 根据每日 气温 列表&#xff0c;请重新生成一个列表&#xff0c;对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高&#xff0c;请在该位置用 0 来代替。 例如&#xff0c;给定一个列表 temperatures [73, 74, 75, 71, 69, 72, 76, …

令人振奋的好消息!2016年12月8日Google Developers中文网站发布!

令人振奋的好消息&#xff01; 2016年12月8日Google Developers中文网站发布&#xff01; 以往我们需要访问Android的开发网站、Google的开发网站都需要翻墙&#xff0c;苦不堪言。现在Google发布了中文网站&#xff0c;怎能不让人开心&#xff1f;&#xff01; Android中文…

美团外卖Android Lint代码检查实践

概述 Lint是Google提供的Android静态代码检查工具&#xff0c;可以扫描并发现代码中潜在的问题&#xff0c;提醒开发人员及早修正&#xff0c;提高代码质量。除了Android原生提供的几百个Lint规则&#xff0c;还可以开发自定义Lint规则以满足实际需要。 为什么要使用Lint 在美团…

这篇论文提出了一个文本-知识图谱的格式转换器...

文 | 花小花PosyHello, 大家好&#xff0c;我是小花。今天给大家介绍一篇有野心的paper。为何如此说呢&#xff1f;因为该工作提出了一个知识的格式转换器&#xff0c;用于转换 无结构化的纯文本(Text)和结构化的知识图谱(KG) 。换句话说&#xff0c;给模型一打句子&#xff0c…

论文小综 | Using External Knowledge on VQA

本文转载自公众号&#xff1a;浙大KG。本文作者&#xff1a;陈卓&#xff0c;浙江大学在读博士&#xff0c;主要研究方向为图神经网络和知识图谱表示学习我们生活在一个多模态的世界中。视觉的捕捉与理解&#xff0c;知识的学习与感知&#xff0c;语言的交流与表达&#xff0c;…

如何修改TextView链接点击实现(包含链接生成与点击原理分析)

*这篇文章的主要目的是想要大家学习如何了解实现&#xff0c;修改实现&#xff0c;以达到举一反三&#xff0c;自行解决问题的目的。 某天遇到这么一个需求&#xff1a;在TextView中的文本链接要支持跳转&#xff0c;嗯&#xff0c;这个好办&#xff0c;TextView本身是支持的&…

LeetCode 752. 打开转盘锁(图的BFS最短路径)

1. 题目 你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字&#xff1a; ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’ 。每个拨轮可以自由旋转&#xff1a;例如把 ‘9’ 变为 ‘0’&#xff0c;‘0’ 变为 ‘9’ 。每次旋转都只能旋转一个拨…

使用TensorFlow训练WDL模型性能问题定位与调优

简介 TensorFlow是Google研发的第二代人工智能学习系统&#xff0c;能够处理多种深度学习算法模型&#xff0c;以功能强大和高可扩展性而著称。TensorFlow完全开源&#xff0c;所以很多公司都在使用&#xff0c;但是美团点评在使用分布式TensorFlow训练WDL模型时&#xff0c;发…

会议交流 - CNCC 技术论坛 | NLP中知识和数据怎么选?当然是全都要!——第四届中文信息技术发展战略研讨会...

本文转载自公众号&#xff1a;中国计算机学会 。本论坛将于CNCC2020期间&#xff0c;10月23日下午16:00-18:00&#xff0c;在北京新世纪日航饭店3层南京厅举行。本论坛将邀请多位来自国内著名高校和人工智能企业的知名自然语言处理专家介绍他们在知识图谱、知识获取、预训练模型…