如何提升大规模Transformer的训练效果?Primer给出答案

032d5aac79ad08c80cece6886ccda5b0.png

文 | 舞风小兔
编 | 智商掉了一地

如何进一步提升大规模Transformer的训练效果?Primer给出了答案,一起来看看吧!

Transformer是深度学习界的明星模型。由于其具有高度的并行性,十分容易在并行计算系统中扩展至超大规模。自然语言处理任务一路见证了Transformer模型规模的爆炸式增长。

微软和Nvidia不久前联合发布的"Megatron-Turning"更是创造了最新记录:其参数数目已经达到了恐怖的5300亿。大规模Transformer通过横扫各大任务榜单,向所有人展示了“大模型+大数据”这一简单方法的高度通用性。

在更加有效的深度学习技术出现之前,许多已经正在使用Transformer的任务难免都会期待是否拥有一个更大的模型,就能够更进一步提升应用任务的效果?但训练大规模Transformer的高昂成本也同样令人望而生畏。大规模Transformer,让人又爱又恨。本文要介绍的Primer就是在该背景下开展的一个工作。

论文标题:
Primer: Searching for Efficient Transformers for Language Modeling

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

论文代码:
https://github.com/google-research/google-research/tree/master/primer

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

1 为什么会有Primer?

针对训练大规模Transformer存在高昂成本的问题,作者试图回答是否能够通过模型架构自动搜索技术,找到一个高效Transformer变种,实现以下目标:

  1. 给定学习效果,相比标准Transformer,这个新的变种有着更低的训练代价。

  2. 给定学习代价,相比标准Transformer,这个新的变种达到更好的学习效果。

作者给出的答案就是Primer(PRIMitives searched transformER)。

2 什么是Primer?

Primer 对Transformer的结构给出了两处修改,在下图中用红色圈出。在论文进行的各项实证研究中,这两项修改最为鲁棒。论文作者建议:Transformer语言模型的使用者如果想尝试改进自己的模型,推荐从这两项修改开始。

9fec074eb3de8441cc549c4e23538e95.png
▲Primer对Transformer结构的两处重要修改

这两处由遗传算法自动搜索到的修改分别是:

  1. 在Feed Forward 模块(FFN)部分,将原来的ReLU激活修改为Squared ReLU,也就是在ReLU之后再添加一个Square运算。作者声称这个小小的修改最为重要,十分有助于加速模型在更短时间内收敛到同样的学习效果。

  2. 在自注意力机制中、、 映射之后添加 Depthwise 卷积,称之为Multi-DConv Attention (MDHA);

上面两幅图已十分所见即所得地解释了论文的结果。对经常与深度学习算法打交道的同学来说,根据这幅图已经可以在1分钟之内修改好自己的Tranformer模型,将其变为Primer。然后, 保持所有其他因素不变 去试试能否在自己的任务上复现论文的效果:在更短的时间内,模型收敛到和原来模型同样的精度。

作者为确定搜索出的模型结构具有广泛的实用性,做了大量的覆盖性实验验证,验证变量包括:模型参数规模(20M到1.9B)、训练时长(到加速器小时)、多个数据集(LM1B,C4,PG19)、多个硬件平台(TPUv2,TPUv3,TPUv4 和 V100)、将Primer的修改插入多个Transformer 代码库(Tensor2Tensor[1], Lingvo[2] 和 T5[3])中的多个模型(dense Transformer,sparse mixture-of-experts Switch Transformer, Synthesizer)。在大量的试验中,作者发现只有上面两个修改具有广泛的有效性。作者还列举了一些有效但不总是有效的修改,给出了他们在实验中的表现:

  1. 共享和的 depthwise 表示:共享一部分和映射的映射矩阵,由图1中的MDHA后加depthwise 卷积计算得到,,实验发现:大部分时候这个修改对学习效果都是有害的。我们可以看到,这是一个令人类专家看来十分奇怪的模型修改,很像是一个典型的自动搜索产生的修改方案,论文中还给出了类似这样的奇怪修改,大部分也都没有能够改进学习代价。

  2. 归一化层添加位置:标准的Transformer实践在自注意力模块(Self-Attention)和FFN(Feed Forward)层之前添加归一化层,论文作者尝试在自注意力模块之前,FFN模块之后添加归一化层,这个修改会有帮助,但并不总是有帮助

  3. 自定义归一化:Primer使用自定义归一化: 替代,这一修改会有帮助,并不总是有效。

  4. Bottleneck 映射大小的修改:将原始Transformer模型隐藏层大小从512维减少到384,但将FFN模块的Upwards 映射部分的维度从2048增加到4608,收敛效果在模型参数小于35M时有明显的改善,但对更大的模型有效性降低

