qwen2.5技术报告分析 上

预训练,和前代版本相比,高质量预训练数据集从之前的7万亿 token 扩⼤到了 18 万亿 token

后训练,用了100 万个样本的精细监督微调,以及包括离线学习 DPO 和在线学习 GRPO 在内的多阶段强化学习

开源权重版本包含 0.5B 1.5B 3B 7B 14B 32B 和 72B (都是稠密的)参数规模的基础模型及指令微调模型

还有两个api模型,。Qwen2.5-Turbo 和 Qwen2.5-Plus(这两个是moe的)

Qwen2.5-72B-Instruct 超越了多款开源及私有模型,并与参数量约其 5 倍的最先进开源模型 Llama-3-405BInstruct 性能相当

1、qwen2.5主要特性

• 尺⼨更优:相较于 Qwen2,Qwen2.5 在 0.5B、1.5B、7B 和 72B 的基础上,回归了 3B、14B 和 32B 模型,这些模型在资源受限场景下更具性价比,且填补了当前开源基础模型领域的空⽩。Qwen2.5-Turbo和 Qwen2.5-Plus 在准确率、延迟和成本之间实现了卓越平衡。

• 数据更优:预训练与后训练数据显著改进。预训练数据从 7 万亿 token 增加至 18 万亿 token,重点关注知识、代码和数学。预训练采⽤分阶段进⾏,以支持不同混合比例间的过渡。后训练数据量达 100 万条⽰例,涵盖监督微调(SFT, Ouyang et al., 2022)、直接偏好优化(DPO, Rafailov et al., 2023)及群体相对策略优化(GRPO, Shao et al., 2024)各阶段。

• 使⽤体验更佳:消除了 Qwen2 在使⽤中的多项主要限制,包括更⻓的⽣成⻓度(从 2K token 增至 8K token)、更出色的结构化输入输出支持(如表格和 JSON)以及更简便的⼯具调⽤。此外,Qwen2.5-Turbo 支持高达 100 万 token 的上下文⻓度。

2、架构和Tokenizer

对于开源的dense模型,用的是基于transformer的decoder架构(解码器,only-decoder,即符合scaling,参数量越大。loss越低,性能越好)

这个架构包含几个关键组件:

1、⽤于高效 KV 缓存利⽤的分组查询注意⼒ (GQA)

什么是GQA

在标准的 Transformer 多头注意力(MHA)中,Query (Q)、Key (K)、Value (V) 的头数是一样的。比如你有 32 个头,就需要计算 32 个 K 和 32 个 V。

  • GQA 的做法: 它把 K 和 V 的头数分组。比如还是 32 个 Q 头,但只保留 8 个 K 和 V 头。每 4 个 Q 头共享同一组 K 和 V。
  • 优势: KV Cache 的显存占用大幅减少(可能减少到原来的 1/4 甚至更多),不仅省显存,还因为数据读取量变小,推理速度显著提升。
  • 对效果的影响: 相比于 MQA(多查询注意力,所有头共享一组 K/V),GQA 保留了更多的"头"的信息,因此对模型最终的效果(准确率)影响非常小,几乎可以忽略不计。

2、⽤于非线性激活的 SwiGLU 激活函数 (Dauphin et al., 2017)

  • SwiGLU 的公式: 它不仅仅是把数字"正负化"(像 ReLU 那样把负数变0),而是引入了门控机制。它把输入向量分成两份,一份经过线性变换后做 Swish 激活,然后与另一份线性变换后的向量做逐元素相乘。
  • 来源: 源自 Google 的 PaLM 模型论文。
  • 优势: 数学上证明,SwiGLU 具有更强的表达能力,但代价是增加了参数量(通常需要把 FFN 的隐藏层维度扩大一点来补偿)。实验表明,换用 SwiGLU 后,模型在相同参数量下的困惑度通常会更低,意味着模型"更聪明"。

3、⽤于编码位置信息的旋转位置嵌入 (RoPE, Su et al., 2024)

详细解读:

