庆云古诗词

庆云古诗词

万字长文解读:从Transformer到ChatGPT,通用人工智能曙光初现

互联资讯 0

2023年11月20日 每日一猜答案: 答案:ABC
每日一猜答案分析:

从???,从1×1,从 zong,万从之的从是什么意思

原标题:万字长文解读:从Transformer到ChatGPT,通用人工智能曙光初现

ChatGPT掀起的NLP大语言模型热浪,不仅将各家科技巨头和独角兽们推向风口浪尖,在它背后的神经网络也被纷纷热议。但实际上,除了神经网络之外,知识图谱在AI的发展历程中也被寄予厚望。自然语言处理是如何伴随人工智能各个流派不断发展、沉淀,直至爆发的?本文作者将带来他的思考。

作者 | 王文广

出品 | 新程序员

自ChatGPT推出以来,不仅业内津津乐道并纷纷赞叹自然语言处理(Natural Language Processing, NLP)大模型的魔力,更有探讨通用人工智能(Artificial general intelligence,AGI)的奇点来临。有报道说Google CEO Sundar Pichai发出红色警报(Red code)并促使了谷歌创始人佩奇与布林的回归,以避免受到颠覆性的影响[1][2][3]。同时,根据路透社的报道,ChatGPT发布仅两个月就有1亿用户参与狂欢,成为有史以来用户增长最快的产品[4]。本文以ChatGPT为契机,介绍飞速发展的自然语言处理技术(如图1所示)。

图1 ChatGPT引发 Google“红色警报” [1][2][3]

从机器翻译到ChatGPT:自然语言处理的进化

自然语言处理的历史可以追溯到1949年,恰好与共和国同龄。但是由香农的学生、数学家Warren Weaver发布的有关机器翻译的研讨备忘录被认为是自然语言处理的起点,比1956年达特茅斯会议提出“人工智能(Artificial Intelligence,AI)” 的概念还略早一些。

二十世纪五、六十年代是自然语言处理发展的第一阶段,致力于通过词典、生成语法(图2)和形式语言来研究自然语言,奠定了自然语言处理技术的基础,并使得人们认识到了计算对于语言的重要意义。这个阶段的代表性的成果有1954年自动翻译(俄语到英语)的“GeorgetownCIBM实验”,诺姆・乔姆斯基(Noam Chomsky)于1955年提交的博士论文《变换分析(Transformational Analysis)》和1957年出版的著作《句法结构(Syntactic Structures)》等。

图2 句法分析示例,来自《知识图谱:认知智能理论与实战》图4-5,P149[6]

在二十世纪六、七十年代,对话系统得到了发展,比如SHRDLU、LUNAR和ELIZA(图3)。麻省理工学院的SHRDLU采用句法分析与“启发式理解器(heuristic understander)”相结合的方法来理解语言并做出响应。LUNAR科学自然语言信息系统(Lunar Sciences Natural Language Information System)则试图通过英语对话的方式来帮助科学家们便捷地从阿帕网(ARPA net)获取信息,这倒像是当前爆火的ChatGPT雏形。ELIZA是那时对话系统的集大成者,集成了关键词识别(图4)、最小上下文挖掘、模式匹配和脚本编辑等功能[5]。

图3 ELIZA对话系统,摘自维基百科ELIZA词条

图4 ELIZA系统中关键词挖掘的流程图[5]

随着自然语言处理任务愈加复杂,人们认识到知识的缺乏会导致在复杂任务上难以为继,由此知识驱动人工智能逐渐在二十世纪七、八十年代兴起。语义网络(Semantic Network)和本体(Ontology)是当时研究的热点,其目的是将知识表示成机器能够理解和使用的形式,并最终发展为现在的知识图谱[6]。在这个阶段,WordNet、CYC等大量本体库被构建,基于本体和逻辑的自然语言处理系统是研究热点。

进入二十世纪末二十一世纪初,人们认识到符号方法存在一些问题,比如试图让逻辑与知识覆盖智能的全部方面几乎是不可完成的任务。统计自然语言处理(Statistical NLP)由此兴起并逐渐成为语言建模的核心,其基本理念是将语言处理视为噪声信道信息传输,并通过给出每个消息的观测输出概率来表征传输,从而进行语言建模。相比于符号方法,统计方法灵活性更强,在大量语料支撑下能获得更优的效果。

在统计语言建模中,互信息(Mutual Information)可以用于词汇关系的研究,N元语法(N-Gram)模型是典型的语言模型之一,最大似然准则用于解决语言建模的稀疏问题,浅层神经网络也早早就应用于语言建模,隐马尔可夫模型(Hidden Markov Model,HMM)和条件随机场(Conditional Random Fields ,CRF)(图5)是这个阶段的扛把子。在搜索引擎的推动下,统计自然语言处理在词法分析、机器翻译、序列标注和语音识别等任务中广泛使用。

