type
status
date
slug
summary
tags
category
icon
password
这篇论文干货不多
摘要中几个重点:
- 把 thinking、non-thinking 模式结合到一个模型里面
- 引入了 thinking budget mechanism
- 基于更大的模型来训练小模型,大幅度降低小模型的训练成本,同时保证高性能
- 支持 119 种语言(之前支持 29 种语言),一共 36T 的 token
- 使用 qwen2.5-VL 从 pdf 抽取文字数据,应该是做 OCR
- 使用 qwen2.5-math 合成数学数据
- 使用 qwen.2.5-coder 合成代码数据
预训练
- stage1 用 30T token 训练
- stage2 提高知识密集数据的比例,比如 science, technology, engineering, and mathematics (STEM) and coding
- stage3 上下文扩展 4,096 to 32,768 tokens(YaRN 可以再扩展到 131,072)
后训练
- stage1 - stage2, long cot 数据做 sft 冷启动 + 在数学、code 数据上做强化学习
- stage3 - stage4,thinking + non-thinking 数据混在一起做训练(让模型同时拥有两种能力),在开放领域做通用强化学习
蒸馏
训小模型
一、模型结构
dense


在 Qwen3 里面实际是用 RMSNorm

MoE
基础结构和 dense 是一样的,一共设置 128 个专家,每个 token 激活 8 个专家,去除了共享专家

- 训练的时候加了个 global-batch load balancing loss:
- 出发点:在领域特定的 sequence(例如代码),同一条 sequence 不要那么均衡 - token 统一路由到所有专家,会抑制了专家的特化能力,可能有些专家就是更适合处理代码 token 的。
- 目前做负载均衡 loss 方法的问题:由于 micro-batch (梯度累加、数据并行)的存在,每个 micro-batch 样本数量实际很少,极端情况考虑只有一个样本,那么负载均衡 loss 就是在鼓励这一个样本上的 token 均匀分布到所有专家上门。
- 解决思路(方案没细看):从 global-batch 的来计算负载均衡 loss。
分词
BBPE + 151,669 词表
二、预训练
数据
- 36T token 的数据,119 种语言
- Qwen2.5-VL 从 pdf 之类的文档做 OCR,用 Qwen2.5 model 做质量提升,应该是修正错别字等问题。
- Qwen2.5、Qwen2.5-Math、Qwen2.5-Coder 合成数据,比如教科书、问答、说明和代码片段,覆盖多个领域。
- 数据混合比例:之前的数据混合比例通常在领域维度做混合, qwen3 在更细粒度的标签维度做混合,在小模型上做验证。这里更细粒度标签没具体解释。
训练
- stage1:30T token + 4096 上下文
- stage2(增强推理能力):5T token + 4096 上下文
- stage3:32768 上下文,75% of text 16,384 to 32,768 tokens,25% of text between 4,096 to 16,384。再用 YRAN 扩展上下文到 4 倍,大概 12 万上下文。
评估
几个结论
- Qwen3-235B-A22B-Base 相比 qwen3 dense 模型,激活量为 dense 的 1 / 5 的时候就可以追上 dense 的性能
- 相比 qwen2.5,只需要 1/2 的激活量就能追上其性能
- 相比 qwen2.5 dense, qwen3 MoE base 只要 1/10 的激活量就能追上性能。
- Qwen3-1.7B/4B/8B/14B/32B-Base 对标 Qwen2.5-3B/7B/14B/32B/72B-Base
三、后训练

