谷歌提出 RNN 版 Transformer,或为长文本建模的当前最优解

c940bbbe5c05d80a107717bbe8700285.png

文 | 小轶

今天给大家介绍一篇谷歌的最新工作,解决的是 Transformer 的长文本处理问题。在原生 Transformer 中,attention 的复杂度是输入序列长度的平方级别,因此限制了它处理长文本的能力。简单来说,本文提出的解决方案就是把 Transformer当做 RNN 中的循环单元来用

和传统 RNN 的区别只在于:传统 RNN encoder 每个循环单元负责编码一个 token,而本文中每个循环单元负责编码一段长度为 的文本片段,且每个循环单元都由构造相同的 Transformer Block 来实现。如此一来,每个片段在编码时,都能用类似 RNN 的方式,同时考虑之前文本中的信息了。

想法很简单,但具体实现起来还是有一些难点。接下来,我们展开介绍一下本文所提出的 Block-Recurrent Transformer

论文标题
BLOCK-RECURRENT TRANSFORMERS

论文链接
https://arxiv.org/pdf/2203.07852.pdf

滑动注意力机制

先来看一下每个 block 的 attention 范围。本文采用的是一种滑动窗口注意力机制,一种专门针对长文档场景的技术。由于文本过长,让每个 token 都 attend 到整个文本中的所有 token 难以实现。在滑动窗口注意力机制中:每个 token 只需要 attend 到它的前 个 token。在本文中,滑动窗口长度 与每个循环单元所需处理的文本长度 相等,即 。

a183677abeccdbef12fd4d04d078da94.png

上图示例中,假设窗口长度为 8;相应地,输入文本也被分为长度为 8 的片段,交由 Transformer blocks 分别处理。图中浅蓝色区域表示了 attention 范围。

图中两个黑框分别对应了两个 Transformer block 。8个红色标记点,代表右下角那个 block 所需要处理的 8 个 token。可以看到,每个 block 的 attention 矩阵大小为 。因此,对于长度为 N 的输入来说,整个模型的 attention 复杂度为 O(N)。

循环单元

接下来,我们就往每个 Transformer block 内部看看,究竟是如何实现循环的。

fbb680603c07dd7609951fa57dea77d0.png
▲传统 RNN 结构

类似传统 RNN,每个循环单元:

  • 输入是input embeddings 和 current state

  • 输出是 output embeddings 和 next state

所以,我们这里所需要理解的两个核心问题也就是:在 Block-Recurrent Transformer 中,这两个输出分别是如何得到的?

垂直方向:如何得到 output embeddings?

下图展示了得到 output embeddings 的过程。

a3d81a404b7e075655c39c5192f0c308.png
▲垂直方向:如何得到 output embeddings

和传统的 Transformer layer 非常相像,差别只集中在红框标识出来的部分。在这一部分中,为了融合上一个循环单元给的 current state 信息,他们将 input embeddings 和 current state vectors 做了一个 cross attention。另一方面,input embeddings 自身也会过一个 self-attention 层。这两部分拼接后,通过线性层融合在了一起。

水平方向:如何得到 next state?

下图展示了得到 next state 的过程。

83dfc67769c955ee1f45a949a863112b.png
▲水平方向:循环单元之间如何传递 state

与传统 Transformer 不同的地方,用红色和粉色框标识了。红色部分,同样是用 cross attention 将 input embeddings 和 current state vectors 融合。粉色部分则是用两个 gate 替代了原本 Transformer 中的残差层。这两个 gate 的作用与 LSTM 中的遗忘门类似,控制了对前一个 state 信息的保留程度。

垂直方向如何多层叠加?

最后还有一个问题。我们都知道,传统 Transformer Encoder 通常是由多个 Transformer Layer 叠加起来的。也就是下图中那个 的意义。那么,在 Block-Recurrent Transformer 中,如何实现垂直方向上的多层叠加呢

