【转载】理解大语言模型

原文地址:
Understanding Large Language Model,by Sebastian Raschka, on 2023-04-16

理解大语言模型

快速入门必读的核心文献精选

大语言模型席卷了公众的目光——这并非双关。短短半个世纪,大语言模型(即Transformer)几乎彻底改变了自然语言处理领域。不仅如此,它们也开始掀起计算机视觉、计算生物学等领域的变革。

鉴于Transformer对所有人的研究方向都产生了如此深远的影响,我想整理一份简短的阅读清单(扩展版见https://www.linkedin.com/feed/update/urn:li:activity:7028449312300834816?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7028449312300834816%2C7028519126105030656%29&dashCommentUrn=urn%3Ali%3Afsd_comment%3A%287028519126105030656%2Curn%3Ali%3Aactivity%3A7028449312300834816%29),面向刚入门的机器学习研究者与从业者。

以下清单建议大致按时间顺序阅读,且我只聚焦于学术研究论文。当然,还有很多其他实用的资源,例如:

理解核心架构与任务

如果你刚接触Transformer/大语言模型,从最基础的内容入手最合理。

(1) 《通过联合学习对齐与翻译实现神经机器翻译》(2014)

作者:Bahdanau, Cho, Bengio
https://arxiv.org/abs/1409.0473

如果你时间有限,我推荐从这篇论文开始。它为循环神经网络(RNN)引入了注意力机制,以提升长序列建模能力。这让RNN能够更准确地翻译更长的句子——这也是后来原始Transformer架构诞生的核心动因。

figure01
来源:https://arxiv.org/abs/1409.0473

(2) 《注意力就是你所需的全部》(2017)

作者:Vaswani, Shazeer, Parmar, Uszkoreit, Jones, Gomez, Kaiser, Polosukhin
https://arxiv.org/abs/1706.03762

这篇论文提出了原始的Transformer架构,由编码器和解码器两部分组成,二者后来也成为各自独立的重要模块。此外,论文还提出了缩放点积注意力机制、多头注意力块、位置输入编码等概念,这些至今仍是现代Transformer的基础。

figure02
来源:https://arxiv.org/abs/1706.03762

(3) 《Transformer架构中的层归一化位置研究》(2020)

作者:Xiong, Yang, He, K Zheng, S Zheng, Xing, Zhang, Lan, Wang, Liu
https://arxiv.org/abs/2002.04745

尽管上面《注意力就是你所需的全部》中的Transformer示意图是对原始编解码架构的很好总结,但图中层归一化(LayerNorm)的位置至今仍是热议的话题。

比如,《注意力就是你所需的全部》中的Transformer示意图将层归一化放在残差块之间,这与论文配套的代码实现(https://github.com/tensorflow/tensor2tensor/commit/f5c9b17e617ea9179b7d84d36b1e8162cb369f25)并不一致。示意图里的这种变体被称为**后置层归一化Transformer(Post-LN Transformer),而实际代码默认采用的是前置层归一化(Pre-LN)**变体。

https://arxiv.org/abs/2002.04745 这篇论文指出,前置层归一化效果更好,能解决梯度问题,如下图所示。很多架构在实践中都采用了这种设计,但它也可能导致表示坍缩。

因此,尽管关于使用后置还是前置层归一化的讨论仍在继续,也有新论文提出兼顾二者优势的方案:《ResiDual:具备双残差连接的Transformer》(https://arxiv.org/abs/2304.14802);该方案在实践中是否有效还有待观察。

figure03
来源:https://arxiv.org/abs/1706.03762(左、中)与 https://arxiv.org/abs/2002.04745(右)

(4) 《学习控制快速权重记忆:动态循环神经网络的一种替代方案》(1991)

作者:Schmidhuber
https://www.semanticscholar.org/paper/Learning-to-Control-Fast-Weight-Memories%3A-An-to-Schmidhuber/bc22e87a26d020215afe91c751e5bdaddd8e4922

如果你对历史趣闻以及与现代Transformer本质相似的早期研究感兴趣,推荐这篇论文。

比如,在1991年——比上面那篇《注意力就是你所需的全部》Transformer论文早了约25年——Juergen Schmidhuber就提出了一种循环神经网络的替代方案,名为快速权重编程器(Fast Weight Programmers, FWP)。FWP方法包含一个前馈神经网络,它通过梯度下降缓慢学习,以此来编程另一个神经网络的快速权重变化。

这与现代Transformer的类比在这篇文章中有解释:>https://people.idsia.ch//~juergen/fast-weight-programmer-1991-transformer.html#sec2,内容如下:

在如今的Transformer术语中,FROM和TO分别被称为键(key)和值(value)。快速网络所作用的输入INPUT被称为查询(query)。本质上,查询由快速权重矩阵处理,而快速权重矩阵是键与值外积的和(忽略归一化和投影)。由于两个网络的所有运算都是可微的,我们通过加性外积或二阶张量积,就能对快速权重变化实现端到端可微的主动控制[FWP0-3a]。因此,慢速网络可以通过梯度下降学习,在序列处理过程中快速修改快速网络。这在数学上(除了归一化部分)等价于后来被称为线性化自注意力Transformer(或线性Transformer)的结构。

正如上面博客节选提到的,2020年arXiv上的两篇论文(https://arxiv.org/abs/2006.16236https://arxiv.org/abs/2009.14794)将这种方法命名为“线性Transformer”或“线性化自注意力Transformer”。
2021年,https://arxiv.org/abs/2102.11174 这篇论文进一步明确证明了线性化自注意力与90年代的快速权重编程器是等价的。

figure04
来源:基于https://people.idsia.ch//~juergen/fast-weight-programmer-1991-transformer.html#sec2 制作的注解图

(5) 《面向文本分类的通用语言模型微调》(2018)

作者:Howard, Ruder
https://arxiv.org/abs/1801.06146

从历史角度看,这是另一篇非常有意思的论文。尽管它发表于原始《注意力就是你所需的全部》Transformer论文发布一年之后,但它并没有涉及Transformer,而是聚焦于循环神经网络。不过它仍然值得关注,因为它实际上提出了语言模型预训练+下游任务迁移学习的思路。

虽然迁移学习在计算机视觉领域已经成熟,但在自然语言处理(NLP)领域还未普及。ULMFit是最早证明“对语言模型进行预训练,再在特定任务上微调,就能在众多NLP任务中取得最优结果”的论文之一。

ULMFit提出的语言模型微调三阶段流程如下:

  1. 在大规模文本语料上训练语言模型。
  2. 在任务特定数据上微调该预训练语言模型,使其适配文本的特定风格与词汇。
  3. 在任务特定数据上微调分类器,同时逐步解冻各层,以避免灾难性遗忘。

这种“在大规模语料上训练语言模型,再在下游任务上微调”的范式,正是BERT、GPT-2/3/4、RoBERTa等基于Transformer的模型以及各类基础模型的核心方法。

不过,ULMFit的关键部分——逐步解冻层,在Transformer架构的实践中通常不会常规使用,Transformer一般会同时微调所有层。

figure05
来源:https://arxiv.org/abs/1801.06146

(6) 《BERT:面向语言理解的深度双向Transformer预训练》(2018)

作者:Devlin, Chang, Lee, Toutanova
https://arxiv.org/abs/1810.04805

在原始Transformer架构之后,大语言模型研究开始分化为两个方向:

  • 编码器式Transformer:用于文本分类等预测建模任务;
  • 解码器式Transformer:用于翻译、摘要、文本生成等生成建模任务。

上面这篇BERT论文提出了掩码语言建模、下一句预测的原始概念,至今仍是最具影响力的编码器式架构。如果你对这一研究方向感兴趣,推荐进一步阅读https://arxiv.org/abs/1907.11692,它去掉了下一句预测任务,简化了预训练目标。

figure06
来源:https://arxiv.org/abs/1810.04805

(7) 《通过生成式预训练提升语言理解能力》(2018)

作者:Radford, Narasimhan
https://www.semanticscholar.org/paper/Improving-Language-Understanding-by-Generative-Radford-Narasimhan/cd18800a0fe0b668a1cc19f2ec95b5003d0a5035

这篇原始GPT论文提出了流行的解码器式架构,以及通过下一词预测进行预训练的方法。如果说BERT因其掩码语言模型预训练目标属于双向Transformer,那么GPT就是单向的自回归模型。尽管GPT的嵌入也可用于分类任务,但GPT方法是如今最具影响力的大语言模型(如ChatGPT)的核心。

如果你对这一研究方向感兴趣,推荐进一步阅读这两篇论文:
https://www.semanticscholar.org/paper/Language-Models-are-Unsupervised-Multitask-Learners-Radford-Wu/9405cc0d6169988371b2755e573cc28650d14dfe
以及 https://arxiv.org/abs/2005.14165。这两篇论文阐明了大语言模型具备零样本和少样本学习能力,凸显了大语言模型的涌现能力。GPT-3至今仍是训练ChatGPT等当前一代大语言模型的常用基线与基础模型——我们后面会单独介绍催生ChatGPT的InstructGPT方法。

figure07
来源:https://www.semanticscholar.org/paper/Improving-Language-Understanding-by-Generative-Radford-Narasimhan/cd18800a0fe0b668a1cc19f2ec95b5003d0a5035

(8) 《BART:面向自然语言生成、翻译与理解的去噪序列到序列预训练》(2019)

作者:Lewis, Liu, Goyal, Ghazvininejad, Mohamed, Levy, Stoyanov, Zettlemoyer
https://arxiv.org/abs/1910.13461

如前所述,BERT类编码器式大语言模型通常更适合预测建模任务,而GPT类解码器式大语言模型更擅长生成文本。为了兼顾二者优势,上面这篇BART论文结合了编码器与解码器两部分(和本清单第二篇的原始Transformer类似)。

figure08
来源:https://arxiv.org/abs/1910.13461

(9) 《在实践中发挥大语言模型的威力:ChatGPT及相关研究综述》(2023)

作者:Yang, Jin, Tang, Han, Feng, Jiang, Yin, Hu
https://arxiv.org/abs/2304.13712

这不是一篇研究论文,但可能是迄今最好的通用架构综述,清晰展现了不同架构的演进历程。除了讨论BERT式掩码语言模型(编码器)与GPT式自回归语言模型(解码器)之外,它还就预训练与微调数据提供了实用的讨论与指导。

figure09
现代大语言模型演进树,引自https://arxiv.org/abs/2304.13712

缩放定律与效率提升

如果你想了解更多提升Transformer效率的各类技术,我推荐先读https://arxiv.org/abs/2009.06732 这篇论文,再读https://arxiv.org/abs/2302.01107 这篇。

此外,下面这些论文我认为特别有意思,值得一读。

(10) 《FlashAttention:具备IO感知的快速、内存高效精确注意力》(2022)

作者:Dao, Fu, Ermon, Rudra, Ré
https://arxiv.org/abs/2205.14135

大多数Transformer论文都不会替换实现自注意力的原始缩放点积机制,但FlashAttention是我最近见过引用最多的一种机制。

figure10
来源:https://arxiv.org/abs/2205.14135

(11) 《Cramming:单GPU一天训练完成一个语言模型》(2022)

作者:Geiping, Goldstein
https://arxiv.org/abs/2212.14034

在这篇论文中,研究人员在单块GPU上用24小时训练了一个掩码语言模型/编码器式大语言模型(这里是BERT)。作为对比,2018年的原始BERT论文用了16块TPU训练了4天。一个有意思的发现是:更小的模型虽然吞吐量更高,但学习效率更低。因此,更大的模型达到特定预测性能阈值并不需要更长的训练时间。

figure11
来源:https://arxiv.org/abs/2212.14034

(12) 《LoRA:大语言模型的低秩适配》(2021)

作者:Hu, Shen, Wallis, Allen-Zhu, Li, L Wang, S Wang, Chen
https://arxiv.org/abs/2106.09685

在大规模数据集上预训练的现代大语言模型展现出涌现能力,在语言翻译、摘要、编程、问答等各类任务上表现优异。但如果我们想提升Transformer在领域特定数据与专业任务上的能力,对Transformer进行微调是很有价值的。

低秩适配(Low-Rank Adaptation,LoRA)是大语言模型参数高效微调中最具影响力的方法之一。尽管还有其他参数高效微调方法(见下面的综述),但LoRA尤其值得强调,因为它既优雅又具备很强的通用性,也可应用于其他类型的模型。

LoRA的作者指出,尽管预训练模型的权重在预训练任务上是满秩的,但当大语言模型适配新任务时,其“内在维度”很低。因此,LoRA的核心思想是将权重变化量ΔW分解为低秩表示,从而大幅提升参数效率。

figure12
LoRA示意图及其性能表现,引自https://arxiv.org/abs/2106.09685

(13) 《以小博大:参数高效微调指南》(2022)

作者:Lialin, Deshpande, Rumshisky
https://arxiv.org/abs/2303.15647

在大规模数据集上预训练的现代大语言模型展现出涌现能力,在语言翻译、摘要、编程、问答等各类任务上表现优异。但如果我们想提升Transformer在领域特定数据与专业任务上的能力,对Transformer进行微调是很有价值的。这篇综述梳理了40余篇参数高效微调方法的论文(包括前缀微调、适配器、低秩适配等流行技术),让微调的计算成本变得(极其)低廉。

figure13
来源:https://arxiv.org/abs/2303.15647

(14) 《大语言模型缩放:训练Gopher的方法、分析与洞见》(2022)

作者:Rae及同事(共78位作者!)
https://arxiv.org/abs/2112.11446

Gopher是一篇非常详实的论文,包含大量帮助理解大语言模型训练的分析。研究人员训练了一个2800亿参数、80层的模型,训练数据量达3000亿token。其中包含很多有意思的架构改进,比如用**均方根归一化(RMSNorm)**替代层归一化(LayerNorm)。层归一化和均方根归一化都优于批量归一化(BatchNorm),因为它们不依赖批次大小,也不需要同步,这在小批量的分布式训练场景中是一大优势。而均方根归一化通常被认为能让更深层架构的训练更稳定。

除了上面这些有趣的细节,这篇论文的核心是分析不同规模下的任务表现。对152个多样化任务的评估显示:增大模型尺寸对理解、事实核查、有害语言识别等任务提升最大;而逻辑推理、数学推理相关任务从架构缩放中获益较少。

figure14
来源:https://arxiv.org/abs/2112.11446 中的图

(15) 《训练计算最优的大语言模型》(2022)

作者:Hoffmann, Borgeaud, Mensch, Buchatskaya, Cai, Rutherford, de Las Casas, Hendricks, Welbl, Clark, Hennigan, Noland, Millican, van den Driessche, Damoc, Guy, Osindero, Simonyan, Elsen, Rae, Vinyals, Sifre
https://arxiv.org/abs/2203.15556

这篇论文提出了700亿参数的Chinchilla模型,在生成建模任务上表现超过了热门的1750亿参数GPT-3模型。而它最核心的结论是:当代大语言模型“训练程度严重不足”。

论文定义了大语言模型训练的线性缩放定律。比如,尽管Chinchilla的参数规模只有GPT-3的一半,但它的表现超过了GPT-3,因为它的训练token量达到了1.4万亿(而GPT-3只有3000亿)。换句话说,训练token的数量与模型规模同等重要。

figure15
来源:https://arxiv.org/abs/2203.15556

(16) 《Pythia:一套用于跨训练与缩放阶段分析大语言模型的工具集》(2023)

作者:Biderman, Schoelkopf, Anthony, Bradley, O’Brien, Hallahan, Khan, Purohit, Prashanth, Raff, Skowron, Sutawika, van der Wal
https://arxiv.org/abs/2304.01373

Pythia是一套开源大语言模型(参数规模从70M到12B),用于研究大语言模型在训练过程中的演化规律。

其架构与GPT-3类似,但包含一些改进,比如Flash Attention(见https://arxiv.org/abs/2302.13971)和旋转位置编码(见https://arxiv.org/abs/2204.02311)。Pythia的训练数据为https://arxiv.org/abs/2101.0027(825GB),训练量为3000亿token(在普通Pile数据集上约1个epoch,在去重Pile数据集上约1.5个epoch)。

figure16
Pythia模型系列,引自https://arxiv.org/abs/2304.01373

Pythia研究的主要结论如下:

  • 在重复数据上训练(由于大语言模型的训练方式,这意味着训练超过1个epoch)对性能没有提升也没有损害。
  • 训练顺序不影响记忆效果。这一点比较遗憾,因为如果反过来成立的话,我们就可以通过重排训练数据来缓解不好的逐字记忆问题。
  • 预训练词频会影响任务表现。比如,出现更频繁的词,少样本准确率往往更高。
  • 批次大小翻倍会让训练时间减半,但不会影响收敛效果。

对齐——让大语言模型朝着预期目标与方向发展

近年来,我们已经看到很多能力相当不错的大语言模型都能生成逼真的文本(比如GPT-3、Chinchilla等等)。似乎我们用常用的预训练范式已经摸到了天花板。

为了让语言模型更有用,减少错误信息与有害内容,研究者设计了额外的训练范式,对预训练好的基础模型进行进一步微调。

(17) 《利用人类反馈训练语言模型遵循指令》(2022)

作者:Ouyang, Wu, Jiang, Almeida, Wainwright, Mishkin, Zhang, Agarwal, Slama, Ray, Schulman, Hilton, Kelton, Miller, Simens, Askell, Welinder, Christiano, Leike, Lowe
https://arxiv.org/abs/2203.02155

在这篇被称为InstructGPT的论文中,研究者使用了人类参与的强化学习机制(RLHF)。他们以预训练的GPT-3基础模型起步,第一步先用人类生成的指令-响应对进行监督学习微调;第二步,让人类对模型输出进行排序,以此训练奖励模型;第三步,用奖励模型作为奖励信号,通过近端策略优化算法对经过预训练与微调的GPT-3模型进行强化学习更新。

顺带一提,这篇论文也被认为是ChatGPT背后的思路来源——根据近期传闻,ChatGPT就是InstructGPT的放大版本,在更大的数据集上完成了微调。

figure17
来源:https://arxiv.org/abs/2203.02155

(18) 《宪法AI:来自AI反馈的无害性》(2022)

作者:Yuntao, Saurav, Sandipan, Amanda, Jackson, Jones, Chen, Anna, Mirhoseini, McKinnon, Chen, Olsson, Olah, Hernandez, Drain, Ganguli, Li, Tran-Johnson, Perez, Kerr, Mueller, Ladish, Landau, Ndousse, Lukosuite, Lovitt, Sellitto, Elhage, Schiefer, Mercado, DasSarma, Lasenby, Larson, Ringer, Johnston, Kravec, El Showk, Fort, Lanham, Telleen-Lawton, Conerly, Henighan, Hume, Bowman, Hatfield-Dodds, Mann, Amodei, Joseph, McCandlish, Brown, Kaplan
https://arxiv.org/abs/2212.08073

在这篇论文中,研究者将对齐的思路更进一步,提出了一种打造“无害”AI系统的训练机制。与直接的人类监督不同,研究者提出了一种基于人类制定的规则清单的自训练机制。和上面提到的InstructGPT论文类似,该方法也采用了强化学习思路。

figure18
来源:https://arxiv.org/abs/2212.08073

(19) 《Self-Instruct:用自生成指令对齐语言模型》(2022)

作者:Wang, Kordi, Mishra, Liu, Smith, Khashabi, Hajishirzi
https://arxiv.org/abs/2212.10560

指令微调是我们从GPT-3这类预训练基础模型,得到ChatGPT这类能力更强的大语言模型的关键。而像https://github.com/databrickslabs/dolly/tree/master/data 这样的开源人类生成指令数据集,能帮助实现这一点。但我们要如何规模化?方法之一就是让大语言模型利用自身的生成结果进行自举。

Self-Instruct就是一种(几乎无需标注的)将预训练大语言模型与指令对齐的方法。

它的工作原理是什么?简而言之,这是一个四步流程:

  1. 用一组人工编写的指令(本例中为175条)构建种子任务池,并采样指令。
  2. 用预训练大语言模型(比如GPT-3)判断任务类别。
  3. 给定新指令,让预训练大语言模型生成回复。
  4. 对回复进行收集、修剪、过滤,再加入任务池。

figure19
Self-Instruct方法的注解版示意图,引自https://arxiv.org/abs/2212.10560

在实践中,从ROUGE分数来看,这种方法效果相当不错。
比如,经过Self-Instruct微调的大语言模型表现优于GPT-3基础模型(1),且能与在大规模人工编写指令集上预训练的大语言模型媲美(2)。同时,Self-Instruct也能让已经经过人类指令微调的大语言模型进一步获益(3)。

当然,评估大语言模型的黄金标准是人类评分。基于人类评估的结果显示,Self-Instruct的表现优于基础模型,也优于以监督方式在人类指令数据集上训练的模型(SuperNI、T0 Trainer)。但有意思的是,Self-Instruct的表现并没有超过通过人类反馈强化学习(RLHF)训练的方法。

人工生成指令数据集和自指令数据集,哪个更有前景?我认为两者都有价值。为什么不先从人工生成的指令数据集(比如Dolly的15000条指令,见https://github.com/databrickslabs/dolly/tree/master/data)起步,再用Self-Instruct进行规模化呢?

人类反馈强化学习(RLHF)

关于人类反馈强化学习(RLHF)的更多解释,以及实现RLHF的近端策略优化相关论文,请看我更详细的文章:
https://magazine.sebastianraschka.com/p/llm-training-rlhf-and-its-alternatives

https://substack.com/profile/27393275-sebastian-raschka-phd
·
2023年9月10日

https://magazine.sebastianraschka.com/p/llm-training-rlhf-and-its-alternatives

我在讨论大语言模型时,无论是研究资讯还是教程,都会频繁提到**人类反馈强化学习(Reinforcement Learning with Human Feedback, RLHF)**这个流程。RLHF是现代大语言模型训练流水线中不可或缺的一环,它能将人类偏好融入优化过程,从而提升模型的有用性与安全性。

https://magazine.sebastianraschka.com/p/llm-training-rlhf-and-its-alternatives

结语与延伸阅读

我尽量让上面的清单保持精简,聚焦于最核心的10篇论文(外加3篇RLHF相关的补充论文),帮助理解当代大语言模型背后的设计、局限与演进。

想要进一步阅读的话,建议参考上面提到的论文中的参考文献。或者,我再给你一些额外的方向(这些清单并不全面):

GPT的开源替代方案

ChatGPT替代方案

计算生物学中的大语言模型

这本杂志是我的个人兴趣项目。如果愿意支持我的话,可以考虑购买我的书:https://amzn.to/4fqvn0D 。(我相信你会从这本书里收获很多,因为它对大语言模型工作原理的讲解深度是其他地方找不到的。)

figure20

https://amazon.com/Build-Large-Language-Model-Scratch/dp/1633437167 现已在亚马逊上架

如果你读了这本书,并且能抽出几分钟时间,我会非常感谢你去亚马逊留下评价:https://www.amazon.com/Build-Large-Language-Model-Scratch/dp/1633437167 。这对我们作者帮助很大!

另外,我最近也在Substack上开通了付费订阅选项,可以直接支持这本杂志。

Leave a Reply

Your email address will not be published. Required fields are marked *

*