总结:Allen-Zhu’s ICML 2024 Tutorial on the Physics of Large Language Models (LLMs)
2024夏
此文是对Allen-Zhu 于2024年7月的ICML 上的tutorial – Physics of LLM 做的一个总结。一方面,这篇文章对其演讲中的一些重要观点和结论进行摘录;另一方面,结合这些观点以及自己之前对大语言模型(LLM)的了解进行了一些整合式的探讨。他的演讲分为三个部分 – 在第一部分中他讨论了LLM知识提取、运用、压缩三方面的能力;第二部分涉及到LLM的推理和计划能力;第三部分讨论了LLM 对结构化语言的学习能力。第三部分涉及到对LLM 拥有动态优化的规划能力的论证更像是对第二部分的补充和扩展,因此,在此文的总结中,我们将原来tutorial 中的第二部分和第三部分合并起来。这个tutorial 展示了Allen-Zhu和其团队对LLM底层运行原理的细致观察和系统化思考。其中不乏令人惊讶的极具普遍性的观察,对LLM落地实践有裨益的建议,以及一些富有预见性的观点。因此,引发了广泛的关注。
结合演讲内容和业界的一些思考:为什么这篇演讲中的观点和结论对实践重要?
现在业界如火如荼地做大模型训练和应用落地。算法的研发对大部分公司来说可能是最不花时间的环节 – 公司通常会使用well-proven 的有效的算法来做基础,对其进行的改动并不是fundamental的。最花时间的是两部分 – 高质量数据的收集清洗和对训练好的LLM进行的evaluation。目前的LLM模型通常用来做预训练所使用的数据大概在10 trillion到50 trillion 个tokens [1], 但实际上公司可以收集到的文本数据远大于这个量。只是大部分数据质量太低被排除在预训练的数据集之外。那么,何为高质量的预训练数据呢?这是一个根据应用场景的不同,而有不同答案的问题。如果一家公司在训练一个帮助纠正语法错误的LLM,那么大部分社交媒体上的碎片化的语料就不会被认为是高质量的数据(因为很多都包含的语法错误)。但相反,如果一家公司要训练一个可以自动产生社交媒体的文案的LLM,那么社交媒体上的数据又是必需的。尽管高质量数据的定义在不同应用场景下不同,但是人们通常会对数据又一些普遍性的期待,比如 —— 高质量的预训练数据需要提供足够的文本多样性。但是何为多样性?怎么样去量化多样性?提供什么样的多样性会对LLM的训练产生事半功倍的效果?这些问题到目前为止并没有明确的答案,但是Allen-Zhu 的研究很大程度上尝试回答了这些问题,而且给出了有效的实践指南。
在数据层面,目前业界碰到的另外一个困难的问题是:在互联网数据被爬完之后,获取和清洗额外数据的手段和途径都极其昂贵。一个最直接的方法就是用训练好的模型去产生新的数据作为接下来的训练数据,但一些研究表明这种模型自己产生的数据对提升模型的性能和表现远不如人类的文本数据 [2]。因此,如何廉价地获得新训练数据的问题还是没有得到解决。Allen-Zhu 在演讲中提到,一种可能的方式是用synthetic data: 这类数据并非LLM 或者人类产生,而是根据特定的一些规则simulate 产生的。比如,他在演讲中展示了如何用Directed Acyclic Graph (DAG)大量的产生复杂的小学数学题。尽管这个示例并不能完全解决上述问题,但是给实践提出了一个可贵的思路。
除了数据层面的问题,LLM应用落地遇到最大的困难是:如何评价训练好的LLM的表现?怎么样确立评价的标准?由于自然语言天然的模糊性,在很多应用场景下,明确的可以量化的评价标准很难被确立。同时,直接向用户收集反馈又通常更为昂贵。一个简单直接的评价方式是利用一个LLM去评价另外一个LLM。但是,这种方式难以避免的问题是:每一个LLM都有自身的局限性(比如,每个LLM都会有hallucination幻觉的问题),这些局限性会导致评价出现偏差。这是一个棘手的问题,目前业界和学术界还没有一个标准的答案(很大程度上也是因为每个应用场景不同,所以评价标准也会不同)。但是,大家在这个问题上有一些的共识:比如,一个掌握/压缩了更多知识的模型并不总是比一个知识少的模型而表现更好,因此我们不能用掌握知识的多少来评价模型。这在直觉上很好理解,对于人类而言也是一样,一个专家掌握的知识比一个博物家要少得多,但是在专家各自的专业领域她们的表现通常会更好。Allen-Zhu 的研究对LLM evaluation的启发在于:他认为,用于评价的数据集也可以是synthetic data (例如上述提到的simulate产生的小学数学题册)。在这种类型的数据上做LLM 测评有几个优势:第一,根据固定的规则和逻辑可以大量的产生这些评测集,因此不需要担心像data contamination 的问题(目前的公开的benchmark评测集都是固定的且有限的,有可能被包括在LLM的训练集里出现cheating的现象); 第二,通过直接调整产生synthetic评测集的这些规则和逻辑,公司可以直接控制评测集的难度和要评测的能力的种类。
第一部分:LLM的知识提取、运用、压缩的能力
在讨论Allen-Zhu 的观点和论证之前,我们首先介绍他得出这些观点的方法。他倡导一种controlled experiment 的方法来获得关于LLM的普遍性的结论。所谓controlled experiment,就是精确的控制训练的数据和方式,然后通过改变数据或者算法来观察改变带来的结果,然后进一步获得结论。在第一部分的演讲中,他提到,他用了10个虚构的人物生平传记作为LLM的训练输入。因为这个数据是虚构的,他可以根据研究需要来精确地控制训练数据中包含的信息量和文本的构成。这种方法区别于之前大量的对已完成训练的LLM进行的研究:这些之前的研究很难将完成训练之后的LLM展示出来的行为/问题归因于到底是数据的问题,还是算法的问题。所谓的controlled experiment,可以把数据或者算法对LLM最终行为的影响更好的分离出来。
1.1 知识提取Knowledge Extraction
知识提取是LLM的一个重要能力。但是我们又如何确定LLM掌握了知识提取的能力呢?尤其是,我们很多时候无法区分到底是模型把知识简单地记住了(memorization)还是真的学习到了知识提取能力。对此,Allen-Zhu 设计了 mixed training 的训练方式进行实验:他用一半的人物传记进行训练(训练集中不仅仅包括人物传记内容还包括了有关传记内容的提问,比如,A的生日在哪一天?),然后向LLM提问关于另一半的人物传记中的内容(这些问题和包含在训练集的问题相似)。如果LLM真的学习到了从语言结构中提取知识的能力,那么LLM就应该可以准确回答。他的实验发现,LLM几乎总是能很准确地回答——这是LLM掌握了知识提取的能力的重要证据。
然而,mixed training 并不是LLM通常使用的训练方式。事实上,不管在学术界还是业界,LLM更通常的训练方式是预训练(pretraining )+ 微调(finetuning )。因此,他进一步尝试证明LLM在这种训练方式下的知识提取能力。他用一半的人物传记做预训练,然后用针对这一半人物传记的问题进行微调,最后再用另一半的人物传记进行测试集上的性能测评。他发现,在这个训练方式下,LLM竟然没办法准确地回答了(测试集准确性几乎为0)!在尝试了不同的LLM和不同的微调方式之后,他发现这是一个具有普遍性的现象。这个有趣的现象显然和现实有所矛盾:像GPT4这样的LLM是通过预训练+微调的方式训练出来的,而且显然拥有很强的知识提取能力。但为什么实验结果却与这个事实矛盾呢?答案在所使用的数据里。在实验环境中,一条知识(比如,A的生日是7月28日)只出现了一次。但是在GPT4的训练数据里,一条知识可能会以不同形式(例如,不同的语言、不同的写作方式、不同的语序)重复出现好几十次。Allen-Zhu把这种,同一条知识以不同的语言形式出现在训练集里的情况称为知识拓展(Knowledge Augmentation)。他发现,当知识拓展存在时,LLM会本质上改变信息之间的关联方式(具体的解释可以在本文的附录中找到),从而使得LLM获得信息提取的能力。同时他提到,并不需要对数据中所有人的知识都进行知识拓展:只要有部分人的知识进行了知识拓展就可以让模型拥有知识提取的能力。因为本质上,这种知识提取是一项可以泛化的能力:如果模型知道了在某一部分人上如何做知识提取,那么模型也就有了能力对剩下的那部分人做知识提取(即使没有对剩下这部分人做任何的知识拓展)。
1.2 知识运用 Knowledge Manipulation
在演讲的这部分里提到的最有趣的实验结论有关于知识逆搜索 (knowledge inverse search)。这里,我们用一个例子来解释什么事逆搜索:在训练数据集里包含着这样一条知识“A的生日是7月28日”;普通的知识搜索可以是“A的生日是在哪天?”,而逆搜索则是“7月28日出生的是谁?”。实验结果发现,LLM面对这种逆搜索时在测试集上的准确率几乎为零。因此,这也被称为LLM的“reversal curse ”。要解决这个问题最简单直接的方法就是在训练集里面包含这个知识的这部分语料逐字反转[3]。
1.3 知识容量扩张定律 Knowledge Capacity Scaling Law
在前面提到,运用controlled experiment 的好处之一是我们可以精确地控制数据中的知识容量。因此,我们可以考察模型可以用多少参数学习到多少知识。在这里,知识被比特单位量化,比如人的性别只有两种可能,那么性别这个属性知识等价于1比特(log22)。再比如,人的出生月份有12种可能,那么这个属性知识等价于log212 比特。实验发现,目前的大模型遵循1个参数能压缩2比特知识的规律: Allen-Zhu 把这个2bit/parameter 的规律称为知识容量扩张定律。随着模型参数量变大,能容纳的知识也成线性增长的趋势。观察到知识容量扩张定律意味着我们可以计算出一个能容纳大部分人类知识的模型大概需要多少参数。Allen-Zhu给出的答案是,一个7 Billions 参数的大模型就能压缩所有包括在英语维基百科和所有教科书中的人类知识。然而,目前几乎所有的大模型拥有都远远超过7B的参数量(LLAMA2 有70B参数量版本)。这意味着,目前这些模型的压缩能力很可能没有达到理想的状态:它们的压缩能力很可能小于2bit/parameter。因此Allen- Zhu预测在未来几年内,人们会发现更多的方法使得LLM 用更小的参数量压缩更多的知识,最后它们的压缩能力将接近2bit/parameter 这个知识容量扩张定律。
那么如何让LLM的压缩知识的效率提升呢,Allen-Zhu 给出的答案是进行知识拓展(Knowledge Augmentation)。当数据集中的知识已足够的次数重复出现的时候,LLM 的压缩效率就会得到大幅提升。当这个重复次数足够高,不同的LLM之间的压缩能力并没有特别大的差距——都会遵循上述的知识扩张定律。但是,当重复次数不够的时候,有些LLM(例如LLAMA)的知识压缩能力受影响更大。Allen-Zhu 通过controlled experiment 发现,这是因为LLAMA 使用了gated MLP 导致的。当用vanilla MLP 代替gated MLP,LLAMA的知识压缩能力会变得更强。
Allen-Zhu在这部分tutorial的结尾提到这样的实验观察:当训练集质量很低的时候,模型的压缩效果也会相应的下降。直觉上这很容易理解。如果你尝试从一大段无关的信息中尝试找到并记住一条有用的知识:无关的信息越多,你能找到并记住有用知识的效率越低。因此,业界需要花大量时间做数据清洗来获得高质量的数据。但,同时Allen-Zhu基于实验结果发现,对于互联网上的数据,只需要将域名加在这些数据前面一同放在训练集里面,LLM在训练的时候就能自动识别哪些域名里会通常包含更高质量的数据,因此大大提升知识压缩的效率。
第二、三部分:LLM的推理和计划能力
在这部分的tutorial里,Allen-Zhu用实验观察探讨了LLM具备的推理和计划能力,揭示了LLM具备的这两种能力的基础。在探讨LLM的推理能力的实验中,他的研究团队构建了一个synthetic data ——一个利用有向无环图(DAG)来自动生成大量小学数学题的一个数据集。举一个例子:“一个苹果值10块,一个桃子值两个苹果,两个香蕉值3个桃子,那么香蕉多少钱?”。我们可以总结这个数学题中的变量互相依赖的关系来构建有向无环图:“苹果桃子 香蕉”。这个有向无环图意思是:如果我们要计算香蕉的价值,我们先要知道桃子的价格,但是计算桃子的价格又依赖于苹果的价格信息。当然,在更复杂的数学题里面,我们会有更多的变量。其中的一些变量并不是解决问题所必需的。
我们在上面给出了一个从数学题中构建有向无环图的例子;反之,我们也可以从有向无环图中大量的构建数学题,不再赘述。得到这些数学题之后,Allen-Zhu的研究团队将这些数学题用自然语言来描述,并用来训练LLM。接着,他们考察了两个有趣的问题:
1. 在模型看到数学题之后,但还未开始解答时,模型是否已经能知道哪些变量是解决问题所必需的?
2. 在模型解答该数学题的过程中,模型是否知道哪些变量是需要先计算的,哪些是需要后计算的?
他们通过probing发现,在还未开始解答时,模型已经能知道哪些变量是必需的, 而且在解答的过程中,模型也知道变量之间的依赖关系,因此它也知道哪些变量是需要先计算的。在进一步的probing中,他们更是惊讶的发现,模型在看到数学题之后(甚至还未开始解答的时候)就已经能够还原所有变量的依赖关系:即便是并非解答问题必需的那些变量的依赖关系,模型在看到数学题之后就已经一清二楚。这意味着,模型具有的推理能力能够帮助模型在看到数学题之后就厘清题目中变量的依赖关系。这和通常人们解决数学题的方式有所不一样:人类在意识到某个变量并非解决问题必需的时候,便不会尝试厘清这些变量和其他变量的依赖关系。
智能另一项重要的能力是计划,那么LLM有计划能力吗?Allen-Zhu设计了另外一个实验来佐证回答这个问题。在这项任务中,他设计了一个Context-free Grammar数据集。简单来说,这个在这个数据集中,LLM很难通过(local)context来理解某一个token的意思。这意味着LLM几乎总是要通过global context(亦即全文)来理解某个token。因此,这个数据集要求LLM拥有近似于动态优化(Dynamic Programming)的能力来做理解文本意思。他们的实验结果发现,LLM在这个数据集上也能很成功地学习到语义:这意味着LLM拥有近似于动态优化的能力。而动态优化能力通常被视作基本的计划能力,因此这个实验也为LLM拥有基础的计划能力提供了证据。在进一步的理论分析中,Allen-Zhu和他的团队发现,LLM的注意力矩阵(attention module)近似于动态优化中的状态转移方程,记录了不同的token之间在序列中的转移概率。
后记
演讲中涉及到的一些观察令人惊讶,但同时笔者谨慎地提醒读者:上述提到的一部分结论和实验观察尚未发表 – 因此尚未收到peer-review的检验。但是这种设计synthetic data + probing 的研究LLM的范式展现出令人期待的潜力:这种研究范式能够通过研究更小的LLM来总结关于LLM的普遍性规律。
附录:通过Probing来掌握LLM内部信息互相联系的方式
LLM是一个自回归模型。在每一个step,LLM都会输出一个隐变量——这个隐变量会总结之前每一step的信息(因此有时候被称为context vector)。所谓Probing就是考察这个隐变量是否包含了某个信息。举一个简单的例子,如果我们将“Anya出生在7月28日,后来在Microsoft工作”这句话输入训练过的LLM中,LLM在每一字都会输出相对应的一个隐变量。比如,在“……后来在”这里截断句子,我们可以得到一个隐变量。这个隐变量总结了这个句子在“后来在”这个词之前的信息,同时它也能被用来预测这个句子下一词是什么。因此,在“后来在”这位置的隐变量能够预测Anya在哪个公司工作。我们用这个隐变量来做分类的预测的话(公司是一个离散变量),预测的结果就会是Microsoft。那如果,我们用在”Anya”这位置的隐变量是否能够预测Anya 的公司呢?
Allen-Zhu 发现,当在使用mixed training 这种模式时,“Anya”这个位置的隐变量能很好的预测公司名称。但是,在使用pretrain+finetune这种训练模式时,”Anya”这个位置的隐变量却又不能预测公司名称了!这就是为什么,pretrain+finetune这种训练模式下,模型失去了知识提取(Knowledge Extraction)的能力——因为模型没有办法将公司信息和“Anya”联系起来了,所以当面对“Anya在哪里工作?”这样的提问时,LLM便失去准确回答的能力。但是,如果我们对训练集做知识拓展(Knowledge Augmentation),即便使用pretrain+finetune这种训练模式,LLM又会获得知识提取的能力。这是因为,当同一个知识以不同的方式(例如,不同语言、不同语序)在训练集出现的时候,模型内部关联信息的方式发生了本质的改变(“Anya”处的隐变量完成了从无法关联公司信息到可以关联公司信息的转变)。