LLama 3 405B模型效果已经赶上目前最好的闭源模型比如GPT 4o和Claude 3.5,这算是开源届的大事,技术报告接近100页,信息很丰富,粗略看了一下,很有启发。这里就LLaMA 3的模型结构、训练过程做些解读,并对其影响、小模型如何做、合成数据等方面谈点看法。
LLaMA 3模型结构
LLaMa 3模型结构
LLaMA 3的模型结构如上图所示,这基本已经形成目前Dense LLM模型的标准结构了,绝大多数LLM模型结构都与此非常接近。而很多采取MOE结构的LLM模型,其变化无非是把上图的FFN模块里的单个SwiGLU模块拓展成K个并联的SwiGLU模块,形成多个专家,再加上一个路由子网络来选择目前Token走这么多专家里的哪几个,如此而已,基本结构也差不太多(所以不要误会,MOE是Transformer的一种变体,不是独立的模型结构。很多目前的新型结构,其实是“线性Transformer”结构的变体,目前很少有结构能逃脱Transformer架构的影响,都处在它的阴影下。当然我对新结构持支持态度,Transformer被替换只是时间问题,只不过这不是当前制约大模型能力的瓶颈,改变的迫切性没那么大而已。)
之所以LLaMA结构基本快形成行业标准,我觉得有两个原因。原因一是侧面说明了Transformer结构趋于稳定,肯定很多人试过其它变体结构但是要么在效果,要么在可扩展性(Scalability),总之,某一点要比这个结构效果要差,这虽然是无依据的推导,但想来是大概率事件。
原因之二是因为目前LLM已形成生态,各种衍生的工具比如快速推理框架等都兼容这个结构,如果你新结构变动太大,很多流行工具不支持,就很难扩散影响力形成新的行业标准。新结构不仅仅要达成替换Transformer那么简单,你面对的是整个生态,再没有确切证据表明各方面都明显好于上述结构前提下,是很难替换掉Transformer的。从这里就看出Meta坚决走开源路线的高明之处了,早开源早形成影响力早成为行业标准,那么以后LLM的技术路线做技术选型话语权就非常大 ,其他人就比较被动。谷歌因为一心二用开源不坚决,有点错失时机。
LLaMA 3的预训练过程
Llama 3 预训练包括三个主要阶段:(1) 初始预训练,(2) 长上下文预训练,以及 (3) 退火(Annealing)。总体而言,和目前一些其它开源模型的训练过程差别不大,不过技术报告公开了很多技术细节。
初始预训练
就是常规的预训练阶段,训练初期使用较小Batch Size以稳定训练,随后逐步增大以提高效率,最终达到 16M token 的Batch大小。为了提升模型的多语言和数学推理能力,增加了非英语和数学数据的比例。
长上下文预训练
在预训练的后面阶段,采用长文本数据对长序列进行训练,支持最多128K token的上下文窗口。采取逐步增加上下文窗口长度策略,在Llama 3 405B的预训练中,从最初的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
LLaMA 3 Post-Training流程
目前LLM的Post-Training主要有两种模式,一种是仿照ChatGPT的SFT+RM+PPO的模式,采用强化学习,需要调的超参很多,比较复杂不太好调通;另外一种是SFT+DPO的模式,去掉了PPO强化学习,相对简化了整个流程,比较容易跑起来。LLaMA 3在这个阶段主体结构是SFT+DPO的模式,不过也有自己特殊的一些设计,上图展示了LLaMA 3整个Post-Training的流程。
首先用人工标注数据训练RM模型,用来评价一个<Prompt,answer>数据的质量,然后用RM参与拒绝采样(Rejection Sampling),就是说对于一个人工Prompt,用模型生成若干个回答,RM给予质量打分,选择得分最高的保留作为SFT数据,其它抛掉。这样得到的SFT数据再加上专门增强代码、数学、逻辑能力的SFT数据一起,用来调整模型得到SFT模型。之后用人工标注数据来使用DPO模型调整LLM参数,DPO本质上是个二分类,就是从人工标注的<Prompt,Good Answer,Bad Answer>三元数据里学习,调整模型参数鼓励模型输出Good Answer,不输出Bad Answer。这算完成了一个迭代轮次的Post-Training。
上述过程会反复迭代几次,每次的流程相同,不同的地方在于拒绝采样阶段用来对给定Prompt产生回答的LLM模型,会从上一轮流程最后产生的若干不同DPO模型(不同超参等)里选择最好的那个在下一轮拒绝采样阶段给Prompt生成答案。很明显,随着迭代的增加DPO模型越来越好,所以拒绝采样里能选出的最佳答案质量越来越高,SFT模型就越好,如此形成正反馈循环。
可以看出,尽管RLHF 和DPO两种模式都包含RM,但是用的地方不一样,RLHF是把RM打分用在PPO强化学习阶段,而LLaMA 3则用RM来筛选高质量SFT数据。而且因为拒绝采样的回答是由LLM产生的,可知这里大量采用了合成数据来训练SFT模型。
LLama 3 405B为何不用MOE结构?
MOE结构会让模型效果更好吗?答案是否定的。这个在很久以前ChatGPT火之前就有研究结论,从对模型效果的影响来说,MOE结构相对Dense模型本身并不会带来额外优势,甚至是有劣势的。MOE的主要优势是减少训练和推理成本,付出的代价是训练不够稳定以及推理时额外付出大内存来存储膨胀的参数量。但当用户量大请求多的时候,推理成本占比会更高,此时使用MOE对于推理会更友好,这是为何当模型大到一定程度模型结构就会从Dense转向MOE的主要原因,是出于成本、效率而非效果角度考虑。我之前看到有些介绍说MOE结构效果更好,这种观点是没有事实依据的。
Llama3 405B 之所以没有采用MOE,技术报告指出主要是考虑到Dense模型训练更稳定,所以选择了Dense结构。相比GPT 4的1.8T的MOE模型结构,405B的Dense模型效果与之相当甚至要更好一些(当然,不排除GTP 4目前已经是一个蒸馏小模型的可能)。
LLaMA 3模型带来的影响
开源模型效果快速追赶闭源模型
前几个月关于开源和闭源大模型谁优谁劣争吵的很厉害,不同立场者各执一词,上图展示了开源和闭源模型随着时间能力差异曲线,可以看出两者差距随着时间是逐步减小的,而LLaMA 3 405B让两线出现了交点,我想这图基本可以终结“开源闭源之争”了。
LLaMA 3 405B的开源,对于其它无论闭源还是开源模型,都有重大影响。对于闭源模型,如果其能力还赶不上LLaMA 3,就需要向公众解释对用户收费的依据问题(除了覆盖推理成本外的费用)。对于开源模型而言,如果能力不如LLaMA 3,就需要考虑如何作出差异化和不同特色的问题。目前看Meta继续开源比如LLaMA 4等后续更强模型的决心是比较大的(毕竟从大模型开源带来的股价上涨就能覆盖成本了,这买卖合算的),随着LLaMA 4的进一步开源,形势将逼迫很多原先定位为基础模型AGI的创业公司转向特色产品赛道。我觉得这其实是个负面作用,尤其是对开源界,即使是开源赛道也是百家争鸣比一两家独大要好,但是逐渐收敛看样子不可避免。
我觉得之后一方面要重视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技术报告貌似没有看到采用这个技术,但是在宣传页里到处暗示你应该拿405B模型作为Teacher去蒸馏自己的小模型,无疑这会是很有效提升小模型能力的新武器。感觉其它模型在这里没有足够的重视,而之后这应该成为普及方案。而研究怎样的蒸馏方法是最好的会是一个重要研究领域。
第三个武器是Annealing Data。这个说法是Llama 3技术报告提的,但是其实去年很多模型应该已经这么做了,只是叫法不一样。核心思想就是在预训练的最后阶段,对高质量数据比如数学、逻辑、代码数据进行上采样,增加其影响。LLama 3技术报告说这招对405B模型不怎么起作用,但是对8B小模型在逻辑代码能力方面有明显提升。
根据现有资料分析,我推断模型蒸馏和Annealing Data很可能存在一种“反规模效应”,就是说小模型的参数规模越小,上这两个技术对其正面影响越大。(推断的,没明确证据,谨慎参考)所以在研发小模型时尤其注意要引入这两项改进,三个武器并用,我觉得作出接近最强大模型能力的小模型目前看是可行的。(其实还有一个重要因素,就是Post-Training阶段合成数据的影响,这个对几乎所有尺寸模型都成立,所以放在后面“驱动大模型效果提升三要素”分析了,对小模型也成立)
合成数据进入实用化阶段
在Post-Training阶段,合成数据目前已经产品化。尤其是其中的SFT阶段,目前看在朝着完全由合成数据主导的方向发展。比如LLama 3 的SFT数据里有相当比例是由模型生成的合成数据,而Gemma2 在SFT阶段的数据很大比例是由规模更大的模型合成的,且证明了合成数据质量不比人工标注质量差。
在预训练阶段,类似Dalle-3和Sora这种由语言大模型根据图片或视频改写人写好的文字描述,也已实用化。
目前合成数据的一个重点方向是在Post-Training阶段对数学、逻辑、代码等数据的合成,数据质量将直接极大影响模型最终效果。
严格来说,目前的所谓合成数据只是“半合成数据”,比如Sora的<视频,人写文字描述<视频,模型改写文字描述>,以及Post-Training阶段的<Prompt,人写答案><Prompt,模型生成答案>,都是部分人工数据、部分模型生成数据,所以称其为“半合成数据”感觉更为恰当。
如果深入思考一下,你会发现合成数据其实是模型蒸馏的一种变体,算是一种特殊的模型蒸馏。(LLM预训练预测Next Token,其实是人类作为Teacher,LLM作为student。所以LLM本身就是对人类知识的蒸馏。合成数据是更大的模型输出数据作为Teacher,小点的模型作为Student从中学习知识,所以其实本质上是一种模型蒸馏。)
驱动大模型效果提升的三要素
其实从ChatGPT火了以后看各种大模型的技术报告,包括LLama系列模型在内,可以看出大模型之所以能力仍在快速提升,主要驱动力有三个:
首先就是不断扩大模型和数据规模(Scaling Law)。除此外,在数据方面有两个发展趋势:一个是越来越强调数据质量的作用,各种数据筛选方法和工具越来越多,保证质量是第一位的(这个早在Google T5时代就能推出这个结论,目前只是进一步验证并延续这个思路而已)。
第二个是不断增加数学、逻辑、代码这种能够提升大模型理性能力的数据配比比例,包括在预训练阶段(增加预训练数据此类数据比例,且在预训练后面阶段来上采样此类数据,就是说同样数据多执行几遍,以增加其对模型参数影响的权重)和Post-Training阶段(增加此类数据占比,Llama3的经过instruct的模型比仅做预训练模型相比,各种尺寸的效果提升都很大)皆是如此。
目前看,在通用数据快被用完情况下,第三个因素会成为之后大模型进步的主导力量,包括使用数学、逻辑、代码合成数据在Post-Training阶段的应用,目前技术也越来越成熟,其质量和数量会是决定未来大模型效果差异的最关键因素。
读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用
对于0基础小白入门:
如果你是零基础小白,想快速入门大模型是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。
包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓
👉AI大模型学习路线汇总👈
大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉大模型实战案例👈
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉大模型视频和PDF合集👈
观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