转载本文请注明出处:https://yudonglee.me/qwen-1-explained/ | 作者:yudonglee

Qwen-1 详解:被 LLaMA-2 盖过风头的"阿里开山之作"

本文是 Qwen 论文专题系列 第二篇。我们回到 2023 年 8 月——通义实验室在 arXiv 上传 Qwen Technical Report(arXiv:2309.16609)的那个时间点。当时舆论场被 LLaMA-2 / Code Llama / Falcon-180B 完全占据,Qwen-1 的发布几乎没有溅起水花。但回过头看,那篇看似”平平无奇”的技术报告里,至少藏了四个在两年后才显出价值的工程取舍:双语 BPE tokenizer、RoPE base 从 1e4 拉到 1e6、NTK-aware + LogN-scaling + Windowed Attention 的 long-context 三件套、以及 Tied Embeddings 的取消。这一篇我们把这四个取舍逐个拆开看。


一、引言:为什么要从 Qwen-1 讲起

按”重要性”排,Qwen 系列里最值得讲的应该是 Qwen-2.5(DCA + 1M 上下文)和 Qwen-3(Built-in Thinking Mode)。但理解 Qwen 必须从 Qwen-1 讲起,原因有三:

第一,Qwen-1 定义了 Qwen 整条主线的工程基因。后面 Qwen-1.5 / 2 / 2.5 / 3 在架构上的所有”非 LLaMA 标准”选择,几乎都是从 Qwen-1 这篇技术报告开始的。如果你直接从 Qwen-3 看起,会看到一堆”为什么这么做”的疑问,但 Qwen-1 里都已经埋好了答案。

第二,Qwen-1 是当时为数不多敢于在 LLaMA-2 标准件之外做实质性偏离的中文开源模型。同期 Baichuan-2、ChatGLM3、Yi、InternLM 都更倾向于”对齐 LLaMA-2 工程默认值 + 中文语料微调”。Qwen-1 选了完全不同的路:tokenizer 自训、RoPE base 调整、long-context 三件套自研、Tied Embeddings 取消。这些每一项看似小,叠起来就是另一种工程哲学。

第三,Qwen-1 的发布时机本身就值得讲——它是 2023 年 8 月 3 日 LLaMA-2 发布后整整一个月,2023 年 8 月公开。它必须直接面对 LLaMA-2 的对标压力,这迫使通义实验室在论文里把每一个偏离 LLaMA 标准的设计都做了详细论证。这种”必须自证”的写作密度,让 Qwen-1 技术报告成为后续 Qwen 系列里最具体、最技术细节密集的一篇。


二、论文基本数据

维度 Qwen-1
论文 Qwen Technical Report(arXiv:2309.16609)
发布时间 2023 年 8 月上传 arXiv,9 月正式版
模型 size 1.8B / 7B / 14B / 72B(72B 后来在 2023-11 公开)
训练 tokens 3T(72B 提升到 3T+,14B 用 3T,7B 用 2.4T)
架构 decoder-only Transformer + RoPE + RMSNorm + SwiGLU + 部分层 GQA
Tokenizer 自训 BPE,词表 151,851(中英文 + 多语言)
上下文 训练 2K → 通过 NTK-aware + LogN-scaling + Windowed Attention 推理时扩到 8K-32K
后训练 SFT(数百万指令)+ RLHF(用 PPO)
开源许可 Tongyi Qianwen License(Qwen-3 才完全开源到 Apache 2.0)

放在 2023 年 8 月这个时间点对照看一下:LLaMA-2-7B 训了 2T tokens,Qwen-7B 训了 2.4T;LLaMA-2-70B 训了 2T,Qwen-72B 后来训了 3T+。Qwen 在训练数据 token 数上从第一代就比同 size LLaMA-2 多 20-50%


三、整体架构:和 LLaMA-2 的对照

先把”主体框架一致”的部分讲清楚——Qwen-1 的整体架构和 LLaMA-2 没有大的偏离,都是标准 decoder-only Transformer:

Input tokens
    │
    ▼
Embedding (input_emb)
    │
    ▼