图5 条件随机场,来自《知识图谱:认知智能理论与实战》图3-8,P104[6]

特别地,从这个阶段开始,中文自然语言处理兴起,中国的机构紧紧跟上了人工智能发展的潮流。由于中文分词、词性标注和句法分析等工作与英语等西方语言有着很大的不同,许多针对中文语言处理的方法被深入研究并在推动自然语言处理的发展中发挥着巨大作用。

2006年起,深度学习开始流行,并在人工智能的各个细分领域“大杀四方”,获得了非凡的成就,自然语言处理也开始使用深度学习的方法。随着2013年Word2vec的出现,词汇的稠密向量表示展示出强大的语义表示能力,为自然语言处理广泛使用深度学习方法铺平了道路。从现在来看,Word2vec也是现今预训练大模型的“婴儿”时期。

随后,在循环神经网络(Recurrent Neural Network,RNN)、长短期记忆网络(Long Short-Term Memory,LSTM)、注意力机制、卷积神经网络(Con【【微信】】ork,CNN)、递归神经网络(Recursi【【微信】】k)等都被用于构建语言模型,并在句子分类、机器翻译、情感分析、文本摘要、问答系统、实体抽取、关系抽取、事件分析等任务中取得了巨大的成功。

2017年发布的变换器网络(Transformer)[7]极大地改变了人工智能各细分领域所使用的方法,并发展成为今天几乎所有人工智能任务的基本模型。变换器网络基于自注意力(self-attention)机制,支持并行训练模型,为大规模预训练模型打下坚实的基础。自此,自然语言处理开启了一种新的范式,并极大地推进了语言建模和语义理解,成就了今天爆火出圈的 ChatGPT,并让人们能够自信地开始探讨通用人工智能(Artificial General Intelligence,AGI)。

BERT & GPT的基础:变换器网络

变换器网络是2017年Google在论文《Attention Is All You Need》[7]中提出的一种序列到序列(Se【【微信】】, seq2seq)的深度神经网络架构,其架构如图6所示。

图6 变换器网络架构[7]

该网络在当时并未引起轰动,仅仅如蝴蝶扇动了几下翅膀。但随着时间的推移却引发了蝴蝶效应,最终掀起了自然语言处理乃至人工智能的海啸。限于篇幅,这里简要介绍变换器网络的重要特点。

变换器网络完全依赖于注意力机制,支持极大的并行化。如图6所示,变换器网络由两部分组成,左边是编码部门,有N个编码器组成;右边是解码部分,由N个解码器组成。编码部分将输入序列(文本)进行编码,解码部分以自回归的方法不断解码下一个词元,最终完成从序列到序列的变换并输出。

图7展示了一个中文到英文翻译的序列到序列的实例――将中文“《知识图谱:认知智能理论与实战》是一本人工智能必看书籍”翻译为英文“Knowledge Graph: Theory and Practice of Cogniti【【微信】】t read book on AI.”。翻译也是最典型的序列到序列的语言任务,事实上也正是这个任务在1949年开启了自然语言处理这门学科,同时在变换器网络的论文中,用的评测也正是翻译任务。

图7 用变换器网络进行中译英的实例

变换器网络的最大创新是完全使用多头自注意力机制(Multi-Head Self-Attention Mechanism,其架构如图8所示)。变换器网络的编码器和解码器都是用了同样的多头自注意力结构,有所不同的是,编码器中,自注意力是双向的,而解码器中,自注意力只允许关注输出序列中较早的位置。如图8的左边图所示,解码器的自注意力层在自注意力计算的 softmax 步骤之前设置为-inf来屏蔽(mask)未来位置,即图中标签为“Mask(opt.)”的框所标识的。这也正是图6的解码器中被称为“Masked Multi-Head Attention”的原由。

图8 多头自注意力机制[7]

多头自注意力机制的核心就是自注意力。图9是自注意力的一个实例,直观地理解,自注意力就是模型在处理当前输入序列的某个词元与该序列其他词元的语义相关性。不同的“头”关注了不同维度/方面的语义。图9示例了“今”字与同一输入序列(句子)的其他字的语义相关性,不同颜色表示了不同的“头”( 顶部色块表示了不同的“头”的标识),而颜色的深浅表示了语义相关性的强弱。在这个例子中,“今”字在有多个“注意力头”最关注了“古”字,而在另一个“注意力头”则最关注“魂”字,还有两个“注意力头”最关注了“的”字。

图9 自注意力实例《知识图谱:认知智能理论与实战》图3-15(P124)[6]

值得一提的是,变换器网络是近5年自然语言处理乃至全部人工智能高速发展的最大功臣!近年来叱咤风云的BERT就是以变换器网络的编码器为基础的,而 GPT 则是以其解码器为基础的。

