详细介绍Qwen3技术报告中提到的模型架构技术

详细介绍Qwen3技术报告中提到的一些主流模型架构技术,并为核心流程配上相关的LaTeX公式。
这些技术都是当前大型语言模型(LLM)领域为了提升模型性能、训练效率、推理速度或稳定性而采用的关键组件。


1. Grouped Query Attention (GQA) - 分组查询注意力 🎯

  • 目的:GQA 旨在在保持多头注意力(Multi-Head Attention, MHA)大部分优势的同时,显著降低推理时的显存占用和计算开销,从而加快推理速度。它介于标准的多头注意力和多查询注意力(Multi-Query Attention, MQA,所有查询头共享同一份键和值)之间。
  • 工作原理
    • 在标准的多头注意力中,每个“查询头”(Query Head)都有自己独立的“键头”(Key Head)和“值头”(Value Head)。
    • 在GQA中,查询头被分成 N _ g N\_g N_g 组,组内的 N _ q / N _ g N\_q/N\_g N_q/N_g 个查询头共享同一份键头和值头。而不同组之间的键头和值头仍然是独立的。
    • 其中 N _ q N\_q N_q 是总查询头数。如果分组数 N _ g = N _ q N\_g = N\_q N_g=N_q,则GQA等同于MHA;如果 N _ g = 1 N\_g = 1 N_g=1,则GQA退化为MQA。

多头注意力 (Multi-Head Attention - MHA)

多头注意力 Ng_equals_Nq
K_Head_1
Q_Head_1
V_Head_1
K_Head_2
Q_Head_2
V_Head_2
...

分组查询注意力 (Grouped-Query Attention - GQA)

分组查询注意力 One_lt_Ng_lt_Nq
组1
组2
...
共享_KV_Head_G2
Q_Head_3
Q_Head_4
共享_KV_Head_G1
Q_Head_1
Q_Head_2

多查询注意力 (Multi-Query Attention - MQA)

多查询注意力 Ng_equals_1
共享_KV_Head
Q_Head_1
Q_Head_2
...
  • 优势
    • 减少K/V缓存:在自回归生成(解码)过程中,需要缓存之前所有token的键(K)和值(V)状态。GQA通过减少K/V头的数量,显著降低了这部分缓存的大小,从而降低了显存占用,尤其在处理长序列时效果明显。
    • 提高推理效率:更少的K/V头意味着更少的计算量,尤其是在K/V投影和注意力得分计算的某些环节。
    • 性能保持:相比于MQA可能带来的较大性能损失,GQA通过分组共享的方式,能在很大程度上保留MHA的建模能力和性能,是一种较好的折中方案。
  • Qwen3中的应用:Qwen3的稠密模型中明确提到了使用GQA。例如,Qwen3-0.6B有16个查询头,KV头数为8 ,这意味着可能分成了8组,每2个查询头共享一组KV。对于更大的模型如Qwen3-32B,有64个查询头,KV头数为8 ,则每8个查询头共享一组KV。MoE模型也采用了GQA,例如Qwen3-235B-A22B有64个查询头,KV头数为4,意味着每16个查询头共享一组KV。

