Google揭秘大模型不會數r原因:嵌入維度是關鍵,不止分詞器問題

基爾西 發自 凹非寺

量子位 | 公眾號 QbitAI

大模型做奧賽題遊刃有餘,簡單的數數卻屢屢翻車的原因找到了。

Google的一項新研究,發現大模型不會數數的原因,並不是簡單的tokenizer所致,而是沒有足夠的空間來存儲用於計數的向量

數出一段話中某個單詞出現的次數,這樣簡單的任務可以難倒許多大模型,GPT-4o、Claude 3.5也無法倖免。

如果再進一步,想要找到出現頻率最高的一個詞,更是難如登天,即便能蒙對給出的具體數量也是錯的。

有人認為是詞彙的token化導致了大模型看到的「詞」和我們的看法不一致,但論文表明,實際情況並不是這麼簡單。

想數清單詞,嵌入維度要夠大

Transformer的計數能力與其嵌入維度d和詞彙量m(指詞彙表中詞的數量,非序列長度)的關係密切相關。

詳細的原因,就涉及到了Transformer統計詞頻時的機制。

Transformer通過一種特殊的嵌入方式,利用嵌入空間的線性結構,巧妙地將計數問題轉化為了向量加法

具體說是將每個詞映射到一個獨特的正交向量上,在這種表示下,詞頻可以通過對這些正交向量求和來簡單地計算

然而,這種機制的局限性在於,它要求詞彙表中的每個詞都有一個獨立的正交向量表示,因此嵌入維度必須大於詞彙量

嵌入維度不足時,詞向量就無法保持正交性,詞頻的線性疊加也就無法實現了。

此時Transformer要實現計數,可以通過注意力機制(CountAttend)來實現,但需要一個隨序列長度n線性增長的大型「逆轉MLP」層。

具體來說,模型首先通過注意力賦予被查詢詞較大的權重,再利用位置編碼將注意力權重提取到值向量的最後一個元素,這個元素實際記錄了被查詢詞的出現頻率的倒數。

這意味著,模型需要一個大小為O(n)的MLP層來計算1/x函數(x為某個詞出現的次數)

但進一步分析表明,任何常數層ReLU網絡都無法在o(n)的神經元數量下逼近1/x函數

因此,對於固定規模的Transformer,這種方案無法推廣到任意長度的序列。當序列長度超出訓練集長度時,模型的計數能力會急劇惡化。

長度非主要因素,詞彙表中數量是關鍵

為了驗證這一結論,作者一共進行了兩個實驗。

第一個實驗,是在一個從頭開始訓練的Transformer模型上進行的,具體有關參數如下:

  • 使用一個由兩個Transformer層、四個注意力頭組成的標準模型;

  • 嵌入維度d的取值範圍為8到128;

  • 對每個固定的d,詞彙量m從5到150變化,分別測試20個不同的值;

  • 模型使用Adam優化器從零開始訓練,批量大小為16,學習率為10^-4,訓練10萬步。

訓練和評測數據通過隨機采樣生成。首先從大小為m的詞彙表中均勻采樣n個詞,構成一個長度為n的序列。

序列長度n設置為n=10m,平均每個詞出現的次數固定為10次,一共使用了1600個樣本進行測試。

作者發現,隨著詞彙量的增加,模型的計數準確率呈階梯狀下降,臨界點恰好出現在詞彙量超過嵌入維度的時刻

為了進一步量化模型的計數能力,作者定義了一個指標m_thr,表示模型的計數準確率下降到80%時的臨界詞彙量。

直觀地說,m_thr反映了在給定嵌入維度下,模型可以「承受」的最大詞彙量,m_thr越大說明模型的計數能力越強。

結果顯示,對於計數(QC)和找出最高頻詞(MFC)的任務,m_thr都隨嵌入維度d的增大而近似線性增長

第二個實驗則是在預訓練的Gemini 1.5模型上開展,在這個實驗中,作者更關注詞彙量對計數能力的影響。

他們設計了一系列計數任務,每個任務使用不同大小的詞彙表,並把每個詞在序列中出現的平均次數固定。

這意味著,在實驗組當中,詞彙量越大,序列長度也就越長。

作為對照,作者還設置了一個「Binary Baseline」,詞彙表中只有固定為兩個詞,但序列長度與主實驗組相同。

這樣一來,就可以判斷出帶來模型計數誤差的究竟是詞彙量還是序列長度。

實驗結果顯示,隨著詞彙量的增加,Gemini 1.5在計數任務上的平均絕對誤差顯著上升,而「Binary Baseline」的誤差要低得多。

這表明,詞彙量的增加,而非序列長度的增長,是導致大模型計數能力下降的主要原因。

不過作者也表示,雖然這項研究一定程度上劃定了大模型計數能力的上下界,但這些界限還不夠緊致,距離理想的結果還有一定差距。

同時,作者也沒有探究增加Transformer的層數是否會改變這一結論,需要未來開發新的技術工具才能進一步驗證。

論文地址:

https://arxiv.org/abs/2407.15160