NLP奋发五载

由于变换器网络的出现,大语言模型的兴起,以及多种机器学习范式的融合,近五年自然语言处理有了极大的发展。从现在来看,这个起点当属2018年ELMo、GPT和BERT的出现。特别是,BERT通过巨量语料所学习出来的大规模预训练模型,不仅学会了上下文信息,还学会了语法、语义和语用等,乃至很好地学会部分领域知识。BERT在预训练模型之上,针对特定任务进行微调训练,在十多个自然语言处理任务的评测中遥遥领先,并在机器阅读理解顶级水平测试SQuAD1.1中表现出惊人成绩,两个衡量指标上都首次并全面超越人类。

由于BERT的惊人表现,自然语言处理由此开启了新时代,在此后的五年中奋发进取,不断增强语言理解与生成的能力,最终出现了去年年底爆火出圈的ChatGPT,并引发了通用人工智能即将到来的激烈探讨。下面从三个维度来介绍自然语言处理的奋进五年――大模型的突飞猛进,算法的融会贯通,以及应用的百花齐放。

大模型的突飞猛进

图10展示了自2018年至今具有一定影响力的大模型,其中横轴是模型发布时间(论文发表时间或模型发布时间的较早者),纵轴是模型参数的数量(单位是百万,坐标轴是底为10的对数坐标轴),名字为黑色字体的是国外机构发布的大模型,红色字体的是国内机构发布的大模型。从图10可以看到,这五年,预训练大语言模型的参数规模从1亿到1万亿的“野蛮”增长,增长速度几乎是每年翻10倍。这个每年翻10倍的模型增长规律,被称为“智能时代的摩尔定律”。深入分析大模型的情况,总结有两方面内容:

图10 自然语言大模型的奋进五载

  • 机构方面,Google和Deepmind发布了BERT、T5、Gopher、PaLM、GaLM、Switch等等大模型,模型的参数规模从1亿增长到1万亿;OpenAI和微软则发布了GPT、GPT-2、GPT-3、InstructGPT、Turing-NLG 和 M-Turing-NLG等等大模型,模型的参数规模从1亿增长到5000亿;百度发布了文心(ERNIE)系列,包括 ERNIE,ERNIE2.0,ERNIE3.0,ERNIE 3.0-Titan,参数规模从3亿增长到2600亿。总体来说,随着模型的增长,有能力训练和发布大模型的在减少。除了上面提到的几家之外,其他的还有芯片大厂Nvidia靠充足的算力,大力出奇迹,国内的智源研究院和鹏程实验室等机构也发布了悟道、盘古等大模型,表现不俗。

  • 大模型成本高昂,时间成本和经济成本都巨大。以模型参数为1750亿的GPT-3为例,用于训练模型的原始语料文本超过100TB(压缩包为45TB),包含了网页、书籍、英文维基百科等。原始语料文本经过处理后,形成了超过5000亿个词元(西方语言的词,中文的字等)的训练语料。GPT-3模型的训练和评估采用的算力是微软和OpenAI一起打造的超级计算集群,集群有28.5万核CPU,1万个V100 GPU,以及400Gbps的网络带宽。建造这个超级计算集群的费用超过20亿元。如果租用微软或其他云厂商的集群来训练GPT-3,训练一次GPT-3需要耗费估计从280万到540万美元不等(价格因不同云厂商而有所不同)。因训练花费不菲,在 GPT-3的论文《Language Models are Few-Shot Learners》中提到“发现了bug但由于训练费用问题而没有重新训练模型(Unfortunately, a bug in the filtering caused us to ignore some o【【微信】】, and due to the cost of training it was not feasible to retrain the model.)”[11]。

算法的融会贯通

自然语言处理在这五年的高速发展,除了模型越来越大,训练语料越来越多之外,核心还是多种不同类型的人工智能技术的高速发展,以及在自然语言处理领域将对这些技术的融会贯通。这些人工智能技术包括但不限于语言模型、对话系统(Con【【微信】】)、思维链(Chain of Thoughts)、强化学习(Reinforcement Learning)和人类反馈强化学习 (Reinforcement Learning from Human Feedback,RLHF)、情境学习(In-context learning)、无监督学习(Unsuper【【微信】】)等等。除此之外,算力的增长、大数据处理技术的发展也提供了必不可少的支撑。

语言模型

这里简要介绍三类代表性的语言模型,分别为BERT所使用的掩码语言模型、GPT系列所使用的自回归语言模型以及ERNIE系列所使用的引入了知识图谱等专家知识的语言模型。