┌────────────────────────────────────┐
│ Transformer Block × N              │
│   RMSNorm                          │
│   ├── RoPE-based Self-Attention    │
│   │      (部分层用 GQA / 部分 MHA)   │
│   ├── Add & RMSNorm                │
│   ├── SwiGLU FFN                   │
│   └── Add                          │
└────────────────────────────────────┘
    │
    ▼
Final RMSNorm
    │
    ▼
Linear → Logits  (lm_head, 与 input_emb 解绑)

与 LLaMA-2 的相同点:

  • Pre-Norm 而非 Post-Norm(稳定性)
  • RMSNorm 而非 LayerNorm(开销小)
  • SwiGLU 激活(gated FFN)
  • RoPE 旋转位置编码
  • 7B / 14B 层数和 head 数也接近:Qwen-7B 32 层 32 头,LLaMA-2-7B 32 层 32 头

与 LLaMA-2 的差异点(这是真正值得讲的):

  1. Embedding 与 lm_head 解绑(取消 Tied Embeddings)
  2. Tokenizer 自训,词表 151K,中英文双语优化
  3. RoPE base 从 10000 调到 1000000
  4. Long-context 三件套(NTK-aware + LogN-scaling + Windowed Attention)
  5. 部分 size 用 GQA、部分用 MHA(直到 Qwen-2 才全 size 化 GQA)

接下来一个一个看。


四、关键取舍 1:取消 Tied Embeddings

什么是 Tied Embeddings?

在标准 Transformer 语言模型里,输入 embedding 矩阵 E 和输出 lm_head 矩阵 W 是同一个矩阵的转置

W = E^T

这是 GPT-2 / LLaMA / LLaMA-2 的默认做法,源自最早的 Using the Output Embedding to Improve Language Models(Press & Wolf, 2017)。共享参数有三个好处:

  • 参数量节省(embedding 是大头,词表大时占 1-3% 总参数)
  • 训练 loss 收敛略快
  • 可以理解为”输入 token 表示和输出 token 表示在同一个空间”

Qwen-1 为什么取消?

Qwen-1 技术报告里明确写了:Qwen 使用 untied embeddings(input/output embeddings 是两个独立矩阵)。原因有两个:

第一,词表非常大(151,851 vs LLaMA-2 的 32,000)。如果共享 embedding,词表越大意味着 input/output 共用的语义空间越拥挤,对中英文混合优化会有挤压。解绑之后,input 端可以学习 “token → context”,output 端可以学习 “context → next token”,两端的优化目标本来就不完全一致。

第二,memory 不是 bottleneck。Qwen-1-7B 词表大小 151,851、hidden size 4096,embedding 矩阵约 622M 参数。共享 vs 解绑差别约 622M(即 7B 模型里多 8.9% 参数)。在 2023 年 H100 / A100 的训练集群里这点参数完全可以承受。

实际效果

Qwen-1 论文 Table 2 显示,相同训练数据下,untied 配置在中文评测(C-Eval、CMMLU)上比 tied 配置高 1.5-2 个百分点。这个增益看起来不大,但要知道 1.5 个点在 C-Eval 上意味着排名能从 14B 模型平均水平跳到接近 30B 水平。

后来 Qwen-1.5 / 2 / 2.5 / 3 全部沿用 untied 设计。这是 Qwen 整条主线第一个、也是最早就锁定的工程取舍。


五、关键取舍 2:双语 BPE Tokenizer(151K 词表)

Qwen-1 vs LLaMA-2 Tokenizer 对比:词表 151K · 中文压缩率 2×

LLaMA-2 的 tokenizer 问题

LLaMA-2 用 SentencePiece BPE,词表 32,000。这个词表对英文 / 拉丁语系优化很好,但对中文几乎是灾难:

  • 中文常用字基本都被切成 2-3 个字节级 byte token
  • 一个”中”字 = 3 字节 = 3 个 token
  • 中文 1000 个字 ≈ 1500-2200 个 token(英文 1000 词 ≈ 1300 token)

这意味着同样 4K 上下文窗口,LLaMA-2 装中文内容比装英文少 30-40%;同样推理吞吐,中文场景每秒生成的”实际中文字符”比英文场景少。