304695c2859526615555ae4ddad5c903.png
▲传统 Transformer Encoder

文中讨论了两种方式,Single Recurrent LayerFeedback

b53950b357d4496ee735e3404046cc9f.png
▲Single Recurrent Layer

Single Recurrent Layer (SRL) 的实现比较简单。我简单花了张示意图,大致如上图所示。垂直方向上叠加的多个层:大多数都是普通的 Transformer Layer;只有其中的一层,在水平方向上接收了 current state,做了循环操作。这种方式的运算复杂度也比较低,只相当于在普通的 Transformer 基础上多加了一层 layer 的运算量。也就是说,如果垂直叠加了 12 层,相当于普通 Transformer 叠加 13 层的运算量。

2403d5c5a5f9787d9f4aaaed6eb1313b.png
▲Feedback

Feedback 在 SRL 的基础上,current state 还会广播给其他 Transformer Layer。这些层会用 cross attention 的方式,将 current state 的信息融合。实验中,Feedback 比 SRL 性能有小幅提升,不过它的模型参数更多,训练时长也要陡增 35~40%。

实验

实验在三个长文本数据集上进行,分别是 PG19,arxiv 和 Github。评测任务是自回归语言建模,指标为 perplexity。结果如下图所示。

0680550a50657d25f9ef539c9db8fc94.png

其中,黄色高亮的是本文所提出方法的两个变种,获得了 SOTA 的效果。

红色框出的是三个比较重要的 baseline。其中,上面两个 baseline 是此前经典的长文档处理模型 Transformer-XL 的两个变种。可以看到本文方法的性能要比他们好不少。

最后一行的 Memorizing Transformer 同样是谷歌的工作,刚刚被 ICLR'2022 录用。其基本思想是:编码长文本时,模型一边往下读,一边把之前见过的所有 token 保存在一个数据库中;在读当前片段时,会用 kNN 的方式找到数据库中相似的内容,然后和当前内容同时交互编码。

可以看到,这个模型的效果其实和本文方法相差不大,但复杂度要高很多,运算时延也要长[1]。虽然...但是,本文并没有把 Memorizing Transformer 的 step time 明确写在表格中。个人感觉有些不妥。

小结

本文的想法其实很简单:把 Transformer 作为 RNN 的循环单元,解决长文本问题。我相信想到过类似 idea 的应该早有人在。我确实也看到了类似的 previous works,不过它们的模型复杂度和性能效果都逊于本文。

就本文来说,只是拥有一个 idea 肯定是不够的,还要解决很多问题,包括:

  • 相邻的 block 之间如何以适配 Transformer 的方式传递信息

  • 模型设计的时候还要同时考虑到将运算复杂度的降到最低,能并行运算的绝不搞串行

  • 还有最后工程实现上的一些问题。比如说,模型训练的时候是否会像传统 RNN 一样遇到梯度消失的问题?如果有,该如何解决?我在本篇推送中,没有涵盖这方面的讨论。原文确实提了一些方法来提高模型训练的稳定性。

从一个宏观的 idea 到真正落实,还是有很长距离的。所以还是不能轻易地说一篇论文的 idea “too simple”。

往期回顾

  1. 《Longformer:超越RoBERTa,为长文档而生的预训练模型》

  2. 《告别自注意力,谷歌为Transformer打造新内核Synthesizer》

  3. 《Google综述:细数Transformer模型的17大高效变种》

5de9b4285eab3f403d9830ee4f4d9c02.png萌屋作者:小轶

是小轶,不是小秩!更不要叫小铁!高冷的形象是需要大家共同维护的!作为成熟的大人,正在勤俭节约、兢兢业业,为成为一名合格的(但是仍然发量充足的)PhD而努力着。日常沉迷对话系统。说不定,正在和你对话的,并不是不是真正的小轶哦(!?)

“高冷?那是站在冰箱顶端的意思啦。”  ——白鹡鸰