掩码语言模型(Masked language model,MLM)是一种双向语言模型[6][8],模拟了人类对语言的认知的双向语言模型。一个例子是,人们快速读阅时,些许的字文错误并不会影响理解,这是由于人们会自动补全。掩码语言模型正是模拟了这一特点,比如对于“一枝红杏出墙来”这句话,将其一部分掩盖住后,原句变为“一枝红?出墙来”,如何判断“?”掩盖的部分?人们能够自然地意识到“?”掩盖的是“杏”。而掩码语言模型则是为了让模型能够像人一样“猜出”被掩盖的部分。BERT通过变换器网络的编码器来实现掩码语言模型。同时,如图11所示,BERT使用了多任务学习方法来从大规模语料中训练出模型,并在具体任务中进行微调(Fine-Tuning)。

图11 BERT的预训练和具体任务的微调示意图[8]

与BERT不一样的是,GPT系列则通过变换器网络的解码器实现了自回归语言模型(Autoregressi【【微信】】)[9],采用多任务训练的方法训练模型,模型如图12所示。自回归在时间序列分析中非常常见,比如ARMA,GARCH等都是典型的自回归模型。在语言模型中,自回归模型每次都是根据给定的上下文从一组词元中预测下一个词元,并且限定了一个方向(通常是正向,即在一个句子中从前往后依次猜下一个字/词)。同样以“一枝红杏出墙来”为例,自回归语言模型中,给定“一枝红”的上下文来预测下一个 “杏”字,紧接着给定“一枝红杏”来预测下一个“出”字,然后是根据给定的“一枝红杏出”来预测“墙”字,如此循环,直到完成整个序列的预测并输出。有多种不同的方案来选择模型预测的输出标记序列,例如贪婪解码、集束搜索(【【淘密令】】)、Top-K采样、核采样(Nucleus Sampling)、温度采样(Temperature Sampling)等。除了 GPT 系列之外,Transformer-XL、XLNet等大模型也采用了自回归语言模型。

图12 GPT模型架构及多任务训练示意图[9]

ERNIE在采用了 BERT 类似的模型架构之上,加入了知识图谱[6],使得模型能够用先验知识来更好地理解语义,其架构如图13所示[10]。还是以“一枝红杏出墙来”为例,ERNIE能够更好地理解“红杏”,并知道它是一种“植物”。也因此,相比于BERT和GPT,ERNIE能够在更小的模型下获得相对更好的效果。尤其值得一提的是,这点在中文场景中更加明显。

图13 ERNIE模型架构及嵌入知识图谱的示意图[10]

情境学习

情境学习(In-context Learning)是随着GPT-3而流行起来。在GPT-3中,通过给出仅仅几个示例就能够很好地完成许多自然语言处理任务的方法,被称为情境学习。图14是一个直观的例子,使用了ChatGPT的情境学习来实现情感分析任务。直观地说,情境学习就是给模型一些包含任务输入和输出的提示,并在提示的末尾附加一个用于预测的输入,模型根据提示和预测输入来预测任务的结果并输出。也因此,情境学习有时候也被称为基于提示的学习(Prompt-based learning)。

图14 情境学习实例,使用了ChatGPT

从图15可以看出,情境学习的预测结果在大模型的情况下效果表现得非常好,但在小模型的情况下表现糟糕。简单地说,大模型使得情境学习变得有用。这是由于情境学习依赖于语言模型所学习到的概念语义和隐含的贝叶斯推理,而这依赖于大规模预训练模型对潜在概念的学习,从文档级语料学习了长距离依赖并保持长距离的连贯性、思维链和复杂推理等等。也因此,情境学习在大模型之前罕见,可谓连实验室的玩具都谈不上。而在大模型的支撑下,在许多自然语言处理任务的基准测试(如LAMBADA文本理解测试集和TriviaQA问答测试集)中,情境学习相比其他模型也非常具有竞争力。

图15 情境学习效果曲线[11]

从应用来看,情境学习最为津津乐道的两个特点是:

  • 情境学习能够有效地使模型即时适应输入分布与训练分布有显著差异的新任务,这相当于在推理期间通过“学习”范例来实现对特定任务的学习,进而允许用户通过新的用例快速构建模型,而不需要为每个任务进行微调训练。

  • 构建于大语言模型之上的情境学习通常只需要很少的提示示例即可正常工作,这对于非自然语言处理和人工智能领域的专家来说非常直观且有用。

这两个特点使得人们能够使用一个模型来实现不同的任务,为类似ChatGPT这样的准AGI提供了技术基础。也正因此,人工智能领域念叨多年的通用人工智能终于露出了一丝曙光。

人类反馈强化学习

人类反馈强化学习是一种人工


万字长文解析!复现和使用GPT-3/ChatGPT,你所应该知道的

万字复制,万次复写纸,万字复姓,万元复始

关于作者

英文原版作者:杨靖锋,现任亚马逊科学家,本科毕业于北大,硕士毕业于佐治亚理工学院,师从 Stanford 杨笛一教授。

