小模型 大模型 VS
首先,我们思索一个疑问,为什么 qwen2 基本上是当下最受欢迎的开源模型?说瞎话,相比于 deepseek、llama、minicpm 这些诚意满满的技术报告,qwen2 的技术报告稍显一些“小家子气”,并没有提及到关键的技术细节。但是,qwen2 提供应开源社区的“全家桶”套餐,又是多长的技术报告也比不上的。对 llm 的钻研者来说, 用相反 tokenizer,相反的 7T pretrain_data 获取的“一簇小 llm”,其钻研价值远远超越 Qwen2-72B 自身!
知乎:
接上去,我们带着两个基本概念进入注释:
同源小模型是大模型的试验场
scaling law 通知我们:小模型的性能体现能用来预测大模型的性能体现。这也就是说,大局部状况下,我们是可以经过在同源小模型上做试验,去预测大模型的效果的。
在 pretrain / post_pretrain 阶段有很多要求做试验才干知道答案的疑问。怎样样的数据配比最正当,课程学习中哪种学习顺序效果最好,数据的品质能否过关,数据的去重水平能否过关,先训4k、再扩到 32k 和间接训 32k 的效果差异,post_pretrain 的时刻怎样调整学习率和数据散布来防止模型断崖式的才干忘记?……
间接启动大模型的老本真实是在太高昂了,或许训练两三周,loss 曲线才会体现出一点点差异。但我们齐全可以在小模型上大胆的训,每天训 100B token,两天就能出一版试验结果。观察 tensorbord 的 loss 曲线,刷 benchmark 打榜,或是做sft看效果,总之小模型可以协助我们极速地敲定 pretrain 阶段经常使用的数据性能。
在 alignment 阶段,我们也可以去借助小模型和 scaling law 来指点上班。
我要强化模型的某个才干,预备了 N 条训练数据,能让模型到达多大的优化呢?可以看看这份数据在小模型上能有大优化,绘制一条曲线,去预估大模型的性能体现。说的再深刻一点,100B token 能让 0.5B 模型降低 0.2 loss,能让 72B 模型降低 0.1 loss, alignment 数据能让 0.5B 模型提高 x% 的 task 才干,那么大略率这份数据也只能让 72B 模型优化 0.5x % 的 task 才干。
但其实,在 alignment 阶段,小模型的试验指点意义并不是特意强,毕竟小模型的最大长处在于训得快,做试验快。由于 alignment 的数据量不大,我们往往可以间接对指标大模型启动训练来验证结果。这里的指点意义,往往是在我们要求少量数据去强化模型某个才干时才显得无心义,比如代码强化、创作才干增强。
在这里,额外要求强调两个点:
大模型是同源小模型的良师
首先,大模型的效果就是同源小模型无法到达的 ceiling,这点无须置疑。(实践上班中,知道模型效果的下限,是一件十分无心义的事情)。
除此之外,大模型可以在训练中给到同源小模型极大的协助。
模型蒸馏
“distill”是 BERT 时代十分火的一个技术打算,如今却提及的不太多了,归根究竟就是蒸馏对“同源 tokenizer”的要求太硬了。不过同源小模型没有这个顾忌,蒸馏技术就像是为同源小模型的效果强化量身定制的技术打算一样。
先廓清一个概念,目前的大局部论文都把“应用 GPT4 造数据,喂给小模型去训练“叫做蒸馏,这种叫法也没错,不过更准确的叫法应该是”常识蒸馏“:让小模型去学习大模型的常识才干。而传统的“模型蒸馏”,指的是我们不再让模型学习 hard-label,而是 soft-label:
不论从哪个角度思索,仿佛 soft_label 都是包括更多消息量可学习的。因此,应用大模型去“模型蒸馏”小模型,很有或许能获取一个才干远高于等同 size 的小模型,Google 的 Gemma 小模型 就运行了这项技术打算。
(模型蒸馏之所以在 llm 方向做的少,其实还是由于得失相当,其对算力和存储的需求较大,与模型的效果优化不成正比。毕竟反常训练学的是 seq_len 个 one_hot label,蒸馏学的是 seq_len * vocab_size 的 logits,一个比拟事实的打算是做 clip,只取最大的 N 个 token logits 标签启动学习,其余 token 的概率依然视为 0)
reward_model
用大模型来充任小模型的 reward_model,目前是一个很盛行的做法,而用同源大模型去做 reward_model 则更是一个精益求精的打算。
与蒸馏不同,蒸馏看中的是两个模型“tokenizer 同源”,reward_model 看中的则是两个模型“pretrain 数据同源”。也就是说,我们的 reward_model 和 policy_model 具备等同的常识量,两个模型的学习效果只管不一样,但它们上过的的课程却是一样的。reward_model 会的常识,就是 policy_model 学过的常识:“我学过并且我把握了,你学过但你没把握,所以我给你打低分就是正当的。”
只管在实践上班中,一个同源 reward_model 或许没有 GPT4 这种“天赋 reward_model ”带来的效果更好。但其往往能给出更公道的打分,进而防止过多的幻觉发生。这也是 alignment 的一大痛点,模型究竟是训过拟合了才答错这个常识,还是压根就没学过这个常识 —— 交给同源大模型来判别。
大模型面前的有数小模型
OK,同源模型的意义我们就谈到这里,前面我们开局谈真正的“小”模型!
一个优秀的大模型,无论是在训练阶段,还是线上部署阶段,其面前默默付出的小模型都不计其数。
数据品质分类器:llama3 和 qwen2 都提到了,他们的 pretrain 训练数据是有得分的,而后经过阈值来找出最高品质的训练数据,开源 pretrain 数据集 fineweb 也提到了他们给数据打分的上班。Good>数据 domain 分类器:垂直畛域模型的 post_pretrain 上班,往往要求十分精准的数据配比,domain 数据的数据品质也要求十分优质。这也就是说,我们要求一个分类器,去提取海量数据中的 domain 数据,这个分类器最好还能把低品质的 domain 数据也视为非 domain 数据,通常承当这个上班的模型也是 BERT 家族。
线上模型的分类器:妇孺皆知,RAG 模块曾经是 llm 的标配,我们总不能让模型自己判别该不该做检索吧?只管不是不行,但是额外生成“能否RAG”这些 token 会降低系统的照应速度,并且或许降低模型的通用才干(模型学的越多,忘的也越多)。因此,线上模型往往都是前置挂一个小模型,来判别能否要求 RAG,同理也要求判别能否触发 safety,能否触发工具链等。
RAG 模型:这个模型更是重量级,也就是我们传统的消息检索模型,如何从海量 docs 外面选出最关系的 doc。BGE是这个上班较为罕用的模型。
数据消费模型:
这里,我再分享一些团体经常使用小模型时的 trick:
学会变通,生成模型也可以当判别模型经常使用。便捷来说,假设我们懒得去找一份 BERT 代码去训一个分类器,我们也可以间接训一个 Qwen2-0.5B,让它只会输入 0 和 1,当我们的模型齐全过拟合到 0 和 1 的时刻,那么一切 token 中便只要 0 和 1 有概率,其余 token 的概率简直为零。此时,我们用 1 所对应的 token_probability,不就是分类器的打分吗?当然,更优雅的做法是把 pretrain_model 的 lm_head 交流成 reward_model 的 lm_head。
另外,
一个优秀的大模型,无论是在训练阶段,还是线上部署阶段,其面前默默付出的小模型都不计其数。
。这句话怎样说呢,是我在训 domain 分类器的时刻,发现 Qwen2-1.5B 的准确率和召回率都不如 Qwen2-0.5B 高。在一番探讨和试验剖析之后,我认可了大佬共事的观念:
模型越大,其学习才干越强,但也象征着其更容易过拟合。
传统机器学习模型做的事情都是特色抽取,去从输入的特色中提取出看不到的特色,像 xgboost 这种还会计算每个特色的关键水平。但由于 llm 的参数量足够大,再加上 decoder_only 的结构,它真的可以做到记住一切的输入特色(decoder_only 是一个纯消息检索结构,它不紧缩任何 token 消息,和 BERT 的 CLS 位紧缩消息齐全是两种做法)。
因此,
较大的模型只管下限更高,但其所依赖的数据品质也更高
,假设你的训练数据是有失偏颇的,散布不平衡的,它齐全可以记住这些数据的 pattern,而不是从这些 pattern 中抽取独特特色。我的 0.5B 模型效果好于 1.5B 模型大略率就是这种状况:我经常使用了 4 个数据源作为训练集,但测试集来自于 10 个数据源。
写在最后
固然,大模型的发生,处置了困扰nlp多年的指代消解、多轮了解、对话人设等瓶颈,但小模型的消息紧缩、特色抽取等依然是十分无心义的。我们在上班中,还是应该多思索一下能不能用小模型来处置疑问,找找我们的老好友 BERT,而不是二话不说就关上 GPT4 写 prompt。
本文转载自,作者: