LLaMA 3 大模型效果提升的三要素
- 扩大模型和数据规模:通过Scaling Law增加模型参数数量和训练数据规模,以捕捉更复杂的模式。
- 数据质量的重要性:确保高质量数据,通过筛选方法提升模型性能。
- 理性能力数据的增加:在预训练和Post-Training阶段增加数学、逻辑、代码数据的比例和权重。
预训练过程
LLaMA 3的预训练分为初始预训练、长上下文预训练和退火(Annealing)三个阶段,数据配比为50%通用知识,25%数学与逻辑,17%代码,8%多语言。
Post-Training模式
采用SFT + DPO模式,通过RM模型、SFT数据和DPO模型迭代提升性能,确保输出高质量答案。
背景:
LLama 3 405B模型效果已经赶上目前最好的闭源模型比如GPT 4o和Claude 3.5
模型结构
基本已经形成目前Dense LLM模型的标准结构了,绝大多数LLM模型结构都与此非常接近。
而很多采取MOE结构的LLM模型,其变化无非是把上图的FFN模块里的单个SwiGLU模块拓展成K个并联的SwiGLU模块,形成多个专家,再加上一个路由子网络来选择目前Token走这么多专家里的哪几个,如此而已,基本结构也差不太多(所以不要误会,MOE是Transformer的一种变体,不是独立的模型结构。很多目前的新型结构,其实是“线性Transformer”结构的变体,目前很少有结构能逃脱Transformer架构的影响,都处在它的阴影下。当然我对新结构持支持态度,Transformer被替换只是时间问题,只不过这不是当前制约大模型能力的瓶颈,改变的迫切性没那么大而已。)
LLaMA 3的预训练过程
(1) 初始预训练,(2) 长上下文预训练,以及 (3) 退火(Annealing)
-
初始预训练:初期较小Batch Size,逐步增大最终达到 16M token 大小。为了提升模型的多语言和数学推理能力,增加了非英语和数学数据的比例。
-
长上下文预训练:预训练的后面阶段,采用长文本数据对长序列进行训练。
采取逐步增加上下文窗口长度策略,从8K上下文窗口开始,逐步增加达到128K上下文窗口。长上下文预训练阶段使用了大约800B训练token数据。 -
退火(annealing):在预训练的最后4000万个token期间,线性地将学习率退火至0,同时保持上下文长度为128K个token。在这一退火阶段,调整了数据混合配比,以增加高质量数据比如数学、代码、逻辑内容的影响。最后,将若干退火期间模型Check Point的平均值,作为最终的预训练模型。在训练后期对高质量数据进行上采样目前其实也是比较标准的做法。
预训练阶段不同类型数据配比
不同类型的数据配比如何配置大模型才能有最好的效果?
这可能是目前大模型预训练仅剩的唯一秘密了,LLama报告对此做了披露,他们先通过小规模实验确定最优配比,然后将之应用到大模型的训练中。结论是:50%的通用知识Token;25%的数学与逻辑Token;17%的代码Token;8%的多语言Token
LLaMA 3的Post-Training
目前LLM的Post-Training主要有两种模式,
一种是仿照ChatGPT的SFT+RM+PPO的模式,采用强化学习,需要调的超参很多,比较复杂不太好调通;
另外一种是SFT+DPO的模式,去掉了PPO强化学习。也有自己特殊的一些设计,上图展示了LLaMA 3整个Post-Training的流程
流程
1、RM模型 用人工标注数据训练RM模型,用来评价一个数据的质量,
2、SFT数据得到SFT模型;用RM参与拒绝采样(Rejection Sampling),就是说对于一个人工Prompt,用模型生成若干个回答,RM给予质量打分,选择得分最高的保留作为SFT数据,其它抛掉。这样得到的SFT数据再加上专门增强代码、数学、逻辑能力的SFT数据一起,用来调整模型得到SFT模型。
3、人工标注数据来使用DPO模型调整LLM参数,DPO本质上是个二分类,就是从人工标注的三元数据里学习,调整模型参数鼓励模型输出Good Answer,不输出Bad Answer。
这算完成了一个迭代轮次的Post-Training。
上述过程会反复迭代几次,每次的流程相同,
不同(拒绝采样阶段用给定Prompt产生回答的LLM模型,是上一轮流程最后产生的若干不同DPO模型(不同超参等)里选择最好。随着迭代的增加DPO模型越来越好,所以拒绝采样里能选出的最佳答案质量越来越高,SFT模型就越好,如此形成正反馈循环。
RLHF 和DPO两种模式都包含RM,但是用的地方不一样,
RLHF是把RM打分用在PPO强化学习阶段,而LLaMA 3则用RM来筛选高质量SFT数据。而且因为拒绝采样的回答是由LLM产生的,可知这里大量采用了合成数据来训练SFT模型。
LLama 3 405B为何不用MOE结构?
MOE结构会让模型效果更好吗?答案是否定的。MOE的主要优势是减少训练和推理成本,付出的代价是训练不够稳定以及推理时额外付出大内存来存储膨胀的参数量。但当用户量大请求多的时候,推理成本占比会更高,此时使用MOE对于推理会更友好,这是为何当模型大到一定程度模型结构就会从Dense转向MOE的主要原因,是出于成本、效率而非效果角度考虑。我之前看到有些介绍说MOE结构效果更好,这种观点是没有事实依据的。
Llama3 405B 之所以没有采用MOE,技术报告指出主要是考虑到Dense模型训练更稳定,所以选择了Dense结构。相比GPT 4的1.8T的MOE模型结构,405B的Dense模型效果与之相当甚至要更好一些(当然,不排除GTP 4目前已经是一个蒸馏小模型的可能)。
开源模型效果快速追赶闭源模型
于闭源模型,如果其能力还赶不上LLaMA 3,就需要向公众解释对用户收费的依据问题(除了覆盖推理成本外的费用)。对于开源模型而言,如果能力不如LLaMA 3,就需要考虑如何作出差异化和不同特色的问题。
重视LLAMA和Gemma的中文化工作,让中文支持效果更好。如果这方面作出特点,完全可以实现小公司、小投入,但是拥有当前最强中文模型的能力,
另外一方面,在做小模型的时候,要注重用LLaMA 405B这种最强开源模型来蒸馏小模型的思路,这样做对小模型效果提升会非常明显
小模型崛起三要素
只要Scaling law成立,就可以推断出小模型效果不会比超大规模模型效果好,否则就直接反证了Scaling law是不成立的
小模型的关键点在于:在模型规模大小受限,如何通过其它技术手段来不断提升模型效果,最好的结局是小模型尺寸比最大模型小很多倍,效果逐步逼近最大模型的效果,两者差距越来越小
不断提升小模型效果的三个关键因素:
第一个武器是预训练阶段增加训练数据数量和质量。要打破Optimal Chinchilla Law,在保证质量前提下加大数据数量,这个肯定是有效的。
去年早些时候有些模型就比较实在,比如pythia和Llama 1,严格遵循这个法则,导致相同规模的模型效果远比不上那些大量增加数据的模型。后来大家都开始猛加数据,小模型的效果就越来越好。
第二个武器是模型蒸馏。就是说在预训练阶段小模型作为Student,大模型作为Teacher,Teacher告诉Student更多信息来提升小模型效果。
原先小模型预训练目标是根据上文context信息正确预测Next Token,而蒸馏则改成Teacher把自己做相同上下文做Next Token预测的时候,把Token词典里每个Token的生成概率都输出来,形成Next Token的概率分布,这就是Teacher交给Student的额外附加信息,小模型从原先的预测Next Token改为预测Next Token的概率分布,要求和Teacher输出的分布尽量一致,这样就学到了Teacher的内部信息。
Gemma 2采用模型蒸馏对于小版本模型提升非常明显。Llama 3技术报告貌似没有看到采用这个技术
第三个武器是Annealing Data。这个说法是Llama 3技术报告提的,但是其实去年很多模型应该已经这么做了,只是叫法不一样。核心思想就是在预训练的最后阶段,对高质量数据比如数学、逻辑、代码数据进行上采样,增加其影响。LLama 3技术报告说这招对405B模型不怎么起作用,但是对8B小模型在逻辑代码能力方面有明显提升。
合成数据进入实用化阶段
-在Post-Training阶段,合成数据目前已经产品化。
尤其是其中的SFT阶段,目前看在朝着完全由合成数据主导的方向发展。比如LLama 3 的SFT数据里有相当比例是由模型生成的合成数据,而Gemma2 在SFT阶段的数据很大比例是由规模更大的模型合成的,且证明了合成数据质量不比人工标注质量差。
-在预训练阶段,类似Dalle-3和Sora这种由语言大模型根据图片或视频改写人写好的文字描述,也已实用化。
-目前合成数据的一个重点方向是在Post-Training阶段对数学、逻辑、代码等数据的合成,数据质量将直接极大影响模型最终效果。
-严格来说,目前的所谓合成数据只是“半合成数据”,比如Sora的<视频,人写文字描述<视频,模型改写文字描述>,以及Post-Training阶段的,都是部分人工数据、部分模型生成数据,所以称其为“半合成数据”感觉更为恰当。
-如果深入思考一下,你会发现合成数据其实是模型蒸馏的一种变体,算是一种特殊的模型蒸馏。(LLM预训练预测Next Token,其实是人类作为Teacher,LLM作为student。所以LLM本身就是对人类知识的蒸馏。合成数据是更大的模型输出数据作为Teacher,小点的模型作为Student从中学习知识,所以其实本质上是一种模型蒸馏。)
驱动大模型效果提升的三要素
其实从ChatGPT火了以后看各种大模型的技术报告,包括LLama系列模型在内,可以看出大模型之所以能力仍在快速提升,
驱动大模型效果提升的三要素总结如下:
-
模型和数据规模的不断扩大(Scaling Law):
- 扩大模型参数数量和训练数据规模是提升大模型性能的主要途径之一。
- 更大的模型和更多的数据能够捕捉更复杂的模式,提高模型的泛化能力和准确性。
-
数据质量的重要性:
- 强调数据质量在模型训练中的关键作用,通过各种数据筛选方法和工具来确保数据的高质量。
- 早在Google T5时代,就已认识到高质量数据的重要性,现如今这一理念得到了进一步验证和延续。
-
理性能力数据的增加:
- 不断增加数学、逻辑、代码等能够提升大模型理性能力的数据配比比例。
- 在预训练阶段增加此类数据的比例,并在预训练后期阶段对这些数据进行上采样,以增加其对模型参数的影响权重。
- 在Post-Training阶段,增加此类数据的占比。以Llama3为例,经过instruct训练的模型在各个尺寸上相较于仅进行预训练的模型有显著效果提升。
总结来看,随着通用数据的使用逐渐饱和,第三个因素——数学、逻辑、代码合成数据在Post-Training阶段的应用,将成为未来大模型进步的主导力量