最近大语言模型就像雨后春笋一样涌现出来,让人有点应接不暇,这里就写篇博客汇总一下近期发展情况,主要参考若干survey以及相关技术论文,截至2023.4
语言是人类表达和通信的一种突出能力,它在儿童早期发展,并在一生中进化。而对于机器,它们不能自然地掌握以人类语言形式理解和交流的能力,除非配备强大的人工智能 (AI) 算法。为了实现这一目标,一直是一个长期的研究挑战,它使机器能够像人类一样阅读、写作和交流。从技术上讲,语言建模 (LM) 是推进机器语言智能的主要方法之一。一般来说,LM 旨在对单词序列的生成似然进行建模,以预测未来(或缺失)标记的概率。LM的研究在文献中受到了广泛的研究关注,大致可分为四大发展阶段:
看似LLM和PLM训练方式大同小异,但呈现出来的效果却天差地别,这对我们的研究有以下几点改变:
1、LLM显示出一些令人惊讶的涌现能力,这在以前的较小PLM中可能没有观察到。这些能力是语言模型在复杂任务中表现的关键,使人工智能算法变得前所未有的强大和有效。
2、LLM彻底改变了人类开发和使用人工智能算法的方式。与小型PLM不同,访问LLM的主要方法是通过提示接口(例如GPT-4API)。人类必须了解LLM是如何工作的,并以LLM可以遵循的方式格式化他们的任务,输入和输出都变为了自然语言,有任务大一统的趋势,在自然语言处理领域,LLM可以作为通用的语言任务求解器。
3、LLM的发展不再明确区分研究和工程。LLM的训练需要在大规模数据处理和分布式并行训练方面有丰富的实践经验。为了开发有能力的LLM,研究人员必须解决复杂的工程问题,与工程师合作或成为工程师。
transformers家族如日中天:下图是transformer的大模型发展图,左边NLP,中间多模态,右边CV,最近还有个Segment Anything Model (SAM)分割一切的CV模型,让CV领域也迎来了ChatGPT时刻
大型语言模型效果这么好,但是为什么好,原理研究不是很清楚,现在只能从现象尝试去一窥大模型神奇的一角,下图是截至现在出现的LLM,有底色的是开源模型,真的像雨后春笋一样。
LLM的涌现能力被正式定义为“不存在于小模型中但出现于大模型中的能力”,这是LLM与以前的PLM区别开来的最显著特征之一。当涌现能力出现时,它还引入了一个显著的特征:当规模达到一定水平时,表现显著高于随机。通俗来说就是参数量超过某个阈值,有些神奇的东西就会出现,拿FLAN的论文里的图来简单表示为:
涌现的主要有以下能力:
上下文学习 In-context learning(ICL)在不调整模型参数的情况下,根据用户输入的上下文结合模型输出更加符合上下文的答案,严格定义如下
其中C为上下文,为当前输入,通过模型f、上下文参数C和输入x共同预测下一句话,而不是只通过输入和模型进行预测,对话连贯度大幅增加
指令跟随 Instruction following(IF)理解问题能力明显增强,指令调优使LLM能够通过理解任务指令来执行新任务,而无需使用明确的示例,这可以在很大程度上提高泛化能力
思维链 chain of throught (COT) 对于小型语言模型,通常很难解决涉及多个推理步骤的复杂任务,例如数学单词问题。而通过思维链推理策略,LLM可以通过利用提示机制来解决这些任务,该机制涉及推导最终答案的中间推理步骤。据推测,这种能力可能是通过对代码进行训练而获得的
这里简要列出了(可能)导致LLM成功的几个重要技术
大型语言模型(超过10B)的统计数据,包括容量评估、预训练数据规模(token或数据大小)和硬件资源成本。“adaptation”表示模型是否经过后续微调:IT 表示指令调整,RLHF 表示具有人类反馈的强化学习。"Evaluation" 表示模型是否已在原始论文中使用相应的能力进行评估:ICL 表示上下文学习,CoT 表示思维链。“*”表示最大的公开可用版本。
分别是书籍(Books),网页(CommonCrawl),网络帖子(Reddit links),百科,代码(Codes),论文(Pile),多语言(ROOT)等多方位数据,并且有一定过滤,例如贴文选择点赞量较高的,代码stars较多的等,需要尽量保证质量
预训练建立了 LLM 能力的基础。通过对大规模语料库进行预训练,LLM 可以获得基本的语言理解和生成技能 。在这个过程中,预训练语料库的规模和质量对于 LLM 获得强大功能至关重要。此外,为了有效地预训练 LLM、模型架构、加速方法和优化技术需要很好地设计。
预训练通常采用上述数据集,根据目的不同,不同数据集占比不同,使用的总量也不尽相同,具体占比如下
一般使用上图流程,分为以下几步
最终数据影响模型性能有三方面:数据来源,数据数量,数据质量,都很好理解产生影响的原因
主流的LLM架构分为以下三种
上述三种方式可以混合以达到性能改进
下图是各个主流模型的架构
其中PE 表示位置嵌入,#L 表示层数,#H 表示注意力头的数量,dmodel 表示隐藏状态的大小,MCL 表示最大上下文长度
综上所述。为了更强的泛化和训练稳定性,建议选择Pre RMS Norm进行层归一化,将SwiGLU或GeGLU作为激活函数。对于位置嵌入,RoPE 或 ALiBi 是一个更好的选择,因为它在长序列上表现更好。
预训练任务主要是语言建模和去噪自动编码,如下公式也是语言建模的自回归解码器的通用目标
去噪自动编码任务(DAE)也被广泛用于预训练语言模型,DAE任务的输入x是带有随机替换跨度的损坏文本。然后,对语言模型进行训练,以恢复被替换的token x,其任务目标如下图所示
总的来说,Casual Decoder 的zero-shot和few-shot的性能更强,而缩放定律在Casual Decoder中也得到了很好的印证,通过缩放模型大小、数据集大小和总计算量,可以显著提高随机解码器的性能,相比之下,对于encoder-decoder的上述研究却很缺乏。
训练有以下要素
下面是主流模型训练参数,中间一列为权重衰减方式,最后三个为衰减率,梯度截断和丢弃率
接下来是加速方法用于提高训练吞吐量和大型模型加载,主要有:
数据并行、张量并行、管道并行
GPT-4 最近引入了一种新的机制,称为基于深度学习堆栈的可预测缩放,从而能够使用更小的模型预测大型模型,对开发LLM应该有一定的借鉴作用
主要分为指令微调和人机对齐两部分,前一种方法主要旨在增强或解锁llm的能力,而后一种方法旨在将llm的行为与人类值或偏好对齐
指令微调是在自然语言形式的格式化实例集合上微调预先训练的llm的方法,和监督微调与多任务提示训练高度相关,其实就是通过自然语言描述任务使模型提高理解输入的能力,从而增加模型的泛化性能,在上一篇chatgpt的调研博客中FLAN论文部分也写了这方面的内容,本质上是一个理解能力和生成能力同时提高的过程。
指令格式的实例由任务描述(称为指令)、输入输出对和少量演示(可选)组成,这里的来源主要分为两方面:
影响指令微调质量的关键因素:
总而言之,指令的多样性比实例的数量更重要,因为性能良好的 InstructGPT 使用比 Flan 系列 LLM 更少但更多样化的指令(或实例)。此外,邀请标签者组成人类需求任务比使用数据集特定任务更有用。为了减少人力,可以重用现有的格式化数据集或使用现有的llm自动构建指令。
可用指令微调数据集如下:
当然,中文数据质量不敢恭维,现在国内更多人使用GPT-4去生成指令答案微调自己的模型(哈哈)
最终指令微调的效果有如下几个:
BLOOMZ-P3基于Bloom[68]使用纯英语任务集合P3进行微调。有趣的是,与Bloom相比,BLOOMZ-P3在多语言句子补全任务上可以提高50%以上,这表明指令调整可以帮助LLMS从只有英语的数据集中获得一般任务技能,并将这些技能迁移到其他语言
LLM在几乎所有的NLP任务中表现出了超强的能力。然而,这些模型有时可能会表现出意想不到的行为,例如,捏造虚假信息,追求不准确的目标,并产生有害、误导和有偏见的表达,因为其采用词预测的方法对模型参数进行预训练。为了避免这些意想不到的行为,人机对齐被提出使LLM的行为符合人类的期望。
人机对齐有自己的一套标准,其实就是对人类价值观的定量描述,其实是比较主观的,现有的工作主要是通过对抗和学习的方式防止这类输出,现行主流的方法是人类反馈强化学习(Reinforcement Learning from Human Feedback,RLHF)这种行为学习的方法
RLHF系统主要包括三个关键部分:待对齐的预训练LM、从人的反馈中学习的奖励模型和训练LM的RL算法。具体地,预训练的LM通常是用现有的预训练的LM参数初始化的生成性模型,奖励模型可以采取两种形式:微调的LM或使用人类偏好数据训练的LM从头开始训。现有的工作通常使用具有不同于对齐的LM的参数尺度的奖励模型。例如,OpenAI使用6B GPT-3,DeepMind使用7B Gopher作为奖励模型。最后,为了利用来自奖励模型的信号来优化预先训练算法,近邻策略优化(PPO)是现有工作中广泛使用的用于比对的RL算法。
上述过程有三步:
这个RHLF是行为模拟,所以极其考验标注者的水平,高质量的标注也是OPENAI成功的原因之一,也不怪百度比不过,数据是一方面,标注也是一方面。
使用LLM做下游任务的时候主要通过上下文学习(In-Context Learning,ICL),利用思维链提示(chain-of-thought prompting CoT)来增强前者的效果,以达到下游任务的目的。
其过程如上图所示:首先,从任务描述开始,从任务数据集中选择了一些示例作为演示。然后,它们以特定顺序组合,以使用专门设计的模板形成自然语言提示。最后,将测试实例附加到演示中作为 LLM 的输入以生成输出。基于任务演示,LLM 可以识别并执行新任务,而无需显式梯度更新。,执行过程如下:
当在 GPT-3 的论文中引入 ICL 时,它最初被定义为任务描述和演示示例的组合,其中任一组件是可有可无的。按照这个定义,当 LLM 只需要仅使用任务描述来解决不可见的任务时,也可以考虑执行 ICL 来解决任务解决,而 ICL 能力可以通过指令调整来增强。
影响ICL性能的主要有以下两个方面(每个方面都有很多人研究):
演示设计:包括演示选择、格式和顺序。
底层机制:经过预训练后,llm可以在不更新的情况下表现出有趣的ICL能力
CoT 不是简单地用 ICL 中的输入输出对构建提示,而是将中间推理步骤合并到提示中,从而导致最终输出。
CoT性能影响因素以及相关研究:
现象:CoT 只对足够大的模型产生了积极影响(例如,通常包含 10B 或更多参数 [33]),但对小型模型没有影响,其通过中间推理步骤增强了提示,因此改进需要逐步推理的任务(例如算术推理、常识推理和符号推理)主要是有效的。然而,对于不依赖复杂推理的其他任务,它可能显示出比标准提示更差的性能。
原因:关于 CoT 能力的来源,人们普遍认为它归因于代码的训练,因为在其上训练的模型显示出强大的推理能力。直观地说,代码数据通过算法逻辑和编程流程组织得很好,这对于提高 LLM 的推理性能可能很有用,这个观点缺乏验证,能力还跟给的模式,即推理路径和提示文本组织方式有关。
GLUE数据集,结论如下:
算数推理(下图)强于普通大模型,理解问题能力更强
ChatGPT 在七个常识、符号和逻辑推理数据集上与流行的 LLM 相比的准确性(下图):
后面是GPT-4的评估效果,可以看到大幅提升:(基本上秒杀)
上图是ChatGPT和GPT-4在逻辑多项选择机器阅读理解任务上的表现(准确率%)
上图是ChatGPT和GPT-4在自然语言推理任务上的表现(准确性%)
上图是GPT-4的性能,在有/没有上下文的情况下
GPT-4在所有任务上基本达到了SOTA,评估部分就不多赘述,一大堆评估的论文
AutoGPT最大的特点是突破了现有的GPT只能做文本方面的任务的限制,可以利用各种工具来完成目标
AutoGPT原名是EntreprenurGPT,Significant Gravitas在2023年3月16日表达了他想创造一个实验项目,看看GPT-4能否在人类商业世界中生存,简单来说就是是否可以挣钱。其核心思想就是不停的向GPT-4发送请求,让其做商业决策,最后根据这个决策执行,看GPT-4给的策略能挣多少钱。Significant Gravitas发现,为了挣钱AutoGPT甚至抛弃了一些所谓的“道德”标准,在寻找新的挣钱机会的时候,AutoGPT敏锐地发现了加州洪水淹没农田,造成食物价格上涨,可以从这个背景寻找投资机会!
AutoGPT主要特性如下:
与hugging GPT的区别
HuggingGPT的目的是使用所有的AI模型接口完成一个复杂的特定的任务,更像解决一个技术问题的方案。而AutoGPT则更像一个决策机器人,它可以执行的动作范围比AI模型要更多样,因为它集成了谷歌搜索、浏览网页、执行代码等能力。从这个角度说,AutoGPT可以完成的任务或者决策比HuggingGPT更强,但是AI的能力却主要依赖GPT系列
Generative Agents: Interactive Simulacra of Human Behavior
论文中提出的生成式智能体,可以以复杂且引人入胜的方式互动,形成观点,发起对话,甚至自主计划和参加活动。这项工作进一步支持了智能体机制在AI发展中具有前景的论点。
在一次评估中,这些生成代理产生了可信的个人和突发的社会行为:例如,从只有一个用户指定的概念开始,即一个代理想举办一个情人节聚会,这些代理在接下来的两天里自主地传播聚会的邀请,结识新朋友,互相约会参加聚会,并协调在正确的时间一起出现在聚会上。
amazing,未来已来