mobile wallpaper 1
1127 字
3 分钟
Qwen 2 Tech Report
2026-05-31

Qwen 2 Tech Report 链接

Keywords:DCA、YARN、MoE

和 Llama 3 一样,由于篇幅较长的缘故,总体的整理可见知乎链接,这里只具体展开一些我认为比较重要的方法,是在我之前的 Llama 3 笔记中没出现过的。

DCA#

由于计算复杂度与序列长度 n 成平方关系,当 n 较大,一次全局 attention 的成本很高。
双块注意力 (Dual Chunk Attention) 把超长序列切成长度固定的块 (chunk) 来做注意力计算,分别计算块内注意力和块间注意力,再进行融合。
不过原论文的引用量很少,似乎也不是主流 LLM 用的方法,仅大致了解一下。

YARN#

为了支持更长的上下文,RoPE 发展出很多变体,YARN 是其中之一。
RoPE 在应对更长的上下文时,由于频率 θd\theta_d 在预训练时已经固定,不支持动态调整,因此当序列长度超出预训练范围时,旋转编码出现混乱。 YARN 基于 NTK-by-parts,首先先介绍 NTK-by-parts。
根据 NTK 理论,模型对高频分量的分布敏感,因此对足够高频的分量应该尽量保持其频率不变,需要完全的外推。NTK-by-parts 就是基于这样的思想提出的,对于足够低频的分量做完全的内插,对足够高频的分量做完全的外推,而对中间部分的分量,既外推也内插。
通过序列长度与波长的比值 r(d)=Lλdr(d)=\dfrac{L}{\lambda_d} 来判断分量是否足够高频或足够低频。当 r(d)r(d) 小于一个下限 α\alpha 时完全内插。而当这个值超过一个上限 β\beta 时,需要完全外推。
对于中间部分的分量,我们可以使用一个线性插值函数来确定外推的程度。用 γ(d)\gamma(d) 来表示外推的程度,我们可以得到 NTK-by-parts 的具体形式。

γ(d)={1,if r(d)>βr(d)αβα,if αr(d)<β0,if r(d)<α \gamma(d)=\begin{cases} 1, & \text{if } r(d) > \beta \\ \dfrac{r(d) - \alpha}{\beta - \alpha}, & \text{if } \alpha \leq r(d) < \beta \\ 0, & \text{if } r(d) < \alpha \end{cases}

而对应的旋转角度函数为

fNTKb(m,d)=g(m)hNTKb(θd) f_{NTK-b}(m, d) = g(m)h_{NTK-b}(\theta_d)

其中

hNTKb(θd)=(1γ(rd))θds+γ(rd)θd h_{NTK-b}(\theta_d) = (1-\gamma(r_d))\dfrac{\theta_d}{s} + \gamma(r_d)\theta_d

在实际应用时,α\alphaβ\beta 的取值是一个与预训练模型有关的超参,需要实验确定,可以参考 DeepseekV3 的取值 α=1\alpha=1β=32\beta=32
YARN 则在此基础上加入了 Attention Scaling 机制,由于线性内插会改变旋转向量转动的幅度,原来距离较远的 q,k 点积由于旋转幅度变小,他们的点积结果会增大,YARN 会额外对 attention score 除以一个常数 tt,来使得 Softmax 操作不那么“锐化”。
对这个常数t的选择给出了一个经验公式:1t=0.1ln(s)+1\sqrt{\dfrac{1}{t}} = 0.1ln(s)+1,这里的 ss 是上下文长度扩展的倍数。
关于其他变体的介绍可见知乎链接

MoE#

MoE 使用多个 Expert FFN 替代 Transformer 中原本的单个 FFN。每个 Expert 都是一个独立的 FFN,输入 Token 首先经过路由器 (Router),由路由器决定将其分配给哪些 Expert 进行计算。
当前主流 MoE 大模型普遍采用 Top-k 路由,即根据 Router 输出的权重,仅选择权重最高的 k 个 Expert 参与计算,并将其输出按路由权重加权融合。
MoE 的优势在于其更好的 Scaling 能力,可以在较小计算开销增长的情况下显著提升模型参数规模和容量。
Qwen 2 采用的是细粒度专家,创建更小规模的专家,并同时激活更多的专家,以提供更丰富的专家组合。通过利用这些细粒度专家,Qwen2 MoE实现了更为多样化和动态的专家使用,从而提升了整体性能和适应性。
当然以上只是 MoE 机制的简单理解,围绕 MoE 还有很多后续的优化,之后我可能需要更深入了解。

RMSNorm#

不同于 LayerNorm,RMSNorm 直接用均方根 (RMS) 进行归一化,而不先减去均值,公式分别如下:

RMSNorm(xi)=xi1ni=1nxi2+ϵγi\text{RMSNorm}(x_i) = \frac{x_i}{\sqrt{\frac{1}{n}\sum_{i=1}^{n} x_i^2 + \epsilon} } \cdot \gamma_i
LayerNorm(xi)=xiμσγi+βi\text{LayerNorm}(x_i) = \frac{x_i - \mu}{\sigma} \cdot \gamma_i + \beta_i

RMSNorm 在计算上更加简单,且 Attention 和 FFN 对均值并不敏感,去掉均值约束通常是冗余的,因此现在主流 LLM 更多采用 RMSNorm。
实际上 Llama 3 也采用了 RMSNorm,但是论文中没有明确指出。

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Qwen 2 Tech Report
https://kisaragi-irona.top/posts/paper-reading/qwen-2/blog/
作者
Kisaragi
发布于
2026-05-31
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录