3 Scaling Law 对比

由于这篇论文是一篇实验研究,文章用了长达35页的篇幅解释了在TensorFlow中进行模型架构搜的设计、搜索空间设计、诸多无规律的修改。阅读这篇文章时,研究神经网络架构搜索的读者,可以只关注模型搜索空间设计和搜索算法设计部分研究自然语言处理任务本身的读者,可以只关注上面两个简单的结论。在这里我们只重点地摘要作者如何通过实验验证Primer能够减少大规模Transformer训练代价这一关键论点。

作者对Transformer模型的以下几组变量进行全排列组合:(1)层数:、(2)隐藏层大小 、(3)FFN 模块upwards projection 比率 ,产生出模型参数从23M到385M变化的一系列模型。作者在LM1B搜索任务上,使用序列长度64,batch大小4096 token,分别在TPUv2和V100上训练24小时, 用Tensor2Tensor和T5中的几种典型Transformer变种作为对比对象,与Primer进行对比。

6e05b240d260caae14e6be768aaa5486.png
▲35M模型参数下,几种Transformer模型与Primer加速因子对比

上图绘制了35M参数模型的实验结果,以标准Transformer模型训练24小时的学习效果为基准,横轴是几种Transformer模型变种,纵轴是各个变种达到基准效果的加速比,从中可以看到Primer在所有实验组中都有1.7倍以上的加速率。

3edaf55b477f90d9d261e802628e5338.png
▲几种Transformer模型与Primer scaling曲线对比

上图又进一步展示了Primer在所有模型规模下的实验数字。横轴是时间,纵轴是验证集上的损失,不同颜色的曲线代表不同的模型规模。左图是对所有Transformer变种用MSE实验去拟合出达到给定精度的最佳模型大小,绘制成二维线图,也就是scaling law[4]曲线。可以看到Primer的scaling曲线在最下方,这意味着在所有模型大小情况下,Primer都能更快地达到指定学习精度。

4 小结与讨论

尽管这篇论文长达35页,但是关键结论十分简单,而剩下的篇幅都在阐述如何进行模型搜索和在不同任务上重复验证Primer能否节约Transformer的训练代价,对不关心这些细节的实践者,完全可以跳过作者的长篇大论来直接使用作者的结论。

关于这两个由遗传算法自动搜索到的修改,第一个:squared ReLU 在其它学习任务中已经被多次使用,能够进一步增强ReLU的激活值,或许容易被人类专家注意和想到。第二个:卷积能增加特征向量的局部稳定性,由于,, projection已经足够简洁,在和 projection之后添加depthwise卷积,可能是一个连人类专家也不容易主动尝试的想法,被自动搜索找到了。

读过这篇论文,Primer依然可能有一定的限制。这里指出值得注意的三点。

  1. 尽管Primer的目标是减少大规模Transformer训练的代价,但是文章实验的大模型也远远小于GPT-3,当模型参数进一步提升时,这两个修改是否有效,也未经作者的验证。可能还是在从侧面说明,尽管作者想使用自动搜索模型结构这项技术去减少Transformer的训练代价,但进行实验本身的代价依然过于昂贵。

  2. 作者自己也指出,实验只在自回归语言模型上进行,而初步测试表明了这两项修改应用于其它类型任务时并不总是有效,也就是说这两项修改有可能只适用于部分任务

  3. 一个小小的遗憾是作者在搜索空间构造时并没有对自注意力机制这样的高阶模块的潜在变种进行搜索,毕竟这是Transformer的核心。由于这一步也存在着大量的选择空间,或许也潜藏着压缩Transformer模型训练代价的可能性。

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

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

后台回复关键词【顶会

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

10dcb09d89e7c41ffd2cfc47e8a33c85.gif 5c627aa4eabdf14f3f867a9c5f4ebe2d.png

