注意力搬運資訊;前饋層思考它
注意力純粹是混合運算——它在詞之間重新洗牌既有資訊,但不做任何針對單一詞的推理。每個注意力步驟之後,接著是一個前饋網路(feedforward network)(常叫 MLP),對每個詞的向量獨立施作。它把向量擴張到約四倍大,套上一個非線性激活,再投影回原本的大小。
那層肥厚的隱藏層,正是模型大量儲存知識的所在。可解釋性研究指出,前饋層的行為像一個巨大的鍵值記憶:輸入裡的某個模式(比如「法國的首都是」)觸發特定的隱藏單元,把「巴黎」寫進向量。注意力決定要看什麼;前饋層決定看了之後要怎麼想。
多层前馈网络示意图:输入层、一个很宽的隐藏层和带加权连接的输出层。
殘差流:一條共用的高速公路
這裡是整個架構最重要、卻最容易被忽略的結構性點子。注意力和前饋層不是取代詞向量——而是加到它上面。每個部件讀取目前的向量,算出一個更新,再把更新加回去。那個一路直直穿過模型、除了這些加法外都不被碰的滾動向量,就是殘差流(residual stream)。
每个组件都把自己的修正加回到词向量上,而不是替换它——这就是“读取—更新—相加”的残差流。
這種讀取—更新—相加的觀點,也是現代可解釋性看待模型的方式:每個頭、每個前饋層都把一份貢獻寫進共用的串流,模型最終的預測就是所有這些貢獻的總和。
正規化讓數字保持理智
一個更新接一個更新地加到殘差流上,有風險讓數字漂移到差距極大的尺度,使訓練不穩。層正規化(layer normalization)的解法,是在向量進入注意力或前饋層之前,把每個詞的向量重新縮放到一致的大小。它不改變資訊的方向,只改音量——像一個自動增益控制。
多數較新的模型用一個更輕、更省的變體,叫 RMSNorm,並把正規化放在每個部件之前(pre-norm)而非之後,因為這種排法在深層時訓練穩定得多。確切的擺放位置是個影響很大的小選擇——擺錯了,一個 70 層的模型根本不會收斂。
RMSNorm 用向量的均方根对其重新缩放,使更新保持在合理的尺度——比完整的层归一化更省算力。
告訴模型東西是按什麼順序來的
有個我們略過的細節:注意力是順序盲的。因為它平行地把每個詞和其他每個詞比較,交換兩個詞並不會給模型任何「有東西移動了」的訊號——「狗咬人」和「人咬狗」在它看來一模一樣。詞序顯然重要,所以我們得明確地把它注入。這個注入就是位置編碼(positional encoding)。
早期的 transformer 在每個詞的向量上加一個固定的波狀訊號,標記它的位置。多數現今的 LLM 改用旋轉位置嵌入(rotary position embedding, RoPE),它把查詢和鍵向量旋轉一個與位置成比例的角度。優雅的回報是:當兩個詞的查詢和鍵被比較時,旋轉讓分數只取決於它們的相對距離,所以模型天生就把「相隔五個詞」在長文件的任何地方都一視同仁地處理。
位置编码向量加到词嵌入向量上的示意图。