Karpathy後悔了:2015年就看到了語言模型的潛力,卻搞了多年強化學習

機器之心報導

機器之心編輯部

耽誤業界好多年?

「這是有史以來最大、最令人困惑的研究生涯錯誤,」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 年Google發佈了 Transformer 論文,提出了自注意力機制。在這個基礎上,人們逐步探索出大模型的 Scaling Laws,將 AI 技術向通用化快速延伸,直到今天。

既然連 Andrej Karpathy 這樣的 AI 大佬也在研究方向上「走過彎路」,我們是不是也該回看一下過去?

參考鏈接:https://karpathy.github.io/2015/05/21/rnn-effectiveness/