詳細介紹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)
分組查詢注意力 (Grouped-Query Attention - GQA)
多查詢注意力 (Multi-Query Attention - MQA)
- 優勢:
- 減少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 x∈mathbbRd,它通常通過三個權重矩陣 W , V ∈ R d × d _ m W, V \in \mathbb{R}^{d \times d\_m} W,V∈Rd×d_m 和 W _ 2 ∈ R d _ m × d W\_2 \in \mathbb{R}^{d\_m \times d} W_2∈Rd_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+e?z)?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層流程示意圖):
- 優勢:
- 更強的表達能力:門控機制允許網絡根據輸入動態地調整激活的強度,從而捕獲更復雜的模式。
- 更好的性能:在許多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_d?1]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} Rm?xj?=(cos(mθj?)sin(mθj?)??sin(mθj?)cos(mθj?)?)(x2j?x2j+1??)
其中 m m m 是token的絕對位置, t h e t a _ j = 10000 ? 2 j / d \\theta\_j = 10000^{-2j/d} theta_j=10000?2j/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}) ?Rm?q,Rn?k?=?(j=0∑d/2?1?(q2j?+iq2j+1?)(k2j??ik2j+1?)ei(m?n)θj?)
這個內積僅取決于它們的相對位置 ( m ? n ) (m-n) (m?n) 和它們原始的內容。
Mermaid 代碼 (RoPE 位置編碼示意圖):
- 優勢:
- 編碼相對位置:注意力得分自然地依賴于相對距離,這更符合許多序列任務的本質。
- 良好的外推性:由于其周期性和相對編碼的特性,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 x∈Rd 的均值 μ = 1 d ∑ x _ i \mu = \frac{1}{d}\sum x\_i μ=d1?∑x_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)=d1?i=1∑d?xi2?? 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 對比示意圖):
- 優勢:
- 計算效率更高:由于不需要計算均值,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?=∥Q∥2?Q? K norm = K ∥ K ∥ 2 K_{\text{norm}} = \frac{K}{\|K\|_2} Knorm?=∥K∥2?K? 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??Qnorm?KnormT??
其中 d _ k d\_k d_k 是鍵向量的維度。
Mermaid 代碼 (QK-Norm 在注意力計算中的應用示意圖):
- 優勢:
- 穩定訓練:通過限制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采用的這些架構技術都是為了在模型的表達能力、訓練穩定性、推理效率和整體性能之間取得更好的平衡,這些是當前大模型研發中非常關鍵的考量因素。