模型本身是不懂顺序的("我爱你"和"你爱我"字一样),所以需要注入位置信息。

  • 早期方法: BERT 用的是绝对位置编码(直接加一个位置向量),GPT 用的是学习到的绝对位置。这有个缺点:如果训练时最长只有 1024,推理时到了 1025 就崩了(外推性差)。
  • RoPE 的做法: 它通过绝对位置的复数旋转,使得 Query 和 Key 在做点积(注意力计算)时,自然地包含了相对位置信息。也就是说,它把位置信息"融入"到了向量的方向中。

4、注意⼒机制中的 QKV 偏置

在神经网络的线性层 y=wx+b中,b 就是偏置。

  • 争议: 在 LLaMA 1 的架构中,为了简化结构和某些理论假设,去掉了 QKV 里的 Bias(即 b=0)。后来的 LLaMA 2/3 以及 PaLM 等模型也延续了这种去偏置的设计。
  • Qwen 的选择: Qwen 系列选择加上 QKV Bias。虽然在超大模型下,Bias 对性能的影响相对较小,但它增加了模型的灵活性。
  • 作用: 偏置项可以帮助模型更容易地调整数据的分布中心,相当于给每个注意力头一个"初始的平移自由度"。对于中小参数量的模型,保留 Bias 通常有助于微调收敛和稳定性。

5、采⽤预归⼀化以确保训练稳定的 RMSNorm

预归一化意思是归一化的位置往前放,先把输入归一化再送入网络

RMSNorm(均方根归一化)意思归一化的方法,传统层归一化计算均值和方差,RMSNorm 去掉了计算均值的部分,只保留方差(均方根),计算更快

详细解读:

  • Pre-Normalization(预归一化):
    • Post-Norm(老式): Attention -> Add -> Norm -> FeedForward -> Add -> Norm。这容易导致梯度在深层网络中消失,很难训练深模型。
    • Pre-Norm(新式): Norm -> Attention -> Add -> Norm -> FeedForward -> Add。先把输入归一化再送入网络。这让梯度流动非常顺畅,是现在大模型能训练得动的基础。
  • RMSNorm(均方根归一化):
    • LayerNorm(层归一化)会计算均值和方差,计算公式比较繁琐。
    • RMSNorm 去掉了计算均值的部分,只保留方差(均方根)。
    • 优势: 计算速度更快(省了一次减法),且在 LLM 的实际效果中,RMSNorm 和 LayerNorm 的表现几乎一样好。这也是目前 LLaMA 架构的标准配置。

然后基于闭源的api模型,他们用的是moe架构

通过将标准前馈网络 (FFN) 层替换为专⻔的MoE层,每层包含多个FFN专家以及⼀个将Token分配给前K个专家的路由机制。

遵循的Qwen1.5-MoE 的方法,实现了细粒度专家分割 (Dai et al., 2024)和共享专家路由

什么是细粒度专家分割?

在传统的 MoE(如最早的 Switch Transformer)中,一个 Token 通常会被路由给一个大的专家块。而细粒度专家分割指的是将原来的一个大专家拆解成多个更小的、更细粒度的子专家。

具体做法:

  • 增加专家数量,减小单专家规模: 比如,原本一层可能有 4 个大专家,现在将其拆分为 64 个小专家。
  • Top-k 路由: 每个 Token 不再只由 1 个专家处理,而是可能被分配给这 64 个小专家中的前 K 个(例如 Top-2 或 Top-4)。
  • 上采样与下采样: Qwen1.5-MoE 实际上采用的是一种更具体的细分策略(通常参考 DeepSeek-MoE 或类似的设计),将 FFN 的维度切分成更小的碎片,或者将原本大的专家矩阵拆分。
    作用:
  • 提高专家利用率: 防止模型出现"专家坍缩"或某些专家长期闲置的情况。
    那用多个专家,最后结果到底怎么定?
    在 Token 进入专家之前,路由器(门控网络/Gating Network)会计算这个 Token 与所有专家之间的匹配度(通常通过点积计算,并经过 Softmax 归一化)。路由器会为这 Top-K 个专家分别生成一个权重分数。
    模型会将各个专家输出的结果向量,乘以对应的权重,然后相加。
    然后还要再加上共享专家路由,得到最终结果
    何为共享专家路由
    含义:
    在标准 MoE 架构中,所有的专家都是"路由专家",即 Token 必须通过门控网络被"分发"给特定的专家,未被选中的专家不参与计算。而共享专家是指在 MoE 层中强制保留一部分(通常是 1 个或 2 个)专家,它们不经过路由选择,而是处理该层所有的输入 Token。
    具体做法:
  • 在每个 MoE 层中,包含两类专家:
    1. 共享专家: 无论输入是什么,这部分专家都会参与计算,用于存储和处理通用的、全局的知识(例如基本的语法结构、常识推理)。

