专栏名称: 吃果冻不吐果冻皮
专注于AI工程化(LLM、MLOps、LLMOps、RAG、Agent)落地。
目录
相关文章推荐
秦皇岛晚报  ·  【中国好手艺117】铁艺灯笼 ·  16 小时前  
秦皇岛晚报  ·  【中国好手艺117】铁艺灯笼 ·  16 小时前  
古典文献学微刊  ·  编辑·手记 | ... ·  2 天前  
青澄财经  ·  携程金融打造携程增长第三极 ·  2 天前  
青澄财经  ·  携程金融打造携程增长第三极 ·  2 天前  
51好读  ›  专栏  ›  吃果冻不吐果冻皮

大模型训练方法论及Yi-Large的实践

吃果冻不吐果冻皮  · 公众号  ·  · 2024-07-26 23:14

正文

【点击】 加入大模型技术交流群

原文:https://zhuanlan.zhihu.com/p/709900395

智源大会之后,一直想把当时的分享以文字的形式放到知乎上。但因为拖延症一直耽搁了(起初是去CVPR开会并且在硅谷待了一段时间,后面就纯粹是拖延症了)。好不容易有时间,就把这个债先还上。整个talk主要在high-level层面讨论方法论,没有太多的技术细节,大家就当看个乐子吧。在B站上看到一个录屏,不愿意看文字版的可以看视频哈: https://www.bilibili.com/video/BV1W1421C7Uy

夸夸Yi-Large

第一个part肯定是要夸一夸自己的模型,这里用了LMSYS的成绩。现在处于各个benchmark都被刷爆的状态,LMSYS似乎成为了相对客观的一个评价标准。它会更接近大多数用户的真实体感评测(可能有人会觉得它和自己的体感不一致,所以这里是大多数,肯定很难和每个人的体感是一致的):
  • 1. 由用户自己提出问题,因此题目不是静态的,理论上想进行刷题刷分是不可能的;

  • 2. 由用户在两个匿名模型回答中选择更优的一个,尽可能保证了公平性;

  • 3. 用类似天梯的Elo评分机制,会考虑不同水平模型间的评价区分度

下面贴几个Yi-Large的成绩(直接用了ppt里的图都是5.21的截图,最近掉到第9了,不过应该还是国内第一,国际上也仅次于openai,anthropic和google)

最近也有很多人对LMSYS有一些疑问,这里也有一个我自己一直在思考的问题,大多数用户的偏好应不应该是模型优化的方向?LMSYS和我们自己在实际产品中做的A/B测试有很多的相似点,在两个答案质量相似的情况下,用户会偏向于选择答案长的那个。从我个人而言,是更喜欢简洁的答案的,但如果大多数用户都喜欢长的,模型是不是就应该回答长的?

除了LMSYS以外,让我们对自己的模型更有信心的一个signal是我们在自己的产品中对Yi-Large和GPT4做了A/B测试,用户指标(留存、付费)都没有下降,对Yi-Large和GPT3.5进行A/B测试,用户指标上升20%以上。后续针对应用对模型进行了优化,与GPT4做A/B测试,用户指标均有所上升。这也许就是应用公司有能力训练自己模型的价值吧。

这里顺道回答一下关于Yi-Large常见的问题:

  1. LMSYS里面的Yi-Large-Preview和Yi-Large有什么区别,怎么差了20多分?Yi-Large-Preview是模型的原始版,更能反映模型的真实能力;Yi-Large是API platform上的版本,为API serving做了一些优化,牺牲了一些模型性能。这里可以期待一下下一个版本,应该比Yi-Large-Preview还能有所提升

  2. 为什么Yi-Large的体感比较一般?零一万物之前主要市场是global market,在预训练中没有配足够的中文数据,所以很多问题中文可能答不对,用英文问就能对了。这个在下一版本中也会有比较大的提升。

然后就进入正题吧。

Scaling Law

没有找到Scaling Law的官方定义,就让Yi-Large写了一个。

