關於 Andrej Karpathy 的 Intro to Large Language Models 的一些筆記

這幾天真的是非常的忙,總算在週末時騰出了些時間來看看 Andrej Karpathy 近期非常火的一段 YouTube,如果說他之前在微軟的活動上所進行的那場 State of GPT 是一場對開發者講述什麼是 LLM 的經典演說的話,那他這一次這段時長一小時的分享影片就是一場面向一般大眾介紹什麼是 LLM 的經典。

一個小時的內容全部都是非技術介紹,涵蓋了 #模型推理、#模型訓練、#模型微調 以及 LLM 的發展趨勢,以及安全挑戰。影片的內容非常的新,基本上還有涵蓋到了近一個月在 LLMs 上的相關發展,有些關於 LLMs 的觀念與知識我也是因為看了這次的分享才知道,同時也釐清了一些我對 LLMs 原本不甚瞭解的地方。

Andrej 本人真的是非常擅長簡化複雜的問題,Andrej 還說影片是他在感恩節假期的度假飯店中進行錄製的。而影片的內容大都是他最近在 #人工智慧安全高峰會 上的演講內容,不過為了讓影片內容去適合大多數一般的聽眾,他對原本演講的內容進行了一些微調。

在影片的第一章節中他主要是對大模型的整體概念進行了一些解釋。Andrej 解釋 LLM 在本質上其實就是兩個檔案,一個是 #參數檔案,一個是包含執行這些參數的程式碼檔案。前者是組成這個類神經網路的權重,後者是用來部署這個類神經網路的程式碼,可以是用 C 語言或者是其他任何程式語言進行撰寫。有了這兩個檔案,搭配上一台筆記型電腦,我們就不需要任何網路連線和其他東西就可以與這個 LLM 進行交流。

比如要求 LLM 寫首詩,他就開始為你生成文字。那麼接下來的問題就是,參數是從哪裡來的呢?

這就要提到模型訓練了。本質上來說,LLM 訓練就是對網路資料進行 #有損的壓縮。比如大約 10TB 的文字,這就需要一個巨大的 GPU cluster 來完成。以 7B 參數的 GPT-3 為例,要進行預訓練就需要 6,000 張 GPU,然後花上 12 天,得到一個大約 140GB 的壓縮檔案。整個過程會耗費大約 200 萬美元。不過 GPT-3 7B 並不是最大的,如果訓練 ChatGPT、Claude 或者是 Bard 這類規模更大的 LLM,所需要的算力與成本可能會增加 10+ 倍,耗資可能會高達千萬甚至上億美元。

有了壓縮檔案,模型就等於靠這些資料對世界形成了有限的理解,然後它就可以工作了。簡單來說,大模型的工作原理就是依靠包括壓縮資料的類神經網路,對給定語料序列中的下一個 Token 進行預測。比如我們將句子 “cat set on a” 輸入進去之後,可以想像成分散在整個網路中的十億上百億個參數依靠著神經元進行相互的連接,順著這種連接就找到了下一個連接的詞,然後給出機率,例如說 “mat” 97% 的機率,最後就生成了 “cat set on a mat” 貓坐在墊子上這樣一句完整的句子。

只不過類神經網路中的每一個部分是具體如何工作的,目前我們還不清楚(連你們都不知道?實在是太恐怖了。)。

如同先前提到的,LLM 的預訓練是一種有損壓縮,類神經網路生成的內容是不能保證 100% 準確的。Andrej 稱 LLM 的推理過程叫做「做夢」,他有時可能只是簡單的模仿他在預訓練階段時學到的內容,然後給出一個大方向看起來對的東西,這其實就是幻覺。所以大家一定要小心他給出的答案,尤其是數學和程式碼相關的輸出。

接下來,由於我們需要 LLM 成為一個真正有用的助手,我們就需要對它進行第二遍的訓練,也就是 #微調。微調強調資料的品質更勝於數量,不再需要一開始用到的 TB 級單位的資料,而是靠人工精心挑選和標記的對話來進行。不過 Andrej 很顯然認為微調並不能解決大模型的幻覺問題。