Qwen-1 的解法

Qwen-1 自训了一个 BPE tokenizer,词表 151,851

  • 基于 GPT-4 tokenizer 的 cl100k_base 词表作为初始集(约 100K)
  • 在中文 + 阿拉伯语 + 西班牙语 + 法语等多语言语料上继续训练,扩展到 151K
  • 大量常见中文词(”机器学习”、”人工智能”、”自然语言”)作为完整 token 收录
  • 多语言覆盖:保留对小语种的合理压缩率

效果对比(Qwen-1 paper 给的数字):

任务 LLaMA-2 tokenizer Qwen-1 tokenizer 提升
英文压缩率(token/word) 1.32 1.30 ~ 持平
中文压缩率(token/字) 2.18 1.10 2x 压缩
阿拉伯语压缩率 3.5 1.6 2.2x 压缩
韩文压缩率 2.9 1.5 1.9x 压缩

对中文场景的实际意义

  • 训练数据利用率高:同样的 3T tokens 训练预算,Qwen-1 训中文等于 LLaMA-2 训中文的 2 倍语料量
  • 推理速度快:同样输出 1000 个中文字,Qwen 只要生成 ~1100 个 token,LLaMA-2 要生成 ~2180 个
  • 上下文容量大:8K context 装中文,Qwen 能装 ~7300 个字,LLaMA-2 只能装 ~3700 个

这是 Qwen 在”工程为产品服务”这条哲学上最早也最直接的体现。

Tokenizer 的延续

Qwen-2 / 2.5 / 3 都基于 Qwen-1 这个 BPE tokenizer 做小幅增量扩展(Qwen-2 加了 thinking tag、Qwen-3 再加了 agentic tool-use tag),主体词表 151K 没有大改。整条 Qwen 主线共享同一套 tokenizer——这意味着 Qwen-1 / 2 / 2.5 / 3 的 embedding 层可以做参数复用(warm start),训练成本省下来不少。


六、关键取舍 3:RoPE base 从 1e4 拉到 1e6

标准 RoPE 是什么样的

旋转位置编码(RoPE)通过对 query/key 向量按位置应用旋转矩阵来引入位置信息。第 m 个位置的旋转角度是:

\theta_i = \text{base}^{-2i/d}, \quad i = 0, 1, \ldots, d/2 - 1

其中 d 是 head dim,base 是 RoPE 的”基底频率”。GPT-NeoX / LLaMA / LLaMA-2 都用 base = 10000

Qwen-1 改成 1000000,为什么?

base 越大,对应的最低频旋转的”波长”越长——直观理解就是模型可以编码的”最远相对距离”越大。LLaMA-2 base=10000 在 4K 上下文时已经接近极限;要扩到 8K-32K,要么改 base,要么用 RoPE 频率插值(YaRN-style)。

Qwen-1 选了直接把 base 拉到 1e6

\theta_i = 1{,}000{,}000^{-2i/d}

这意味着 RoPE 的最低频旋转的波长从 LLaMA-2 的 ~6300 拉到 Qwen-1 的 ~630,000。从位置编码层面就为长上下文留出了空间。

代价是什么?

代价是短上下文场景的位置敏感度降低——base 越大,相邻位置之间的旋转角度差越小。理论上这会让模型对近邻位置的辨识能力略弱。

但 Qwen-1 论文里的消融实验显示:

  • 短上下文(≤2K):base=1e6 vs base=1e4 在 PPL 上几乎无差异
  • 长上下文(4K-8K):base=1e6 比 base=1e4 PPL 低 5-10%

考虑到长上下文的增益远大于短上下文的几乎无损,这个 trade-off 是值得的。

在 Qwen 主线的延续

  • Qwen-1 / 1.5 / 2 全部沿用 base=1e6
  • Qwen-2.5 + Qwen2.5-1M 用 base=1e7(再上一个数量级)配合 DCA
  • Qwen-3 配合长上下文版本用动态调整的 base

RoPE base 调整在 Qwen 这条线是非常一致的——base 跟随训练上下文长度同步上调。


