自迴歸解碼(autoregressive decoding)
/ aw-toh-ree-GRES-iv dee-KOH-ding /
自迴歸解碼,是大多數語言模型實際寫字的方式:一次一個詞元,每個新詞元都基於迄今寫下的一切來挑選,包括模型自己之前的輸出。「自—迴歸」不過是說模型在自己身上做迴歸——它把自己的輸出回餵進去,當作下一步的輸入。這恰如逐字逐詞地遣詞造句,你每挑一個詞,就把接下來合情合理能出現的東西收窄、塑形了一分。
這個循環是機械的。模型看著提示詞加上它已生成的部分,產出一個關於下一個可能詞元的機率分布,挑出一個(貪心地,或帶些隨機性地採樣),把它接上去,再重複——直到它吐出一個特殊的停止詞元,或撞上長度上限。這正是聊天機器人從左到右串流回覆的原因,也是 KV 快取存在的原因:每一步都需要所有先前詞元的鍵與值,把它們快取起來,才讓這個循環保持快速。
由此引出兩條誠實的後果。其一,生成本質上是順序的:第一百個詞元在第九十九個存在之前無法產出,所以這種一步接一步的本性,是大模型令人覺得慢的根本原因之一,也是為何那麼多心血都花在給它提速上。其二,更要緊的是,模型永遠只在預測一個貌似合理的下一個詞元——它對整個答案沒有計劃,對真相也沒有核對。一個靠前的錯誤詞元,就能把回覆的其餘部分自信地帶上一條歧路,這正是流暢的模型為何能如此順滑地說出假話的一個根源。「聽上去對」與「確實對」,是由同一套機制產出的。
給定「法國的首都是」,模型給「巴黎」很高的機率並選中它,接著面對「法國的首都是巴黎」,它多半選一個句號並停下。但若某個靠前的詞元跑了偏,模型會一本正經地把那個錯誤的開頭繼續延展成一段流暢而自信的假話。
一個詞元餵出下一個——而一個靠前的錯步,鮮少自我糾正。
自迴歸模型預測的是下一個貌似合理的詞元,而非真相,且在動筆前對整個答案沒有計劃。這一條事實同時解釋了:它們為何能在聽上去無比流暢的同時出錯,以及它們為何慢——每個詞元都得等它前面那個。