2. SwiGLU - Sigmoid-Weighted Linear Unit (门控线性单元激活函数) активировать

  • 目的:SwiGLU 是一种改进的激活函数,旨在通过引入门控机制来提升神经网络(尤其是Transformer模型中前馈网络FFN部分)的性能和表达能力 。
  • 工作原理
    • 传统的Transformer FFN层通常包含两个线性变换和一个ReLU(或GeLU)激活函数。
    • GLU(Gated Linear Unit)是一类激活函数,它将输入通过两个线性变换,然后将其中一个变换的结果通过Sigmoid函数(作为门控),再与另一个线性变换的结果进行逐元素相乘。
    • SwiGLU 是GLU的一个变体。在Transformer的FFN中,给定输入 x ∈ m a t h b b R d x \in \\mathbb{R}^d xmathbbRd,它通常通过三个权重矩阵 W , V ∈ R d × d _ m W, V \in \mathbb{R}^{d \times d\_m} W,VRd×d_m W _ 2 ∈ R d _ m × d W\_2 \in \mathbb{R}^{d\_m \times d} W_2Rd_m×d (其中 d _ m d\_m d_m 是中间隐藏层维度)进行计算。Qwen3报告中引用的Dauphin et al. (2017) 的工作,以及后续如PaLM、LLaMA等模型采用的形式,通常是:
      SwiGLU ( x , W , V ) = Swish β ( x W ) ⊙ ( x V ) \text{SwiGLU}(x, W, V) = \text{Swish}_{\beta}(xW) \odot (xV) SwiGLU(x,W,V)=Swishβ(xW)(xV)
      其中 ⊙ \odot 表示逐元素乘积, Swish _ β ( y ) = y ⋅ σ ( β y ) \text{Swish}\_{\beta}(y) = y \cdot \sigma(\beta y) Swish_β(y)=yσ(βy) 是Swish激活函数, σ \sigma σ 是Sigmoid函数 σ ( z ) = ( 1 + e − z ) − 1 \sigma(z) = (1 + e^{-z})^{-1} σ(z)=(1+ez)1 β \beta β 通常设为1。
      然后,这个结果会再通过一个线性层 W _ 2 W\_2 W_2
      FFN SwiGLU ( x ) = ( Swish β ( x W ) ⊙ ( x V ) ) W 2 \text{FFN}_{\text{SwiGLU}}(x) = (\text{Swish}_{\beta}(xW) \odot (xV)) W_2 FFNSwiGLU(x)=(Swishβ(xW)(xV))W2

Mermaid 代码 (SwiGLU FFN层流程示意图):

输入_x
线性变换_W
线性变换_V
Swish激活_Swish_beta_xW
逐元素相乘_odot
线性变换_W2
SwiGLU_FFN_输出
  • 优势
    • 更强的表达能力:门控机制允许网络根据输入动态地调整激活的强度,从而捕获更复杂的模式。
    • 更好的性能:在许多LLM的实验中,使用SwiGLU(或其他GLU变体)替换传统的ReLU或GeLU,能在保持参数量大致相当(通过调整隐藏层大小)的情况下,带来模型性能的提升。
  • Qwen3中的应用:Qwen3的稠密模型和MoE模型均明确采用了SwiGLU作为激活函数。

3. Rotary Positional Embeddings (RoPE) - 旋转位置嵌入 🔄

  • 目的:RoPE 是一种用于在Transformer模型中注入相对位置信息的方法,它旨在克服传统绝对位置编码在处理长序列和泛化性方面的一些局限 。
  • 工作原理
    • RoPE的核心思想是将位置信息编码到查询(Q)和键(K)向量中,通过对Q和K向量应用一个与它们在序列中的绝对位置 m m m 相关的旋转矩阵 R _ m R\_m R_m
    • 具体来说,对于一个 d d d 维的Q或K向量 x = [ x _ 0 , x _ 1 , … , x _ d − 1 ] T x = [x\_0, x\_1, \dots, x\_{d-1}]^T x=[x_0,x_1,,x_d1]T,可以将其视为 d / 2 d/2 d/2 个二维向量的拼接 x _ j = [ x _ 2 j , x _ 2 j + 1 ] T x\_j = [x\_{2j}, x\_{2j+1}]^T x_j=[x_2j,x_2j+1]T。RoPE对每个这样的二维子向量应用一个旋转操作 :
      R m x j = ( cos ⁡ ( m θ j ) − sin ⁡ ( m θ j ) sin ⁡ ( m θ j ) cos ⁡ ( m θ j ) ) ( x 2 j x 2 j + 1 ) R_m x_j = \begin{pmatrix} \cos(m\theta_j) & -\sin(m\theta_j) \\ \sin(m\theta_j) & \cos(m\theta_j) \end{pmatrix} \begin{pmatrix} x_{2j} \\ x_{2j+1} \end{pmatrix} Rmxj=(cos(mθj)sin(mθj)sin(mθj)cos(mθj))(x2jx2j+1)
      其中 m m m 是token的绝对位置, t h e t a _ j = 10000 − 2 j / d \\theta\_j = 10000^{-2j/d} theta_j=100002j/d 是一组预定义的、与维度相关的非负频率。
    • 经过RoPE编码后的查询向量 q _ m q\_m q_m 和键向量 k _ n k\_n k_n(它们原始未编码前分别为 q q q k k k),它们的内积满足:
      ⟨ R m q , R n k ⟩ = ℜ ( ∑ j = 0 d / 2 − 1 ( q 2 j + i q 2 j + 1 ) ( k 2 j − i k 2 j + 1 ) e i ( m − n ) θ j ) \langle R_m q, R_n k \rangle = \Re(\sum_{j=0}^{d/2-1} (q_{2j} + iq_{2j+1})(k_{2j} - ik_{2j+1}) e^{i(m-n)\theta_j}) Rmq,Rnk=(j=0d/21(q2j+iq2j+1)(k2jik2j+1)ei(mn)θj)
      这个内积仅取决于它们的相对位置 ( m − n ) (m-n) (mn) 和它们原始的内容。

Mermaid 代码 (RoPE 位置编码示意图):

RoPE编码过程
位置_m_频率_theta_j
按2维切分_x_j
Q或K向量_x
对每对_x_2j_x_2j_plus_1
应用旋转矩阵_R_m
合并旋转后的2维向量
旋转后的向量_x_prime_m
旋转后的Q_prime_m
参与注意力计算
旋转后的K_prime_n
  • 优势
    • 编码相对位置:注意力得分自然地依赖于相对距离,这更符合许多序列任务的本质。
    • 良好的外推性:由于其周期性和相对编码的特性,RoPE在处理比训练时更长的序列时,表现出比某些绝对位置编码更好的泛化能力(尽管也有限度,需要配合YARN等技术进一步扩展)。
    • 实现简单:它直接作用于Q和K向量,不需要额外的位置编码层或参数。
  • Qwen3中的应用:Qwen3的稠密模型和MoE模型均使用了RoPE 。报告还提到,在预训练的第三阶段(长上下文阶段),遵循Qwen2.5的做法,使用ABF技术将RoPE的基础频率从10,000增加到1,000,000 ,并引入YARN 和双块注意力(DCA) 以在推理时实现序列长度容量的四倍增加 。

4. RMSNorm (Root Mean Square Layer Normalization) - 均方根层归一化 ⚖️

  • 目的:RMSNorm 是对传统层归一化(Layer Normalization, LN)的一种简化,旨在减少计算量,提高效率,同时保持与LN相当或稍优的性能。
  • 工作原理
    • 传统的LN首先计算输入 x ∈ R d x \in \mathbb{R}^d xRd 的均值 μ = 1 d ∑ x _ i \mu = \frac{1}{d}\sum x\_i μ=d1x_i 和方差 σ 2 = 1 d ∑ ( x _ i − μ ) 2 \sigma^2 = \frac{1}{d}\sum (x\_i - \mu)^2 σ2=d1(x_iμ)2,然后归一化 x ^ _ i = x _ i − μ σ 2 + ϵ \hat{x}\_i = \frac{x\_i - \mu}{\sqrt{\sigma^2 + \epsilon}} x^_i=σ2+ϵ x_iμ,最后进行仿射变换 y _ i = γ x ^ _ i + β y\_i = \gamma \hat{x}\_i + \beta y_i=γx^_i+β
    • RMSNorm移除了均值的计算和减去均值的操作,它只对输入进行重新缩放,缩放因子是输入的均方根(Root Mean Square)。其公式为:
      RMS ( x ) = 1 d ∑ i = 1 d x i 2 \text{RMS}(x) = \sqrt{\frac{1}{d}\sum_{i=1}^d x_i^2} RMS(x)=d1i=1dxi2 output i = x i RMS ( x ) + ϵ ⋅ γ i \text{output}_i = \frac{x_i}{\text{RMS}(x) + \epsilon} \cdot \gamma_i outputi=RMS(x)+ϵxiγi
      其中 ϵ \epsilon ϵ 是一个很小的常数以防止除零。它通常不使用偏移因子 b e t a \\beta beta(或者说 β \beta β 固定为0)。