杨昊桐 译,王骁 修订?

感谢靳弘业对第一版稿件的建议,感谢陈三星,符尧的讨论和建议。

英文原版:https://jingfengyang.github.io/gpt

推特原文:https://twitter.com/JingfengY/status/1625003999387881472

来源:【【微信】】

这一推文写于 2023 年 2 月 12 日,其中均为个人意见,仅供参考。?

为什么所有公开的对 GPT-3 的复现都失败了?我们应该在哪些任务上使用 GPT-3.5 或 ChatGPT?

这篇推文将包括,我在仔细重新检查了一系列文章的细节之后给出的总结,以及对上面两个问题我个人的思考。这些文章包括且不限于:GPT-3, PaLM, BLOOM, OPT, FLAN-T5/PaLM, HELM 等。如果您有更可靠的参考资料或者更实际的经验,欢迎指正。?

对于那些想要复现一个属于自己的 GPT-3 或 ChatGPT 的人而言,第一个问题是关键的。第二个问题则对那些想要使用它们的人是重要的(下文提到 GPT-3,主要是指 GPT-3.5 或 InstructGPT 的最新版本,除了一些指向 GPT-3 原文的情况)。

这里,我称之为“失败”,是指训练得出模型有接近 GPT-3 或者更大的参数量,但仍无法与 GPT-3 原始文献中报告的性能所匹配。在这一标准下,GPT-3 和 PaLM 是“成功”的,但这两个模型都不是公开的。而所有的公开模型(例如:OPT-175B 和 BLOOM-176B)都在一定程度上“失败”了。但是我们仍然可以从这些“失败”中吸取一些教训。

我们需要注意的是,假如能够多次尝试各种不同的训练设置,开源社区可能最终可以复现 GPT-3。但截至目前,训练另一个版本的 OPT-175B 的开销仍然太过高昂――对于如此大规模的模型,一次训练就将需要在约 1000 个 80G A100 GPU 上花费至少 2 个月的时间(数据来自于 OPT 的原始文献)。

尽管一些文章(例如 OPT-175B 和 GLM-130B)声称它们在一些任务上能够匹配甚至超过原始的 GPT-3 的表现,在更多 GPT-3 已经测试过的任务上,这种声明仍然是存疑的。同时,根据大多数使用者在更多样的任务上的经验,以及 HELM 的评估来看,最近的? OpenAI GPT-3 的 API 表现也仍然比这些开源模型更好。

尽管它背后的模型可能使用了指令微调(instruction tuning, 正如 InstructGPT 那样),类似的使用了指令微调的 OPT 版本(OPT-IML)和 BLOOM 版本(BLOOMZ)也仍然远比 InstructGPT 和 FLAN-PaLM(PaLM 的指令微调版本)要差得多。?

根据文章的细节,有多个可能的原因导致了相比 GPT-3 和 PaLM 的成功,OPT-175B 和 BLOOM-176B 的失败。我将其分为两个部分:预训练数据和训练策略。

预训练数据

让我们首先观察 GPT-3 是如何准备和使用预训练数据的。GPT-3 在共计 300B 的 token 上进行训练,其中 60% 来自经过筛选的 Common Crawl,其它则来自:webtext2(用于训练 GPT-2 的语料库),Books1,Books2 和维基百科。

更新版本的 GPT-3 还用了代码数据集进行训练(例如 Github Code)。每个部分的占比并不与与原始数据集的大小成比例,相反的,具有更高质量的数据集被更加频繁地采样。导致 OPT-175B 和 BLOOM-176B 失败的,可能是以下三个难点,它们使得开源社区难以收集到类似的数据:

1. 第一点是一个具有良好性能的用于筛选低质量数据的分类器。它被用于构建 GPT-3 和 PaLM 的预训练数据集,但在 OPT 和 BLOOM 的训练中却没有被采用。一些文章已经展示,一个用更少但质量更高的数据集训练的预训练模型,可以在性能上超过另一个用更多的混合质量数据集训练的模型。当然,数据的多样性仍然是十分重要的,正如我们将在第三点中讨论的。因此,人们应当非常小心地处理在数据多样性和质量之间的权衡。

2. 第二点是预训练数据集的去重。去重有助于避免预训练模型多次面对相同的数据后记住它们或者在其上过拟合,因此有助于提高模型的泛化能力。GPT-3 和 PaLM 采用了文档级别的去重,这同样被 OPT 所采用。但 OPT 预训练的去重 Pile 语料库中仍有许多重复存在,这也可能导致它较差的性能(注:在一些最近的文献中显示去重对于预训练语言模型的重要性可能没有想象中大)。

