短短五年,Transformer就几乎颠覆了整个自然语言处理领域的研究范式,是划时代产品ChatGPT的基础技术,也促进了计算机视觉、计算生物学等领域的研究进展。
在发展的过程中,研究人员发表了大量论文、模型以及训练技巧,对于新入行的研究者来说,面对成山的论文根本不知从何入手。
不久前指出Transformer原始论文中插图存在漏洞的Sebastian Raschka发布了一份全面且简短的论文列表,包含Transformer的机制来源、预训练范式、人类反馈强化学习等诸多里程碑式论文,小白看完轻松变理论高手。
Transformer底层架构
1. Neural Machine Translation by Jointly Learning to Align and Translate(2014)
这篇论文为循环神经网络(RNN)引入了注意力机制,以提升长距离序列建模的能力,使得RNN可以更准确地翻译更长的句子,也是原始Transformer模型的开发动机。
论文链接:https://arxiv.org/abs/1409.0473
2. Attention is All you need (2017)
这篇论文提出了由编码器和解码器部分组成的原始Transformer架构,并且文中提出的概念,如缩放点积(scale dot product)注意力机制,多头注意块、位置输入编码等,到今天为止仍然是Transformer模型的基础。
论文链接:https://arxiv.org/pdf/1706.03762.pdf
3. On Layer Normalization in the Transformer Architecture (2020)
虽然原始Transformer论文中的图很好地展现了编码器-解码器架构,但与具体代码实现存在细微差异,比如层归一化(LayerNorms)在残差块之间等,文中显示的变体也被称为Post-LN Transformer。
论文链接:https://arxiv.org/pdf/2002.04745.pdf
Transformer架构论文中的层归一化表明Pre-LN也很有效,解决了梯度问题,许多模型也在实践中采用Pre-LN,缺点在于可能会导致表示秩崩溃。
虽然业界关于使用Post-LN还是Pre-LN仍然存在争论,但最近有一篇新论文提出同时利用这两种方法,不过在实践中是否有用仍然需要进一步观察。
论文链接:https://arxiv.org/abs/2304.14802
4. Learning to Control Fast-Weight Memories: An Alternative to Dynamic Recurrent Neural Networks (1991)
在1991年,也就是原始Transformer论文发布之前大约25年,Juergen Schmidhuber提出了一种替代循环神经网络的方法,叫做快速权重编程器(FWP, Fast Weight Programmers)
论文链接:https://ieeexplore.ieee.org/document/6796337
FWP方法用到了一个前馈神经网络,通过梯度下降来缓慢学习以对另一神经网络的快速权重变化进行编程。
而发展到今天的Transformer术语中,FROM和TO分别被称为键(key)和值(value),应用快速网络的INPUT叫做查询(query)。
从本质上讲,查询是由快速权重矩阵处理的,是键和值的外积之和(不考虑归一化和投影的话)。
由于两个网络的所有操作都是可微的,通过加性外积或二阶张量积获得快速权重变化的端到端可微主动控制。
因此,慢速网络可以通过梯度下降来学习,以在序列处理期间快速修改快速网络,在数学上等同于不包括归一化的,后来也叫做具有线性化自注意力的Transformer,即线性Transformer
2021年,一篇论文明确证明了线性化自注意力与20世纪90年代的快速权重编程器之间的等价性。
论文链接:https://arxiv.org/pdf/2102.11174.pdf
5. Universal Language Model Fine-tuning for Text Classification (2018)
这篇论文虽然发表于2018年,但并没有研究Transformer,而主要关注循环神经网络,但提出了有效的预训练语言模型和对下游任务的迁移学习。
论文链接:https://arxiv.org/abs/1801.06146
虽然迁移学习最早是在计算机视觉中提出的,但当时在自然语言处理(NLP)领域中还没有普及。
ULMFit是最早证明预训练语言模型并在特定任务上对其进行微调可以在许多NLP任务中实现最先进性能的论文之一。
ULMFit提出的微调语言模型的三阶段过程如下:
1. 在大型文本语料库上训练语言模型
2. 在特定任务的数据上微调预训练的语言模型,使其适应文本的特定风格和词汇
3. 通过逐层解冻来微调特定任务数据的分类器,以避免灾难性遗忘
该方法,即在大型语料库上训练语言模型,然后在下游任务上对其进行微调,是基于Transformer的基础模型(如BERT、GPT-2/3/4、RoBERTa等)中使用的核心方法。
不过ULMFiT的关键组件是逐层解冻,通常无法在Transformer架构中实现,其中所有层通常只经过一次微调。
6. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (2018)
在Transformer架构提出之后,大型语言模型研究开始分为两个方向:用于预测建模任务(如文本分类)的编码器Transformer;以及用于生成建模任务(如翻译、摘要和其他形式的文本创建)的解码器Transformer
论文链接:https://arxiv.org/abs/1810.04805
BERT论文提出了遮罩语言建模的概念,并且下一句预测(next-sentence prediction)仍然是一种有影响力的解码器架构,不过后续的RoberTa删除了下一句预测任务,简化了预训练目标。
7. Improving Language Understanding by Generative Pre-Training (2018)
第一版GPT论文提出了解码器架构,以及使用下一个单词预测进行预训练。
论文链接:https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf
BERT使用的遮罩语言模型预训练目标,所以是双向Transformer模型;而GPT是单向自回归模型,但其学到的嵌入也可以用于分类。
GPT方法是当下最有影响力的大型语言模型(如chatGPT)的核心技术。
后续发布的GPT-2和GPT-3论文说明了LLM能够进行零样本和少样本学习,指出了大型语言模型的涌现能力。
GPT-3仍然是训练当下语言模型(如ChatGPT)的常用基线和基础模型。
8. BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension (2019)
如前所述,BERT类语言模型主要关注编码器,通常是预测建模任务的首选,而GPT类型的解码器风格的语言模型在文本生成方面更好。
论文链接:https://arxiv.org/abs/1910.13461
为了同时利用二者的优势,BART论文结合了编码器和解码器部分。
9. Harnessing the Power of LLMs in Practice: A Survey on ChatGPT and Beyond (2023)
这篇并不是研究论文,但可能是当下最好的综述报告,说明了不同的架构是如何演变的。
论文链接:https://arxiv.org/abs/2304.13712
除了讨论BERT风格的遮罩语言模型(编码器)和GPT风格的自回归语言模型(解码器)之外,还提供了关于预训练和微调数据的讨论和指导。
缩放定律与效率提升
除了下面列出的论文外,如果想了解更多关于提高Transformer效率的各种技术,还可以阅读两篇综述。
论文链接:https://arxiv.org/abs/2009.06732
论文链接:https://arxiv.org/pdf/2302.01107.pdf
10. FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness (2022)
论文链接:https://arxiv.org/pdf/2205.14135.pdf
虽然大多数transformer论文都没有替换原始的缩放点积机制来改进自注意力,但FlashAttention是其中最常引用的一种机制。
11. Cramming: Training a Language Model on a Single GPU in One Day (2022)
在这篇论文中,研究人员使用单个GPU用了24个小时训练了一个遮罩语言模型/编码器风格的语言模型,在单个GPU上进行24小时,相比之下,2018年BERT刚提出来的时候,在16个TPU上训练了四天。
论文链接:https://arxiv.org/abs/2212.14034
一个有趣的结论是,虽然较小的模型具有更高的吞吐量,但小模型的学习效率也比较低,所以较大的模型不需要更多的训练时间来达到特定的预测性能阈值。
12. LoRA: Low-Rank Adaptation of Large Language Models (2021)
在大型数据集上预训练的现代大型语言模型展现出了涌现能力,并在各种任务上都实现了非常强大的性能,包括多语言翻译、摘要、编码和问答。
论文链接:https://arxiv.org/abs/2106.09685
不过如果想提高Transformer在特定领域数据和特定任务上的性能,那么就需要对Transformer进行微调。
低秩自适应(LoRA)是一种参数高效(parameter-efficient)的方式来微调大型语言模型,相比其他方法,LoRA既优雅又非常通用,可以应用于其他类型的模型。
虽然预训练模型的权重在预训练任务上具有满秩,但LoRA作者指出,预训练的大型语言模型在适应新任务时具有较低的「内在维度」。
因此,LoRA背后的主要思想是将权重变化ΔW分解为更低秩的表示,即更高效的参数。
13. Scaling Down to Scale Up: A Guide to Parameter-Efficient Fine-Tuning (2022)
这篇综述回顾了40多篇关于参数高效微调方法,包括prefix调整、adapter和LoRA等。
论文链接:https://arxiv.org/abs/2303.15647
14. Scaling Language Models: Methods, Analysis & Insights from Training Gopher (2022)
论文链接:https://arxiv.org/abs/2112.11446
Gopher论文中有大量的分析来理解大型语言模型的训练过程。
研究人员在3000亿个token上训练了一个80层、2800亿参数的模型,还提出了一些架构上的修改,如使用RMSNorm(均方根归一化)而非LayerNorm(层归一化)。
LayerNorm和RMSNorm都优于BatchNorm,因为它们并不依赖于batch size,也不需要同步,对于在batch size较小的分布式设置中是一个优势,而且RMSNorm通常被认为可以稳定更深层次架构中的训练。
这篇论文的主要重点是不同尺度(sacle)模型在任务性能上的分析。
对152个不同任务的评估表明,增加模型尺寸对理解、事实核查和有毒语言识别等任务的益处最大,而与逻辑和数学推理相关的任务从架构扩展中受益较少。
15. Training Compute-Optimal Large Language Models (2022)
这篇论文提出了700亿参数Chinchilla模型,在生成建模任务上优于常用的1750亿参数GPT-3模型,不过这篇文章的主要贡献是发现目前大型语言模型存在「严重训练不足」的问题。
论文链接:https://arxiv.org/abs/2203.15556
论文中定义了大型语言模型训练的线性缩放律(linear scaling low),例如虽然Chinchilla的大小只有GPT-3的一半,但它的表现优于GPT-3,因为它是在1.4万亿(而不是3000亿)个token上训练的。
换句话说,训练语料中token的数量与模型大小一样重要。
16. Pythia: A Suite for Analyzing Large Language Models Across Training and Scaling (2023)
Pythia是一组开源的大型语言模型,参数量从7千万到120亿不等,以用于研究大型语言模型在训练过程中的演变。
论文链接:https://arxiv.org/abs/2304.01373
模型架构类似于GPT-3,但包括一些组件改进,例如用Flash Attention和Rotary Positional Embeddings。
Pythia在Pile数据集(825 Gb)上训练了3000亿个token,在regular PILE上训练约1个epoch,deduplicated PILE上训练约1.5个epoch
Pythia研究的主要结论如下:
1. 在重复数据上进行训练(超过1个epoch)不会提升或降低性能。
2. 训练顺序不会影响记忆。这个结论让我们无法通过重新排序训练数据来缓解不希望的逐字记忆问题。
3. 预训练词频影响任务性能。例如,对于更频繁的术语,少样本学习往往准确度更高。
4. 将batch size加倍可以将训练时间减半,但不会影响收敛。
对齐:让大型语言模型符合预期目标
近年来,我们看到了许多相对强大的大型语言模型,可以生成类人的文本(例如GPT-3和Chinchilla等),但常用的预训练范式似乎已经达到了上限。
为了使语言模型对人类更有帮助并减少错误信息和有害语言,研究人员设计了额外的训练范式来微调预训练的基础模型。
17. Training Language Models to Follow Instructions with Human Feedback (2022)
在这篇提出InstructGPT模型论文中,研究人员使用了一种强化学习机制,其中包括人类参与反馈的循环机制(RLHF)。
论文链接:https://arxiv.org/abs/2203.02155
研究人员从预训练的GPT-3基础模型开始,使用监督学习对人类生成的提示与模型回复进行进一步微调;然后要求人类对模型输出进行排名,以训练奖励模型;最后使用奖励模型通过近端策略优化(PPO, proximal policy optimization)使用强化学习来更新预训练和微调的GPT-3模型。
这篇论文也被称为描述ChatGPT背后想法的论文,也有传言说ChatGPT是InstructGPT的放大版本,在更大的数据集上进行了微调。
18. Constitutional AI: Harmlessness from AI Feedback (2022)
这篇论文中,研究人员将对齐思想更进一步,提出了一种创建无害AI系统的训练机制。
论文链接:https://arxiv.org/abs/2212.08073
文中提出了一种基于规则列表(由人类提供)的自训练机制,而非人类监督。
与上面提到的InstructGPT论文类似,这种机制也使用强化学习方法。
19. Self-Instruct: Aligning Language Model with Self Generated Instruction (2022)
指令微调是从GPT-3之类的预训练基础模型发展到ChatGPT类更强大语言模型的关键技术。
论文链接:https://arxiv.org/abs/2212.10560
开源的人工生成指令数据集,如databricks-dolly-15 k,可以帮助调优,但想要进一步扩大指令数据集的规模,可以从语言模型中自举得到。
Self-Instruct是一种几乎无需标注,即可将预训练的LLM与指令对齐的方法,总共包括4个步骤:
1. 用一组人工编写的指令和样本指令作为种子任务池。
2. 使用预训练的语言模型(如GPT-3)来确定任务类别。
3. 给定新指令,让预训练的语言模型生成回复。
4. 在将回复添加到任务池之前,收集、修剪和筛选这些响应。
在实践中,整个过程可以基于ROUGE来评分,可以认为Self-Instruct-finetuned LLM的性能优于GPT-3基础LLM,并且可以与在大型人类编写的指令集上预训练的LLM竞争,self-instruct也可以使已经根据人类指令进行微调的LLM受益。
当然,评估语言模型的黄金标准是询问人类评分员。
基于人类评估,Self-Instruct优于基本LLM和以监督方式在人类指令数据集上训练的LLM(SuperNI,T0 Trainer),但有趣的是,Self-Instruct并没有优于通过人工反馈强化学习(RLHF)训练的方法。
强化学习与人类反馈(RLHF)
虽然RLHF(基于人类反馈的强化学习)可能无法完全解决LLM当前的问题,但它目前被认为是可用的最佳选择,特别是与上一代LLM相比。
未来很可能会看到更多创造性的方法将RLHF应用于LLM其他领域。
上面提到的两篇论文InstructGPT和Consitutinal AI利用了RLHF,但从技术上来说,Consitutinal AI使用的是AI反馈而非人类反馈。
20. Asynchronous Methods for Deep Reinforcement Learning (2016)
论文链接:https://arxiv.org/pdf/1602.01783.pdf
这篇论文引入了策略梯度方法作为基于深度学习的RL中Q学习的替代方案。
21. Proximal Policy Optimization Algorithms (2017)
论文链接:https://arxiv.org/abs/1909.08593
这篇论文提出了一种改进的基于近似策略的强化学习过程,比上面的策略优化算法更具数据效率和可扩展性。
22. Fine-Tuning Language Models from Human Preferences (2020)
论文链接:https://arxiv.org/abs/1909.08593
这篇论文说明了PPO的概念和对预训练语言模型的奖励学习,包括KL正则化,以防止策略与自然语言偏离太远。
23. Learning to Summarize from Human Feedback (2022)
论文链接:https://arxiv.org/abs/2009.01325
这篇论文提出了常用的RLHF三步程序:
1. 预训练GPT-3
2. 以有监督的方式进行微调
3. 同样以有监督的方式训练奖励模型,然后使用具有邻近策略优化的奖励模型来训练微调模型。
论文还表明,与常规有监督学习相比,具有近似策略优化的强化学习可以产生更好的模型。
24. Training Language Models to Follow Instructions with Human Feedback (2022)
这篇论文提出InstructGPT使用与上述RLHF类似的三步过程,但不是总结文本,而是专注于基于人类指令生成文本。
论文链接:https://arxiv.org/pdf/2203.02155.pdf
除此之外,还使用一个标签器来从最好到最差对输出进行排名,而不仅仅是人类和AI生成的文本之间的二元比较。
总结
读完上面列出的论文,就可以了解到当前大型语言模型背后的设计、约束和演变过程,下面是一些可用的资源。
GPT的开源平替:
BLOOM: A 176B-Parameter Open-Access Multilingual Language Model (2022), https://arxiv.org/abs/2211.05100
OPT: Open Pre-trained Transformer Language Models (2022), https://arxiv.org/abs/2205.01068
UL2: Unifying Language Learning Paradigms (2022), https://arxiv.org/abs/2205.05131
ChatGPT的替代方案:
LaMDA: Language Models for Dialog Applications (2022), https://arxiv.org/abs/2201.08239
(Bloomz) Crosslingual Generalization through Multitask Finetuning (2022), https://arxiv.org/abs/2211.01786
(Sparrow) Improving Alignment of Dialogue Agents via Targeted Human Judgements (2022), https://arxiv.org/abs/2209.14375
BlenderBot 3: A Deployed Conversational Agent that Continually Learns to Responsibly Engage, https://arxiv.org/abs/2208.03188
计算生物学领域的大型语言模型
ProtTrans:Towards Cracking the Language of Life’s Code Through Self-Supervised Deep Learning and High Performance Computing(2021), https://arxiv.org/abs/2007.06225
Highly Accurate Protein Structure Prediction with AlphaFold (2021), https://www.nature.com/articles/s41586-021-03819-2
Large Language Models Generate Functional Protein Sequences Across Diverse Families (2023), https://www.nature.com/articles/s41587-022-01618-2