Mermaid 代码 (LayerNorm 与 RMSNorm 对比示意图):

输入_x_LayerNorm
计算均值_mu_标准差_sigma
x_minus_mu_div_sigma
mul_gamma_plus_beta
LayerNorm_输出
输入_x_RMSNorm
计算均方根_RMS_x
x_div_RMS_x_plus_epsilon
mul_gamma
RMSNorm_输出
  • 优势
    • 计算效率更高:由于不需要计算均值,RMSNorm比LN的计算量更少,尤其是在GPU上可以更快。
    • 性能相当或略好:在许多Transformer的实验中,RMSNorm被证明能够达到与LN相当甚至有时略好的性能,同时具有更好的效率。
  • Qwen3中的应用:Qwen3的稠密模型和MoE模型均采用了RMSNorm,并且是预归一化(Pre-Normalization)的形式。预归一化是指在进入Transformer的子层(如自注意力层或FFN层)之前进行归一化,这通常有助于稳定训练。

5. QK-Norm (Query-Key Normalization) 🛡️

  • 目的:为了进一步稳定大型Transformer模型的训练过程,特别是在注意力机制内部。不稳定的注意力得分可能导致梯度爆炸或消失。
  • 工作原理
    • QK-Norm通常是指在计算注意力得分之前,对查询(Q)和/或键(K)向量进行某种形式的归一化。
    • 报告中提到引入QK-Norm是为了确保Qwen3的稳定训练,并引用了Dehghani et al. (2023) 的工作 “Scaling vision transformers to 22 billion parameters” 。在该论文中,他们对Q和K分别应用了L2归一化,然后再计算点积 。
      Q norm = Q ∥ Q ∥ 2 Q_{\text{norm}} = \frac{Q}{\|Q\|_2} Qnorm=Q2Q K norm = K ∥ K ∥ 2 K_{\text{norm}} = \frac{K}{\|K\|_2} Knorm=K2K AttentionScore ( Q , K ) = Q norm K norm T d k \text{AttentionScore}(Q, K) = \frac{Q_{\text{norm}} K_{\text{norm}}^T}{\sqrt{d_k}} AttentionScore(Q,K)=dk QnormKnormT
      其中 d _ k d\_k d_k 是键向量的维度。

Mermaid 代码 (QK-Norm 在注意力计算中的应用示意图):

原始Q向量
Q进行L2归一化_Q_norm
原始K向量
K进行L2归一化_K_norm
Q_norm
点积_Q_norm_mul_K_T_norm
除以_sqrt_dk
Softmax
与V加权求和
原始V向量
注意力输出
  • 优势
    • 稳定训练:通过限制Q和K向量的范数,可以防止注意力得分过大或过小,从而使得训练过程更加稳定,尤其是在使用较低精度(如bfloat16)进行训练时。
    • 可能改善性能:在一些情况下,这种归一化也有助于模型学习。
  • Qwen3中的应用:Qwen3明确指出在注意力机制中引入了QK-Norm以确保稳定训练 。

6. 移除 QKV-bias (Query-Key-Value bias) ✂️

  • 背景:在Transformer的早期版本或某些实现中,用于生成Q、K、V向量的线性投影层(即 Q = X W _ Q , K = X W _ K , V = X W _ V Q=XW\_Q, K=XW\_K, V=XW\_V Q=XW_Q,K=XW_K,V=XW_V)可能会包含偏置项(bias terms),例如 Q = X W _ Q + b _ Q Q=XW\_Q + b\_Q Q=XW_Q+b_Q
  • 目的:移除这些偏置项 b _ Q , b _ K , b _ V b\_Q, b\_K, b\_V b_Q,b_K,b_V
  • 原因/优势
    • 简化模型/减少参数:虽然减少的参数量不多,但符合模型设计趋向简洁的趋势。
    • 可能提升稳定性或性能:在一些现代Transformer架构的实践中发现,移除这些偏置项并不会损害性能,有时甚至可能因为减少了模型的自由度或改变了优化的动态而略微有益于训练的稳定性或最终性能。层归一化(如RMSNorm)的存在可能使得这些偏置项变得不那么必要。
    • 与归一化层的关系:当使用如LayerNorm或RMSNorm这类对整个激活向量进行操作的归一化层时,线性变换中的偏置项的效果可能会被归一化过程部分抵消或变得冗余。
  • Qwen3中的应用:Qwen3明确提到了移除了在Qwen2中使用的QKV-bias 。这表明团队在Qwen3的设计中,基于实验或业界趋势,认为移除这些偏置项对于模型的性能和稳定性是中性或有利的。