3. 第三点是预训练数据集的多样性,包括领域多样性、格式多样性(例如:文本、代码和表格)和语言多样性。OPT-175B 所使用的 Pile 语料库声称有着更好的多样性,但 BLOOM 采用的 ROOTS 语料库则有太多的已经存在的学术数据集,缺乏 Common Crawl 数据所包含的多样性。这可能导致 BLOOM 性能更差。作为对比,GPT3 来自 Common Crawl 语料的占比则要高得多,而它们是多样的和来自广泛领域的,这也可能是 GPT-3 能够作为首个通用聊天机器人 ChatGPT 的基础模型的原因之一。

请注意:虽然一般来说,多样性的数据对于训练一个通用的 LLM(Large Language Model,大规模语言模型)是重要的,但特定的预训练数据分布,则会对 LLM 在特定的下游任务上的性能产生巨大的影响。例如,BLOOM 和 PaLM 在多语言数据上有更高的占比,这导致它们在一些多语言任务和机器翻译任务上的性能更高。

OPT 使用了很多对话数据(例如 reddit),这可能是它在对话中表现好的原因之一。PaLM 有很大的占比在社交媒体对话中,这可能是它在多种问答任务和数据集上有着卓越表现的原因。同样的,PaLM 和更新版本的 GPT-3 有很大比例的代码数据集,这增强了它们在代码任务上的能力,以及可能增强了它们 CoT (Chain-of-Thought,思维链) 的能力。

一个有趣的现象是 BLOOM 在代码和 CoT 上的表现仍然是较差的,尽管它在预训练过程中使用了代码数据。这可能暗示着单独代码数据本身,并不能保证模型的代码和 CoT 能力。?

总之,一些文章表明了上面三点的重要性,即:通过数据去重避免记忆和过拟合,通过数据筛选以得到高质量数据,保证数据多样性以确保 LLM 的泛化性。但不幸的是,对于 PaLM 和 GPT-3 预处理这些数据的细节,或者这些预训练数据本身,仍然没有公布,这使得公共社区很难去复现它们。

训练策略

此处训练策略包括训练框架、训练持续时间、模型架构/训练设置、训练过程中的修改。在训练非常大的模型时,它们被用于获得更好的稳定性和收敛性。一般来说,由于未知的原因,预训练过程中广泛观察到损失尖峰(loss spike)和无法收敛的情况。因此,众多的对训练设置和模型架构的修改被提出,用以避免这些问题。但是其中一些修改在 OPT 和 BLOOM 之中还不是最优解,这可能导致它们的性能较差。GPT-3 并没有明确提到他们是如何解决这个问题的。?

1. 训练框架。一个参数量大于 175B 的模型往往需要 ZeRO 式的数据并行(分布式的优化器)和模型并行(包括张量并行(tensor parallel)、流水线并行(pipeline parallel),有时还包括序列并行(se【【微信】】))。OPT 采用了 ZeRO 的 FSDP 实现,以及模型并行的 Megatron-LM 实现。BLOOM 采用了 ZeRO 的 Deepspeed 实现和模型并行的 Megatron-LM 实现。

PaLM 采用了 Pathways,这是一个基于 TPU 的模型并行和数据并行系统。GPT-3 的训练系统的细节仍然未知,但它们至少在一定程度上使用了模型并行(一些人称它使用了 Ray)。不同的训练系统和硬件可能导致不同的训练时的现象。显然,一些在 PaLM 的文章中呈现的、用于 TPU 训练的设置,可能并不适用于其它所有模型使用的 GPU 训练。

硬件和训练框架的一个重要的影响是,人们是否可以使用 bfloat16 去存储模型权重和中间层激活值等。这已经被证明是稳定训练的一个重要因素,因为 bfloat16 可以表示更大范围的浮点数,能够处理在损失尖峰时出现的大数值。在 TPU 上 bfloat16 是默认设置,这可能是 PaLM 能够成功的一个秘密。但是在 GPU 上,以前人们主要使用 float16,这是 V100 中混合精度训练的唯一选择。

OPT 使用了 float16,这可能是其不稳定的因素之一。BLOOM 发现了这样的问题并最终在 A100GPU 上使用了 bfloat16,但它没有意识到这种设置的重要性,因此在第一个词向量层后引入额外的层归一化(layer normalization),用于解决他们使用 float16 的初步实验中的不稳定性。然而,这种层归一化已被证明会导致更糟糕的零样本泛化(zero-shot generalization),这可能是 BLOOM 失败的一个因素。?

2. 训练过程中的修改。OPT 做了很多中途调整并从最近的 checkpoint 重启训练,包括改变截断梯度范数 (clip gradient norm) 和学习率,切换到简单的 SGD 优化器然后回到 Adam,重置动态损失标量 (dynamic loss scalar),切换到更新版本的 Megatron 等等。

