迷你模型的天花板

4,989 字 · 预计阅读 14 分钟

到这里,你已经从零训练出了一个会聊天的模型。分词器是自己训练的,权重是从随机数一步步学出来的,对话格式(监督微调)是自己教的。

但多聊几句就会发现,它离"能用"还差得很远。

这一节把差距摆出来:它能做什么、不能做什么,差距来自哪里,又有多大。

学完你能做到:用一个公式估算训练任何模型需要的算力,理解为什么实战中几乎都是在开源基座上微调,以及这一章学到的东西在后面微调时怎么用上。

先说清两个词。"基座"是已经预训练好的模型,读过海量文字,会接话。"开源"是大家习惯的叫法,严格说是上一章讲的"开放权重":权重公开,任何人都能下载来用,比如前面已经下载过的 Qwen3.5-0.8B。

"微调"是在基座的基础上,用自己的一小份数据再训练一会儿,让它学会某件具体的事。

打个比方:从零训练,是从婴儿开始养,一路教到大学毕业;在基座上微调,是招一个已经大学毕业的人,做几天岗前培训就上岗。几乎所有人都选后者。


一、它能做什么,不能做什么

用 chat_mini.py 多问几个问题,大致会看到这样的情况:

能做到 做不到
回答的格式像回答,摆出一步步讲道理的架势 说出正确的事实,常常一本正经地编
句子大体通顺,常用的词语搭配正确 做算术、做推理
用默认配置训练后,多数回答能自己停下来 回答长一点就跑题、开始重复
接住"你好"这样的问候,说清自己是谁
记住多轮对话里前面说过的话
按复杂的要求输出特定格式

在我们的 CPU 缩小版测试里,问它几个常识问题,得到的是这样的回答:

你:中国的首都是哪里
模型:首先,中国是一个非常重要的国家。比如,很多国家有很多大人,有小动物和动物。因为在古人,他们喜欢一些新的生物,所以人们都很关心他们的国家。……

你:1加1等于几
模型:首先,我们知道,我们来想一想什么是“我”是什么。我想说:“你知道我,我不知道我。……

作为对照,同样两个问题交给已经下载的 Qwen3.5-0.8B,用贪心解码生成,回答的开头是这样的:

中国的首都是哪里 → 中国的首都是**北京**。北京位于中国华北地区,是中华人民共和国的行政中心……
1加1等于几 → 1 加 1 等于 **2**。这是一个非常基础的数学概念,通常被称为加法运算……

它只是 Qwen3.5 家族里最小的一个,也是后面课程助教的基座,参数却是我们自己训练的150 倍左右,背后的训练数据更是多出好几个数量级。

缩小版只有 500 万参数,训练也只有几百万 token,表现差在意料之中。用默认配置训练完全部数据,句子会通顺得多,但"事实不准、推理不行"这两条依然存在。


二、差距有多大:算一笔算力账

训练一个模型需要多少计算,有一个很好用的估算公式:

总运算量 ≈ 6 × 参数量 × 训练的 token 数

为什么是 6?每个 token 经过模型时,前向传播大约要做"2 × 参数量"次浮点运算,反向传播大约是前向的两倍,合计约 6 倍。

"浮点运算"就是带小数点的乘法和加法。

模型里的参数都是 0.12、-0.53 这样的小数,所以它做的都是浮点运算。

前向为什么是"2 × 参数量"?看一个最小的例子:一个输出 = w1×x1 + w2×x2 + w3×x3。

3 个参数,要做 3 次乘法,再做 2 次加法把乘积加起来。参数一多,加法和乘法的次数几乎一样,所以算成每个参数 1 次乘法、1 次加法,一共 2 次。

反向为什么是前向的两倍?反向传播时,每个参数要算两件事:往前一层传回多少调整信号,以及自己该拧多少。这两件事的计算量都和前向差不多,所以是 2 + 2 = 4 次。

拼起来是这样的:

每个 token 经过时,每个参数大约做 6 次运算:前向 2 次,反向 4 次

拿迷你模型试一下:2675 万个参数,训练 1.9 亿个 token,6 × 2675 万 × 1.9 亿 ≈ 3 亿亿次运算。亿亿就是 1 后面跟 16 个 0。

这个公式忽略了注意力计算等细节,但用来估算数量级足够了。

让我们对比一下迷你模型和两个千问模型。新建 compute_budget.py 文件,下面是代码:

本文是会员内容

全文 4,989 字,已试读约 25%。开通专业版可阅读全文,并解锁全部官方课程与后续更新。

开通专业版

支持 7 天无理由退款 · 早鸟价 99 元/年(售完恢复365/年)

课程中涉及的第三方项目,其著作权与商标归各自权利人所有;引用处的署名与许可见《开源与来源说明》。