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

一、模型结构

dense

模型结构没有太大变化,GQA, SwiGLU, RoPE, RMSNorm, QKV bias QK-Norm(新引入的,模型训练更稳定)
notion image
notion image
在 Qwen3 里面实际是用 RMSNorm
notion image
 

MoE

基础结构和 dense 是一样的,一共设置 128 个专家,每个 token 激活 8 个专家,去除了共享专家
notion image
  • 训练的时候加了个 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 在更细粒度的标签维度做混合,在小模型上做验证。这里更细粒度标签没具体解释。

训练

  1. stage1:30T token + 4096 上下文
  1. stage2(增强推理能力):5T token + 4096 上下文
  1. stage3:32768 上下文,75% of text 16,384 to 32,768 tokens,25% of text between 4,096 to 16,384。再用 YRAN 扩展上下文到 4 倍,大概 12 万上下文。
 

评估

几个结论
  1. Qwen3-235B-A22B-Base 相比 qwen3 dense 模型,激活量为 dense 的 1 / 5 的时候就可以追上 dense 的性能
  1. 相比 qwen2.5,只需要 1/2 的激活量就能追上其性能
  1. 相比 qwen2.5 dense, qwen3 MoE base 只要 1/10 的激活量就能追上性能。
  1. Qwen3-1.7B/4B/8B/14B/32B-Base 对标 Qwen2.5-3B/7B/14B/32B/72B-Base
 

三、后训练

notion image
 
  • 大的模型用四个阶段训练方式
  • 小的模型做完预训练之后,从大的模型蒸馏
 
 

stage1 - 长 CoT 冷启动

主要讲数据构造。原始数据就是 <数学问题, 参考答案> <代码问题, 测试用例> 的样本对。数据构成包括两个阶段:
  1. query 过滤:
    1. 用 Qwen2.5-72B-Instruct 过滤不容易验证的 query,比如包括多个子问题、常规文本生成任务。我理解这里就是写 prompt 让模型判断这些 query 是不是数学、代码 query。
    2. 去除 Qwen2.5-72B-Instruct 不输出 CoT 的情况下可以直接回答正确的 query 。
    3. Qwen2.5-72B-Instruct 对 query 做领域打标,均衡不同领域的 query。
  1. response 过滤,每个 query 用 QwQ-32B 采样 N 个 reponse,对于 positive Pass@N(应该就是回答过正确的 query),过滤掉:
    1. 产生错误的最终答案
    2. 包含大量重复
    3. 明显表明缺乏充分推理的猜测
    4. 在思考和总结内容之间表现出不一致性
    5. 语言混合(比如同时有中文或英文)、前后风格不一致的
    6. 疑似与潜在验证集过度相似 - 防止数据泄露
有了数据就是去做 SFT

stage2 - Reasoning RL

3995 个样本对做 GRPO,满足以下条件:
  1. stage1 没用过
  1. 对 stage1 模型是可学习的(怎么判断的呢?)
  1. 要有一定难度、挑战性(数据深度)
  1. 覆盖多个子领域(数据广度)
 
列了几个训练重点(感觉和没说一样)
  • 大 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
notion image
 
所以看下来,模型其实是没有经过下面的数据训练的(enable_thinking=False 的结果,训练的时候这种情况 query 后面会加 /no_think 的)
notion image
 

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 完了。
 
他们也做了个实验验证它的效果:
notion image
 
随着 budget 提升,性能提升还是比较平滑的,没有观察到断崖式下降说明这方法确实有用的 - token 给的越多效果越好,可以人工控制效率 - 效果的均衡。
 
如果不做 stage3 的话,Thinking Budget 会是什么表现?好像没看到这个实验。
 

stage4 - General RL

为提升以下几个核心能力:
  1. 指令跟随:按照 query 要求输出对于的内容、格式、长度、格式化输出等等。
  1. 格式跟随:按照指定格式输出,对 /think 和 /no think 的 flags,用 <think> and </think> 分割内容等等
  1. 偏好对齐:这里应该就要训一个 reward model
  1. agent 能力:就是正确调用工具(但是也没说数据怎么搞的。)
  1. 特殊场景能力:比如 RAG
 
有几个类型的 rewards:
  1. 基于规则的。比如指令跟随,格式、长度之类的可以写规则去判断的。
  1. 基于参考答案的 Model-base Reward:每个 query 有一个参考答案,写 prompt 让 Qwen2.5-72B-Instruct 对生成的答案进行打分。
  1. 基于奖励模型的 Model-base Reward
 
这一块真是没啥细节
 

Strong-to-Weak Distillation

分两个阶段
  1. Off-policy Distillation (老师直接把答案喂给学生):会包括 think and /no think 的数据,学生模型用老师模型的response 做 sft(但是这里不知道会不会用老师模型的 logits)
  1. On-policy Distillation(学生模型先回答,老师模型去纠正):采样 prompts,学生模型输出 response,同样的 response 给到老师模型得到 logits,然后最小化学生模式 vs 老师模型的 KL 散度。
    1. 他们也做了个实验验证 on-policy 蒸馏的有效性,对比的是做强化学习,用的 off-policy distilled 8B checkpoint:
      notion image
       
 
这两个阶段论文没有具体描述也没有引用,全凭自己理解