這是鼎叔的第一百二十篇原創文章。行業大牛和剛畢業的小白,都可以進來聊聊。
生成式 AI(Generative artificial intelligence)是目前最熱門的領域,透過一段時期的學習,我想繼續以零門檻的方式,介紹對生成式 AI 的學習感悟,主要是對概念的理解原理延展,不會對具體的公式、演算法和工程進行展開。
學習到 AI 背後的原理可以帶來很多樂趣,也可帶來寶貴的啟發,對其他知識領域同樣有作用。
前文聊聊 ChatGPT 的本質https://mp.weixin.qq.com/s?__biz=MzkzMzI3NDYzNw==&mid=2247484573&idx=1&sn=00fbef27488ebdd8b5b45b16ff494eb2&scene=21#wechat_redirect
聊到了對大語言模型的一些認知判斷,這篇會詳細聊聊它是如何生成內容的。大語言模型是生成式 AI 的一種,ChatGPT 又是大語言模型中的一個產品,也是這兩年全世界最火的,值得持續挖掘。
定義生成式 AI
AI 似乎並沒有明確的精準定義,每個人對 AI 的想象都不一樣,只要能讓機器產生智慧行為就可以算 AI。
生成式 AI 可以理解為 “如何讓機器生成複雜而有意義的格式化內容”。
這些內容具體就包括文章,圖片,音訊,影片等。格式化意味著這些內容都是由具體元素構成,如文字,畫素,聲音取樣點等。這裡的複雜意味著 “不可能窮舉”,如果只是想” 量大 “,那傳統程式也可以生成。
比如,寫一篇文章,可能產生的結果有無窮種可能,傳統程式似乎沒法展示生成內容的 “創意” 和 “快速”。
對應的,什麼樣的 AI 不屬於生成式 AI?
那就是在有限的選項中做選擇。比如分類判斷(如垃圾郵件判斷),識別某個動物是貓還是狗等等。
機器學習屬於 AI 的一個分類,機器學習的本質就是從一大堆資料中自動算出一個函式公式的各個引數。
但生成式 AI 背後的函式可能有海量的引數,沒有辦法把所有引數精準計算和展示出來。比如,我們輸入一張圖片,要對它做 AI 處理,很顯然這裡面有海量的輸入引數,因為圖片的資訊量太大了。海量引數的 “處理函式”,人是難以想象該如何計算的,但機器可以透過大量訓練資料把它們找出來,就是把函式表示成類神經網路然後求解各個引數,這種 AI 學習也叫深度學習。
我們可以把 AI 當成目的,機器學習就是手段,而深度學習就是這些年新發現的手段,對生成式 AI 起到決定性的作用。
ChatGPT 回答問題的原理
大型語言模型 ChatGPT,就是這樣一個有上億引數的函式,根據使用者的輸入,能輸出 “從沒見過” 的內容,因此可以被認為它有創造力的。
從生成文字的角度來看,這個創造過程就像是玩 “文字接龍”:
比如輸入 “中國最長的江河是” 什麼?
1 回答第一個高機率的字是 “長”,然後把這個字加在問題末尾,輸入 “中國最長的江河是長” 什麼?
2 再隨機產生一個高機率的字 “江”,然後把這個字加在問題末尾,輸入 “中國最長的江河是長江” 什麼?
3 這時產生的高機率結果是結束符,ChatGPT 就完成了接龍過程,最終回答 “長江。”
文字接龍產生的每個字就是一個分類過程,ChatGPT 回答問題就是把無限可能的選擇變成了一系列的有限分類問題。
正因為 ChatGPT 每次接龍都是一個機率,所以生成的答案可能經常不一樣。例如:
生成文字是一個序列符號,每一個符號就是 Token,這也是 ChatGPT 主要的計費單位。
我們以英文 Token 為例,不像很多人以為的那樣 - 一個單詞就是一個 Token。一個單詞有可能按詞根分為多個 token,比如 Unbreakable,會被拆分為 “un”,"break","able",這是 3 個 Token。
這樣定義的原因是,英文單詞無法被窮盡,現代社會不斷有新詞冒出來,而詞根是相對穩定的。
不同語言模型的 Token 定義也是不一樣的。部分語言模型會把中文的每個方塊字設為一個 Token,但不是全部模型都這樣。
為什麼要基於機率接龍的方式生成答案?
能不能每次都直接使用訓練語料中出現最高次數的字作為接龍答案?這樣效果會不會更好?
科學界的答案是否定的。
每次用出現次數最高的字來接龍,生成文字雖然從語法上看都很嚴謹,但是不符合人類正常使用的習慣,因為它缺乏語言的多樣性,不符合人類語言的內在屬性。
語言模型通常會給格式良好的文章打高分,但是較長的生成文字往往是通用的、重複的和尷尬的。
自然語言很少連續出現高頻使用詞彙,它會不斷轉向低頻且資訊量更大的詞彙,自然語言也不會陷入重複迴圈。
人類傾向於不陳述顯而易見的事情,因此 “讓每個詞都儘量可預測” 是不受歡迎的演算法。
其實,大語言模型也可以用引數(Temperature)來手動控制是否採用最高機率出現的詞來作為接龍結果:
這個引數接近 0 時,就儘可能採用語料中接龍出現次數最多的詞,生成的文字就更確定更保守,這種設定適合希望答案比較單一的場景。
它接近 1 時,就是標準的語言模型按機率生成的邏輯。
當它大於 1 時,模型就選擇更隨機的結果,傾向於探索低機率的接龍詞,生成文字的多樣性和創造性(或者說荒謬性)更高。
此外,最低機率的部分長尾生成結果也不建議使用,效果很差,建議直接廢棄。這部分低機率結果數量龐大(數以萬計),它會導致文字不連貫,上下文幾乎無關。
最新研究也表明,GAN(對抗網路)生成的文字,在質量和多樣性上也無法達到語言模型的生成水平。
參考論文:The Curious Case of Neural Text Degeneration
這就是 ChatGPT 為什麼喜歡瞎扯的原因
因為它是基於機率的文字接龍游戲,因此對自己說出的內容不承擔責任。
提問者如果在問題中有意誤導它(比如根本不存在的節日),它也會侃侃而談描述一大堆,中間的部分資訊就是錯誤的(幻覺)。
參考:聊聊大模型的幻覺問題
那麼,ChatGPT 做文字接龍時,怎麼會知道歷史資訊呢?因為 ChatGPT 是一個多輪對話系統,它會把對話中過去收到的問題和已輸出的答案,都放在一起進行接龍。
到今天,chatGPT 可以一口氣讀進的輸入內容已經非常驚人了。
類似的我們也可以生成圖片,圖片就是由一系列畫素構成,對畫素接龍就可以產生圖片。
這種按照固定順序生成的策略叫做 Autoregressive Generation。
生成式 AI 的應用也不是今天才有,十幾年前的谷歌翻譯就可以被認為是一種生成式 AI。
ChatGPT 如何訓練生成機率
簡而言之,網路上取之不盡的所有文字都可以用來訓練。ChatGPT 讀到訓練語料的每一句話裡的每個字,都會提升這個字在接龍中出現的機率,並降低其他字的機率。比如讀到 “你好美”,那麼 “美” 的出現機率就會提升,其他可能出現的字(如高,壯,嗎)的機率就會下降。
語言模型背後就是一個類神經網路 Transformer,擁有上億個引數,它的作用就是對輸入的句子輸出一個機率分佈。Transformer 內部的各個計算單元就是在做矩陣和向量計算(線性代數)。
在 ChatGPT 過往的版本演進過程,就是不斷增加模型引數量的過程,也是不斷閱讀海量訓練資料的過程。前者決定了 AI 的天賦,後者決定了 AI 的後天經驗,兩者缺一不可。
只學習海量網路資料有什麼缺點
如果一個語言模型的訓練僅僅只是大量學習網路資料,只做自監督學習(預訓練),可能產生什麼問題?
這就像一個只會讀書,從來沒有考試過的學生一樣,在各類任務考試中成績平平。因為掌握大量資訊不代表理解使用者(出題者)的意圖,也就不能正確回答各類問題,這樣大模型就無法實現 “安全地遵循使用者指示 “的目標。
比如早期的 GPT,學到了網路上的各種考試資料,讓它回答一段編碼問題,它就 “以為” 要接龍出四個選項作為答案,而不是直接給出執行結果。
圖片
因為 GPT 的回答效果差強人意,所以 Open AI 公司啟用人類作為老師調教模型的階段,直接提高人類認為滿意的答案的權重,而不是不回答或者隨意回答。
參考論文:Training language models to follow instructions with human feedback。
引入人類的強化學習
我們把早期的 GPT 模型叫做 “基石模型”,把人工監督調整到 ChatGPT 這個形態的過程叫做 “微調”,發生的改變非常小,但效果非常顯著。就好像天資再好的選手,如果沒有教練的指導,在激烈競爭中也很難有大的突破。
基於預訓練的監督式學習,並不需要大量的人工投入和訓練資料,就可以完成很多擴充套件任務,比如在很多不同語言中完成同一任務。基於上下文的學習能在模型的引數範圍內吸收許多技能和任務,因此學習能力可能會隨著規模的擴大而顯示出類似的強勁增長。人類標註員基於一萬筆訓練資料就可以起到畫龍點睛的作用。
除了監督式學習,人類標註員還可以使用增強式學習來提升模型效果,就是不提供完整的正確答案,而是給出 “好” 和 “不好” 的評價即可。依賴人類的增強式學習就叫 RLHF。
總結,GPT 的訓練依次是預訓練,監督式學習,RLHF。
語言模型需要具備足夠的能力才適合進入第三步的微調,因為如果模型提供的答案總是很爛,人類無法挑選出相對亮眼的結果。
人類畢竟精力有限,但那麼多問題都需要被標註,怎麼提高效率呢?
其實人工標註員的標註習慣,可以被另一個模型來同步模擬。我們在資料集上訓練一個獎勵模型(Reward Model),以預測我們的標註員更喜歡哪個輸出。當這個獎勵模型足夠準確時,就可以取代人工標註員的工作了,語言模型根據獎勵模型輸出分數的高低,來增大或減小對應答案的生成機率。
學術界把上面的第二,第三個步驟合起來起了一個名字:對齊(alignment),意思就是要對齊人類的需求(想起了阿里巴巴的黑話 - 對齊顆粒度 😊),這是 ChatGPT3.5 採用的核心步驟。論文裡形象地把對齊中耗費的算力叫為 “對齊稅”。
GPT4 和 GPTs
後面釋出的 ChatGPT4 強化了視覺能力,能夠看得懂圖中的含義,並能夠逐步推導,還能夠自己生成程式碼和執行。
Open AI 開放了 GPTs,方便使用者和企業搭建專屬於自己的 ChatGPT,使用者在 GPTs 後臺上傳了自己的背景知識文件,這個定製化的 GPTs 可以回答讓通用引擎覺得莫名其妙的私人問題。
突然冒出一個靈感
智慧的生成是一個機率過程,正因為每次機率計算結果都不一樣,才能產生有創意的內容,值得讓人學習,而不是把人困在資訊繭房裡。