作品推荐:

  1. 写了一篇关于 NLP 综述的综述!

  2. 全球44家机构,55位大佬,历时两年,打造最强NLG评测基准!

  3. 谷歌重磅:可以优化自己的优化器!手动调参或将成为历史!?

  4. ACL20 Best Paper揭晓!NLP模型评价体系或将迎来重大转折

453dfc976b7786243f71db2c0ee0d350.png后台回复关键词【入群

加入卖萌屋NLP、CV与搜推广求职讨论群

后台回复关键词【顶会

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

106cd423dd016d4e6af3a46010d0a1be.gif 505d76ef7c462fea30a226604ba22800.png

[1] Memorizing Transformers https://arxiv.org/abs/2203.08913

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

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

相关文章

Spring Cloud构建微服务架构:服务容错保护(Hystrix依赖隔离)【Dalston版】

前言 在上一篇《Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)》中,我们已经体验了如何使用HystrixCommand来为一个依赖资源定义服务降级逻辑。实现方式非常简单,同时对于降级逻辑还能实现一些更加复杂的…

重点领域知识工程课程群虚拟教研室建设启动会暨第一次教学研讨会在线召开...

重点领域知识工程课程群虚拟教研室启动会暨第一次教学研讨会于2022年10月11日晚在线召开。重点领域教学资源建设项目管理办公室相关负责人、中国中文信息学会语言与知识计算专委会主任李涓子、天津大学智能与计算学部主任李克秋出席会议并致辞。天津大学人工智能学院院长胡清华…

LeetCode 556. 下一个更大元素 III

1. 题目 给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n。如果不存在这样的32位整数,则返回-1。 示例 1: 输入: 12 输出: 21示例 2: 输入: 21 输出: -1来源:力扣&#x…

这可能是你与 AI 大神们近距离接触的唯一机会……

明人不说暗话:作为粤海街头放飞梦想的有志青年,他们可能是国内最大胆的「狗仔队」。从2016年成立至今,他们报道过:国内外数十场 AI 学术会议动态,写下老中青研究者们在会场前线的精神风采AI 领域的每一个最新研究突破&…

Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)【Dalston版】

前言 在微服务架构中,我们将系统拆分成了一个个的服务单元,各单元应用间通过服务注册与订阅的方式互相依赖。由于每个单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服务自身问题出现调…

论文浅尝 | 基于注意力图卷积神经网络的依存驱动关系抽取

笔记整理:王大壮论文链接:https://aclanthology.org/2021.acl-long.344.pdf动机句法信息,特别是依存树,已经被广泛应用于关系提取,以更好地分析与给定实体相关联的上下文信息。然而大多数现有的研究都饱受依赖树噪声的影响,特别是当它们自动生…

别再龟速炼丹了!聊聊怎样科学提升训练效率

文 | Horace He等编 | Juniper源 | 机器之心深度学习是门玄学?也不完全是。每个人都想让模型训练得更快,但是你真的找对方法了吗?在康奈尔大学本科生、曾在 PyTorch 团队实习的 Horace He 看来,这个问题应该分几步解决&#xff1a…

LeetCode 第 17 场双周赛(469/897,前52.3%)

文章目录1. 比赛结果2. 题目LeetCode 5143. 解压缩编码列表 easyLeetCode 5144. 矩阵区域和 mediumLeetCode 5145. 祖父节点值为偶数的节点和 mediumLeetCode 5146. 不同的循环子字符串 hard1. 比赛结果 做出来了1, 3两题,第2题在比赛结束后10分钟提交通过。 2.…

Spring Cloud构建微服务架构:分布式配置中心【Dalston版】

Spring Cloud Config是Spring Cloud团队创建的一个全新项目,用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,它分为服务端与客户端两个部分。其中服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连…

图谱实战 | 知识图谱在美团搜索酒旅场景认知中的应用

