圖與代碼不一致,Transformer論文被發(fā)現(xiàn)錯誤,網(wǎng)友:早該被指出1000次
2017 年,谷歌大腦團隊在其論文《Attention Is All You Need》中創(chuàng)造性的提出 Transformer 這一架構,自此這一研究一路開掛,成為當今 NLP 領域最受歡迎的模型之一,被廣泛應用于各種語言任務,并取得了許多 SOTA 結果。
不僅如此,在 NLP 領域一路領先的 Transformer,迅速席卷計算機視覺(CV)、語音識別等領域,在圖像分類、目標檢測、語音識別等任務上取得良好的效果。
論文地址:https://arxiv.org/pdf/1706.03762.pdf
從推出至今,Transformer 已經(jīng)成為眾多模型的核心模塊,比如大家熟悉的 BERT、T5 等都有 Transformer 的身影。就連近段時間爆火的 ChatGPT 也依賴 Transformer,而后者早已被谷歌申請了專利。
圖源:https://patentimages.storage.googleapis.com/05/e8/f1/cd8eed389b7687/US10452978.pdf
此外 OpenAI 發(fā)布的系列模型 GPT(Generative Pre-trained Transformer),名字中帶有 Transformer,可見 Transformer 是 GPT 系列模型的核心。
與此同時,最近 OpenAI 聯(lián)合創(chuàng)始人 Ilya Stutskever 在談到 Transformer 時表示,當 Transformer 剛發(fā)布之初,實際上是論文放出來的第二天,他們就迫不及待的將以前的研究切換到 Transformer ,后續(xù)才有了 GPT。可見 Transformer 的重要性不言而喻。
6 年時間,基于 Transformer 構建的模型不斷發(fā)展壯大。然而現(xiàn)在,有人發(fā)現(xiàn)了 Transformer 原始論文中的一處錯誤。
Transformer 架構圖與代碼「不一致」
發(fā)現(xiàn)錯誤的是一位知名機器學習與 AI 研究者、初創(chuàng)公司 Lightning AI 的首席 AI 教育家 Sebastian Raschka。他指出,原始 Transformer 論文中的架構圖有誤,將層歸一化(LN)放置在了殘差塊之間,而這與代碼不一致。
Transformer 架構圖如下左,圖右為 Post-LN Transformer 層(出自論文《On Layer Normalization in the Transformer Architecture》[1])。
不一致的代碼部分如下,其中 82 行寫了執(zhí)行順序「layer_postprocess_sequence="dan"」,表示后處理依次執(zhí)行 dropout、residual_add 和 layer_norm。如果上圖左中的 add&norm 理解為:add 在 norm 上面,即先 norm 再 add,那確實代碼和圖不一致。
代碼地址:
https://github.com/tensorflow/tensor2tensor/commit/f5c9b17e617ea9179b7d84d36b1e8162cb369f25#diff-76e2b94ef16871bdbf46bf04dfe7f1477bafb884748f08197c9cf1b10a4dd78e…
接下來,Sebastian 又表示,論文《On Layer Normalization in the Transformer Architecture》認為 Pre-LN 表現(xiàn)更好,能夠解決梯度問題。這是很多或者大多數(shù)架構在實踐中所采用的,但它可能導致表示崩潰。
當層歸一化在注意力和全連接層之前被放置于殘差連接之中時,能夠實現(xiàn)更好的梯度。
因此,雖然關于 Post-LN 或 Pre-LN 的爭論仍在繼續(xù),但另一篇論文結合了這兩點,即《ResiDual: Transformer with Dual Residual Connections》[2]。
對于 Sebastian 的這一發(fā)現(xiàn),有人認為,我們經(jīng)常會遇到與代碼或結果不一致的論文。大多數(shù)是無心之過,但有時令人感到奇怪。考慮到 Transformer 論文的流行程度,這個不一致問題早就應該被提及 1000 次。
Sebastian 回答稱,公平地講,「最最原始」的代碼確實與架構圖一致,但 2017 年提交的代碼版本進行了修改,同時沒有更新架構圖。所以,這實在令人困惑。
正如一位網(wǎng)友所說,「讀代碼最糟糕的是,你會經(jīng)常發(fā)現(xiàn)這樣的小變化,而你不知道是有意還是無意。你甚至無法測試它,因為你沒有足夠的算力來訓練模型。」
不知谷歌之后會更新代碼還是架構圖,我們拭目以待!