- 大的模型用四个阶段训练方式
- 小的模型做完预训练之后,从大的模型蒸馏
stage1 - 长 CoT 冷启动
主要讲数据构造。原始数据就是 <数学问题, 参考答案> <代码问题, 测试用例> 的样本对。数据构成包括两个阶段:
- query 过滤:
- 用 Qwen2.5-72B-Instruct 过滤不容易验证的 query,比如包括多个子问题、常规文本生成任务。我理解这里就是写 prompt 让模型判断这些 query 是不是数学、代码 query。
- 去除 Qwen2.5-72B-Instruct 不输出 CoT 的情况下可以直接回答正确的 query 。
- Qwen2.5-72B-Instruct 对 query 做领域打标,均衡不同领域的 query。
- response 过滤,每个 query 用 QwQ-32B 采样 N 个 reponse,对于 positive Pass@N(应该就是回答过正确的 query),过滤掉:
- 产生错误的最终答案
- 包含大量重复
- 明显表明缺乏充分推理的猜测
- 在思考和总结内容之间表现出不一致性
- 语言混合(比如同时有中文或英文)、前后风格不一致的
- 疑似与潜在验证集过度相似 - 防止数据泄露
有了数据就是去做 SFT
stage2 - Reasoning RL
3995 个样本对做 GRPO,满足以下条件:
- stage1 没用过
- 对 stage1 模型是可学习的(怎么判断的呢?)
- 要有一定难度、挑战性(数据深度)
- 覆盖多个子领域(数据广度)
列了几个训练重点(感觉和没说一样)
- 大 batch size
- 大 rollouts(这里我理解是 grpo 里面的一个 group 下面的采样数量?)
- 通过调整的 model’s entropy 来均衡探索和利用。(这里不知道是不是指 熵正则化(Entropy Bonus) 和 KL散度,前者通过 “鼓励模型输出 action 的概率分布更均匀” 来鼓励探索,后者限制 policy model 和 ref model 的差距来控制探索)
stage3 - Thinking 模式融合
把 non-thinking 模式的能力加到前面的 thinking 模型中
SFT 数据准备
为了 stage2 后的模型的 thinking 的能力不受影响,这里会同时包括 thiking 数据和 non-thinking 数据
- thinking 数据:stage1 中的 query,通过 stage2 之后的模型做拒绝采样得到;(自己生成的数据训练数据。)
- non-thinking 数据:会更多样,包括编码、数学、指令遵循、多语言任务、创意写作、问答和角色扮演。(但是没讲怎么来的)
Chat Template 设计
- Thinking 数据的 query 后面会加 /think
- non-thinking 的 query 后面加 /no_think,然后插入一个空的 \n<think>\n\n</think>\n\n

所以看下来,模型其实是没有经过下面的数据训练的(enable_thinking=False 的结果,训练的时候这种情况 query 后面会加 /no_think 的)

Thinking Budget
这里比较有意思点,它是说在经过 thinking 模式混合训练之后,模型天然就有在不完整的 thinking 后面继续回答的能力。工程就有一个做法:当 thinking 超过预设 token 的时候直接截断,然后插一个 “Considering the limited time by the user, I have to give the solution based on the thinking directly now.\n</think>.\n\n” 假装它已经 thinking 完了。
他们也做了个实验验证它的效果:

随着 budget 提升,性能提升还是比较平滑的,没有观察到断崖式下降说明这方法确实有用的 - token 给的越多效果越好,可以人工控制效率 - 效果的均衡。
如果不做 stage3 的话,Thinking Budget 会是什么表现?好像没看到这个实验。
stage4 - General RL
为提升以下几个核心能力:
- 指令跟随:按照 query 要求输出对于的内容、格式、长度、格式化输出等等。
- 格式跟随:按照指定格式输出,对 /think 和 /no think 的 flags,用 <think> and </think> 分割内容等等
- 偏好对齐:这里应该就要训一个 reward model
- agent 能力:就是正确调用工具(但是也没说数据怎么搞的。)
- 特殊场景能力:比如 RAG
有几个类型的 rewards:
- 基于规则的。比如指令跟随,格式、长度之类的可以写规则去判断的。
- 基于参考答案的 Model-base Reward:每个 query 有一个参考答案,写 prompt 让 Qwen2.5-72B-Instruct 对生成的答案进行打分。
- 基于奖励模型的 Model-base Reward
这一块真是没啥细节
Strong-to-Weak Distillation
分两个阶段
- Off-policy Distillation (老师直接把答案喂给学生):会包括 think and /no think 的数据,学生模型用老师模型的response 做 sft(但是这里不知道会不会用老师模型的 logits)
- On-policy Distillation(学生模型先回答,老师模型去纠正):采样 prompts,学生模型输出 response,同样的 response 给到老师模型得到 logits,然后最小化学生模式 vs 老师模型的 KL 散度。
他们也做了个实验验证 on-policy 蒸馏的有效性,对比的是做强化学习,用的 off-policy distilled 8B checkpoint:

这两个阶段论文没有具体描述也没有引用,全凭自己理解