好的,欢迎大家回来。今天我会简要介绍一下大语言模型。这是大语言模型课程的一个超级浓缩版,不会深入讲具体的实现算法。但如果你们感兴趣,随时可以提问。或者如果大家对某个特定主题特别感兴趣,我们也许可以再安排一节课来深入讲解。
在讲大语言模型之前,我先简要介绍一下循环神经网络(RNN)。在Transformer问世之前,RNN是非常流行的模型。它的思路是:我们有一串词对应的数值,依次输入网络,并不断更新网络的隐藏状态。每输入一个词,就更新一次。输完整句话后,最终隐藏状态就包含了前面所有词语的顺序信息。然后用这个最终状态连接一个分类器,输出最可能的下一个词。
在这个例子中,输入“the student opened the”,分类器会输出概率,最可能的下一个词是“books”。
RNN有几个优点:第一,可以处理任意长度的输入,因为隐藏状态大小是固定的,无论输入多长,隐藏状态尺寸不变。第二,输入上下文变长时,模型大小不会增加。但关键问题是,这种循环计算很慢,必须逐词处理。输入句子越长,处理时间就线性增长。而且,由于只基于先前的隐藏状态进行计算,很难获取很久之前的信息。所以,如果到了句子末尾,模型很可能已经忘记前文几个词的信息。这就是我们引入Transformer的原因。
这张图其实三页前放过,我直接复制过来了。Transformer的好处在于它有全局注意力:每个词都可以与输入文档中的任何其他词交互。每个词生成一个查询,用来获取并整合其他词的信息。好处是,并行操作的数量不随序列长度增加,无论序列多长,都可以一次操作处理完。第二是最大交互距离为1,模型更容易捕捉长距离依赖关系,比如这句话里的某个词与另一句话里某个词的关系。
但Transformer也有很多缺点。一个突出的问题是时间复杂度较高。可以看到,这里的Q乘K的转置,意味着用输入序列长度对应的矩阵乘以另一个同样长度的矩阵,注意力计算复杂度是n平方。如果输入文档非常长,比如把整篇维基百科都放进去,计算量就非常庞大。这就是为什么近年来出现了线性注意力的趋势。基本思路是把超长文档切成若干段,每段内部做注意力计算,让同段内的词相互交互,然后用类似RNN的方式聚合各段信息。就是把RNN和Transformer结合起来,降低注意力所需的计算量。
接下来我简要讲一下大语言模型的预训练。大语言模型之所以如此成功,是因为我们有了大规模预训练。预训练的做法其实很简单:把输入文档切成有重叠的窗口,把整段输入给模型,让它预测下一个词。在整个互联网文本的规模上做这个“下一个词预测”任务。方法很简单,那为什么它如此成功?因为有了整个互联网的文本用于训练,这种极其多样、海量的数据对模型获得这些能力至关重要。
想想看,问答数据集SQuAD 2.0算是很大的了,大约有5000万个token。但现在我们用的预训练文本数据集,比如DataCommon,有250万亿个token。而整个可索引的互联网文本,大约有510万亿个token。是最大问答数据集的一千万倍。所以互联网文本几乎涵盖了你所能想到的任何任务的数据,因此模型拥有了良好的多任务能力,多样性也极强。
预训练文本包含网页、代码,还有Reddit等社交媒体内容,以及论文、书籍、维基百科和文章。
有人问,为什么总共是3100万亿,但只有510万亿被索引?因为很多文本搜索引擎无法触及。搜索引擎确实覆盖了大量网页,但并非整个互联网。如果没有其他网页指向某个页面,搜索引擎就找不到它。此外,公司或政府的内网数据,或者某些私人数据,这些都不在搜索引擎的覆盖范围之内。那3100万亿是包含搜索引擎之外信息在内的整个互联网的估算值。
这就是预训练部分。
接下来快速介绍一下大语言模型通常使用的架构类型。主要有三大类:仅编码器模型、编码器-解码器模型,以及仅解码器模型。不细讲架构之间的区别,但关键是,编码器模型具有双向注意力。输入一个词时,它可以看到前面和后面的所有词。而解码器模型只能看到过去的词。如果句子中间有一个词,解码器只能关注到句子的前半部分,但编码器可以同时关注前后两半。
一个著名的仅编码器模型是BERT,用于文本分析。如果做情感分析或情绪识别等任务,BERT通常是个不错的起点。而仅解码器模型,现在几乎所有大语言模型都是这种。目前好像没有哪个现代模型还在用仅编码器的设计了。为什么呢?我认为主要是性能原因。仅解码器模型更自然地模拟语言生成。你让模型生成答案时,生成过程本身就只能是逐个看过去的词,它无法知道未来要生成的词,所以编码器架构在这里不是很有用。第二,因为不需要关注未来的词,仅解码器模型计算效率更高,这在今天的大语言模型训练中可能是主要考量。
最著名的仅编码器模型是BERT,2018年推出,3.04亿参数。当时被认为是非常大的模型,但现在只能算很小的模型了。它用书籍语料库和维基百科训练,总共约3000万token。即使在今天看来是个小模型,在单块GPU上重新训练整个BERT依然很困难。当时用了64块TPU训练了4天,如果你在家用一块GPU训练,大概要8个月。
仅编码器模型的预训练方式是掩码词预测。把句子的一部分用特殊掩码token遮挡,让模型预测被遮挡的内容。原始训练中实际遮挡了80%的token,要求模型预测其中约15%。仅解码器模型就是我们今天看到的所有大语言模型,从GPT-1开始,1.17亿参数,很快就变大,到GPT-3就1750亿了。如前所述,仅解码器模型的优势在于更自然地模拟语言生成。预训练时,就是让模型基于过去上下文输出最可能的下一个词。
在仅解码器架构推出后,人们发现模型性能可以根据模型大小和训练计算量相当可预测地进行扩展。2022年那篇论文,模型是70亿参数,用1.4万亿token训练,被认为是非常标准和流行的规模定律配方,很多工作都沿用了“70B对1.4T”这种平衡。但近几年,人们扩大训练数据规模的速度比扩大模型本身更快。LLaMA 3有70亿参数,但训练数据高达15万亿token。参数只有70B的十分之一,训练token却大了10倍。这是另一个我们正在看到的很有意思的趋势。有人问,我们只看训练token的总量,但不知道数据重叠情况,数据质量到底如何?这确实也是目前一个开放问题。因为数据规模太大,我们不太清楚有多少重复。训练前仍需要大量清洗和去重。斯坦福团队推出了一个叫RedPajama的数据集,就是DataCommon的开放复现版本,其中包含了去重和含义说明。
很多东西其实从2018年第一个模型问世就已经存在了,但大语言模型直到2022年ChatGPT发布后才真正流行起来。之前的预训练有什么问题,导致它之前没那么有用?最重要的是,预训练任务只是做语言建模——预测输入句子之后最可能出现的句子。但这并不等同于帮助用户。比如,你让模型“给一个六岁小孩解释重力”,它可能反而去预测接下来会有什么句子,而这跟问题的答案毫无关系。预训练文档里这两个句子经常连着出现,但这不是我们想要的答案。
于是人们引入了指令微调。我们收集不同任务中“输入-输出”的范例,让模型在这些范例上做监督微调。指令微调在有足够数据后变得非常流行。Super Natural Instructions包含了超过1600个任务、300万个示例,涵盖几乎所有你能用纯文本做的任务,包括翻译、Python编程、分类、序列标注等。这让模型能跨任务学习,在不同任务上都取得更好的表现。
我们实验室也在做一项工作,收集一个基础性的临床多任务多模态指令训练数据集,包含13种临床模态、超过500万条医患问答对。我们发现,在多个任务上训练,比只在单一任务上训练效果更好。
那如何精确优化模型的回复,让它符合我们的期望?这就是偏好调优。我们根据人类偏好优化模型回复,也就是让它按我们期望的方式回答问题。举例来说,我们让模型总结一段文字,它会输出一个好的总结和一个差的总结。我们训练一个奖励模型,对总结打分。然后设计损失函数,让模型更倾向于输出高奖励的答案,减少输出低奖励的答案。GPT-3.5就是这么训练的。整个过程分三步:首先用少量数据收集指令-答案对,做标准的监督微调;然后用更大规模的问题集,让模型对每条指令输出多个回复,让另一组标注员从最好到最差排序;然后训练一个奖励模型来学习这种人类偏好。有了奖励模型后,就能大规模训练,在所有数据上用奖励模型来训练模型。
但人类偏好存在噪声且未经校准。同一段总结,有人可能打高分,有人打低分,有些人可能每个回复都给高分。这让训练过程变噪杂、更难训练。于是人们引入了相对偏好,用排名而非数值分数来优化模型。算法是让模型对回复进行“最好到最差”的排序,基于排序优化模型。经过指令和偏好微调后,模型在回答问题方面比原始预训练模型好得多。
但基于人类反馈的强化学习并不总是如人所愿,因为人的偏好不可靠。比如,你请标注员为问答对标注,他不可能花半小时仔细看完整段回复。他可能只看5秒钟,觉得读起来通顺、看起来不错,就给高分,但这并不总是正确的。所以模型有时候被奖励去生成那些“听起来权威、有帮助”,但实际并不正确的回复。这是当前大语言模型和RL训练中的一大问题。这会导致模型产生冒犯性内容和幻觉——模型会为了避免得低分而去编造事实。
其次,奖励模型并不总是反映人类偏好。还可能产生意想不到的行为。比如你问模型“你来自哪里”,它会给出各种答案。如果模型说自己来自发达地区(美国、加拿大或澳大利亚),奖励模型会打高分;如果说自己来自非洲,奖励模型会打低分或惩罚。但这显然不是我们想要的,我们希望模型公平对待所有地区。有人问,是否有论文显示,经过RLHF后模型的准确率反而下降了?其实有点难比较,因为经过偏好调优之前的模型可能根本就不直接回答问题。即使RLHF有弊端,它跟预训练模型也不太好直接对比。不过确实有近期关于推理训练的工作发现,如果你教模型不要输出恶意的、有害的推理过程,模型会把自己的推理过程藏起来,但并不改变自己的内在行为。对齐训练、让模型更有用且无害,确实相当困难。
接下来讲几个大语言模型最近的工作。近期的工作更关注训练效率。因为人们发现,不管怎么改架构,当你用海量多样化数据训练到极大规模时,模型表现都会趋向相似。因此,目前最大的改进空间是让模型更高效,从而在固定计算资源下训练更多数据,获得更好性能。
一个很流行的工作是低秩适应,叫LoRA。动机是,训练整个模型需要大量计算和GPU内存。解决方案是冻结原始模型,只训练一个小的适配器,以低秩方式更新参数。本质上是两个矩阵:一个把输入压缩到较小维度,另一个再扩展回原始维度。两个适配器合起来的参数量远小于原模型,但扩展后就能用这小得多的参数集更新整个模型。如果GPU内存不多,LoRA通常是训练大模型的最佳选择。
另一个流行的方法是混合专家模型。你可能听说过。动机不是让不同专家擅长不同领域。实际上,在现代大语言模型训练中,这些专家并不具备可解释性,你无法说“这个专家负责分类,那个专家负责翻译”。但我们观察到,使用专家模型能在小得多的计算量下训练出大得多的模型。做法是,在同一层里并行放置多个网络,前向传播时,有一个门控层决定每个token应该走哪个专家。因为每个token只经过网络的一小部分,你就节省了计算量和内存。
一个很有名的例子是GPT-4,它是一个混合专家模型,总共有6000亿参数,但每个token只激活370亿参数。通过这种设计,大约节省了95%的计算量。
另一个技术是量化。模型训练好后,如果想部署到手机这类小设备上,量化是很有效的技术。训练时,模型通常用16位或32位精度。但人们发现,用好的量化算法,可以把模型压缩到4位精度,而不会有明显的性能损失。基本做法是:先对权重进行某种裁剪,移除异常值,把超出范围的值限定在给定区间内。然后把权重缩放到目标位数的范围内。比如你要把32位模型压缩到8位,就把权重范围映射到-128到127之间。但实际上,你可以按块缩放权重——如果某一块里负值更多,可以把中心点左移,从而在固定精度下获得更高准确率。最后把模型转换到低位精度,再做校准以消除量化过程中引入的误差。
有人问量化应用于哪些部分。量化应用于模型中的权重,但不应用于激活值,也不应用于模型的最后一层(即softmax分类器)。由于网络中不同层的权重分布不同,你需要为每层准备一套独立的量化码本。如果感兴趣,可以搜索GPTQ,那是一个量化库,现在很流行。用这个库,你可以在Hugging Face上找到几乎所有流行大语言模型的量化版本。
但量化能走多远?最近有篇论文把模型权重量化到了1位或1.58位,模型依然能跑,且性能与原模型非常相似。但要真正高效运行这种极低位模型,需要新硬件。目前的GPU硬件还无法高效处理这种超低精度量化。
最后讲一些微调大语言模型的实用技巧。因为这门课偏重实践导向,很多同学的项目也在做AI微调。
整体有四个步骤:准备数据;选择起点模型;微调模型;评估与部署。关于数据准备,需要把任何数据转换成问答格式。不同的指令微调框架有很多种格式,你只需选一种。这个例子里,问题和答案按这种格式组织,包含问题、答案、图片以及图片列表。幻灯片里列出了可用于微调的格式清单。
然后,要选一个好的起点模型。这意味着不要用太旧的模型去微调,尤其是不要用最初发布的LLaMA,那个模型即使在当时也不算很好。从较小的模型开始,但别太小。人们发现,低于30亿参数的模型,性能会急剧下降,即使经过微调也看不到太好效果。所以从3B左右开始。这里列出了一些推荐模型:做纯文本微调可以用Gemma和Llama;如果有大型集群,也可以试DeepSeek R1。做多模态微调可以用LLaVA 1.5,尺寸从7B到72B都有,对各种应用场景都相当不错。
然后是训练。不要用原生Transformer包去训练,要用高效的大语言模型训练框架,比直接写PyTorch脚本快得多。有几个推荐:Axolotl和LLaMA Factory是我们研究中常用的。还有一个VERA,是同一团队最近推出的,据说推理框架比LLaMA Factory更高效。
再是选择训练方法。这里没有特别多的推荐。可以做标准监督微调,也可以用PPO或DPO等强化学习偏好微调。建议都试试看哪个效果最好。DPO很新,但算法本身还有很多问题,不一定效果最好。根据GPU内存大小,再决定是用LoRA还是全量微调。如果是多模态大语言模型,还要决定是冻结视觉编码器,还是微调连接编码器与大语言模型的投影层。
最后,简单提几个大语言模型训练和理解的潜在未来方向。当前一个热门趋势是教大模型推理。最近DeepSeek R1论文在这个领域非常火,很多团队都在尝试对模型进行各种任务的细粒度推理微调。第二个热门方向是多模态大语言模型。现在已经有很多公开的视觉语言模型,但还没有真正好的音频或时间序列大语言模型。这可能是大家现在可以研究的方向。
好了,如果有什么问题,现在可以问。没有的话,确保今天提交中期报告,并为周四的展示做好准备。谢谢大家。
热门跟贴