这种中途调整可能是 OPT 失败的原因之一。相比之下,PaLM 几乎没有做任何中途调整。它只是当损失尖峰出现时,从尖峰开始前大约 100 步的 checkpoint 重新开始训练,并跳过了大约 200-500 个 batch 的数据。仅仅依靠这种简单的重启,PaLM 就取得神奇的成功。这是由于它在预训练数据构建期间就已经完成采样,因此模型具有在 Bit 意义上的确定性,以及它对模型架构和训练设置进行了许多修改以获得更好的稳定性。PaLM 中的此类修改在下一点中展示。?

3. 模型架构/训练设置:为了使训练更稳定,PaLM 对模型架构和训练设置进行了多项调整,包括使用 Adafactor 的修改版本作为优化器,缩放在 softmax 之前的输出 logit,使用辅助损失来鼓励 softmax 归一化器接近 0,对词向量和其他层权重使用不同的初始化,在前馈层和层归一化中不使用偏差项,并且在预训练期间不使用 dropout。

请注意,GLM-130B 中还有更多有价值的内容关于如何稳定地训练非常大的模型,例如:使用基于 DeepNorm 的后置层归一化而不是前置层归一化,以及词向量层梯度收缩。以上大多数模型修改没有被 OPT 和 BLOOM 采用,这可能会导致它们的不稳定和失败。?

4. 训练过程:如下表所示,原始的 GPT-3 预训练过程见过的 token 数与 OPT 和 BLOOM 接近,而 PaLM 则远远超过了它们。同样,PaLM 和 GPT-3 预训练语料库都大于 BLOOM 和 OPT。因此,在更多的 token 上、用更大规模的高质量语料库进行预训练可能是 GPT-3 和 PaLM 成功的一个重要因素。

?除了上面列出的四点,还有一些其它因素,它们可能对于更稳定的训练并不重要,但仍然可能影响最终的性能。

第一点,PaLM 和 GPT-3 都使用了在训练过程中从小到大逐渐增加的 【【微信】】,这已经被展示对于训练一个更好的 LLM 是有效的,然而 OPT 和 BLOOM 都使用了恒定的 【【微信】】。

第二点,OPT 使用了 ReLU 激活函数,而 PaLM 使用 SwiGLU 激活函数,GPT-3 和 BLOOM 使用 GeLU,它通常使得训练的 LLM 的性能更好。

第三点,为了更好的建模更长的序列,PaLM 使用 RoPE 词向量,BLOOM 使用 ALiBi 词向量,而原始的 GPT-3 和 OPT 使用学习得到的词向量,这可能影响在长序列上的性能。

我尝试解释我们应该在哪些任务和应用上使用 GPT-3,而哪些则不该使用。为了展示 GPT-3 是否适合某个特定任务,我主要比较了带有提示(prompting)的 GPT-3 和经过微调的更小的模型,这些小模型有时还加入了其他特殊的设计。鉴于最近出现的更小的而且可以微调的 FLAN-T5 模型的良好性能,这一问题更加重要。

在理想情形下,如果微调 GPT-3 的负担是能够承担的,它可能带来更进一步的提升。然而,在一些任务上通过微调 PaLM-540B 带来的提升是如此有限,让人们怀疑在一些任务中微调 GPT-3 是否是值得的。从科学的角度来看,更公平的比较应在微调 GPT-3 和提示 GPT-3 之间进行。然而,要使用 GPT-3,人们可能更关心将提示 GPT-3 和微调一个更小的模型去进行对比。

注意到,我主要关心的是将完成任务的精确度作为度量,但仍然存在很多其它重要的维度,例如:有害性(toxicity)、公平性等,它们也应该在决定是否使用 GPT-3 时被纳入考虑,正如 HELM 的文章中所呈现的。下图展示了一个粗略的决策流程,希望它能够作为一个有用的实践指南,无论对于已有任务还是一个全新的任务。

?注 1:由于在对话场景下的良好对齐,ChatGPT 作为一个聊天机器人表现优异。但我们通常使用 GPT-3、InstructGPT (GPT-3.5)、以及 Codex 这些 ChatGPT 背后的模型作为在更多任务和使用场景下的通用模型。?

注 2:这一节中的结论是基于一些对模型当前版本的发现得到的,这可能不适用于未来的更强的模型。因为,使用更多与目标数据集接近的预训练数据、学术数据集指令调整(例如提示一个 FLAN-PaLM 可能会带来更强的性能,它仍未公开)或者通过 RLHF 以使得模型对目标任务的更好对齐,这些都可能使得模型在目标任务中表现更好,即使有时这会牺牲在其他场景下的能力(例如,InstructGPT的“对齐税/Alignment tax”)。

