值得收藏：大语言模型文献综述
近日，由人工智能实验室OpenAI发布的对话式大语言模型（Large Language Model）ChatGPT，正掀起新一轮人工智能研究、商用及创业热潮，持续至今日依然热度不减。自20世纪50年代图灵测试被提出以来，研究人员一直在探索和开发能够理解并掌握语言的人工智能技术。作为重要的研究方向之一，语言模型得到了学术界的广泛研究，从早期的统计语言模型和神经语言模型开始，发展到基于Transformer的预训练语言模型。而从 2019 年的谷歌 T5 到 OpenAI GPT 系列，参数量爆炸的大模型不断涌现。可以说，LLMs 的研究在学界和业界都得到了很大的推进，尤其去年 11 月底对话大模型 ChatGPT 的出现更是引起了社会各界的广泛关注。如上图大语言模型发展时间轴所示，黄色的部分是已开源的模型，2021年之后各家发布的模型逐渐增多。可以看出，OpenAI其实基本上没有开源的模型，反而Meta、Google开源的模型较多。如今的大语言模型发展到哪一步呢？近期，中国人民大学人工智能学院教师和学生调研了大语言模型的最新研究进展和主要技术路径，并形成研究成果以预印版形式上传到arXiv网站，期望能为各位研究人员和工程人员提供一定的技术参考。一、概述通常来说，大语言模型指的是那些在大规模文本语料上训练、包含百亿级别（或更多）参数的语言模型，例如GPT-3，PaLM，LLaMA等。目前的大语言模型采用与小模型类似的Transformer架构和预训练目标（如Language Modeling），与小模型的主要区别在于增加模型大小、训练数据和计算资源。大语言模型的表现往往遵循扩展法则，但是对于某些能力，只有当语言模型规模达到某一程度才会显现。LLMs 的涌现能力：指模型具有从原始训练数据中自动学习并发现新的、更高层次的特征和模式的能力，这是 LLM 与以前的 PLM 区分开来的最显著特征之一。当出现这种新的能力时，它还引入了一个显著的特征：当规模达到一定水平时，性能显著高于随机的状态。以此类推，这种新模式与物理学中的相变现象密切相关。原则上，这种能力也可以与一些复杂的任务有关，而人们更关心可以应用于解决多个任务的通用能力。文献介绍了 LLM 的三种代表性的涌现能力：‍一是上下文学习。GPT-3 正式引入了上下文学习能力，假设语言模型已经提供了自然语言指令和多个任务描述，它可以通过完成输入文本的词序列来生成测试实例的预期输出，而无需额外的训练或梯度更新。二是指令遵循。通过对自然语言描述（即指令）格式化的多任务数据集的混合进行微调，LLM 在微小的任务上表现良好，这些任务也以指令的形式所描述。这种能力下，指令调优使 LLM 能够在不使用显式样本的情况下通过理解任务指令来执行新任务，这可以大大提高泛化能力。三是循序渐进的推理。对于小语言模型，通常很难解决涉及多个推理步骤的复杂任务，例如数学学科单词问题。同时，通过思维链推理策略，LLM 可以通过利用涉及中间推理步骤的 prompt 机制来解决此类任务得出最终答案。同时，作者还介绍了LLMs的关键技术：缩放、训练、能力激发、对齐调优、工具利用。二、大语言模型资源这部分内容旨在帮助读者们了解大规模语言模型的发展进程、模型的训练需求，以及总结有助于训练的可用资源。文献总结了可以用于开发大语言模型的公开可用资源，包括模型检查点（model checkpoint）或公开接口（API），训练语料库以及算法库。对于公开检查点的模型，根据模型参数量分成两大类，分别是百亿（10B）参数到千亿（100B）参数模型和大于千亿（100B）参数模型。在每一部分介绍时，文献根据模型的预训练语料、任务，或者评测给出研究不同能力时的推荐模型，并且根据模型原论文罗列了预训练硬件配置。对于公开接口，重点介绍了OpenAI的GPT系列接口，包括GPT-3系列到当前的GPT-4系列，并简要介绍了部分接口之间的关系。对于训练语料库，按照内容将数据集分成了六类：书籍类、CommonCrawl类、Reddit link类、维基百科类、代码类和其他。具体地，当前大语言模型使用的语料多为是公开数据集，其中BookCorpus、CommonCrawl、Reddit Links、Wikipedia等都是常用的数据集。对于算法库，作者进一步梳理了常用模型库和并行算法库。如Transformers、DeepSpeed、Megatron-LM、JAX、Colossal-AI、BMTrain、FastMoE，以及PyTorch、TensorFlow、MXNet 、 PaddlePaddle、MindSpore和OneFlow也提供了并行的算法支持。大语言模型预训练技术预训练是大语言模型能力的基础，通过在大规模语料库上进行预训练，大语言模型可以获得基本的语言理解和生成能力。当语言模型的参数量扩展到超千亿级别时，从头预训练一个大语言模型就成为一件十分困难且有挑战的事情。在数据层面，如何收集尽可能多的高质量语料对预训练模型的效果十分关键。本章从预训练语料的收集出发，主要探讨了数据的多种来源（如对话、代码等）和预处理（清洗与编码）等内容。现有的LLM主要利用各种公共文本数据集的混合作为预训练语料库。收集大量文本数据后，必须对其进行预处理以构建预训练语料库，尤其是去除噪音、冗余、无关和潜在有害数据，这可能会极大地影响LLM的容量和性能。在模型层面，最引人关注的问题之一即是，为什么大语言模型往往采用Decoder-Only架构？本文从Transformer做语言模型的主干架构、具体模块和预训练任务三方面向读者们介绍如今大模型的常用方案，并在最后结合文献讨论大家选用Decoder-Only架构的原因。一般来说，现有LLM的主流架构可以大致分为三种主要类型，即编码器-解码器、因果解码器和前缀解码器。在训练层面，大参数量的模型非常难以优化。研究人员付出众多努力，提出了若干增加训练稳定性，及提升训练效率的方案。本章对3D并行、ZeRO等被集成于DeepSpeed等代码库的相关训练技术进行归纳整理，并在最后对如何稳定、高效地预训练一个大语言模型给出建议。四、大语言模型适配微调技术预训练之后，“适配微调”（adaptation tuning）可以进一步增强大语言模型能力并满足人类偏好。本章主要介绍了两种适配微调技术：指令微调与对齐微调。指令微调通过收集指令格式的实例来微调大模型，大大增强了模型遵循人类指令的能力，能够让模型更好地泛化到未知任务。文献展示了两种收集指令格式实例的方法，并讨论了任务数量、实例数量、实例设计等因素对指令微调效果的影响。同时，作者也总结了指令微调过程中常见的数据集合和训练细节，方便研究者训练自己的模型。对齐微调通过收集人类反馈数据，利用强化学习进一步微调大模型，使模型与人类对齐，更加符合人类的偏好。文献首先讨论了三种常见的对齐标准：有用性、诚实性和无害性，接着展示了三种人类反馈收集方式，最后介绍了基于人类反馈的强化学习流程。五、大语言模型使用技术本章介绍了大模型完成训练之后的使用方法。其中的代表性技术是上下文学习，它以自然语言文本的形式给大模型提供任务描述和/或任务示例。文献重点总结了如何设计有效的任务示例来增强大模型通过上下文学习完成下游任务的效果，包括示例的选择、格式以及顺序。作者还从预训练和推理两个阶段讨论了大模型上下文学习能力的来源。此外，思维链提示也受到广泛关注，它的做法是在提示中添加中间推理步骤来增强大模型在推理任务上的性能。根据提示中是否存在样例，思维链提示的使用场景可以分为少样本和零样本两种情况。作者还讨论了思维链提示的适用场景以及大模型思维链推理能力的来源。六、大语言模型能力评估为了评估大语言模型的有效性和优越性，研究者在大量任务和评测基准上进行了评测与分析。作者从三个角度总结梳理了大语言模型的相关能力评估。对于大模型的基础评测，文献主要关注了三类任务，包括语言生成任务、知识利用任务和复杂推理任务。总体来看，大语言模型在各类基础任务中取得了令人瞩目的效果。但与此同时，大语言模型在一些方面也存在亟待解决的问题，包括可控性、幻觉、知识实时性、一致性等等。除了上述基础任务外，大模型还表现出了很多高级能力。作者着重讨论了人类对齐、外界环境交互、工具操作三大类高级能力及其对应的评估方法。这三种能力极大地丰富了语言模型的应用场景，使得语言模型能做出符合人类价值观和偏好的行为，对现实世界产生作用，以及利用工具扩展能力边界。接下来，文献介绍了面向大语言模型的现有综合评测基准以及相关实证分析。研究者提出了许多综合评测基准，用于全面的评测和比较大语言模型。同时，另一大类工作着重于对大语言模型通用能力以及专业领域应用能力的分析。七、总结与展望论文就LLM 的预训练、适配微调、应用和评估等四个方面进行了重点介绍，以及总结了开发LLM的可用资源，并讨论了实现LLM的重要技术，以便研究者复现LLM。基于此，作者进一步介绍了LLM在理论与原理、模型架构、模型训练、模型应用、安全与对齐、应用与生态等方面的展望。本论文引用或介绍相关论文数量长达420余篇，受限修哥研究水平，推文就不再一一列举其中的研究成果，感兴趣的小伙伴们可以自己阅读原文。参考资料：https://arxiv.org/abs/2303.18223；https://github.com/RUCAIBox/LLMSurvey；