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

區塊的其餘部分:前饋、殘差、正規化與位置

注意力把詞混在一起——但四個比較安靜的部件負責思考、維持訓練穩定,並告訴模型詞的順序。

注意力搬運資訊;前饋層思考它

注意力純粹是混合運算——它在詞之間重新洗牌既有資訊,但不做任何針對單一詞的推理。每個注意力步驟之後,接著是一個前饋網路(feedforward network)(常叫 MLP),對每個詞的向量獨立施作。它把向量擴張到約四倍大,套上一個非線性激活,再投影回原本的大小。

那層肥厚的隱藏層,正是模型大量儲存知識的所在。可解釋性研究指出,前饋層的行為像一個巨大的鍵值記憶:輸入裡的某個模式(比如「法國的首都是」)觸發特定的隱藏單元,把「巴黎」寫進向量。注意力決定要看什麼;前饋層決定看了之後要怎麼想

前馈网络就是一个小型多层网络:一个很宽的隐藏层负责逐词推理,并存储着模型的大部分知识。

多层前馈网络示意图:输入层、一个很宽的隐藏层和带加权连接的输出层。

殘差流:一條共用的高速公路

這裡是整個架構最重要、卻最容易被忽略的結構性點子。注意力和前饋層不是取代詞向量——而是加到它上面。每個部件讀取目前的向量,算出一個更新,再把更新加回去。那個一路直直穿過模型、除了這些加法外都不被碰的滾動向量,就是殘差流(residual stream)

\mathbf{x}_{\text{out}} = \mathbf{x}_{\text{in}} + \operatorname{Sublayer}(\mathbf{x}_{\text{in}})

每个组件都把自己的修正加回到词向量上,而不是替换它——这就是“读取—更新—相加”的残差流。

這種讀取—更新—相加的觀點,也是現代可解釋性看待模型的方式:每個頭、每個前饋層都把一份貢獻寫進共用的串流,模型最終的預測就是所有這些貢獻的總和。

正規化讓數字保持理智

一個更新接一個更新地加到殘差流上,有風險讓數字漂移到差距極大的尺度,使訓練不穩。層正規化(layer normalization)的解法,是在向量進入注意力或前饋層之前,把每個詞的向量重新縮放到一致的大小。它不改變資訊的方向,只改音量——像一個自動增益控制。

多數較新的模型用一個更輕、更省的變體,叫 RMSNorm,並把正規化放在每個部件之前(pre-norm)而非之後,因為這種排法在深層時訓練穩定得多。確切的擺放位置是個影響很大的小選擇——擺錯了,一個 70 層的模型根本不會收斂。

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

RMSNorm 用向量的均方根对其重新缩放,使更新保持在合理的尺度——比完整的层归一化更省算力。

告訴模型東西是按什麼順序來的

有個我們略過的細節:注意力是順序盲的。因為它平行地把每個詞和其他每個詞比較,交換兩個詞並不會給模型任何「有東西移動了」的訊號——「狗咬人」「人咬狗」在它看來一模一樣。詞序顯然重要,所以我們得明確地把它注入。這個注入就是位置編碼(positional encoding)

早期的 transformer 在每個詞的向量上加一個固定的波狀訊號,標記它的位置。多數現今的 LLM 改用旋轉位置嵌入(rotary position embedding, RoPE),它把查詢和鍵向量旋轉一個與位置成比例的角度。優雅的回報是:當兩個詞的查詢和鍵被比較時,旋轉讓分數只取決於它們的相對距離,所以模型天生就把「相隔五個詞」在長文件的任何地方都一視同仁地處理。

把位置信号加到每个词的嵌入上,让对顺序无感的注意力知道每个词所在的位置。

位置编码向量加到词嵌入向量上的示意图。