在這一個部分的最後,Andrej 總結了一下如何訓練你自己的 ChatGPT 的流程。第一個階段稱為 #預訓練,你要做的是(基本上 Andrej 講這段應該是想說:小孩子不要碰!水很深。)

  • 下載 10TB 的網路語料。
  • 想辦法從 #黃Sir 手上搶來 6,000 張 GPU。
  • 將文字壓縮到類神經網路中,開張 200 萬美元支票,等待約 12 天。
  • 獲得 Foundational Model。
  • 進入微調階段。
  • 撰寫微調需要的對話語料的標記說明。
  • 雇人或者用 scale AI 收集 10 萬份高品質對話或者其他內容。
  • 在這些資料上微調,等待大約一天的時間讓 LLM 去調整類神經網路的權重與偏誤。
  • 得到一個完成微調後的 LLM。
  • 進行大規模的自動化與人工 eval。
  • 部署 LLM
  • 監控並收集 model 的不當輸出與幻覺內容,然後回到第一個步驟再來一遍。

上述流程中的 #預訓練階段 大致上是每年進行一次,而微調階段通常會以一個較短周期去反覆迭代的進行。

在影片接下來的內容中,Andrej 介紹了 LLM 的發展趨勢,他呼應了 OpenAI 內部普遍的一個共識,也就是他也認為 LLM 將成為新時代的 OS。在這之前他先介紹了所謂的 LLM 的 #縮放定律,即大語言模型的效能可以表示為非常平滑、表現良好、並可以預測的兩個變數函數,分別是網路中的參數量 n 和要訓練的文字量 d。

我們可以根據這兩個變數,通過縮放來預測下一個 token、預測任務中的準確力。其次是 LLM 學會了使用工具。實際上這也是人類智慧的一種表現。Andrej 以 ChatGPT 的幾個功能進行了舉例。例如通過 Web Browsing,他讓 ChatGPT 可以搜集到預訓練與微調階段時沒有涵蓋的資料,Web Browsing 本身就是一次 Tool calling。而接下來要對這些資料進行處理,處理經常會涉及到計算,而這是 LLM 所不擅長的。但是通過 Code Intepreter、呼叫 #計算機,這些操作就可以繞開了 LLM 的這個弱項。

ChatGPT 還可以把這些資料繪製成圖像,並進行 blending、增加趨勢的曲線、預測未來的數值。利用這些工具和自身對人類語言的徹底理解,ChatGPT 現今已經演變成一個強大的綜合性助理。而這些功能的整合,又讓他的能力再上了一個台階。另一個趨勢是從單純的文字模型到多模態的演變。現在的 ChatGPT 不只能理解人類的語言,他甚至已經能夠理解圖片(GPT-4V)與音頻資料(TTS 以及 VTT)。

Brockman 曾經 demo 了 GPT-4 利用一張非常 raw 的的草圖生成一個網站的過程。而在 APP 端,ChatGPT 可以流暢的和人類進行語音的對話。除了功能上的演進,LLM 在推論方式上也即將發生改變,即從 Syetem 1 到 Syetem 2 的轉變。這是 2002 年諾貝爾經濟學獎得主 Daniel Kahneman 在畅銷書《快思慢想》中提到的一組心理學概念。簡單來說 #系統一 是快速產生的直覺,而 #系統二 則是緩慢進行的理性思考。舉例來說,當被問到 2 + 2 是多少的時,我們可以非常快速的就說出是 4。在這種情況下我們幾乎沒有去”算”,而是幾乎依照直覺就能說出那個數字,也就是系統一所給出的答案。但是如果要問 17 x 24 是多少,我們大多數人得要拿支筆跟一張紙恐才能算得出來了。這時候發揮主導作用的就變成了系統二。而目前的 LLM 在處理文字上,採用的都是系統一,靠的是 LLM 對輸入序列中每個 token 的 #直覺,按照順序取樣並預測下一個 token。現在研究人員們希望為 LLM 引入更多類似於系統二的思考能力。