综上所述,Qwen3采用的这些架构技术都是为了在模型的表达能力、训练稳定性、推理效率和整体性能之间取得更好的平衡,这些是当前大模型研发中非常关键的考量因素。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/83995.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

光电效应理论与实验 | 从爱因斯坦光量子假说到普朗克常量测定

注:本文为“光电效应”相关文章合辑。 英文引文,机翻未校。 中文引文,略作重排,未整理去重。 图片清晰度受引文原图所限。 如有内容异常,请看原文。 Photoelectric Effect 光电效应 Discussion dilemma Under the…

Visual Studio 2019/2022:当前不会命中断点,还没有为该文档加载任何符号。

1、打开调试的模块窗口,该窗口一定要在调试状态下才会显示。 vs2019打开调试的模块窗口 2、Visual Studio 2019提示未使用调试信息生成二进制文件 未使用调试信息生成二进制文件 3、然后到debug目录下看下确实未生成CoreCms.Net.Web.WebApi.pdb文件。 那下面的…

打破性能瓶颈:用DBB重参数化模块优化YOLOv8检测头

文章目录 引言DBB 重参数化模块简介DBB 的优势 YOLOv8 检测头的结构分析使用 DBB 模块魔改检测头替换策略代码实现改进后的效果预期 实验与验证总结与展望 引言 在目标检测领域,YOLO 系列算法一直以其高效的检测速度和不错的检测精度受到广泛关注。随着版本的不断更…

如何成为更好的自己?

成为更好的自己是一个持续成长的过程,需要结合自我认知、目标规划和行动力。以下是一些具体建议,帮助你逐步提升: 1. 自我觉察:认识自己 反思与复盘:每天花10分钟记录当天的决策、情绪和行为,分析哪些做得…

免费使用GPU的探索笔记

多种有免费时长的平台 https://www.cnblogs.com/java-note/p/18760386 Kaggle免费使用GPU的探索 https://www.kaggle.com/ 注册Kaggle账号 访问Kaggle官网,使用邮箱注册账号。 发现gpu都是灰色的 返回home,右上角的头像点开 验证手机号 再次code-you…

CSS- 4.2 相对定位(position: relative)

本系列可作为前端学习系列的笔记,代码的运行环境是在HBuilder中,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。 HTML系列文章 已经收录在前端专栏,有需要的宝宝们可以点击前端专栏查看! 点…

如何使用Antv X6使用拖拽布局?

拖拽效果图 拖拽后 布局预览 官方: X6 图编辑引擎 | AntV 安装依赖 # npm npm install antv/x6 --save npm install antv/x6-plugin-dnd --save npm install antv/x6-plugin-export --save需要引入的代码 import { Graph, Shape } from antv/x6; import { Dnd } …

数据库健康监测器(BHM)实战:如何通过 HTML 报告识别潜在问题

在数据库运维中,健康监测是保障系统稳定性与性能的关键环节。通过 HTML 报告,开发者可以直观查看数据库的运行状态、资源使用情况与潜在风险。 本文将围绕 数据库健康监测器(Database Health Monitor, BHM) 的核心功能展开分析,结合 Prometheus + Grafana + MySQL Export…

PCB设计实践(二十四)PCB设计时如何避免EMI

PCB设计中避免电磁干扰(EMI)是一项涉及电路架构、布局布线、材料选择及制造工艺的系统工程。本文从设计原理到工程实践,系统阐述EMI产生机制及综合抑制策略,覆盖高频信号控制、接地优化、屏蔽技术等核心维度,为高密度、…

