編碼器與解碼器堆(encoder and decoder stacks)
/ en-KOH-der and dee-KOH-der staks /
Transformer 由兩類做互補工作的層堆搭成。編碼器堆一次讀入整段輸入,為它建立起豐富的、感知上下文的理解——每個詞元都能雙向地看見其他每個詞元。解碼器堆則一次生成一個詞元的輸出,而關鍵在於:它產出的每個詞元只能看見排在它前面的詞元,絕看不到未來,從而讓生成對「目前已知什麼」保持誠實。
最初的 2017 設計把兩者合在一起做翻譯:編碼器把源句消化成一組滿載上下文的向量,解碼器在逐詞寫出譯文時,通過交叉注意力伸回那些編碼器向量,以忠實於原文。但這兩半也能分開過活。僅編碼器模型(BERT 家族)擅長理解類任務——分類、檢索、就給定文字回答問題——因為它雙向地把一切讀盡。僅解碼器模型(GPT 家族,以及當今的聊天機器人)則是為生成而造,因而在開放式寫作上獨佔鰲頭。
知道一個模型用的是哪種堆,便能看出它大致是做什麼用的。僅編碼器模型能讀、能判斷,卻無法自由生成長文;僅解碼器模型能流暢生成,但它處理輸入時,用的也是那同一副單向的、面向生成的鏡片。當今的大語言模型壓倒性地都是僅解碼器的——這是對最初「兩半俱全」設計的一個顯著偏移——因為這單一的堆,對於驅動聊天助手的「預測下一個詞元」目標,竟擴展得極為漂亮。
一個翻譯模型:編碼器一次讀完「我餓了」,建起上下文向量;解碼器一次寫一個詞地寫出「J'ai faim」,每個新詞既注意自己已寫出的部分,又通過交叉注意力,注意編碼器對那句中文的理解。
編碼器理解整段輸入;解碼器從左到右寫出輸出。
「Transformer」常被寬泛地用來指「僅解碼器的聊天機器人」,但最初的設計是兩半俱全的,許多有用的模型也是僅編碼器的。該用哪種堆,取決於任務:讀與判斷偏愛編碼器,開放式生成偏愛解碼器。