“Scaling laws in the context of machine learning, particularly in the field of deep learning and AI, refer to empirical relationships that describe how certain performance metrics scale with various resources, such as the amount of data, the size of the model (number of parameters), or the amount of computational power. These laws are often derived from experimental results and are used to predict and guide the design of large-scale AI systems. “

简单来说,就是资源越多,模型能力越强。这个看起来是一个很显然的事情。当模型结构固定时,肯定是消耗算力多的模型能力更强。所以很多人质疑scaling law是没有道理的,质疑仅依靠scaling law就能通向agi是有可能的。

在过去几年,我们已经看到了大量模型能力随算力上升的例子了,随便放两张图:

这里要安利一下这张图的来源,situational awareness这个blog。openai前super alignment团队员工Leoplod Aschenbrener的工作,非常值得一读。

回到论文里Scaling Law的定义,这里被最广泛引用的文章是OpenAI的Scaling Laws for Neural Language Models(其实有更早的Scaling Law的文章,来自百度研究院,但这篇的认可度更高)。

“We study empirical scaling laws for language model performance on the cross-entropy loss. The loss scales as a power-law with model size, dataset size, and the amount of compute used for training, with some trends spanning more than seven orders of magnitude. Other architectural details such as network width or depth have minimal effects within a wide range. Simple equations govern the dependence of overfitting on model/dataset size and the dependence of training speed on model size. These relationships allow us to determine the optimal allocation of a fixed compute budget . Larger models are significantly more sample efficient, such that optimally compute-efficient training involves training very large models on a relatively modest amount of data and stopping significantly before convergence.“

为了真正理解Scaling Law,最好把这篇文章反复阅读几遍,并阅读里面的大部分引用,特别是openai之前的工作,类似critical batch size这些关键定义的前置论文。

为了简化理解,主要记住文章中的公式1-5就可以。

这个公式有N多用处,这里主要讲了三个:

首先,这个公式在形式化上对广义scaling law进行了建模,这里这有两个变量N和D,其他都是需要拟合的参数,所以N越大,Loss越小(模型能力越强);同理,D越大,模型能力越强。

其次,在给定compute(算力)条件下,可以根据该公式选择最优的数据和模型参数分配。这里还要用到一个简单的compute估计公式C=6ND。当给定训练flops的时候,就可以根据这两个公式得到loss最小的组合。

这里常常会有人argue说llama3用了远超过8B模型所能承载的数据,是不是说明scaling law不work了。首先,最优参数估计只是在给定计算条件下的loss最优,当参数量固定,数据量上升的时候,根据scaling law,loss肯定是会更小的,只是compute变更大了(不满足compute optimal中compute固定的假设)。其次,训练compute和推理compute是不一样的概念。训练中的compute optimal,举个简单的例子,如果有4倍算力,扩两倍的数据和两倍的模型参数效果比单纯扩4倍数据要好。但推理中的compute optimal则是模型越小越好。但训练是一次性消耗,推理是长期的消耗。因此,现在的模型越来越考虑推理效率,通过数据量来弥补模型小带来的差距,花更多的compute在训练上,来保证推理时又有好的性能又有低的成本。

最后,是这个公式在预训练中最大的作用,预测loss。因为除了N和D之外,其他都是需要拟合的参数,我们只需要在N和D都比较小的时候无限打点,用一点点算力就可以得到一个可以预测比较大模型loss的scaling 函数了。要注意这里的loss是收敛loss,不是所有数据训练完的loss。再分享两个小tricks,1. 实践中我们的做法会固定数据来进行拟合,这样loss可比性更强;2. 拟合的时候通常会做到最后要训练的模型十分之一的size,不然用特别小的模型打点拟合出来的系数放大几千倍以后容易失真。

基于scaling law 的可预测性又可以做很多模型结构探索,训练方法探索的比较。比如大家非常关注的Mamba,RWKV,transformer,只要比较拟合的时候哪个系数更大,模型loss就更小,效果就更好。再比如我们做结构变化的时候,不同的normalization,不同的optimization方法都可以用scaling law拟合来比较,就不用担心小模型的结论不能推广到大模型上了,因为scaling law比较的是趋势,很多在小模型上比较好的方法由于斜率低,当模型变大就不管用了。

