昨天我們聊到,幾乎所有現代 LLM 都選擇了 Decoder-Only 架構,利用「猜下一個字、再黏回句尾當下一輪的 Input」的自回歸迴圈,逐一把回答輸出。今天我們就來更深入看一下 Decoder 的內部吧。
其實這是在前幾天忘記講的內容,文字轉成 Embedding 向量後,在送進模型前還少了一項資訊:「順序」。神經網絡的矩陣運算原本是沒有 Input 前後順序的概念的。如果只看 Embedding,對模型來說 "我 吃 魚" 跟 "魚 吃 我" 這兩句話查出來的向量集合完全一模一樣。不給順序標記的話,模型根本分不清誰在前誰在後(雖然這句其實兩個都說得通 XDD)。
因此,模型必須引入位置編碼(Position Encoding):
X = Embedding + PosEmbedding)。這裡的位置向量有多種產生方式,有的是透過特定數學公式算出來(例如正弦餘弦),有的是讓模型自己學習。缺點是一旦文章長度超過訓練時看過的長度上限,模型就不知道那些沒見過的位置該怎麼處理。有看出跟第一個方法的差異嗎?第一個方法只有「絕對位置」資訊,過程中模型有沒有參考相對位置的資訊其實我們是不得而知的;在第二個方法中,由於作者認為在分析一句話的時候更在乎 Token 之間的「相對距離」,所以將相對位置的資訊在 Attention 階段時被計算出來,因此模型就有了「相對位置」的概念。但我只是打打嘴炮而已,有興趣的人,我把 RoPE論文 放在這裡了 XDD
“Specifically, the proposed RoPE encodes the absolute position with a rotation matrix and meanwhile incorporates the explicit relative position dependency in self-attention formulation.”
現代大模型的堆疊動輒好幾十、百層 Decoder Block。但無論疊得多深,每一層 Block 的內部結構沒有太大差異,主要由兩大部分串聯而成:

這兩大部分的目的非常明確:一個負責「橫向溝通」,一個負責「縱向分析」。
再問:為什麼做特徵融合時,輸出的向量中,每個 Head 的資訊需要有交流過?
因為對照上面的圖,Attention 算完的結果是要做一個 Residual Connection,為什麼這麼做下一節會提到。但簡單來說就是要與原本一開始的 Input 向量做相加,但原本向量資訊都是混在一起的,沒有分什麼 Head,所以在這裡我們也要對齊向量的意義,把每個 Head 的向量結果做資訊上的整合。(其實這個「向量意義」的概念非常重要,很常在做實驗時,把幾個向量做運算,但其實根本不太知道它們各自代表著什麼意思,這時實驗結果就很容易不如預期。)
f(x) = max(0, x),也就是大名鼎鼎的 ReLU(Rectified Linear Unit)。在架構圖中,不論是 Attention 還是 FFN,都搭配了兩個元件:RMSNorm 與 Residual Connection。它們是深層網絡能夠穩定運作的關鍵:
RMSNorm(均方根正規化)
Residual Connection(殘差連接)
根據這幾天的螺旋式學習法,接下來要準備進入到 Multi-Head Attention 元件裡,看一下 Token 跟 Token 之間是用什麼手段計算彼此關係的。
明天高機率會是燒腦的,如果有興趣的話,明天見~