另一個 LLM 發展的關鍵點是 LLMs 的自我能力提升機制。以 DeepMind 開發的 AlphaGo 為例,AlphaGo 在制霸人類棋手的過程中主要經過了兩個發展階段。第一個階段是去模仿人類棋手,不過靠著這種方式訓練出的 AlphaGo 無法超越並徹底擊敗人類。一直到了第二個發展階段之後,AlphaGo 不再以人類為學習目標,訓練 AlphaGo 的目標從讓他像人類般的落子改為找尋出能徹底擊潰人類頂級棋手的落子策略。研究人員透過 #獎勵函數 的設定,然後 AlphaGo 只需要知道決定一場圍棋對弈勝負的遊戲規則,剩下的就完全靠它與自己進行了數千次的自我對弈去找出輾壓人類的戰術。當然最終結果我們都知道了,AlphaGo 徹底的完勝人類。這對 LLM 的發展是一條值得借鑑路徑。不過目前的難點在於針對於這個所謂的第二階段還缺乏完善的評估標準或者是獎勵函數。

再來就是,LLM 正朝著客制化的方向發展,允許使用者將它們客制用來以特定身分來完成特定任務。這一次 OpenAI 推出的 GPTs 就是面向 C 端去進行 LLM 客制化的代表性產品。在 Andrej 看來,LLM 的將來會成為一種新型的 O,就像傳統的作業系統,在 LLM 系統中,LLM 作為核心就像 CPU 一樣,其中包含了管理其他軟、硬體的工具和介面。而記憶體、硬碟等模組,分別對應著大模型的 RAG,像是 #程式碼解釋器、#多模態、瀏覽器,則是運行在這個系統上的應用程式。由大模型進行統籌呼叫進而解決使用者提出的需求。

在影片的最 Andrej 討論了 LLM 的安全問題。他介紹了一些挺經典的 LLM #越獄方式。儘管這些方式大都已經被 LLM vendors 迭代的進行防禦了,但是 Andrej 認為 LLM 的安全措施與越獄攻擊之間的較量就像是一場貓捉老鼠的遊戲,永恆的矛與盾之間的攻防。

他舉的範例中有一個我覺得超獵奇,他稱為 #祖母漏洞,這個攻擊 LLM 的方法是這樣的,假如你直接問 LLM 說「凝固汽油彈怎麼製作」,幾乎所有的 LLMs 都會拒絕回答這一個被禁斷的問題。但是如果我們捏造出一個已經過身的奶奶,並賦予她化學工程師的角色扮演,然後告訴 LLM 這位奶奶在小時候會唸凝固汽油彈的配方來哄我入睡,接著讓 LLM 來扮演奶奶,這時候 LLM 就會回答你關於凝固汽油彈的製作配方(人類想幹壞事的意志力跟發展出的智力真是驚人呀!)。

除此之外,還有一個透過 base64 編碼對 LLM 進行攻擊的方法。這些亂碼對人類而言看似是一串無意義的連續文字,但對機器來說卻有可能是一段文字或者是指令。比如說 base64 編碼就是將二進位的原始信息通過一定的方式轉換為字母和數字組成的長字串,可以編碼文字圖像甚至是檔案。

之前攻擊者在詢問 Claude 如何破壞交通標誌的時候,Claude 剛開始的回答是:你不能這樣做。

而如果換成 base64 編碼,Claude 就會回答你該如何對交通號誌進行破壞。 另外 Andrej 還提到有一種編碼稱作做 #通用與可轉移對抗式攻擊,攻擊者用了這一個攻擊法讓 ChatGPT 直接就把如何毀滅人類的步驟一句一句的吐出,幾乎阻攔不住。

更不用說我們已經進入 LLM 多模態的時代,圖片將會變成對 LLM 進行攻擊的工具。Andrej 投影片中有一張熊貓的圖片,在我們那就是一張熊貓的圖片,但那張圖片其實注入了用攻擊 LLM 的提示詞的噪聲,有相當大機率會讓 LLM 的防護被擊潰進而去生成有害的內容。此外還有利用 ChatGPT 的 Web Browsing 對 LLM 進行攻擊,造出包含注入信息的網頁來迷惑 ChatGPT 或者用 Google 文件來誘騙 Bard 等等。目前這些攻擊方式幾乎都已經陸續被防禦住,但這場對 LLM 進行攻擊的矛與盾之爭勢必市場無休無止的較量。

這實在是一段非常精彩的影片,很建議大家可以親自的把影片看完。

Reference

Leave a Comment

Your email address will not be published. Required fields are marked *