The Bitter Lesson

对The Bitter Lesson就不用多说了,建议反复阅读,全文背诵。用一句话总结就是能有效利用计算能力的方法通常会有好的效果。

在OpenAI研究员Jason Wei的一天工作的时间表中两次出现了和bitter lesson相关的内容。和OpenAI的很多员工交流的时候也多次提到了要全文背诵bitter lesson。

这里第二条还挺有意思的,每天只花5分钟思考算法的改动,然后觉得算法改动比较risky,就选择更安全的scale计算和数据的方案。

顺道分享了一个和ex-MSRA研究员讨论的斜率理论。之前的研究大多是在小算力条件下开展的,所以对一个算法,我们会更加关心算法的起点,研究的核心目标是通过各种算法、模型结构改进来提高模型的性能。在同等算力条件下,改进后的模型通常会有比较好的效果,而且扩大一些算力规模效果也都还行。但大家通常忽略了为了提高模型的起点,这些改动通常相当于给模型加入了一些prior,这些prior往往会损失算法在scale up时的斜率。当算力扩大10倍,100倍的时候,起点该来的performance gain已经远远比不上斜率带来的performance损失了。这也是为什么在scaling law时代最简单的结构往往会有更好的效果。

讲到这儿就可以说一些去年沸沸扬扬的Yi-34B抄袭llama的事情了。首先,先区分一下套壳(直接用llama模型改个名字),CPT(基于llama模型做continue pretraining)和借鉴“llama architecture”(用和llama一样的架构,用自己的数据和训练方法训练模型)。两个变量名没有改回来导致大家都以为Yi模型抄袭了llama,还故意改了名字,其实只是实验需要(谁改名字改的这么简单粗暴?),但还是要为我们开源不规范道歉。所以,Yi-34B是用自己的数据和训练方法从头开始训练的模型(这边用过的人都知道,模型参数和回答风格和llama没有半毛钱关系)。解释完这些,可以展开讨论一些借鉴“llama architecture”的事情。我自己从来不认可“llama architecture”的说法,可以看llama的paper关于“llama architecture”的部分,follow transformer结构做了三个改动:pre-normalization(from GPT3),SwiGLU(from PaLM),RoPE(from GPTneo)。也都是其他之前模型改动的组合。

所以,我更认同Yi Tay的观点,与其说是“llama architecture”不如说是“Noam architecture”,因为大多数改进和Noam都有关系。

从Yi-34B以后,大家开源模型的时候也都统一在配置文件里面用“llama architecture”来定义模型了,比如qwen、deepseek、mistral,发现这样开发者迁移成本低,模型适配简单,也算是那次争论的一个贡献吧。

有个非常有意思的点,关于“llama architecture”的三个改进,是不是也在模型上增加了prior。首先,pre-normalization在模型变大变深的时候是不如post-normalization的,我们在训练Yi-34B之前就得到了这个结论,只是在34B的size上pre-normalization还是更好一些。然后,SwiGLU是以牺牲计算效率为代价得到的训练效率的提升,在更大size的模型上是不是依然如此不是很确定(至少我们实验的size上SwiGLUE还是更优一些)。最后,RoPE其实在现在的训练中会使用5%-10%的额外算力,因此也不是free lunch,在更大size的模型上还是会慢慢变成bottleneck的。

最后,可以用OpenAI的研究员jbetker的blog来总结一下这部分。不同的模型结构在同样的数据上训练足够长的时间,都会收敛到相同的位置,diffusion,convnet,autoregressive都会收敛在一个点,唯一的区别是计算效率。所以模型的能力本质上和模型结构、超参数、优化方法都没有关系,只和数据有关,所以“ChatGPT”,“Bard”,“Claude”这些模型名字只和他们的训练数据相关。简单地说就是,数据决定了模型的智能,算法是在优化达到收敛的效率, 因为算力有限,优化目标是单位算力下能产生的最大智能水平







请到「今天看啥」查看全文