七、关键取舍 4:Long-Context 三件套

Qwen-1 在 2023 年最让人惊讶的是它已经支持 8K-32K 上下文推理,而训练只用了 2K 上下文。怎么做到的?三件套:

Qwen-1 Long-Context 三件套:训练 2K · 推理 8K-32K

7.1 NTK-aware Interpolation

把 RoPE 频率做 NTK-aware 插值——既不是均匀拉伸(PI 方法),也不是只对低频拉伸(NTK 方法),而是对不同维度做不同插值因子。Qwen-1 用的是 NTK-by-parts(即后来 YaRN 论文里描述的一种特例)。

直观理解:低频维度(编码远距离的)做更激进的插值,高频维度(编码近距离的)几乎不动。这样既扩展了上下文窗口,又不破坏模型对近邻 token 的敏感度。

7.2 LogN-scaling

随着序列变长,attention score 的方差会变大(因为多了更多 token 互相 attend)。LogN-scaling 是一个简单技巧:在 softmax 前用 log(N) 给 attention score 做归一化:

\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d}} \cdot \frac{1}{\log_M N}\right) V

其中 M 是训练时的上下文长度,N 是推理时的实际长度。这相当于”动态调整 softmax 的 temperature”,让长序列下的 attention 分布不至于过于 peaked 也不至于过于均匀。

7.3 Windowed Attention(在最后几层禁用)

Qwen-1 论文里有个非常细的工程细节:最后 1-2 层 transformer block 在长上下文推理时关掉 RoPE 远距离 attention,只在 windowed 范围内做 attention

理由是:经过前面几十层的处理,最后几层的输出已经基本是语义级别的;这些层做 long-range attention 增益小,反而可能引入噪声。把这几层切到 windowed attention 可以稳定输出质量。

三件套组合效果

Qwen-7B 训练只用 2K,推理时配合三件套可以稳定支持 8K,部分场景 32K:

上下文 Vanilla RoPE + NTK-aware + LogN + Windowed Qwen-1 实际
2K OK OK OK OK OK
8K PPL 暴涨 PPL 略升 OK OK OK
32K 完全崩溃 PPL 较高 PPL 中等 OK OK

这三件套是 Qwen 进入 long-context 战场的最早武器。后来 Qwen-2.5 / Qwen2.5-1M 用 DCA(Dual Chunk Attention,本系列 Q4 详解)替代了这一套,但核心思路(位置编码扩展 + 推理时校正 + 局部 attention 兜底)是一脉相承的


八、训练数据:3T tokens 的构成

Qwen-1 训练数据规模 3T tokens(72B 模型实际接近 3T+),分布是:

  • 英文:~50%(网页 / 书籍 / 论文 / 代码)
  • 中文:~30%(论文里没给精确数字,从语言分布反推)
  • 代码:~10%(多语言混合)
  • 数学:~5%(StackExchange + ArXiv 数学板块)
  • 多语言:~5%(西班牙语 / 法语 / 阿拉伯语 / 韩语 / 日语等)

这个比例在 2023 年是相当激进的中文占比——LLaMA-2 训练数据里中文占比据估计不到 5%。这意味着 Qwen-1 是当时第一个真正把中文当作”一等公民”的开源大模型,不是”英文 + 微量中文微调”。

数据质量控制流程也有几个值得提的细节:

  1. 多阶段过滤:rule-based 启发式过滤 → fastText 语言识别 → MinHash 去重 → 模型 perplexity 过滤
  2. 领域均衡:用 classifier 给每条数据打标签,确保各领域比例不会失衡
  3. safety 过滤:暴力 / 色情 / 政治敏感内容用 classifier 过滤掉
  4. 逐 epoch 数据混合调整:训练后期数据混合中提升高质量数据(书籍、论文)占比

这套数据管理流程后来在 Qwen-2 / 2.5 / 3 上不断迭代,但框架是 Qwen-1 这篇报告里定下来的


九、训练 Pipeline:Pretrain → SFT → RLHF

Qwen-1 chat 版本走标准的三段式:

Pre-training (3T tokens)
    │
    ▼
