在4月一经推出就火爆开发者社区的大语言模型综述更新了!
此前,人大等学校的多位研究者回顾了大语言模型在背景知识、关键发现和主流技术等方面的进展,尤其强调了大语言模型的预训练、自适应调优、使用和能力评估。
最近,研究者对于这些研究进行了更新。在这次更新中,添加了34多个新页面,200多个新参考。包括:- 新论文(LLaMA系列) - 新章节(例如,LLMs的复杂任务规划) - 26个有用的prompt技巧 - 对LLM的8种完成特定任务的能力进行实证评估
LLM大事记
下图是近年来大于100亿的大语言模型的时间轴。
其中,时间轴主要根据模型的技术论文发布日期来建立。
为了便于阅读,团队还通过LLM和人工校对,制作了中文版的调查报告(v4)。
LLM发展概述(arXiv上LLM相关论文数量的趋势)
这次更新的有arXiv上LLM相关论文数量趋势。
以下分别是包含关键词「语言模型」(自2018年6月以来)和「大语言模型」(自2019年10月以来)的arXiv论文数量趋势。
统计数据是通过按月份查询标题或摘要中的关键词的精确匹配来计算的。
由于学界很早就开始探索语言模型了,因此研究者为这两个关键词设置了不同的X轴范围。
我们在图中标注了与LLMs研究进展中重要里程碑相对应的点。
在ChatGPT发布后,论文数量急剧增加:每天平均发布的包含「大语言模型」关键词的arXiv论文从0.40篇增至8.58篇。
LM研究发展阶段
LM旨在对单词序列的生成可能性进行建模,从而预测未来(或缺失)token的概率。
LM的研究可以分为四个主要的发展阶段:
-统计语言模型(SLM)
SLM基于20实际90年代兴起的统计学习方法开发。基本思想是建立基于马尔可夫假设的单词预测模型,例如,根据最近的上下文预测下一个单词。
具有固定上下文长度n的SLM也也被称为n元语言模型,比如二元语言模型和三元语言模型。
SLM在信息检索(IR)和自然语言处理(NLP)中被广泛应用于提高任务性能。然而,它们往往会遭受维数诅咒:由于需要估计指数级数量的转移概率,因此很难准确估计高阶语言模型。
-神经语言模型(NLM)
NLM通过神经网络(如循环神经网络RNN)来表征单词序列的概率,NLM最显著的贡献是引入了单词的分布式表征的概念,并构建了以分布式词向量为条件的单词预测函数。
为了构建一个简化的浅层神经网络来学习分布式的单词表征,word2vec被提出,并且被证明是非常有效的。
-预训练模型(PLM)
ELMo是通过预训练一个双向LSTM网络,然后根据特定的下游任务对这个网络进行微调。
此外,BERT是基于具有自注意机制的高度并行化Transformer架构被提出。它们很大程度上提高了NLP任务的性能标准。
-大语言模型(LLM)
许多研究通过训练更大的PLM(如175B参数的GPT-3和540B参数的PaLM来探索性能极限,它们在解决一系列复杂任务时涌现出惊人的能力。
例如,GPT-3可以通过上下文学习解决few-shot任务,而GPT-2做得并不好。
而GPT-4已经被认为是AGI的早期版本。
LLM涌现的能力
LLM的涌现能力被定义为:在小模型中不存在但在大模型中出现的能力。这是LLM区别于以往PLM的最显著特征之一。
具体包括——
-上下文学习
GPT-3 正式引入了上下文学习能力:假设语言模型已经提供了自然语言指令和多个任务描述,它可以通过完成输入文本的词序列来生成测试实例的预期输出,而不需要额外的训练或梯度更新。
175B型GPT-3总体表现出较强的上下文学习能力,而GPT-1和GPT-2表现不佳。
-指令跟随
通过对自然语言描述格式化的多任务数据集的混合进行微调(被称为指令调优),即使在以指令形式描述的未见任务上,LLM也表现良好。
LLM可以在不使用显示样本的情况下遵循新任务的指令,从而提高泛化能力。
-一步一步的推理
对于小型语言模型,通常很难解决涉及多个推理步骤的复杂任务,例如数学单词问题。
相比之下,通过思维链(CoT)提示策略,LLM 可以通过使用包含中间推理步骤的prompt机制推导最终答案,来解决这类任务。
据推测,这种能力可能是通过训练代码而获得的。
LLM的关键技术
以下是几个(潜在)导致LLM成功的重要技术。
-缩放
Transformer语言模型中存在明显的扩展效应:更大的模型/数据规模和更多的训练会导致模型容量的提高。
GPT-3将模型参数增至1750亿,PaLM将模型参数增至5400亿,都探索了缩放的极限。
利用缩放定律,可以进行更有效的计算资源分配。
-训练
由于规模巨大,需要分布式训练算法来学习LLM的网络参数,联合使用各种并行策略。
为了支持分布式训练,DeepSpeed和Megatron-LM等优化框架已经发布,用来促进并行算法的实现和部署。
-能力激发
在大规模语料库上经过预训练后,LLM被赋予了解决通用任务的潜在能力。
但是执行某个特定任务时,这些能力未必会表现出来。
因此需要设计适合的任务指令或特定的上下文学习策略,来激发出LLM的这些能力,比如思维链prompt。
-对齐微调
由于训练LLM的语料质量参差不齐,它们很可能生成对人类有毒、有偏见甚至有害的文本内容。
为了让它们与人类价值观保持一致,InstructGPT设计了一种利用强化学习和人类反馈的高效调优方法,使得LLM 能够遵循预期指令。
ChatGPT即是在类似技术上开发的。
-工具利用
LLM在数值计算任务上表现不佳,且受限于预训练数据。因此,它们需要外部工具来弥补,比如计算器、搜索引擎、外部插件等。
GPT系列模型的技术演进
研究者主要根据OpenAI的论文、博客文章和官方API重新绘制了这个GPT系列模型的技术演进图。
在图中,实线表示两个模型之间存在明确的证据(例如,官方声明新模型是基于基础模型开发的)的演进路径,而虚线表示相对较弱的演进关系。
研究者讨论了GPT系列模型的技术演变,总结了它们在过去几年的进展。
下表是近年来大语言模型(大于10B)的统计,包括容量评估、预训练数据规模(token数量或存储大小)和硬件资源成本。只包括有公开技术细节论文的LLM。
LLaMA家族进化图
这次更新的还有LLaMA研究工作的演化图。
由于数量庞大,这个图中这个图中包含所有的LLaMA变种,尽管其中有很多优秀的工作。
LLaMA模型是Meta AI在2023年2月推出的,包括7B、13B、30B和65B四个尺寸。
自发布以来,LLaMA以前你了学界和工业界的广泛关注。它们在各种开放基准测试中取得了优异性能,成为如今最流行的开源语言模型。
由于计算成本较低,结构调优LLaMA已经成为开发定制或专有模型的主要方法。
LLaMA家族包括Stanford Alpaca、Koala、BELLE。
而基于另一种流行的LLaMA变体Vicuna,出现了LLaVA、MiniGPT-4、InstructBLIP、PandaGPT等。
总之,LLaMA的发布极大推动了LLM的研究进展。
提示
团队从在线笔记和作者的经验中,收集了一些有关设计提示的有用建议,并展示了相关的要素和原则。
四个原则分别是——
1:清晰表达任务目标;
2:将任务分解为易于理解的详细子任务;
3:提供少样本示例;
4:使用适合模型的格式。
任务描述
T1. 尽可能详细地描述提示,例如,「用50个字以内总结这篇文章。包括主要情节和结论,可以省略不重要的细节。」 (1)
T2. 用一个预设的提示让LLM知道自己是一个专家,例如,「你是一个计算机科学领域的资深专家。」 (1)
T3. 告诉模型更多应该做什么的信息,而不是不应该做什么。(1)
T4. 为了避免LLM生成过长的输出,可以只使用提示:「问题:简短回答:」。此外,还可以使用以下后缀:「用几个词或一两句话回答」。(1)
输入数据
I1. 对于需要事实知识的问题,先通过搜索引擎检索相关文档,然后将它们插入到提示中作为参考。(4)
I2. 为了突出提示中的一些重要部分,请使用特殊标记,例如引号("")和换行符(\n)。也可以同时使用它们进行强调。(4)
上下文信息
C1. 对于复杂的任务,可以清楚地描述完成任务所需的中间步骤,例如,「请一步一步地回答问题,步骤一:将问题分解为几个子问题...」。(2)
C2. 如果想让LLM对文本进行打分,则需要提供有关评分标准的详细说明,并提供示例作为参考。(1)
C3. 当LLM根据某个上下文生成文本时(例如根据购买历史进行推荐),通过解释与生成结果有关的上下文,可以提高生成文本的质量。(2)
少样本示例
D1. 格式准确的上下文示例可以帮助指导LLM,特别是对于那些格式复杂的输出来说。(3)
D2. 对于少样本思维链提示,可以使用「让我们一步一步思考」,少样本示例应该用「\n」分隔而不是用句号。(1)(3)
D3. 可以检索上下文中的类似示例,为LLM提供有用的任务特定知识。为了检索更多相关示例,先获得问题的答案,然后将其与问题连接起来进行检索。(3)(4)
D4. 上下文示例的多样性也很有用。如果很难获得多样性问题,可以尝试保持问题的解决方案的多样性。(3)
D5. 在使用基于对话的LLM时,可以将上下文示例分解为多轮对话消息,以更好地匹配人类与机器人的对话格式。同样,可以将示例的推理过程分解为多轮对话。(3)
D6. 复杂且信息丰富的上下文示例有助于LLM回答复杂问题。(3)
D7. 由于符号序列通常可以分为多个段落(例如i1、i2、i3 → i1、i2和i2、i3),可以将之前的段落用作上下文示例,引导LLM预测后续段落,同时提供历史信息。(2)(3)
D8. 上下文示例和提示组件的顺序很重要。对于非常长的输入数据,问题的位置(第一个或最后一个)也可能影响性能。(3)
D9. 如果无法从现有数据集获取上下文示例,另一种替代方法是使用LLM自己生成的零样本示例。(3)
其他
O1. 在得出结论之前,让LLM检查其生成的结果,例如,「检查上述解决方案是否正确」。(2)
O2. 如果LLM无法很好地解决任务,可以通过提示LLM使用外部工具进行帮助。这时,工具应该封装为可调用的API,并提供关于其功能的详细描述,以更好地指导LLM利用工具。(4)
O3. 提示应该是自包含的,并且最好不要包含上下文中的代词信息(例如它和它们)。(1)
O4. 在使用LLM进行比较两个或更多示例的任务时,顺序对性能影响很大。(1)
O5. 在提示之前,为LLM分配一个角色有助于它更好地完成后续任务指导,例如,「我希望你扮演一名律师」。(1)
O6. OpenAI模型在英语方面的任务表现比其他语言更好。因此,将输入首先翻译成英语,然后再输入LLM会很有帮助。(4)
O7. 对于多选题,可以限制LLM的输出空间。比如,使用更详细的说明或仅对逻辑回归添加约束。(1)
O8. 对于基于排序的任务(例如推荐),不直接输出排序后的每个项目的完整文本,而是给未排序的项目分配代号(例如ABCD),并指示LLM直接输出排序后的代号。(1)
另外,研究者还提供了解决许多常见任务的prompt的具体示例。
这些任务prompt大多来自现有的论文,实验使用基于ChatGPT的提示。
复杂任务规划
「复杂任务规划」可以被总结为三个组件:任务计划器、计划执行程序和环境。这种范式可以从三个方面来解释:
>计划生成 >反馈采集 >计划细化
实验
指令微调
团队探讨了在微调LLM中不同类型指令的影响,并测试了一些指令改进策略的有效性。
以下是基于LLaMA-7B模型在聊天和问答设置下进行的指令调整实验的结果(所有实验均为单轮对话)。
其中,采用的是Self-Instruct-52K数据集中,四种指令的改进策略,即增加复杂性(使用复杂性策略)、增加多样性(使用多样性策略)、平衡难度(使用难度策略)和增加指令数量(使用缩放策略)。
能力评估
团队针对LLM的8种能力,进行了细致的评估。
其中,橙色和蓝色字体的色阶分别表示闭源模型和开源模型的结果性能顺序。
参考资料:https://github.com/RUCAIBox/LLMSurvey