TL;DR
- 2025 年阿里通义发布的最新版本模型 Qwen3,代码数学等榜单的精度很高,模型系列很全,包含 MoE 与 Dense 模型,同时支持推理和非推理模式。
Paper name
Qwen3: Think Deeper, Act Faster
Paper Reading Note
Paper URL:
- https://qwenlm.github.io/blog/qwen3/
Code URL:
- https://github.com/QwenLM/Qwen3
Introduction
最新版本Qwen3有以下特点:
- 全尺寸稠密与混合专家模型:0.6B, 1.7B, 4B, 8B, 14B, 32B and 30B-A3B, 235B-A22B
- 支持在思考模式(用于复杂逻辑推理、数学和编码)和 非思考模式 (用于高效通用对话)之间无缝切换,确保在各种场景下的最佳性能。
- 显著增强的推理能力,在数学、代码生成和常识逻辑推理方面超越了之前的 QwQ(在思考模式下)和 Qwen2.5 指令模型(在非思考模式下)。
- 卓越的人类偏好对齐,在创意写作、角色扮演、多轮对话和指令跟随方面表现出色,提供更自然、更吸引人和更具沉浸感的对话体验。
- 擅长智能体能力,可以在思考和非思考模式下精确集成外部工具,在复杂的基于代理的任务中在开源模型中表现领先。
- 支持 100 多种语言和方言,具有强大的多语言理解、推理、指令跟随和生成能力。
Methods
预训练
模型结构
模型架构看起来改动不大,还是 GQA 模型
- dense 模型
- moe 模型
数据
- 36 万亿个 token,相比于之前 Qwen2.5 是使用 18 万亿 token
- 数据方面下了功夫:
- 不仅从网络上收集数据,还从 PDF 文档中提取信息。我们使用 Qwen2.5-VL 从这些文档中提取文本,并用 Qwen2.5 改进提取内容的质量
- 利用 Qwen2.5-Math 和 Qwen2.5-Coder 这两个数学和代码领域的专家模型合成数据,合成了包括教科书、问答对以及代码片段等多种形式的数据
训练
-
预训练过程分为三个阶段
- 第一阶段(S1),模型在超过 30 万亿个 token 上进行了预训练,上下文长度为 4K token。
- 第二阶段(S2),我们通过增加知识密集型数据(如 STEM、编程和推理任务)的比例来改进数据集,随后模型又在额外的 5 万亿个 token 上进行了预训练
- 最后阶段,我们使用高质量的长上下文数据将上下文长度扩展到 32K token
-
榜单能力很强,对于 Qwen3 MoE 基础模型,它们在仅使用 10% 激活参数的情况下达到了与 Qwen2.5 Dense 基础模型相似的性能
后训练
-
实施了一个四阶段的训练流程。该流程包括:(1)长思维链冷启动,(2)长思维链强化学习,(3)思维模式融合,以及(4)通用强化学习。
-
推理灵活性,Qwen3 模型支持两种思考模式:
- 思考模式:在这种模式下,模型会逐步推理,经过深思熟虑后给出最终答案。这种方法非常适合需要深入思考的复杂问题。
- 非思考模式:在此模式中,模型提供快速、近乎即时的响应,适用于那些对速度要求高于深度的简单问题
测试
网页端测试 https://chat.qwen.ai/
-
测试一些基础的问答
-
出一个代码题,感觉回复格式和 ChatGPT 还挺接近
-
基本的古文背诵能力不太行,有错误
本地测试
测试代码
from modelscope import AutoModelForCausalLM, AutoTokenizer
model_name = "Qwen/Qwen3-30B-A3B"
# model_name = "Qwen/Qwen3-0.6B"
# model_name = "Qwen/Qwen3-0.6B-FP8"
# load the tokenizer and the model
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
torch_dtype="auto",
device_map="auto"
)
# prepare the model input
# prompt = "Give me a short introduction to large language model."
prompt = "原文背诵滕王阁序"
messages = [
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
enable_thinking=True # Switch between thinking and non-thinking modes. Default is True.
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
# conduct text completion
generated_ids = model.generate(
**model_inputs,
max_new_tokens=32768
)
output_ids = generated_ids[0][len(model_inputs.input_ids[0]):].tolist()
# parsing thinking content
try:
# rindex finding 151668 (</think>)
index = len(output_ids) - output_ids[::-1].index(151668)
except ValueError:
index = 0
thinking_content = tokenizer.decode(output_ids[:index], skip_special_tokens=True).strip("\n")
content = tokenizer.decode(output_ids[index:], skip_special_tokens=True).strip("\n")
print("thinking content:", thinking_content)
print("content:", content)
Qwen/Qwen3-30B-A3B 模型
- prompt:原文背诵滕王阁序
不太对,没有背诵完
Qwen/Qwen3-0.6B 模型
-
prompt:原文背诵滕王阁序
小模型的背诵能力明显还要更差 -
prompt: 介绍 transformer 架构中 attention 的公式和代码
代码等 STEM 能力整体感觉还不错,不过不管是代码还是中文介绍还是有些小问题(比如 self.W 定义了没有用上,维度对齐部分介绍也不够严谨),可能是模型参数量太少的原因
Qwen/Qwen3-0.6B-FP8
- prompt: 介绍 transformer 架构中 attention 的公式和代码
Conclusion
- 代码数学相关的榜单刷得很高,参数量更小的情况下比 DeepSeek R1 等模型的精度都高,应该是花了很多训练 token 在代码和数学方面的
- 通用能力,比如对话、背诵等感觉还有一定优化空间
- 未来展望
- 扩展数据规模、增加模型大小、延长上下文长度、拓宽模态范围
- 利用环境反馈推进强化学习以进行长周期推理
- 从专注于训练模型的时代过渡到以训练 Agent 为中心的时代