嵌入式硬件篇---陀螺仪|PID

文章目录 前言1. 硬件准备主控芯片陀螺仪模块电机驱动电源其他2. 硬件连接3. 软件实现步骤(1) MPU6050初始化与数据读取(2) 姿态解算(互补滤波或DMP)(3) PID控制器设计(4) 麦克纳姆轮协同控制4. 主程序逻辑5. 关键优化与调试技巧(1) 传感器校准(2) PID参数整定先调P再调D最后…

【Linux基础I/O】文件调用接口、文件描述符、重定向和缓冲区

【Linux基础I/O一】文件描述符和重定向 1.C语言的文件调用接口2.操作系统的文件调用接口2.1open接口2.2close接口2.3write接口2.4read接口 3.文件描述符fd的本质4.标准输入、输出、错误5.重定向5.1什么是重定向5.2输入重定向和输出重定向5.3系统调用的重定向dup2 6.缓冲区 1.C语…

鸿蒙HarmonyOS 【ArkTS组件】通用属性-背景设置

📑往期推文全新看点(附带最新鸿蒙全栈学习笔记) 嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~ 鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选? 分享一场鸿蒙开发面试经验记录(三面…

【76. 最小覆盖子串】

Leetcode算法练习 笔记记录 76. 最小覆盖子串 76. 最小覆盖子串 滑动窗口的hard题目,思路先找到第一个覆盖的窗口,不断缩小左边界,找到更小的窗口并记录。 思路很简单,写起来就不是一会事了,看题解看了几个h&#xff0…

Spring事务简单操作

什么是事务? 事务是一组操作的集合,是一个不可分割的操作 事务会把所有的操作作为⼀个整体, ⼀起向数据库提交或者是撤销操作请求. 所以这组操作要么同时 成功, 要么同时失败. 事务的操作 分为三步: 1. 开启事start transaction/ begin …

Rust 学习笔记:关于错误处理的练习题

Rust 学习笔记:关于错误处理的练习题 Rust 学习笔记:关于错误处理的练习题想看到回溯,需要把哪个环境变量设置为 1?以下哪一项不是使用 panic 的好理由?以下哪一项最能描述为什么 File::open 返回的是 Result 而不是 O…

MCP 协议传输机制大变身:抛弃 SSE,投入 Streamable HTTP 的怀抱

在技术的江湖里,变革的浪潮总是一波接着一波。最近,模型上下文协议(MCP)的传输机制就搞出了大动静,决定和传统的服务器发送事件(SSE)说拜拜,转身拥抱 Streamable HTTP,这…

138. Copy List with Random Pointer

目录 题目描述 方法一、使用哈希表 方法二、不使用哈希表 题目描述 问题的关键是,random指针指向的是原链表的结点,这个原链表的结点对应哪一个新链表的结点呢?有两种办法。一是用哈希表。另一种是复制原链表的每一个结点,并将…

如何评估开源商城小程序源码的基础防护能力?

在电商行业快速发展的背景下,开源商城已经为更多企业或者开发者的首选方案,不过并不是所有的开源商城源码都能让人放心使用,今天就带大家一起了解下如何评估开源商城小程序源码的基础防护能力,帮助大家更好地筛选安全性高的商城源…

[Vue]跨组件传值

父子组件传值 详情可以看文章 跨组件传值 Vue 的核⼼是单向数据流。所以在父子组件间传值的时候,数据通常是通过属性从⽗组件向⼦组件,⽽⼦组件通过事件将数据传递回⽗组件。多层嵌套场景⼀般使⽤链式传递的⽅式实现provideinject的⽅式适⽤于需要跨层级…

悠易科技智能体矩阵撬动AI全域营销新时代

大数据产业创新服务媒体 ——聚焦数据 改变商业 在数字化浪潮与AI技术的双重驱动下,数据营销正经历前所未有的变革,从传统的全域智能营销,迈向更具颠覆性的AI全域营销时代。 麦肯锡的报告显示,采用AI驱动营销的企业,客…