「這是有史以來最大、最令人困惑的研究生涯錯誤,」Andrej Karpathy 感歎道。
上個周末,OpenAI 創始成員、研究科學家、原特斯拉前 AI 高級總監、AI 領域的大神 Andrej Karpathy 一直在後悔。後悔自己沒有早點帶領 OpenAI 開創大模型時代。
是怎麽一回事?看起來 Karpathy 認爲當年早已認識到自回歸語言模型的強大潛力,但卻在很長一段時間裏「誤入歧途」,随大溜一起搞強化學習。
2013 年的 Atari RL 論文被認爲是深度強化學習的開山之作:一個通用學習算法就發現了 Breakout 和許多其他遊戲的最佳策略,看起來,在很多任務上我們隻需要對其進行足夠的改進和擴展,就可以構建出強大的 AI 模型了。
我們也還記得,在 Karpathy 跳槽去到特斯拉一年後,2018 年 OpenAI 推出了 OpenAI Five,利用強化學習的方法在 Dota 2 遊戲上開始與職業選手過招。
在 2019 年,OpenAI 的研究者還訓練神經網絡,利用一隻類人機械手來玩魔方,表明強化學習工具不僅僅可以處理虛拟任務,而且還能夠解決需要高度靈活性的真實世界問題。
這個時候 OpenAI 在另一邊已經推出「迄今爲止最大模型」GPT-2 了,強化學習的盛世,似乎很快就被後來興起的大語言模型(LLM)所覆蓋。
Karpathy 還提到:「Yann LeCun 當時就不太看好強化學習,他一遍又一遍地談論『蛋糕』,而強化學習(RL)隻是蛋糕頂部最後一顆櫻桃,表征學習是蛋糕主體,監督學習是錦上添花。至少在今天看來,他在概念上是完全正确的(預訓練 = 蛋糕主體,監督微調(SFT)= 糖衣,RLHF = 櫻桃,即基本的 ChatGPT 訓練 pipeline)。這很有趣,因爲今天他仍然不太看好 LLM。」
說了這麽多,如今已是「事後諸葛亮」了,當初明明看好卻沒把握住,看起來比當初根本沒想過這回事還讓人懊惱。
讓我們看看 Karpathy 那篇預言了如今大模型時代的文章,說了些什麽。
Andrej Karpathy 當初是怎麽看好的
其實關于 RNN,Karpathy 早在 15 年就已經注意到了。爲此他還專門寫了一篇名爲《RNN 的不合理有效性》 文章。
文章深入探讨了循環神經網絡(RNN)的潛力與實際應用。文中提到了幾個實驗示例,包括使用 RNN 來生成類似莎士比亞作品的文本,以及模拟編程代碼和數學公式的生成。
Karpathy 用簡單易懂的語言介紹了 RNN。RNN 是一種能夠處理序列數據的神經網絡,它通過其循環連接能夠記住之前的信息,這對于時間序列數據或任何序列數據的處理尤爲關鍵。
Karpathy 描述了使用 RNN 進行圖像描述任務的初次嘗試,并分享了這一過程中的神奇體驗。他回憶稱,在使用 RNN 進行訓練後不久,即使是随意選擇的超參數配置下,他的模型開始生成看起來非常不錯的圖像描述,這些描述接近于有意義。這種簡單模型與所獲得的結果質量之間的比例,有時會遠遠超出預期,這讓人感到驚訝。
當時的普遍看法認爲 RNN 難以訓練,但 Karpathy 後來的經驗卻讓他得出了相反的結論。 随着時間的推移,Karpathy 頻繁地訓練 RNN,并多次見證了它們的強大和穩健,盡管如此,這些網絡産生的有趣輸出仍然讓他感到新奇和有趣。
關于如何利用 RNN 逐字符生成文本的介紹,引發了對「這怎麽可能?」這一問題的思考。
事實上,衆所周知,RNN 是圖靈完備的,因爲它們可以模拟任意程序(具有适當的權重)。但與神經網絡的通用近似定理類似,你不應該對此進行過多的解讀。
如果訓練普通神經網絡是對函數的優化,那麽訓練循環網絡就是對程序的優化。
接下來,Karpathy 在博客中講解了 RNN 的基本工作原理,并通過一個具體的字符級語言模型應用來說明其實際操作過程。
具體而言,Karpathy 爲 RNN 提供一大段文本,并要求它根據前面的字符序列對序列中下一個字符的概率分布進行建模。這樣,就可以一次一個字符地生成新文本。
假設詞彙表爲 hello, 這段訓練數據可以被拆分爲 4 個獨立的訓練樣本:
基于 h 預測 e 的概率應該較高。
基于 he 預測 l 的概率應該較高。
基于 hel 預測 l 的概率應該較高。
基于 hell 預測 o 的概率應該較高。
每個字符會被編碼爲一個向量,采用 1-of-k 編碼,即向量中隻有一個位置爲 1,其餘位置爲 0,然後使用 step 函數将它們逐個輸入到 RNN。接着會觀察到一個 4 維輸出向量序列(每個字符一維),并将其解釋爲 RNN 當前分配給序列中下一個字符的置信度。
接下來可以看到 RNN 的訓練過程及其背後的邏輯:
在第一個 step 中,RNN 看到字符 h 後,預測下一個字符的概率分布如下:
h 的置信度爲 1.0
e 的置信度爲 2.2
l 的置信度爲 - 3.0
o 的置信度爲 4.1
但根據訓練數據 hello,正确的下一個字符應該是 e。因此,需要提高 e 的置信度(綠色表示),同時降低其他字符的置信度(紅色表示)。
在這過程中,每個 step 都有一個期望的目标字符。目标是讓網絡對正确字符的置信度更高,而對錯誤字符的置信度更低。因此需要反向傳播算法計算每個權重的梯度。
根據梯度調整 RNN 的權重(參數),讓正确字符的置信度提高(例如 e 的置信度從 2.2 提高到 2.3)。錯誤字符的置信度則會相應降低。
這一過程會重複多次,直到模型收斂。收斂後,RNN 的預測會與訓練數據更加一緻,即每一步都能夠正确預測下一個字符。
爲了進一步說明,出于教學目的,Karpathy 還用 Python/numpy 編寫了一個最小的字符級 RNN 語言模型。代碼大約隻有 100 行。感興趣的讀者可以參考:
項目鏈接:https://gist.github.com/karpathy/d4dee566867f8291f086
更進一步的,Karpathy 在這篇博客中還列舉了 5 個其他示例展示。所有示例字符模型都是在 Github 上發布的代碼進行訓練的。
項目鏈接:https://github.com/karpathy/char-rnn
我們以「莎士比亞」這個示例爲例。
Karpathy 希望探索 RNN 是否能夠學習并生成具有更多結構和風格的文本内容。爲此,他下載了莎士比亞的所有作品,并将它們合并成一個 4.4MB 的文件,用作訓練數據。
接着,Karpathy 使用了一個包含 3 層 RNN 的模型,每層有 512 個隐藏節點,訓練這個模型耗費了數小時。最後,模型生成了一些文本樣本,包括角色名字和内容對話,有時還能生成較長的獨白片段。
不過,從結果來看,盡管生成的文本看起來像莎士比亞的作品,但仍有一定的差異。Karpathy 認爲這些生成結果表現出了模型的能力和局限性,同時也展現了 RNN 在字符級語言建模上的潛力。
Karpathy 還列舉了如何生成嬰兒名字這種有趣的示例,感興趣的讀者可以參考原博客了解更多内容。
随後的故事我們都知道了,2017 年谷歌發布了 Transformer 論文,提出了自注意力機制。在這個基礎上,人們逐步探索出大模型的 Scaling Laws,将 AI 技術向通用化快速延伸,直到今天。
既然連 Andrej Karpathy 這樣的 AI 大佬也在研究方向上「走過彎路」,我們是不是也該回看一下過去?
參考鏈接:https://karpathy.github.io/2015/05/21/rnn-effectiveness/