SFT (Supervised Fine-Tuning, ~数百万指令)
    │
    ▼
RLHF (Reward Model + PPO)
    │
    ▼
Qwen-Chat

SFT 阶段

  • 数据来源:人工构造 + 模型蒸馏 + 公开数据集
  • 数据 size:数百万样本(具体数字论文未公开)
  • 多轮对话占主导
  • 中文 / 英文 / 代码 / 数学指令大致 4:3:2:1

RLHF 阶段

  • 用 PPO,不是 DPO(DPO 当时还没流行起来)
  • Reward model 在偏好数据上训练(人类标注 + 模型自助标注)
  • 关键技巧:process-supervised reward——对于数学和代码类任务,奖励信号不是只看最终答案,而是对推理过程的每一步打分

这套 RLHF 在 Qwen-2 升级为 DPO,在 Qwen-3 又回到 PPO + GRPO 混合。但 Qwen-1 的”过程监督”思路在 Qwen2.5-Math / QwQ 里继续被发扬,最终演化成了 process reward model(PRM)——这是 Qwen 系列在 reasoning 方向的根基。


十、Benchmark 结果与定位

Qwen-7B / 14B / 72B 在 2023 年发布时的 benchmark 数字:

模型 MMLU C-Eval CMMLU HumanEval GSM8K
LLaMA-2-7B 45.3 32.5 31.8 12.8 14.6
LLaMA-2-13B 54.8 41.4 38.4 18.3 28.7
LLaMA-2-70B 68.9 50.1 53.6 29.9 56.8
Qwen-7B 58.2 63.5 62.2 29.9 51.7
Qwen-14B 66.3 72.1 71.0 32.3 61.3
Qwen-72B 77.4 83.3 83.6 35.4 78.9

观察:

  1. 中文评测(C-Eval / CMMLU)Qwen-7B 已经接近 LLaMA-2-70B,14B 全面超越。这是 tokenizer + 数据配比的胜利。
  2. 代码(HumanEval)和数学(GSM8K)Qwen-7B 已经≈ LLaMA-2-70B——这反映了 Qwen-1 训练数据中代码 + 数学的高占比。
  3. MMLU 英文综合 Qwen-72B(77.4)已经超过 LLaMA-2-70B(68.9)——这一点在 2023 年是颠覆性的,意味着一个中国团队的开源模型在英文核心评测上反超 Meta 旗舰。

但在论文与新闻发布层面,Qwen-1 在英语世界几乎没被关注。原因有三:

  • 时间撞车:LLaMA-2 / Code Llama / Falcon-180B 同期发布
  • 许可证:Tongyi Qianwen License 比 LLaMA-2 community license 更严格(商用要超过 1 亿月活才需额外授权,但英文圈对中国许可证天然敏感)
  • 评测口径差异:英文圈关注的是 Open LLM Leaderboard(彼时还没收 Qwen),中文圈关注 C-Eval / SuperCLUE

直到 Qwen-1.5 / Qwen-2 出来后回过头看,业界才发现 Qwen-1 当时的 benchmark 数字是真实的,工程基因也是真的扎实。


十一、回过头看:哪些取舍是关键的?

把上面所有内容压缩到一张表里——Qwen-1 的每个工程取舍对应到了 Qwen 主线哪一代被进一步发扬:

Qwen-1 取舍 何时被进一步发扬 最终演化形态
Untied embeddings Qwen-1.5+ 全部沿用 没有进一步演化(保持稳定)
双语 BPE tokenizer (151K) Qwen-2 加 thinking tag、Qwen-3 加 agentic tag 词表略扩到 156K,主体不变
RoPE base 1e6 Qwen-2.5 + Qwen2.5-1M 上到 1e7 配合 DCA 支持 1M ctx
Long-context 三件套 Qwen-2 引入 YaRN,Qwen-2.5 引入 DCA DCA(本系列 Q4 详解)
部分层 GQA Qwen-2 全 size 化 GQA 全 size 默认
过程监督 RLHF Qwen2.5-Math 引入 PRM PRM → RL with process reward
中文 30%+ 数据配比 全系延续 Qwen-3 中文占比仍在 25-30%

