ChatGPT危了!「注意力公式」8年神秘bug首曝光,Transformer模型恐大受沖擊
「注意力公式」中存在了8年的bug,竟被國(guó)外小哥發(fā)現(xiàn)了?
瞬間,這個(gè)話題就在網(wǎng)上炸開了鍋。
現(xiàn)在基于Transformer打造的主流模型,GPT-4、Lalma 2、PaLM等都將受到影響。
Eppo初創(chuàng)公司的工程師Evan Miller今天在博客中介紹了這一重大發(fā)現(xiàn),并表示:
研究人員上個(gè)月分離了bug——但是他們誤失了一個(gè)簡(jiǎn)單的解決方案,「為什么LLM設(shè)計(jì)人員應(yīng)該停止使用Softmax?」
圖片
那么,究竟是什么bug,能夠暗藏8年?
作者在博文中,引用了維特根斯坦別有蘊(yùn)意的一句話,「對(duì)于無(wú)法言說之事,必須保持沉默」。
圖片
注意力是Off By One
這篇博文標(biāo)題為「注意力是Off By One」。
圖片
你能看到這個(gè)公式的差一錯(cuò)誤嗎?
圖片
要知道,注意力公式是現(xiàn)代人工智能的核心等式,但其中有一個(gè)bug在上周讓作者Evan Miller抓狂。
由此,Miller決定就這個(gè)漏洞和修復(fù)建議寫篇博文。
文章中,他解釋了當(dāng)前一代AI模型是如何在一個(gè)關(guān)鍵的地方出現(xiàn)差一錯(cuò)誤,這使得每個(gè)人的Transformer模型都難以壓縮和部署。
不過,作者強(qiáng)調(diào)這只是一篇觀點(diǎn)文章,但如果網(wǎng)上有人想做一些實(shí)驗(yàn)來(lái)證明這是對(duì)的,可以一起合作驗(yàn)證。
全與「離群值」有關(guān)
首先,先談?wù)劄槭裁床钜诲e(cuò)誤很重要。ChatGPT工作得很好,有什么問題嗎?
作者第一次發(fā)現(xiàn)了不對(duì)勁的地方,是在忙自己的事情和閱讀量化研究論文時(shí)發(fā)現(xiàn),這是一種通過LLM Edgers將大型模型壓縮到Mac Minis、Rasberry Pis,以及解開家用恒溫器的技術(shù)。
在AI領(lǐng)域,每個(gè)人都會(huì)受到RAM限制。
所以你使用的RAM越少,你就可以做的更多酷炫的事情,無(wú)論是在云端還是在邊緣設(shè)備上。
LLM有數(shù)十億的權(quán)重,如果我們可以讓這些權(quán)重縮小,我們可以寫出更好的十四行詩(shī),或者剽竊更優(yōu)秀的文章,又或者加速世界末日,這都取決于你使用語(yǔ)言的個(gè)人動(dòng)機(jī)。
RAM存儲(chǔ)信息,這聽起來(lái)像是一種同義反復(fù)。信息是負(fù)對(duì)數(shù)概率,即我們需要多少位來(lái)存儲(chǔ)事物。
如果一串?dāng)?shù)字流可預(yù)測(cè),例如始終限制在一個(gè)有限的范圍內(nèi),我們需要的比特?cái)?shù)就會(huì)少一些。
如果一個(gè)數(shù)字流不可預(yù)測(cè),比如偶爾出現(xiàn)一個(gè)超大數(shù)字,我們需要更多的二進(jìn)制數(shù)字來(lái)編碼這個(gè)龐然大物。
這就是在LLM中正在發(fā)生的事情(出于目前僅能部分理解的原因)。
Transformer模型包含這些離群權(quán)重(outlier weights),并且產(chǎn)生了相差一個(gè)數(shù)量級(jí)的巨大激活。
但是沒有人能夠消除它們。這些megalodons(研究命令行工具)看起來(lái)對(duì)這些模型的運(yùn)行至關(guān)重要。
但是它們的存在與我們?cè)跇?gòu)建優(yōu)秀模型之前,所了解的關(guān)于神經(jīng)網(wǎng)絡(luò)的一切知識(shí)相矛盾。
已經(jīng)有很多論文討論這些離群值(outlier),人們已經(jīng)想出了各種各樣的位燃燒方案,以更少的1和0來(lái)進(jìn)行編碼。
因?yàn)楝F(xiàn)在,我們使用普通的比例和偏差整數(shù)量化得到的性能退化非常嚴(yán)重。
關(guān)于所有這些的最佳分析來(lái)自高通AI研究院的一篇論文:「Quantizable Transformers: Removing Outliers by Helping Attention Heads Do Nothing」。
圖片
論文地址:https://arxiv.org/pdf/2306.12929.pdf
作者們將這些離群值的存在,追溯到注意力機(jī)制的softmax函數(shù)。這個(gè)看似無(wú)辜的指數(shù)函數(shù),沒有人發(fā)現(xiàn)其能夠產(chǎn)生如此嚴(yán)重的峰度異常。
而研究人員也就差點(diǎn)發(fā)現(xiàn)這個(gè)邊界錯(cuò)誤。
對(duì)此,作者表示,高通研究人員暫時(shí)還未回復(fù)自己電子郵件,但必須通過這種方式呼吁國(guó)際學(xué)者社區(qū)。如果你讀了這篇鏈接的論文,就忽略他們的建議吧。
修剪后的softmax帶有一個(gè)旋轉(zhuǎn)式的零梯度,他們的門控注意力提議雖然可行,但是為了解決這只是一個(gè)增量的失敗而引入了數(shù)百萬(wàn)個(gè)新的參數(shù)。
在作者看來(lái),這里有一個(gè)簡(jiǎn)單而明顯的解決方案,就自己閱讀的所有內(nèi)容中,還沒有人想過去嘗試。
接下來(lái),一起談?wù)剆oftmax函數(shù),以及為什么在處理注意力時(shí),它并非最適合的工具。
Softmax出現(xiàn)的問題
為了解釋這個(gè)錯(cuò)誤,你真的需要理解注意力機(jī)制的目標(biāo)。
這么做個(gè)類比吧,大多數(shù)數(shù)值錯(cuò)誤都是程序員錯(cuò)誤地實(shí)現(xiàn)方程。
然而,當(dāng)你處理的不是錯(cuò)誤的代碼,而是錯(cuò)誤的數(shù)學(xué)時(shí),你需要理解這個(gè)等式來(lái)自哪里,以及你應(yīng)該怎么做,才有可能修復(fù)它。
對(duì)此,作者不得不閱讀了大約50篇arXiV論文來(lái)理解所有這些。
首先,從輸入嵌入開始理解,這是一個(gè)浮點(diǎn)向量,它表示輸入字符串中的一個(gè)單詞。
這個(gè)向量似乎每年都在變高,比如,最近的LLaMA 2模型從Meta使用了一個(gè)長(zhǎng)度為3,204嵌入向量。
半精度浮點(diǎn)數(shù)計(jì)算為6KB+,僅僅是為了表示詞匯表中的一個(gè)單詞,而詞匯表通常包含30,000——50,000個(gè)條目。
現(xiàn)在,如果你是節(jié)省內(nèi)存的C程序員,你可能會(huì)想,為什么這些AI goober要使用6KB,來(lái)表示應(yīng)該只需要2字節(jié)就能搞定的事情?
如果他們的詞匯表小于,我們只需要16位就能表示一個(gè)條目,對(duì)吧?
這正是Transformer實(shí)際在做的事情:它將輸入向量轉(zhuǎn)換為相同大小的輸出向量,這個(gè)最終的6KB輸出向量需要編碼絕對(duì)一切,以預(yù)測(cè)當(dāng)前詞語(yǔ)之后的詞語(yǔ)。
每一層Transformer的工作就是,實(shí)實(shí)在在地向原始的單詞向量添加信息。
這就是殘差(née skip)連接的作用:所有的注意力機(jī)制只是向原始的兩個(gè)字節(jié)信息添加補(bǔ)充材料,分析更大的上下文以指示。
例如,單詞「pupil」指的是學(xué)生,而不是你的瞳孔。重復(fù)幾十次注意力機(jī)制,你就掌握了英語(yǔ)和所有豐富的內(nèi)容。
現(xiàn)在,Transformer 的最后一步是將這個(gè)輸出向量與一個(gè)矩形矩陣相乘,并將結(jié)果的詞匯長(zhǎng)度向量塞入softmax,將那些指數(shù)輸出視為下一個(gè)詞的概率。
這是合理的,但每個(gè)人都知道它并非是完全正確的。
因?yàn)闆]有模型將那些輸出概率視為正確,與之相反,每個(gè)實(shí)現(xiàn)和其他模型都使用采樣機(jī)制來(lái)掩蓋softmax過度表示低概率的事實(shí)。
這一切都很好,也可行。
在輸出步驟中的softmax為詞匯表中的每個(gè)詞提供了梯度,這是一個(gè)合理的選擇,直到有更好的詞出現(xiàn)。
但作者想要辯論的是,Transformer的輸出softmax與注意力機(jī)制的內(nèi)部softmax有著不同的目的,我們都應(yīng)該去除后者,或者至少用一些方便的東西支撐起它的分母。
那么什么是softmax?
softmax最初起源于統(tǒng)計(jì)力學(xué)中,用于基于能級(jí)預(yù)測(cè)狀態(tài)分布:
然后經(jīng)濟(jì)學(xué)家意識(shí)到,如果人們的線性效用函數(shù)中的噪聲項(xiàng)恰好遵循Gumbel分布,那么某人選擇某個(gè)項(xiàng)目的概率將與效用輸入的指數(shù)成比例:
而這也使得softmax在多項(xiàng)式邏輯函數(shù)中有了用武之地。
可以說,softmax是一種將實(shí)數(shù)映射為總和為1的概率的「作弊代碼」。
在物理學(xué)中,它效果很好;在經(jīng)濟(jì)學(xué)中,它有點(diǎn)虛假,但是一旦它進(jìn)入機(jī)器學(xué)習(xí)領(lǐng)域,每當(dāng)涉及到離散選擇時(shí),它似乎就成為一種行之有效的東西。
這就是softmax的核心機(jī)制:它強(qiáng)制在競(jìng)爭(zhēng)的替代方案中進(jìn)行選擇,無(wú)論是粒子選擇能級(jí)狀態(tài),還是消費(fèi)者選擇汽車。
也就是說,如果softmax機(jī)制根本不想做出任何選擇,softmax將需要進(jìn)行修改,否則我們預(yù)期softmax在遇到實(shí)際數(shù)據(jù)時(shí)會(huì)產(chǎn)生扭曲。
就LLM而言,其中一個(gè)扭曲是對(duì)非語(yǔ)義token(逗號(hào)等)進(jìn)行重點(diǎn)加權(quán),而那些權(quán)重也就變成了難以壓縮的異常值。
對(duì)此,高通AI研究人員發(fā)現(xiàn),LLM中97%以上的異常激活發(fā)生在空白和標(biāo)點(diǎn)位置。
哪里會(huì)出錯(cuò)?
接下來(lái),讓我們深入研究softmax在注意力中的使用,并看看它在哪里出錯(cuò)了:
分解一下:在僅解碼器模型中(即ChatGPT之后的所有模型),??、??和??都來(lái)自同一輸入序列。
雖然它們并不相同,因?yàn)樗鼈冊(cè)谕局斜灰圆煌姆绞酵队?,但在每一層中,它們都始于相同的已注釋(已添加到)嵌入向量?/span>
現(xiàn)在:????^??正在尋找不同位置的token(嵌入)向量之間的相關(guān)性,實(shí)際上正在構(gòu)建一個(gè)相關(guān)性(點(diǎn)積按1/√??縮放)值的方陣,其中每列和行對(duì)應(yīng)一個(gè)token位置。
然后,這個(gè)方陣的每一行都經(jīng)過softmax處理,得到的概率用作??矩陣中的值向量的混合函數(shù)。概率混合后的??矩陣被加到輸入向量中,并將其傳遞到神經(jīng)網(wǎng)絡(luò)中進(jìn)行進(jìn)一步處理。
多頭注意力在每個(gè)層中同時(shí)經(jīng)過這個(gè)過程,進(jìn)行多次處理。它基本上將嵌入向量劃分成多個(gè)部分,每個(gè)頭使用整個(gè)向量中的信息來(lái)注釋輸出向量的一個(gè)(不重疊的)段。
如果你對(duì)原始Transformer論文中的Concatenation操作感到困惑,那就是在發(fā)生的事情:頭1向段1添加信息,頭2向段2添加信息,依此類推。
使用softmax的問題在于,它迫使每個(gè)注意力頭都要進(jìn)行注釋,即使它沒有任何信息可以添加到輸出向量中。
在離散選擇之間使用softmax是很好的;但作為可選注釋(即輸入到加法中)使用它,就有點(diǎn)不太好。其中,多頭注意力則會(huì)加劇這個(gè)問題,因?yàn)閷iT的頭比通用的頭更有可能想要「通過」。
現(xiàn)在,可能應(yīng)該全面替換softmax,但它在大部分情況下效果還不錯(cuò),除了一個(gè)小問題,它阻止了注意力頭發(fā)出空白注釋。
因此,我提出了一個(gè)非常小的調(diào)整,我愿意將所有未來(lái)的互聯(lián)網(wǎng)聲明都寄托在這個(gè)正確性上。
這個(gè)調(diào)整是如此小,又是如此明顯,自從注意力被發(fā)明(2014年)以來(lái)一直在大家的眼皮底下。
Softmax1和Quiet Attention
現(xiàn)在,經(jīng)過改造的Softmax Super-Mod公式來(lái)了!
不過,實(shí)際上只是在分母上加了一個(gè)「1」。
作者表示,如果愿意的話,這可以讓整個(gè)向量趨向于零,但除此之外,就只是將數(shù)值縮小了一些,而這將會(huì)在歸一化過程中得到補(bǔ)償。其中,歸一化過程會(huì)在注意力之后進(jìn)行。
關(guān)鍵的區(qū)別在于負(fù)極限,當(dāng)??中的條目明顯小于零且模型試圖完全避免一個(gè)注釋時(shí)。
比較原始softmax的極限行為:
與新的改進(jìn)softmax1的極限行為:
可以看到,原始的softmax總是會(huì)產(chǎn)生相同的總權(quán)重;softmax1雖然看起來(lái)大部分相同,但在負(fù)半軸中有一個(gè)逃生通道。
此外,softmax1還有其他一些特點(diǎn)。比如,它的導(dǎo)數(shù)是正數(shù),因此我們始終有非零梯度;它的和在0和1之間,因此輸出不會(huì)失控。
同時(shí),softmax1還會(huì)保持如下函數(shù)性質(zhì),即輸出向量中的相對(duì)值保持不變。
而原始的softmax即便采用更高的精度,也無(wú)法解決這些問題。也就是說,所有的Transformers都受到影響。
盡管softmax1表面上看起來(lái)相當(dāng)普通,但作者有99.44%的把握,它可以解決量化的離群反饋循環(huán)問題。
對(duì)于改進(jìn)后的機(jī)制,作者稱之為——QuietAttention,因?yàn)樗试S注意力頭保持安靜:
基于此,作者認(rèn)為可以很快地編寫一個(gè)測(cè)試:
「如果在每個(gè)輸入上下文前加上一個(gè)零向量,并確保選擇的神經(jīng)網(wǎng)絡(luò)種不會(huì)增加任何偏差(包括位置編碼),那么零向量應(yīng)該會(huì)原封不動(dòng)地通過,并且在每個(gè)后續(xù)的softmax分母中都添加一個(gè)單位。這樣,也就不必糾結(jié)于梯度代碼了。」
此外,作者還認(rèn)為可以使用一個(gè)使用固定嵌入和特殊前綴token的LLaMA模型來(lái)完成這項(xiàng)工作。
不過,由于仍然需要重新訓(xùn)練模型,所以暫時(shí)不要在Raspberry Pi上進(jìn)行嘗試。
順便,如果你真的進(jìn)行測(cè)試了的話,記得把結(jié)果發(fā)給這位作者——他想在即將發(fā)表的arXiV論文中制作一張漂亮的表格。
作者介紹
本文作者Evan Miller其實(shí)說起來(lái)并不是那么有名。
他的履歷和出身和一些科學(xué)大牛相比,確實(shí)是比不過。但并不影響他能做出本文所講的重大發(fā)現(xiàn)。
Miller本科、碩士和博士三個(gè)階段其實(shí)都沒有主修計(jì)算機(jī)科學(xué)。
本科階段,他在威廉姆斯學(xué)院學(xué)的是物理。后來(lái)又在芝加哥大學(xué)攻讀了經(jīng)濟(jì)學(xué)的博士。
圖片
而除了學(xué)業(yè)生涯,Miller寫過很有名的排名算法,目前在很多網(wǎng)站上都有應(yīng)用。
他設(shè)計(jì)的統(tǒng)計(jì)軟件還曾被頂級(jí)醫(yī)學(xué)期刊引用。
目前,Miller在一家名為 Eppo 的初創(chuàng)公司擔(dān)任統(tǒng)計(jì)工程師。
圖片
而Miller在他自己的網(wǎng)站上所展示的內(nèi)容,可以看出這哥們快是個(gè)全才了。
開源項(xiàng)目,做過7個(gè)。
圖片
各個(gè)專業(yè)的博客、文章、論文啥的,多的數(shù)不過來(lái)。
有編程類的,應(yīng)用數(shù)學(xué)類的,甚至還有生意經(jīng)。
圖片