然后开始看他的Tokenizer分词器

在分词方⾯,qwen2.5采⽤了 Qwen 的分词器 (Bai et al., 2023),它实现了字节级字节对编码 (BBPE,

Brown et al., 2020; Wang et al., 2020; Sennrich et al., 2016),拥有 151,643 个常规词元。与之前的

Qwen 版本相比,我们将控制词元从 3 个扩展到了 22 个,增加了两个⽤于⼯具功能的词元,并将

其余部分分配给其他模型能⼒。

什么是字节级字节对编码 (BBPE)

在 BBPE 出现之前,主流算法是 BPE (Byte Pair Encoding)。它的逻辑是:统计语料中最常一起出现的两个字符,把它们合并成一个新词。

BPE 最大的痛点是:它处理不了"生僻字"和"乱码"。

BBPE就是为了解决这个问题

PE 的核心思想非常粗暴且有效:既然字可能会认不全,那我就退回到计算机最底层的"字节"层面来处理!

计算机里的任何数据(无论是中文、英文、火星文还是图片),最终存储时都是一串 0 和 1,也就是 字节。

1 个汉字通常占 3 个字节,1 个英文字母占 1 个字节。

BBPE 的做法是:

  1. 第一步:把所有文本都"砸碎"成字节。
  • 不管是 中 还是 a,全部变成一串数字(0-255)。
  1. 第二步:在这些字节上进行 BPE 合并。
  • 它不再合并"字",而是合并"字节序列"。
  1. 第三步:构建词表。
  • 最终生成的词表里,全是字节的组合。

Control tokens从3个增加到22个

为了让模型不仅仅是瞎聊天,而是能干正活(比如写代码、当助手、调用工具),我们需要在文本里插入一些它专门训练过的特殊符号。

这些符号的作用是控制模型的行为,而不是传递语义信息,所以叫"控制词元"。

相关推荐
mCell6 小时前
为什么 Memo Code 先做 CLI:以及终端输入框到底有多难搞
前端·设计模式·agent
九.九6 小时前
ops-transformer:AI 处理器上的高性能 Transformer 算子库
人工智能·深度学习·transformer
春日见6 小时前
拉取与合并:如何让个人分支既包含你昨天的修改,也包含 develop 最新更新
大数据·人工智能·深度学习·elasticsearch·搜索引擎
恋猫de小郭6 小时前
AI 在提高你工作效率的同时,也一直在增加你的疲惫和焦虑
前端·人工智能·ai编程
YJlio6 小时前
1.7 通过 Sysinternals Live 在线运行工具:不下载也能用的“云端工具箱”
c语言·网络·python·数码相机·ios·django·iphone
deephub6 小时前
Agent Lightning:微软开源的框架无关 Agent 训练方案,LangChain/AutoGen 都能用
人工智能·microsoft·langchain·大语言模型·agent·强化学习
l1t7 小时前
在wsl的python 3.14.3容器中使用databend包
开发语言·数据库·python·databend
大模型RAG和Agent技术实践7 小时前
从零构建本地AI合同审查系统:架构设计与流式交互实战(完整源代码)
人工智能·交互·智能合同审核
老邋遢7 小时前
第三章-AI知识扫盲看这一篇就够了
人工智能
互联网江湖7 小时前
Seedance2.0炸场:长短视频们“修坝”十年,不如AI放水一天?
人工智能