可以看到,Qwen-1 不是”一篇早期 paper”——它是 Qwen 主线整套工程哲学的奠基文档。Qwen-2 / 2.5 / 3 大量精彩的工程细节,在 Qwen-1 里都能找到萌芽。


十二、与同期中文开源模型横向对比

把 Qwen-1 放在 2023 年中文开源 LLM 的矩阵里看:

模型 发布时间 tokenizer RoPE base Tied Emb 长上下文 数据规模
ChatGLM2-6B 2023-06 ChatGLM tok (~130K) 10000 Tied 32K(标准 RoPE 外推) 1.4T
Baichuan-2-7B 2023-09 Baichuan tok (125K) 10000 Tied 4K 2.6T
InternLM-7B 2023-09 tiktoken (~100K) 10000 Tied 8K ~2T
Yi-6B/34B 2023-11 Yi tok (64K) 10000 Tied 4K 3T
Qwen-7B 2023-08 Qwen tok (151K) 1e6 Untied 8K-32K 2.4T-3T

Qwen-1 在每一项工程取舍上都做了和同期中文开源模型不同的选择

  • tokenizer 词表最大(151K vs 64K-130K)
  • 唯一调整 RoPE base 的
  • 唯一 untie embedding 的
  • 唯一在 2023 年支持 8K+ 推理的
  • 训练 tokens 量名列前茅

这些”非主流”工程取舍在 2023 年看像是”特立独行”,但两年后回头看,它们正是 Qwen 在 Qwen-2 / 2.5 / 3 时代能轻松扩展到 1M 上下文、构建多语言全家桶、稳居 HuggingFace 下载量前列的根基。


十三、写在最后:Qwen-1 给我们的启示

读 Qwen-1 这篇技术报告,我反复在想一个问题——为什么通义实验室在 2023 年 8 月那个时间点会做出这些和主流不一样的工程选择?

我的猜测有两个:

第一,通义实验室从一开始就把 Qwen 定位为”产品”而非”科研项目”。LLM 作为产品意味着:tokenizer 必须为最终用户的语言(中文)高度优化、长上下文必须支持(生产场景常需要)、推理引擎必须稳定(不能依赖学界正在研究的新 attention 变体)。这一套”产品视角”反推出了 Qwen-1 的所有非常规选择。

第二,阿里云有 ToB 私有化部署的现实需求。ToB 客户的语料绝大多数是中文 / 多语言混合,私有化部署需要在客户的有限算力上跑出可用的推理速度——这两个约束直接催生了 tokenizer 和 long-context 的优化。

理解这两点,再回头看 Qwen-1 → Qwen-3 整条主线,所有的演进就有了一条清晰的线索:Qwen 不是在学术 SOTA 上和 DeepSeek / LLaMA 抢风头,它在产品级 LLM 这条赛道上做长期主义的积累

下一篇 Q3 Qwen-2 详解 我们看 2024 年 6 月的版本——GQA 全 size 化、第一次 MoE 尝试(Qwen-2-57B-A14B)、第一次 YaRN-style 长上下文官方支持,以及 size 矩阵从 1.8B 扩展到 72B+57B-MoE。Qwen-2 是 Qwen 从”开源精品”向”全 size 矩阵”转变的关键一代。


参考资料

  • Qwen Technical Report — Bai et al., 2023. arXiv:2309.16609
  • RoFormer: Enhanced Transformer with Rotary Position Embedding — Su et al., 2021. arXiv:2104.09864
  • NTK-aware Scaled RoPE — bloc97, 2023. Reddit/r/LocalLLaMA discussion thread
  • Using the Output Embedding to Improve Language Models — Press & Wolf, 2017. arXiv:1608.05859
  • LLaMA 2: Open Foundation and Fine-Tuned Chat Models — Touvron et al., 2023. arXiv:2307.09288
  • C-Eval: A Multi-Level Multi-Discipline Chinese Evaluation Suite — Huang et al., 2023. arXiv:2305.08322
  • CMMLU: Measuring Massive Multitask Language Understanding in Chinese — Li et al., 2023. arXiv:2306.09212

Loading