在这种情况下,很难判断 GPT 是进行泛化和跨任务泛化,还是仅仅在预训练时就已经记住了一些测试样例,或者说见过那些在预训练时所谓“没有见过”的任务。然而,记忆在实践中是否真的是一个严重的问题,这仍然值得怀疑。因为用户与研究人员不同,如果他们发现 GPT 已经可以在他们的测试数据上表现良好,他们可能不会关心 GPT 在预训练期间是否看到了相同或相似的数据。

不论如何,为了最大化这一节在当前的实用价值,我尽最大努力,试图比较微调公共的更小型的模型(T5、FALN-T5、一些特殊设计的微调 SOTA 模型等)和最近的 GPT-3 (GPT-3.5、InstructGPT)、PaLM(或 FLAN-PaLM)的最佳性能,如果这些模型的测评数据够获得的话。

一般来说,有以下这些情况更适合使用提示 GPT-3。令人惊讶的是,如果我们回看 GPT-3 论文的介绍部分,在那里很多初始设计时的目标涵盖了这些任务。这意味着那些当初宏伟的目标已经被部分实现了。?

1. 创造性和复杂的任务:包括代码(代码补全、自然语言指令生成代码、代码翻译、bug 修复)、文本摘要、翻译、创造性写作(例如写故事、文章、邮件、报告,以及写作的改进等)。正如原始的 GPT-3 文献中所示,GPT-3 被设计用于那些困难和“不可能标注”的任务。在一定程度上,对于这些任务,先前那种经过微调的模型不可能应用于真实世界的应用;而 GPT-3 使它们成为可能。举个例子,最近的文章显示,过去的人类标注的文本摘要已经被 LLM 生成的摘要所超越。

在某些需要从低、中资源语言翻译到英语的机器翻译任务中,通过提示 PaLM-540B,它甚至能够超越微调模型。

在 BLOOM-176B 中也观察到了类似的趋势。这是因为英语数据通常在预训练语料库中占了很大比例,因此 LLM 擅长于生成英语语句。注意到,为了在代码任务中获得良好性能,尽管 Codex 和 PaLM 已经在整体上具有比之前模型更好的性能,我们仍然需允许 LLM 多次(k 次)采样,以通过测试样例(使用 pass@k 作为度量)。?

2. 只有少数标注或者没有标注数据的任务。正如原始的 GPT-3 文献所说,GPT-3 是为了那些“昂贵标注”的任务设计的。在这种情况下,用极少量标注数据微调一个更小的模型通常不可能达到 GPT-3 在零样本(zero-shot)、单样本(ont-shot)或少样本(few-shot)的情况下的表现。?

3. 分布外(Out-of-distribution, OOD)泛化。给定一些训练数据,传统的微调可能会过拟合训练集并且有较差的分布外泛化能力;而少样本的上下文学习(in-context learning)能够有更好的分布外泛化性。例如,带有提示的 PaLM 能够在对抗自然语言推断任务(Ad【【微信】】e Inference,ANLI)上超越经过微调的 SOTA 模型,而它在正常的语言推断任务上可能仍然劣于微调的 SOTA。

另一个例子是提示 LLM 比微调模型显示出更好的组合泛化能力。更好的分布外泛化性可能是因为在上下文学习期间不需要更新参数,避免了过拟合;或者因为那些过去的分布外样例对于 LLM 而言是分布内的。这种使用场景被阐释为 GPT-3 的初始设计目标之一:“微调模型在特定任务的数据集上的性能可以达到所谓的人类水平,实际上可能夸大了在真实世界中该任务上的性能,这是因为模型只是学到了训练集中存在的虚假的相关性,以及模型过度拟合了这个训练集狭窄的分布。”?

4. 需要处理多种任务的能力,而非关注特定任务上的卓越表现。聊天机器人就是这样一种场景,其中,用户期待它能够正确地响应各种各样的任务。这可能就是为什么 ChatGPT 是 GPT-3 最成功的使用场景之一。?

5. 那些检索不可行的知识密集型任务。存储在 LLM 中的知识可以显著地提高在知识密集型任务的性能,例如闭卷问答和 MMLU(一个基准数据集,包括来自于 STEM、人文、社科等 57 个学科的选择题,它用于测试 LLM 的世界知识和问题解答的能力)。然而,如果预先检索的步骤可以被加入来做检索增强的生成,一个微调的更小的模型(例如 Atlas 模型)甚至可以有更好的性能(在闭卷的 Natural【【微信】】 和 TrivialQA 数据集上,Atlas 比 PaLM 和最新的 InstructGPT 都要更好)。

检索或者传统的搜索同样是将 GPT-3 或 ChatGPT 整合到搜索引擎中的一个必要的步骤,这可以提升生成的准确性,并且提供更多的参考链接以增强说服力。但我们应该承认,在某些情况下,检索是不允许或者不容易的,比如参加 USMLE (美国医学执照考试),谷歌已经证明基于 F