万字长文带你一览ICLR2020最新Transformers进展(下)
原文链接:http://gsarti.com/post/iclr2020-transformers/
作者:Gabriele Sarti
编译:朴素人工智能
3. Embeddings
原始的Transformer依靠两组嵌入来表示输入序列:
词汇表中存在的每个标记的学习单词嵌入(word embedding),用作模型的标记向量表示。
位置嵌入(position embedding),用于注入有关token在序列中的位置的信息。对于位置
和维度,位置嵌入与正弦周期函数相对应,根据经验显示这些正弦周期函数与通过学习获得的嵌入效果相当:
对于能够在多个输入段上运行的类似BERT的模型,还使用第三组可学习的分段嵌入(segment embedding)来区分属于不同句子的token。
所有这些嵌入都具有相同的尺寸,并被加在一起以获得输入最终的表示。本节介绍的方法旨在给嵌入注入更多结构,或优化其尺寸以提高效率。
Position-Aware Complex Word Embeddings
Introduced in: Encoding word order in complex[1] embeddings by Wang et al.
尽管PE在输入中捕获了不同的位置,但它们没有明确考虑这些位置之间的关系,即顺序关系(标准PE只关注距离,不关注先后,可以自己推导看看)。Transformer-XL已通过利用单词之间的相对距离而不是原始位置索引来解决此问题。
本文提出的改进是将单词嵌入泛化为与位置相关的连续函数,并扩展到复数值域,以便从更丰富的表示形式中获益。生成的复值嵌入(complex-valued embeddings)引入了新的关于幅度、频率和初始相位的参数,这些参数确定了嵌入的各种属性(例如位置敏感性)。实验结果表明,具有参数共享方案的复值嵌入优于以前的嵌入方法,而可训练参数的数量却没有显着增加。
Hierarchical Embeddings
Introduced in: Tree-Structured Attention with Hierarchical Accumulation[2] by Nguyen et al.
在之前对树状结构注意的概述中,我们看到了如何使用层次累加来形成基于非叶子节点后代的表示。但是,此过程的缺点是没有考虑后代的层次结构。
通过将垂直和水平嵌入矩阵连接起来,分别表示分支内部的层次结构顺序和子树中同级节点之间的关系,使得分层嵌入(Hierarchical embeddings) 可以注入更多的结构信息。这些嵌入在注意力头之间共享,因此仅占总参数的0.1%。
Factorized Embedding Parametrization
Introduced in: ALBERT: A Lite BERT for Self-supervised Learning of Language Representations[3] by Lan et al.
在基于BERT和Transformer-XL的最新模型中,embedding大小
与隐藏层的大小有关,即。这在实际操作时有很大的弊端:要增强模型的上下文表示能力通常要增大隐层,这会导致嵌入矩阵的变大,因为,其中是词汇量。即使对于相对较小的隐藏层尺寸,这中关系也会导致数十亿个参数,而且这些参数在训练期间很少更新。
ALBERT作者建议在
和(我感觉,这个应该是)之间插入一个投影使两个维度独立,这种方法在时对减少参数量特别有效。一个, 包含21M参数(表3中为89M,而BERT为110M)的ALBERT,可以在许多下游任务上获得与具有相同配置的BERT基础相当的性能。
4. 模型架构
原始的Transformer体系结构由编码器和解码器组成,每个编码器和解码器由相同层的堆叠序列组成,这些堆叠序列对具有相同尺寸的嵌入进行转换(因此称为Transformer)。Transformer编码器的每一层都由两个子层:一个多头自我注意机制和一个前馈网络组成,前者被残差连接所包围,然后进行层归一化。解码器还包括第三层,对编码器的输出执行多头自我注意,并解码器的自注意力子层也和编码器不同。因为由于自回归语言模型的要求,这里需要避免后文参与运算(否则就泄露了)。
Transformer的双向变体(如BERT)放弃了解码器结构,仅专注于编码器,以生成各种任务(包括MLM)所需的上下文嵌入。
特别的,Transformer-XL为Transformer网络引入了一种内存概念,其中在前段中获得的隐藏状态会被重用以更好地对长程依赖性进行建模,从而防止上下文碎片化。
关于Transformer-XL可以参考我们之前的文章[预训练语言模型专题] Transformer-XL 超长上下文注意力模型。
以下方法尝试在当前结构的基础上进一步改善长程建模、减少参数数量或优化模型执行的计算。
Compressive Memory
Introduced in: Compressive Transformers for Long-Range Sequence Modelling[4] by Rae et al.
在Transformer-XL的循环存储方法中,旧记忆会被丢弃,从而能够以先进先出的方式存储新的记忆。此方法仅考虑先后远近,而不考虑可能会丢弃的信息的相关性。
Compressive Transformers添加了新的压缩记忆机制,保存历史记忆的粗糙表示,而非直接丢弃旧记忆。作者尝试使用多种压缩函数,最后选择一种注意力重建损失函数(attention-reconstruction loss),该损失会丢弃网络未被注意(not attended)到的信息。压缩内存的使用显示了对少见单词建模的巨大改进,实验证明网络通过压缩机制学习到了如何保留有用的信息。
Reversible Layers
Introduced in: Reformer: The Efficient Transforme[5]r by Kitaev et al.
可逆性(reversibility)背后的主要思想是可以通过仅使用后续层的激活情况和模型参数来恢复网络任意层中的激活情况。当与Transformer模型结合时,它变得特别有趣,因为Transformers通常由一大堆堆叠的层组成,并且模型的内存复杂度随层数线性增长。
通过将自注意力和前馈子层组合成为单个可逆层,Reformer在Transformer体系结构中引入了可逆性。这允许仅在存储最上层的激活情况,并通过在反向传播期间反转各层来恢复所有其他激活,从而使模型大小与层数无关。通过在前馈和可逆层中进行分块独立计算,还可以进一步改进空间复杂性。
Cross-Layer Parameter Sharing
Introduced in: ALBERT: A Lite BERT for Self-supervised Learning of Language Representations[6] by Lan et al.
跨层参数共享是一种简单但非常有效的方法,可以大大减少深度Transformer模型内部的参数数量,正如ICLR 2019 在Universal Transformer[7]论文中所展示的那样。
ALBERT作者对自注意子层和前馈子层的跨层参数共享进行了实验,发现共享权重矩阵可以将模型的总参数数量大大减少,当结合前面的嵌入分解使
时,模型大小可以变为原来的七分之一,而对最终结果的影响很小。参数共享还可以使层间的过渡更加平滑,有效地稳定网络参数。
Adaptive Depth Estimation
Introduced in: Depth-Adaptive Transformer[8] by Elbayad et al.
不管输入语句的复杂度如何,当前模型为每个输入执行的计算都是固定的。这个问题已经在Universal Transformer中被提出,Universal Transformer建议使用自适应计算时间(ACT)重复使用相同的层,但是由此导致的每层权重的增加大大降低了网络的计算速度。
Depth-adaptive Transformer通过使用标准Transformer编码器对序列进行编码并以可变步长对其进行解码来解决此问题。为此,将一个分类器连接到解码器的每层后面,然后使用首先在计算机视觉领域引入的anytime prediction方法,通过如图所示的对齐和混合训练(aligned and mixed training)对整个集合进行训练。作者探索了不同的机制来自适应地控制序列级别和token 级别的计算量,并得出结论:自适应可以缩减超过75%的解码器层,而不会对机器翻译任务造成任何性能损失。
(这篇没怎么看懂,大家可以参考知乎上的一些介绍)
结论
在ICLR 2020上引入的许多方法为解决原始Transformer从自注意力计算到模型结构本身的问题提供了大量的解决方案。
其中的许多方法似乎对Transformer的未来发展很有帮助,而且重要的是,一旦其中一些方法被组合起来,就有可能相互补充产生更进一步的改进。
我希望在ICLR 2021能看到更多的工作,将现存的策略组合在一起,呈现它们之间最有效的组合。
参考资料
[1]
Encoding word order in complex: https://iclr.cc/virtual_2020/poster_Hke-WTVtwr.html
[2]
Tree-Structured Attention with Hierarchical Accumulation: https://iclr.cc/virtual_2020/poster_HJxK5pEYvr.html
[3]
ALBERT: A Lite BERT for Self-supervised Learning of Language Representations: https://iclr.cc/virtual_2020/poster_H1eA7AEtvS.html
[4]
Compressive Transformers for Long-Range Sequence Modelling: https://iclr.cc/virtual_2020/poster_SylKikSYDH.html
[5]
Reformer: The Efficient Transforme: https://iclr.cc/virtual_2020/poster_rkgNKkHtvB.html
[6]
ALBERT: A Lite BERT for Self-supervised Learning of Language Representations: https://iclr.cc/virtual_2020/poster_H1eA7AEtvS.html
[7]
Universal Transformer: https://arxiv.org/abs/1807.03819
[8]
Depth-Adaptive Transformer: https://iclr.cc/virtual_2020/poster_SJg7KhVKPH.html
往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑AI基础下载(pdf更新到25集)机器学习的数学基础专辑本站qq群1003271085,加入微信群请回复“加群”获取一折本站知识星球优惠券,复制链接直接打开:https://t.zsxq.com/yFQV7am喜欢文章,点个在看
万字长文带你一览ICLR2020最新Transformers进展(下)相关推荐
- 万字长文带你一览ICLR2020最新Transformers进展(上)
原文链接:http://gsarti.com/post/iclr2020-transformers/ 作者:Gabriele Sarti 编译:朴素人工智能 Transformer体系结构最初是在At ...
- 万字长文带你 搞定 linux BT 宝塔面板 之外网上快速搭建苹果CMS电影网站
文章目录 万字长文带你搞定宝塔面板 一.本地搭建宝塔面板及安装ecshop 1.1前言 1.2面板特色功能 1.3安装环境说明 1.4安装BT面板 1.5常用管理命令 1.6 BT面板一键安装LAMP ...
- 【NLP】万字长文带你解读『虚假新闻检测』最新进展
NewBeeNLP原创出品 公众号专栏作者 @byn blog | https://blog.csdn.net/byn12345 互联网时代,假新闻铺天盖地,而且极具迷惑性,因此假新闻检测任务对逻辑的 ...
- 经过负载均衡图片加载不出来_吐血输出:2万字长文带你细细盘点五种负载均衡策略。...
Dubbo的五种负载均衡策略 2020 年 5 月 15 日,Dubbo 发布 2.7.7 release 版本.其中有这么一个 Features 新增一个负载均衡策略. 熟悉我的老读者肯定是知道的, ...
- 吐血输出:2万字长文带你细细盘点五种负载均衡策略。
Dubbo的五种负载均衡策略 2020 年 5 月 15 日,Dubbo 发布 2.7.7 release 版本.其中有这么一个 Features 新增一个负载均衡策略. 熟悉我的老读者肯定是知道的, ...
- 万字长文带你了解推荐系统全貌!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:yijiapan,腾讯,来源:海边的拾遗者 有幸参与了几个业务推荐 ...
- FEMS综述: 如何从微生物网络中的“毛线球”理出头绪(3万字长文带你系统学习网络)...
如何从微生物网络中的"毛线球"理出头绪 From hairballs to hypotheses–biological insights from microbial Lisa R ...
- 万字长文带你解析23 个问题 TCP 疑难杂症!
作者 | 是Yes呀 责编 | 王晓曼 来源 | yes的练级攻略(ID:yes_java) 在进入今天主题之前我先抛几个问题,这篇文章一共提出 23 个问题. TCP 握手一定是三次?TCP 挥手一 ...
- 万字长文带你探究 Docker 容器化技术背后的黑科技
公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 容器的优势 传统模式的部署,直接将多个应用运行在物理服务器上,如果其中一个应用占用了大部分资源,可能会导致其他应用 ...
最新文章
- CVPR 2022 | 室外多模态3D目标检测(DeepFusion)
- 面试:讲一讲Spring中的循环依赖
- php 常用字符串函数
- php -- PDO事务处理
- java判断ajax请求_判断Httprequest 是否ajax 请求的方法
- JavaScript——创建对象
- 解决checkbox与对应文字不对齐的问题
- e盘是否具有读写权限_轻松搭建MySQL主从复制、读写分离(双机热备)
- ArcGIS JavaScript API本地部署离线开发环境
- SpringBoot:Mybatis + Druid 数据访问
- Python Flask Web 第九课 —— flask 扩展小结
- 自定义注解+AOP,优雅的打印方法接受和返回的参数内容
- creo图纸管理系统 creo企业图纸管理方案
- python爬虫常用模块介绍_python爬虫常用的模块分析
- 【递归入门】走迷宫(c++)
- php pageoffice安装,senman
- 【IntelliJ IDEA】如何汉化成简体中文
- Linux MySQL数据库冷迁移采坑记录
- 【C/C++】【NOI】雇佣兵代码及分析理解
- GEE 形态学运算Morphological Operations