JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

現代區塊,逐件拆解

RMSNorm、旋轉位置與 SwiGLU 前饋——把 2017 區塊變成 2024 區塊的三個升級。

同一副骨架,更利的器官

每個現代區塊依舊是先混合、再轉換。但最初的零件——絕對位置編碼、LayerNorm、ReLU 前饋——每一個都被悄悄換掉了。這些替換沒有改變運算的形狀;它們改變了每一塊的品質。合起來,這就是為何用同樣資料訓練的 2024 模型,就是比 2020 模型更好。

现代模块保留相同的骨架——归一化、注意力、残差、前馈——但每个部件都被悄然升级。

Transformer 模块示意图:归一化、注意力、残差连接,然后是前馈网络。

RMSNorm:只留縮放

正規化層讓流經深層網路的數值不致漂移得太大或太小。RMSNorm只做能用的最少動作:算出一個 token 向量的均方根並除以它,再對每個維度乘上一個學到的增益(gain)。不減平均、無偏置。這比 LayerNorm 少一次對向量的歸約、每層少幾個參數——每個區塊很小,但乘以 80 個區塊與數兆次前向傳遞,就很實在了。

\text{RMSNorm}(x)=\frac{x}{\sqrt{\dfrac{1}{n}\sum_{i=1}^{n} x_i^2+\epsilon}}\odot g

RMSNorm 做最少的事:把每个向量除以其均方根,再用可学习增益 g 重新缩放——不做减均值。

RoPE:用旋轉,不用相加

注意力對順序視而不見:打亂 token,數學還是一樣,所以必須告訴模型位置。2017 年的把戲是把一個位置編碼向量到每個 token 上。現代的把戲是 RoPE——旋轉位置嵌入(rotary position embeddings)——在算注意力之前,依位置成比例的角度旋轉每個查詢與鍵向量。

2017 年的做法是给每个词嵌入加上固定的位置向量;RoPE 则改为旋转查询和键。

示意图:在词嵌入向量上叠加一个位置编码向量。

美在於自然掉出來的結果:當你旋轉位置 10 的查詢與位置 7 的鍵,它們的內積只取決於,也就是 3。於是注意力天生看的是相對距離、而非絕對索引——正是語言要的。又因為位置烤進角度裡、而非加一次的輸入,你可以拉伸旋轉頻率去處理遠長於訓練長度的序列,這是多數長上下文技巧的基礎。

# RoPE, in spirit: rotate Q and K by an angle tied to position m
q_m = rotate(q, angle = m * freqs)   # query at position m
k_n = rotate(k, angle = n * freqs)   # key   at position n
score = dot(q_m, k_n)                # depends only on (m - n)
旋轉位置讓注意力分數成為相對距離的函數。

SwiGLU:更聰明的前饋

注意力混完 token 後,前饋網路單獨轉換每個 token——而它握著一個模型約三分之二的參數。最初用單一隱藏層配 ReLU。現代模型用 SwiGLU:一個閘控單元,有兩條並行投影,其中一條過平滑的 Swish 激活函數,再與另一條逐元素相乘。這道閘讓網路逐維度學會:要放多少訊號通過。

\text{SwiGLU}(x)=\big(\text{Swish}(xW_1)\odot xV\big)W_2,\quad \text{Swish}(z)=z\,\sigma(z)

SwiGLU 用经过 Swish 激活的另一支对一个线性投影进行门控——三个权重矩阵取代旧的两矩阵 ReLU 前馈。

為何偏偏是這幾個替換、而非另外一百個?因為每一個都通過了在這規模下唯一重要的測試:訓練兩個只差一個零件的模型,留下 loss 較低的那個。RMSNorm、RoPE 與 SwiGLU 是在許多實驗室的這類比拼中勝出的選擇——這也是為何彼此競爭的公司,模型內部看起來如此相像。