[1] Ashish Vaswani, Samy Bengio, Eugene Brevdo, Francois Chollet, Aidan N. Gomez, Stephan Gouws, Llion Jones, Łukasz Kaiser, Nal Kalchbrenner, Niki Parmar, Ryan Sepassi, Noam Shazeer, and Jakob Uszkoreit. Tensor2tensor for neural machine translation. arXiv preprint arXiv:1803.07416, 2018. (https://arxiv.org/pdf/1803.07416.pdf)

[2] Lingvo: A TensorFlow Framework for Sequence Modeling. (https://blog.tensorflow.org/2019/02/lingvo-tensorflow-framework-for-sequence-modeling.html)

[3] Colin Raffel, Noam Shazeer, Adam Roberts, Katherine Lee, Sharan Narang, Michael Matena, Yanqi Zhou, Wei Li, and Peter J. Liu. Exploring the limits of transfer learning with a unified text-to-text transformer. Journal of Machine Learning Research, 21(140):1–67, 2020. (https://arxiv.org/pdf/1910.10683.pdf)

[4] Jared Kaplan, Sam McCandlish, Tom Henighan, Tom B. Brown, Benjamin Chess, Rewon Child, Scott Gray, Alec Radford, Jeffrey Wu, and Dario Amodei. Scaling laws for neural language models. arXiv preprint arXiv:2001.08361, 2020. (https://arxiv.org/abs/2001.08361)

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

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

相关文章

会议交流|大模型与图学习等知识图谱相关技术实践探索

2021年,在疫情隔离和复杂国际形势的背景下,我们越发认识到重视核心基础技术,对保持国家独立自主发展的关键价值,互联网和科技行业也面临着新的挑战和变革机遇,新的AI技术正发挥越来越大的作用,AI技术本身正…

Kafka文件存储机制那些事

Kafka是什么 Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡…

LeetCode 392. 判断子序列(双指针二分查找)

1. 题目 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长&#xff08;长度 ~ 500,000&#xff09;&#xff0c;而 s 是个短字符串&#xff08;长度 <100&#xff09;。 字符串的一个子序列是原始…

仅仅因为方法 Too Simple 就被拒稿,合理吗?

文 | 小戏编 | 小轶如果你看到自己实验行之有效的论文被退稿&#xff0c;而收到的退稿理由仅仅是“方法太简单”&#xff0c;你会怎么想&#xff1f;这两天在推特上&#xff0c;佐治亚理工的 Riedl 教授吐槽了自己收到的 AAAI phase 1 退稿理由居然是因为“这方法似乎太简单”&…

论文浅尝 | 从具有数值边缘属性的知识图谱中学习嵌入

论文笔记整理&#xff1a;朱珈徵&#xff0c;天津大学硕士链接&#xff1a;https://www.ijcai.org/proceedings/2021/0395.pdf动机从遗传数据到社会网络&#xff0c;在越来越多的场景下与知识图谱边缘相关的数值已经被用来表示不确定性、边的重要性&#xff0c;甚至是带外知识。…

LeetCode 459. 重复的子字符串(数学)

1. 题目 给定一个非空的字符串&#xff0c;判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母&#xff0c;并且长度不超过10000。 示例 1: 输入: "abab" 输出: True 解释: 可由子字符串 "ab" 重复两次构成。示例 2: 输入: &quo…

被放养导致申博论文难产,该不该硬gang导师?

最近一位粉丝给我发长文求助&#xff0c;说他因为申博论文的事情快崩溃了&#xff0c;让我给点建议。我把经过贴在这里跟大家探讨一下&#xff1a;985专硕一枚&#xff0c;CV方向&#xff0c;最近想申请国外博士&#xff0c;快被论文逼疯了。提交了初稿&#xff0c;隔了一个月&…

会议交流 | 第十五届全国知识图谱与语义计算大会(CCKS 2021)12月25日线上召开...

勘误&#xff1a;张伟老师为华东师范大学紫江青年学者OpenKGOpenKG&#xff08;中文开放知识图谱&#xff09;旨在推动以中文为核心的知识图谱数据的开放、互联及众包&#xff0c;并促进知识图谱算法、工具及平台的开源开放。点击阅读原文&#xff0c;进入 CCKS 2021 网站。

美团性能分析框架和性能监控平台

以下是我在 Velocity China 2014 做的题为“美团性能分析框架和性能监控平台”演讲的主要内容&#xff0c;现在以图文的形式分享给大家。 今天讲什么&#xff1f; 性能的重要性不言而喻&#xff0c;需要申明的是&#xff0c;我们今天不讲业界最佳性能实践&#xff0c;这些实践已…

LeetCode 581. 最短无序连续子数组(排序单调栈)

文章目录1. 题目2. 解题2.1 排序2.2 4次遍历2.3 单调栈1. 题目 给定一个整数数组&#xff0c;你需要寻找一个连续的子数组&#xff0c;如果对这个子数组进行升序排序&#xff0c;那么整个数组都会变为升序排序。 你找到的子数组应是最短的&#xff0c;请输出它的长度。 示例…

史上最大多模态图文数据集发布!

文 | 付瑶编 | 小轶最近多模态研究圈中出现了一个扬言 “史上最大规模”的多模态图文数据集&#xff1a;LAION-400。该数据集在今年8月完全公开&#xff0c;共计公开了 4亿图文对&#xff0c;可以依据不同的用途提供不同大小版本的子数据集。据小编调查&#xff0c;在 LAION-40…

图谱实战 | 知识图谱构建的一站式平台gBuilder

OpenKG地址&#xff1a;http://openkg.cn/tool/gbuilder网站地址&#xff1a;http://gbuilder.gstore.cn知识图谱能够让机器去理解和认知世界中的事物和现象&#xff0c;并解释现象出现的原因&#xff0c;推理出隐藏在数据之间深层的、隐含的关系&#xff0c;使得知识图谱技术从…

LeetCode 861. 翻转矩阵后的得分(贪心)

1. 题目 有一个二维矩阵 A 其中每个元素的值为 0 或 1 。 移动是指选择任一行或列&#xff0c;并转换该行或列中的每一个值&#xff1a;将所有 0 都更改为 1&#xff0c;将所有 1 都更改为 0。 在做出任意次数的移动后&#xff0c;将该矩阵的每一行都按照二进制数来解释&…

一文跟进Prompt进展!综述+15篇最新论文逐一梳理

文 | ZenMoore编 | 小轶自从 Dr.Pengfei Liu 的那篇 prompt 综述发表开始&#xff0c;prompt 逐渐红得发紫。近期清华、谷歌等单位你方唱罢我登场&#xff0c;涌现了好多好多 prompt 相关的论文。无论是工业界还是学术界&#xff0c;想必大家都在疯狂 follow。不少伙伴肯定从老…

论文浅尝 | PairRE: 通过成对的关系向量实现知识图谱嵌入

笔记整理&#xff1a;黎洲波&#xff0c;浙江大学硕士&#xff0c;研究方向为自然语言处理、知识图谱。研究背景知识图谱因其在问答、语义解析和命名实体消歧等任务取得了良好的效果而受到广泛关注&#xff0c;而大部分知识图谱都存在不全和缺失实体链接的问题&#xff0c;所以…

Java内存访问重排序的研究

什么是重排序 请先看这样一段代码1&#xff1a; public class PossibleReordering { static int x 0, y 0; static int a 0, b 0;public static void main(String[] args) throws InterruptedException {Thread one new Thread(new Runnable() {public void run() {a 1;x…

LeetCode 1261. 在受污染的二叉树中查找元素(树哈希)

1. 题目 给出一个满足下述规则的二叉树&#xff1a; root.val 0如果 treeNode.val x 且 treeNode.left ! null&#xff0c;那么 treeNode.left.val 2 * x 1如果 treeNode.val x 且 treeNode.right ! null&#xff0c;那么 treeNode.right.val 2 * x 2 现在这个二叉树受…

东南大学王萌 | “神经+符号”学习与多模态知识发现

转载公众号 | DataFunTalk分享嘉宾 &#xff5c;王萌博士 东南大学 助理教授编辑整理 &#xff5c;盛泳潘 重庆大学 助理研究员导读&#xff1a;近年来&#xff0c;多模态一词在知识图谱、计算机视觉、机器学习等领域逐渐引起越来越多的关注。从认知科学角度看&#xff0c;…

Child-Tuning:简单有效的微调涨点方法

文 | 罗福莉源 | 罗福莉自BERT火了以后&#xff0c;基本上现在所有NLP领域都all in Pre-training & Fine-tuning了吧&#xff1f;但当“大”规模预训练模型遇上“小”规模标注数据时&#xff0c;往往直接Fine-tuning会存在过拟合现象&#xff0c;进一步会影响Fine-tune完后…

LeetCode 890. 查找和替换模式(哈希表)

1. 题目 你有一个单词列表 words 和一个模式 pattern&#xff0c;你想知道 words 中的哪些单词与模式匹配。 如果存在字母的排列 p &#xff0c;使得将模式中的每个字母 x 替换为 p(x) 之后&#xff0c;我们就得到了所需的单词&#xff0c;那么单词与模式是匹配的。 &#x…