分享嘉宾:陈骐 美团 高级算法专家编辑整理:毛佳豪 中国平安浙江分公司(实习)出品平台:DataFunTalk导读:知识图谱凭借能够以图模型描述知识和世界万物关联关系的特性,在各行业领域大放异彩。与此同时,知识图…

AI技术在空气净化机器人中的高能应用

本文转载自公众号“夕小瑶的卖萌屋”,专业带逛互联网算法圈的神操作 -----》我是传送门 关注后,回复以下口令: 回复【789】 :领取深度学习全栈手册(含NLP、CV海量综述、必刷论文解读) 回复【入群】&#xf…

Spring Cloud构建微服务架构:服务消费(Feign)【Dalston版】

通过前两篇《Spring Cloud构建微服务架构:服务消费(基础)》和《Spring Cloud构建微服务架构:服务消费(Ribbon)》,我们已经学会了在Spring Cloud中基本的服务调用方式。本文我们将继续介绍Spring…

LeetCode 1317. 将整数转换为两个无零整数的和

1. 题目 「无零整数」是十进制表示中 不含任何 0 的正整数。 给你一个整数 n,请你返回一个 由两个整数组成的列表 [A, B],满足: A 和 B 都是无零整数A B n 题目数据保证至少有一个有效的解决方案。 如果存在多个有效解决方案&#xff…

预训练模型对实体的表示能力差?一个简单有效的解法来了(开源)

本文转载自公众号“夕小瑶的卖萌屋”,专业带逛互联网算法圈的神操作 -----》我是传送门 关注后,回复以下口令: 回复【789】 :领取深度学习全栈手册(含NLP、CV海量综述、必刷论文解读) 回复【入群】&#xf…

图谱实战 | 深度应用驱动的医学知识图谱构建

分享嘉宾:徐美兰 浙江数字医疗卫生技术研究院 数字医学知识中心主任编辑整理:李杰 京东出品平台:DataFunTalk导读:数研院这些年在知识图谱建设上取得了丰硕成果,今天我们将图谱构建过程中的经验、心得分享给大家&#…

朴素贝叶斯法(Naive Bayes,NB)

文章目录1. 朴素贝叶斯法的学习与分类1.1 基本方法2. 参数估计2.1 极大似然估计2.2 学习与分类算法2.2.1 例题2.2.2 例题代码2.3 贝叶斯估计(平滑)2.3.1 例题2.3.2 例题代码3. 自编程实现NB4. sklearn.naive_bayes1. 朴素贝叶斯法的学习与分类 1.1 基本…

《Easy RL:强化学习教程》出版了!文末送书

作为人工智能里最受关注的领域之一,强化学习的热度一直居高不下,但它的学习难度也同样不低。在学习强化学习的过程中,遇到了有无数资料却难以入门的问题,于是发起了Datawhale强化学习项目,希望自学的同时帮助更多学习者…

Spring Cloud构建微服务架构:服务消费(基础)【Dalston版】

通过上一篇《Spring Cloud构建微服务架构:服务注册与发现》,我们已经成功地将服务提供者:eureka-client或consul-client注册到了Eureka服务注册中心或Consul服务端上了,同时我们也通过DiscoveryClient接口的getServices获取了当前…

论文浅尝 | Temporal Knowledge Graph Completion Using Box Embeddings

笔记整理:杨露露,天津大学硕士论文链接:https://www.aaai.org/AAAI22Papers/AAAI-6210.MessnerJ.pdf动机时态知识图谱补全(TKGC)中的主要挑战是额外学习时间戳嵌入,以便嵌入模型根据关系、实体和时间戳嵌入…

别再无脑wwm了,在下游任务中不一定有效

本文转载自公众号“夕小瑶的卖萌屋”,专业带逛互联网算法圈的神操作 -----》我是传送门 关注后,回复以下口令: 回复【789】 :领取深度学习全栈手册(含NLP、CV海量综述、必刷论文解读) 回复【入群】&#xf…