讓非算法同學(xué)也能了解 ChatGPT 等相關(guān)大模型
?????♀??編者按:本文作者是螞蟻集團(tuán)前端工程師茂松,從非算法同學(xué)的視角窺探大模型的理論和實(shí)踐,歡迎查閱~
前言
當(dāng)前 LLM(Large Language Model) 大語(yǔ)言模型越來(lái)越火,在業(yè)務(wù)和生活中已經(jīng)逐漸變得人盡皆知,作為一名技術(shù)同學(xué),可以不精通其中的細(xì)節(jié),但了解其大致的奧義是應(yīng)該必備的技術(shù)素養(yǎng),最起碼應(yīng)該清楚大模型是怎么運(yùn)作的,在業(yè)務(wù)中我們可以與其建立什么鏈接,這也是我寫這篇文章的主要原因。
本文借鑒了多方文章,加入了自己的理解,由于大部分相關(guān)文章都比較有技術(shù)壁壘,很多同事包括我讀起來(lái)都比較晦澀,因此我盡可能將其轉(zhuǎn)化為比較易懂的語(yǔ)言。
我本人也不是專業(yè)的算法同學(xué),因此只能用比較淺薄的視角窺探一部分大模型的理論和實(shí)踐,如果有描述不清或有誤之處還請(qǐng)批評(píng)指出。
ChatGPT 的概念
GPT 對(duì)應(yīng)的是三個(gè)單詞:Generative,Pre-Training,Transformer。
Generative:生成式,比較好理解,通過(guò)學(xué)習(xí)歷史數(shù)據(jù),來(lái)生成全新的數(shù)據(jù)。ChatGPT 回答我們提出的問(wèn)題時(shí),是逐字(也有可能是三四個(gè)字符一起)生成的,如果你使用 ChatGPT 時(shí)仔細(xì)觀察它回答你的方式,你可能會(huì)對(duì)「逐字」這個(gè)概念有更深的感觸。這里逐字生成的時(shí)候每一個(gè)字(或詞,在英文中也可能是詞根)都可以被稱作一個(gè) token。
Pre-Training:預(yù)訓(xùn)練,顧名思義就是預(yù)先訓(xùn)練的意思。舉個(gè)簡(jiǎn)單的例子,如果我們想讓一個(gè)對(duì)英語(yǔ)一竅不通的同學(xué)去翻譯并總結(jié)一篇英語(yǔ)技術(shù)文章,那么對(duì)這個(gè)同學(xué)來(lái)說(shuō)就需要先學(xué)會(huì)英文 26 個(gè)字母,進(jìn)而學(xué)會(huì)單詞語(yǔ)法等,再去了解這篇文章相關(guān)的技術(shù),最后才能去完成我們指派的任務(wù)。但是如果讓一個(gè)對(duì)英語(yǔ)已經(jīng)很精通的同學(xué)來(lái)做這個(gè)任務(wù)就相對(duì)簡(jiǎn)單的多,他只需要去大致了解一下這篇文章所涉及到的技術(shù),便能很好的總結(jié)出來(lái)。
這就是預(yù)訓(xùn)練,先把一些通用能力提前訓(xùn)練出來(lái)。人工智能本身就是一個(gè)不斷訓(xùn)練參數(shù)的過(guò)程,如果我們可以提前把通用能力相關(guān)的參數(shù)提前訓(xùn)練好,那么在一些特殊的場(chǎng)景,發(fā)現(xiàn)通用能力不能完全適配時(shí),只做簡(jiǎn)單的參數(shù)微調(diào)即可,這樣做大幅減少了每個(gè)獨(dú)立訓(xùn)練預(yù)測(cè)任務(wù)的計(jì)算成本。
Transformer:這是 ChatGPT 的靈魂,它是一個(gè)神經(jīng)網(wǎng)絡(luò)架構(gòu)。后文再進(jìn)行詳細(xì)的說(shuō)明。
以上就是 ChatGPT 的基本概念,結(jié)合起來(lái)就是一個(gè)采用了預(yù)訓(xùn)練的生成式神經(jīng)網(wǎng)絡(luò)模型,它能夠?qū)θ祟惖膶?duì)話進(jìn)行模擬。
ChatGPT 的核心任務(wù)
ChatGPT 的強(qiáng)大推理能力確實(shí)令人印象深刻,它的核心任務(wù)就是能夠生成一個(gè)符合人類書寫習(xí)慣的下一個(gè)合理的內(nèi)容。具體的實(shí)現(xiàn)邏輯就是根據(jù)大量的網(wǎng)頁(yè)、數(shù)字化書籍等人類撰寫內(nèi)容的統(tǒng)計(jì)規(guī)律,推測(cè)接下來(lái)可能出現(xiàn)的內(nèi)容。
逐字(詞)推測(cè):
體驗(yàn) ChatGPT 時(shí)如果細(xì)心觀察會(huì)發(fā)現(xiàn) ChatGPT 回答問(wèn)題時(shí)是逐字或逐詞來(lái)進(jìn)行回答的,這也就是 ChatGPT 的本質(zhì):按照上下文來(lái)對(duì)下一個(gè)要出現(xiàn)的字或詞進(jìn)行推測(cè)。比如要想讓 ChatGPT 預(yù)測(cè)“湖人總冠軍”這五個(gè)字,它會(huì)經(jīng)歷如下步驟:
輸入“湖”這個(gè)字,輸出可能是“泊”,“人”,“水”這三個(gè)字,其中結(jié)合上下文概率最高的是“人”字
輸入“湖人”這兩個(gè)字,輸出可能是“總”,“真”,“?!边@三個(gè)字,其中結(jié)合上下文概率最高的是“總”字
輸入“湖人總”這三個(gè)字,輸出可能是“冠”,“贏”,“經(jīng)”這三個(gè)字,其中結(jié)合上下文概率最高的是“冠”字
輸入“湖人總冠”這四個(gè)字,輸出可能是“名”,“王”,“軍”這三個(gè)字,其中結(jié)合上下文概率最高的是“軍”字
由于 ChatGPT 學(xué)習(xí)了大量人類現(xiàn)有的各種知識(shí),所以它可以進(jìn)行各種各樣的預(yù)測(cè),這就是 transformer 模型最終做的事情,但實(shí)際原理要復(fù)雜得多。
人工智能的基礎(chǔ)知識(shí)
在介紹 ChatGPT 的原理之前,先學(xué)習(xí)一下人工智能的一些基礎(chǔ)知識(shí):
機(jī)器學(xué)習(xí):
機(jī)器學(xué)習(xí)(Machine Learning,ML)是指從有限的觀測(cè)數(shù)據(jù)中學(xué)習(xí)(或“猜測(cè)”)出具有一般性的規(guī)律,并將這些規(guī)律應(yīng)用到未觀測(cè)數(shù)據(jù)樣本上的方法。主要研究?jī)?nèi)容是學(xué)習(xí)算法?;玖鞒淌腔跀?shù)據(jù)產(chǎn)生模型,利用模型預(yù)測(cè)輸出。目標(biāo)是讓模型有較好泛化能力。
舉一個(gè)經(jīng)典的例子,我們挑西瓜的時(shí)候是如何判斷一個(gè)西瓜是否成熟的呢?每個(gè)人一開(kāi)始都是不會(huì)挑選的,但是隨著我們耳濡目染,看了很多挑西瓜能手是怎么做的,發(fā)現(xiàn)可以通過(guò)西瓜的顏色,大小,產(chǎn)地,紋路,敲擊聲等等因素來(lái)判斷,那么這個(gè)就是一個(gè)學(xué)習(xí)的過(guò)程。
參數(shù) / 權(quán)重:
所有的人工智能都有一個(gè)模型,這個(gè)模型可以簡(jiǎn)單的被理解為我們數(shù)學(xué)里的一個(gè)公式,比如一個(gè)線性公式:,參數(shù)(權(quán)重)就是和,這個(gè)線性公式中只有這兩個(gè)參數(shù),那么帶入到 ChatGPT 中,3.0 版本已經(jīng)有了 1750 億個(gè)參數(shù),4.0 的參數(shù)規(guī)模未公布,但可以猜測(cè)只會(huì)比 3.0 版本更多而不會(huì)更少。因此在這樣巨大的參數(shù)規(guī)模中進(jìn)行調(diào)參訓(xùn)練是一個(gè)非常耗費(fèi)機(jī)器(GPU)的工作,所以需要大量的資金和機(jī)房支持。
監(jiān)督學(xué)習(xí) / 無(wú)監(jiān)督學(xué)習(xí):
監(jiān)督學(xué)習(xí):簡(jiǎn)單的理解就是給算法模型一批已經(jīng)標(biāo)記好的數(shù)據(jù),比如上面的例子,我們提前給模型提供 1000 個(gè)西瓜,并且標(biāo)記好這 1000 個(gè)西瓜是否已經(jīng)成熟,然后由模型自己不斷去學(xué)習(xí)調(diào)整,計(jì)算出一組最擬合這些數(shù)據(jù)的函數(shù)參數(shù),這樣我們?cè)谀玫揭粋€(gè)全新的西瓜時(shí),就可以根據(jù)這組參數(shù)來(lái)進(jìn)行比較準(zhǔn)確的預(yù)測(cè)。
無(wú)監(jiān)督學(xué)習(xí):就是我們?nèi)咏o模型 1000 個(gè)西瓜,由算法自己去學(xué)習(xí)他們的特征,然后把相似的類逐漸聚合在一起,在理想情況下,我們希望聚合出 2 個(gè)類(成熟和不成熟)
過(guò)擬合 / 欠擬合:
在我們的模型進(jìn)行訓(xùn)練的時(shí)候,最終的目的就是訓(xùn)練出一組參數(shù)來(lái)最大限度的能夠擬合我們訓(xùn)練數(shù)據(jù)的特征,但是訓(xùn)練的過(guò)程總不會(huì)是一馬平川的,總會(huì)出現(xiàn)各種問(wèn)題,比較經(jīng)典的就是過(guò)擬合和欠擬合。
直接舉例說(shuō)明更直接一點(diǎn),如下圖,我們希望模型能盡量好的來(lái)匹配我們的訓(xùn)練數(shù)據(jù),理想狀態(tài)下模型的表現(xiàn)應(yīng)當(dāng)和中間的圖一致,但實(shí)際訓(xùn)練中可能就會(huì)出現(xiàn)左右兩種情況。左邊的欠擬合并并沒(méi)有很好的擬合數(shù)據(jù),預(yù)測(cè)一個(gè)新數(shù)據(jù)的時(shí)候準(zhǔn)確率會(huì)比較低,而右側(cè)看起來(lái)非常好,把所有的數(shù)據(jù)都成功擬合了進(jìn)去,但是模型不具有泛化性,也沒(méi)有辦法對(duì)新的數(shù)據(jù)進(jìn)行準(zhǔn)確預(yù)測(cè)。

那么怎么解決過(guò)擬合和欠擬合的問(wèn)題呢?可以根據(jù)模型訓(xùn)練中的實(shí)際表現(xiàn)情況來(lái)進(jìn)行正則化處理,降低復(fù)雜度處理等方法,這一點(diǎn)可以自行查閱相關(guān)資料。
有監(jiān)督微調(diào)(SFT)
有監(jiān)督微調(diào)(SFT,Supervised Fine-Tuning):是一種用于機(jī)器學(xué)習(xí)的超參數(shù)調(diào)整方法,它可以使用從未見(jiàn)過(guò)的數(shù)據(jù)來(lái)快速準(zhǔn)確地調(diào)整神經(jīng)網(wǎng)絡(luò)的權(quán)重參數(shù),以獲得最佳的性能。它可以幫助機(jī)器學(xué)習(xí)模型快速地從訓(xùn)練數(shù)據(jù)中學(xué)習(xí),而不需要重新訓(xùn)練整個(gè)網(wǎng)絡(luò)。
強(qiáng)化學(xué)習(xí)模型(PPO)
強(qiáng)化學(xué)習(xí)模型(PPO,Proximal Policy Optimization):是一種強(qiáng)化學(xué)習(xí)算法,可以使智能體通過(guò)最大化獎(jiǎng)勵(lì)信號(hào)來(lái)學(xué)習(xí)如何與環(huán)境進(jìn)行交互。它是一種非官方算法,使用剪裁目標(biāo)函數(shù)和自適應(yīng)學(xué)習(xí)率來(lái)避免大的策略更新。PPO 還具有學(xué)習(xí)可能不完全獨(dú)立和等分布數(shù)據(jù)的優(yōu)勢(shì)。
人類反饋強(qiáng)化學(xué)習(xí)(RLHF):
人類反饋強(qiáng)化學(xué)習(xí)(Reinforcement Learning with Human Feedback )是訓(xùn)練 GPT-3.5 系列模型而創(chuàng)建的。RLHF 主要包括三個(gè)步驟:使用監(jiān)督學(xué)習(xí)訓(xùn)練語(yǔ)言模型;根據(jù)人類偏好收集比較數(shù)據(jù)并訓(xùn)練獎(jiǎng)勵(lì)模型;使用強(qiáng)化學(xué)習(xí)針對(duì)獎(jiǎng)勵(lì)模型優(yōu)化語(yǔ)言模型。它使模型能夠通過(guò)從人類獲取反饋,從而不斷改進(jìn)自身學(xué)習(xí)技能,從而有效地適應(yīng)實(shí)際環(huán)境。
再簡(jiǎn)單的解釋一下,因?yàn)?LLM 需要大量的訓(xùn)練數(shù)據(jù)。通過(guò)人工反饋從零開(kāi)始訓(xùn)練它們是不合理的。所以可以通過(guò)無(wú)監(jiān)督學(xué)習(xí)進(jìn)行預(yù)訓(xùn)練,將現(xiàn)成的語(yǔ)言模型創(chuàng)建并做輸出。然后我們訓(xùn)練另一個(gè)機(jī)器學(xué)習(xí)模型,該模型接收主模型生成的文本并生成質(zhì)量分?jǐn)?shù)。這第二個(gè)模型通常是另一個(gè) LLM,它被修改為輸出標(biāo)量值而不是文本標(biāo)記序列。
為了訓(xùn)練獎(jiǎng)勵(lì)模型,我們必須創(chuàng)建一個(gè) LLM 生成的質(zhì)量標(biāo)記文本數(shù)據(jù)集。為了組成每個(gè)訓(xùn)練示例,我們給主 LLM 一個(gè)提示并讓它生成幾個(gè)輸出。然后,我們要求人工評(píng)估人生成文本的質(zhì)量。然后我們訓(xùn)練獎(jiǎng)勵(lì)模型來(lái)預(yù)測(cè) ?LLM 文本的分?jǐn)?shù)。通過(guò)在 LLM 的輸出和排名分?jǐn)?shù)上進(jìn)行訓(xùn)練,獎(jiǎng)勵(lì)模型創(chuàng)建了人類偏好的數(shù)學(xué)表示。
最后,我們創(chuàng)建強(qiáng)化學(xué)習(xí)循環(huán)。主 LLM 的副本成為 RL 代理。在每個(gè)訓(xùn)練集中,LLM 從訓(xùn)練數(shù)據(jù)集中獲取多個(gè)提示并生成文本。然后將其輸出傳遞給獎(jiǎng)勵(lì)模型,該模型提供一個(gè)分?jǐn)?shù)來(lái)評(píng)估其與人類偏好的一致性。然后更新 LLM 以創(chuàng)建在獎(jiǎng)勵(lì)模型上得分更高的輸出。
神經(jīng)網(wǎng)絡(luò):
對(duì)比人腦來(lái)看,當(dāng)信息進(jìn)入大腦時(shí),神經(jīng)元的每一層或每一級(jí)都會(huì)完成其特殊的工作,即處理傳入的信息,獲得洞見(jiàn),然后將它們傳遞到下一個(gè)更高級(jí)的層。
神經(jīng)網(wǎng)絡(luò)也是如此,最基本形式的人工神經(jīng)網(wǎng)絡(luò)有三層神經(jīng)元。信息從一層神經(jīng)元流向另一層,就像在人腦中一樣:
輸入層:數(shù)據(jù)進(jìn)入系統(tǒng)的入口點(diǎn)
隱藏層:處理信息的地方
輸出層:系統(tǒng)根據(jù)數(shù)據(jù)決定如何繼續(xù)操作的位置
每一層的每一個(gè)節(jié)點(diǎn),都會(huì)對(duì)模型的某個(gè)參數(shù)進(jìn)行調(diào)整計(jì)算,在大部分情況下,每個(gè)當(dāng)前節(jié)點(diǎn)與上層的所有節(jié)點(diǎn)都是相連的。

在 ChatGPT 中的神經(jīng)網(wǎng)絡(luò)卻不是每個(gè)給定層都與前一層的每個(gè)神經(jīng)元基本上相連,因?yàn)槿绻幚砭哂刑囟ㄒ阎Y(jié)構(gòu)的數(shù)據(jù),這種完全連接的網(wǎng)絡(luò)有很大概率是 overkill 的。因此,在處理圖像的早期階段,通常會(huì)使用所謂的卷積神經(jīng)網(wǎng)絡(luò)(“convnets”),其中神經(jīng)元實(shí)際上是布置在類似于圖像像素的網(wǎng)格上,并且僅與網(wǎng)格附近的神經(jīng)元相連。
Transformer 基本原理
第一步:embedding
embedding 的過(guò)程可以簡(jiǎn)單的理解為向量化。因?yàn)檩斎胧且粋€(gè)個(gè)的詞(token),那需要把它映射成一個(gè)向量,embedding 就是給定任何一個(gè)詞,用一個(gè)向量來(lái)表示它。
在 embedding 的過(guò)程中,每個(gè) token 都用一個(gè)單層神經(jīng)網(wǎng)絡(luò)轉(zhuǎn)化為長(zhǎng)度為 768(對(duì)于GPT-2)或 12288(對(duì)于ChatGPT的GPT-3)的 embedding 向量。
同時(shí),模塊中還有一個(gè)“輔助通路”(secondary pathway),用于將 token 的整數(shù)位置轉(zhuǎn)化為 embedding 向量。最后,將 token 值和 token 位置的 embedding 向量加在一起,生成最終的 embedding 向量序列。
那么為什么要將 token 值和 token 位置的 embedding 向量相加呢?只是嘗試了各種不同的方法后發(fā)現(xiàn)這種方法似乎可行,而且神經(jīng)網(wǎng)絡(luò)的本身也認(rèn)為,只要初始設(shè)置“大致正確”,通過(guò)足夠的訓(xùn)練,通常算法可以自動(dòng)調(diào)整細(xì)節(jié)。
以字符串“湖人”為例,在 gpt-2 中它可以將其轉(zhuǎn)化為一系列長(zhǎng)度為 768 的 embedding 向量,其中包括從每個(gè) token 的值和位置中提取的信息。

第一張圖中就是 token embedding,縱向一列代表一個(gè)向量,可以看到最先排列的是“湖”所代表的向量,然后是“人”所代表的向量。第二張圖是位置的 embedding,代表著這兩個(gè)字的位置信息。將這兩兩個(gè) embedding 相加得到了最終的 embedding 序列。
第二步:Attention
Attention 是整個(gè) transformer 的主要部分,其內(nèi)部結(jié)構(gòu)是非常復(fù)雜的,我作為一名非專業(yè)人士,無(wú)法面面俱到的將其中的細(xì)節(jié)完全解釋清楚,因此只能把它的核心能力簡(jiǎn)單敘述一二。
在進(jìn)行 embedding 之后,需要對(duì)一系列的“注意力塊”進(jìn)行數(shù)據(jù)操作(gpt3 中有 96 個(gè)注意力塊),而每個(gè)“注意力塊”中都有一組 attention heads,每個(gè) attention head 都獨(dú)立地作用于 embedding 向量中不同值的塊。
attention head 的作用就是對(duì)歷史的 token 序列進(jìn)行回顧,這里的歷史 token 序列就是已經(jīng)生成的文本,之后將這些信息進(jìn)行打包,以便找到下一個(gè) token。稍微具體的來(lái)說(shuō),attention head 的作用是重新組合與不同 token 相關(guān)的 embedding 向量的塊,并賦予一定的權(quán)重。
舉個(gè)例子:
用 ChatGPT 翻譯句子“螞蟻集團(tuán)”到“ant group”舉例,首先進(jìn)行上一步 embedding 操作,將句子向量化并吸收句子位置信息,得到一個(gè)句子的初始向量組。

由于樣本每個(gè)句子長(zhǎng)短不同,所以每個(gè)句子都會(huì)是一個(gè) 512 x 512 的矩陣,如果長(zhǎng)度不夠就用 0 來(lái)代替。這樣在訓(xùn)練時(shí),無(wú)論多長(zhǎng)的句子,都可以用一個(gè)同樣規(guī)模的矩陣來(lái)表示。當(dāng)然 512 是超參,可以在訓(xùn)練前調(diào)整大小。
接著,用每個(gè)字的初始向量分別乘以三個(gè)隨機(jī)初始的矩陣分別得到三個(gè)量Qx,Kx,Vx,這樣就得到了三個(gè)量:Qx,Kx,Vx,比如用“螞”這個(gè)字舉例:

然后,計(jì)算每個(gè)單詞的 Attention 數(shù)值,比如“螞”字的 Attention 值就是用“螞”字的?螞?分別乘以句子中其他單詞的 K 值,兩個(gè)矩陣相乘的數(shù)學(xué)含義就是衡量?jī)蓚€(gè)矩陣的相似度。
第三步:將向量轉(zhuǎn)為概率
繼續(xù)用上面翻譯的例子:用計(jì)算出的每個(gè)單詞的 Attention 值,通過(guò)一個(gè) SoftMax 轉(zhuǎn)換(這里不必關(guān)注是怎么轉(zhuǎn)換的),計(jì)算出它跟每個(gè)單詞的權(quán)重,這個(gè)權(quán)重比例所有加在一起要等于 1。再用每個(gè)權(quán)重乘以相對(duì)應(yīng)的 V 值。所有乘積相加得到這個(gè) Attention 值。

這個(gè) Attention 數(shù)值就是除了“螞”字自有信息和位置信息以外,成功的得到了這個(gè)句子中每個(gè)單詞的相關(guān)度信息。
在計(jì)算 Attention 之后,每個(gè)單詞根據(jù)語(yǔ)義關(guān)系被打入了新的高維空間,這就是 Self-Attention(自注意力機(jī)制)。
但在 transformer 里,并不是代入了一個(gè)空間,而是代入了多個(gè)高維空間,叫做 Multi-Head Attention (多頭注意力機(jī)制)。將高維空間引入模型訓(xùn)練的主要原因是它在訓(xùn)練時(shí)表現(xiàn)出很好的效果,這是人工智能科研論文的一個(gè)常見(jiàn)特點(diǎn),研究人員憑借著極高的科研素養(yǎng)和敏感性,發(fā)現(xiàn)一些方向,并通過(guò)測(cè)試證明其有效性,但不一定有完美的理論支持。這為后續(xù)研究者提供了進(jìn)一步完善的余地。
事實(shí)證明,如何提升 Attention(Q,K,V)效率是 transformer 領(lǐng)域迭代最快的部分。
這就是 transformer 的大致原理,有一些細(xì)節(jié)我個(gè)人也沒(méi)有深入研究,有興趣的人可以自行去搜索。
總結(jié):
用一張圖來(lái)表示上面的步驟:

借用阿里巴巴集團(tuán)暮詩(shī)同學(xué)標(biāo)注后的圖,看下各部分的職責(zé):

每一個(gè)部分我們基本上已經(jīng)大致都講述過(guò)了,現(xiàn)在我們對(duì) ChatGPT 的實(shí)現(xiàn)原理有了簡(jiǎn)單的認(rèn)識(shí)。
訓(xùn)練數(shù)據(jù)從哪來(lái)以及如何訓(xùn)練?
ChatGPT 的訓(xùn)練數(shù)據(jù)來(lái)源包括維基百科、書籍、期刊、Reddit 鏈接、Common Crawl 和其他數(shù)據(jù)集,共計(jì)約 45TB 的數(shù)據(jù),其中包含了近 1 萬(wàn)億個(gè)單詞的文本內(nèi)容,相當(dāng)于 1351 萬(wàn)本牛津詞典或 1125 萬(wàn)本書。這些數(shù)據(jù)涵蓋了截至 2021 年的海量知識(shí),這也是 ChatGPT 能夠與時(shí)俱進(jìn)地解讀出很多現(xiàn)實(shí)世界新型事物的含義的原因之一。
有了這些數(shù)據(jù)之后,就可以訓(xùn)練我們的模型,這里就要用到 RLHF 來(lái)進(jìn)行反饋和訓(xùn)練了。這類學(xué)習(xí)方法通過(guò)指示學(xué)習(xí)構(gòu)建訓(xùn)練樣本來(lái)訓(xùn)練一個(gè)反應(yīng)預(yù)測(cè)內(nèi)容效果的獎(jiǎng)勵(lì)模型(RM),最后通過(guò)這個(gè)獎(jiǎng)勵(lì)模型的打分來(lái)指導(dǎo)強(qiáng)化學(xué)習(xí)模型的訓(xùn)練。

從上圖中我們可以看出,ChatGPT 的訓(xùn)練可以分成3步:
根據(jù)采集的 SFT 數(shù)據(jù)集對(duì) GPT-3 進(jìn)行有監(jiān)督的微調(diào)(Supervised FineTune,SFT);
收集人工標(biāo)注的對(duì)比數(shù)據(jù),訓(xùn)練獎(jiǎng)勵(lì)模型(Reword Model,RM);
使用 RM 作為強(qiáng)化學(xué)習(xí)的優(yōu)化目標(biāo),利用 PPO 算法微調(diào) SFT 模型。
ChatGPT 的 prompt 使用技巧
prompt 的這個(gè)單詞本意就是「提示」,顧名思義當(dāng)我們使用 ChatGPT 的時(shí)候,如果我們能夠給 ChatGPT 一定的提示,那么就會(huì)更容易獲得我們想要的結(jié)果。簡(jiǎn)單的說(shuō),就是給 ChatGPT 提供一些信息的增量,比如你你希望輸出的 sql 格式等,把這些內(nèi)容作為“固定的上下文”,再來(lái)跟 ChatGPT 提問(wèn),這樣就能獲得更符合預(yù)期的效果。
當(dāng)我們能熟練使用 prompt 后,我們會(huì)極大的提升使用 ChatGPT 的效率,這里的效率不僅是獲取我們想要的結(jié)果這一方面,還會(huì)極大的提升我們使用 ChatGPT 時(shí)同類問(wèn)題的復(fù)用性,因?yàn)橐粋€(gè)完成度很好的 prompt 可以分發(fā)給所有有類似需求的人直接使用。
To Do and Not To Do
看下 openAI 的官方推薦文檔中是這樣說(shuō)的:
Instead of just saying what not to do, say what to do instead. 與其告知模型不能干什么,不妨告訴模型能干什么。
案例場(chǎng)景:推薦雅思必背英文單詞:
prompt1:Please suggest me some essential words for IELTS ?
prompt2:Please suggest me 10 essential words for IELTS ?
說(shuō)明:后者 prompt 會(huì)更加明確,前者會(huì)給大概 20 個(gè)單詞。這個(gè)仍然有提升的空間,比如增加更多的限定詞語(yǔ),像字母 A 開(kāi)頭的詞語(yǔ)。
增加示例
直接告知 AI 什么能做,什么不能做外。在某些場(chǎng)景下,我們能比較簡(jiǎn)單地向 AI 描述出什么能做,什么不能做。但有些場(chǎng)景,有些需求很難通過(guò)文字指令傳遞給 AI,即使描述出來(lái)了,AI 也不能很好地理解。這時(shí)我們應(yīng)該追加部分示例。
案例場(chǎng)景:讓 ChatGPT 起名:
prompt1:幫我起三個(gè)男生名字 ?
prompt2:幫我起三個(gè)男生名字,比如:龍傲天 ?
說(shuō)明:在沒(méi)有示例的情況下,得到的結(jié)果是王偉,張偉這些平平無(wú)奇的名字,當(dāng)我們有了示例,ChatGPT 給到了我們風(fēng)清揚(yáng),云中鶴這些武俠風(fēng)的名字
使用引導(dǎo)詞,引導(dǎo)模型輸出特定內(nèi)容
在代碼生成場(chǎng)景里,有一個(gè)小技巧,在 prompt 最后,增加一個(gè)代碼的引導(dǎo),告知 AI 我已經(jīng)將條件描述完了,你可以寫代碼了。
案例場(chǎng)景:讓 ChatGPT 寫代碼:
prompt1:
Create a MySQL query for all students in the Computer Science Department: Table departments, columns = [DepartmentId, DepartmentName] Table students, columns = [DepartmentId, StudentId, StudentName] ?
prompt2:
Create a MySQL query for all students in the Computer Science Department: Table departments, columns = [DepartmentId, DepartmentName] Table students, columns = [DepartmentId, StudentId, StudentName] SELECT ?
說(shuō)明:在 prompt 的最后增加 SELECT 可以很好地提示 AI 可以寫 SQL 代碼了。
使用特殊符號(hào)指令和需要處理的文本分開(kāi)
不管是信息總結(jié),還是信息提取,你一定會(huì)輸入大段文字,甚至多段文字,此時(shí)有個(gè)小技巧。
可以用 """ 將指令和文本分開(kāi)。根據(jù)我的測(cè)試,如果你的文本有多段,增加 """ 會(huì)提升 AI 反饋的準(zhǔn)確性。
案例場(chǎng)景:讓 ChatGPT 匯總信息:
prompt1:
Please summarize the following sentences to make them easier to understand.
OpenAI is an American artificial intelligence (AI) research laboratory consisting of the non-profit OpenAI Incorporated (OpenAI Inc.) and its for-profit subsidiary corporation OpenAI Limited Partnership (OpenAI LP). OpenAI conducts AI research with the declared intention of promoting and developing a friendly AI. OpenAI systems run on the fifth most powerful supercomputer in the world.[5][6][7] The organization was founded in San Francisco in 2015 by Sam Altman, Reid Hoffman, Jessica Livingston, Elon Musk, Ilya Sutskever, Peter Thiel and others,[8][1][9] who collectively pledged US$1 billion. Musk resigned from the board in 2018 but remained a donor. Microsoft provided OpenAI LP with a $1 billion investment in 2019 and a second multi-year investment in January 2023, reported to be $10 billion.[10]? ?
prompt 2:
Please summarize the following sentences to make them easier to understand. Text: """?
OpenAI is an American artificial intelligence (AI) research laboratory consisting of the non-profit OpenAI Incorporated (OpenAI Inc.) and its for-profit subsidiary corporation OpenAI Limited Partnership (OpenAI LP). OpenAI conducts AI research with the declared intention of promoting and developing a friendly AI. OpenAI systems run on the fifth most powerful supercomputer in the world.[5][6][7] The organization was founded in San Francisco in 2015 by Sam Altman, Reid Hoffman, Jessica Livingston, Elon Musk, Ilya Sutskever, Peter Thiel and others,[8][1][9] who collectively pledged US$1 billion. Musk resigned from the board in 2018 but remained a donor. Microsoft provided OpenAI LP with a $1 billion investment in 2019 and a second multi-year investment in January 2023, reported to be $10 billion.[10] """?? ?
Please summarize the following sentences to make them easier to understand.
Text: """
其他技巧
類似的技巧還有一些,由于篇幅原因不再一一贅述,詳細(xì)可以查看一下兩個(gè)網(wǎng)站:
openAI 官方最佳實(shí)踐:https://help.openai.com/en/articles/6654000-best-practices-for-prompt-engineering-with-openai-api
learningPrompt wiki:https://learningprompt.wiki/docs/category/%EF%B8%8F-%E6%8A%80%E5%B7%A7%E7%AF%87
大模型如何和我們的業(yè)務(wù)結(jié)合起來(lái)?
當(dāng)我們了解了大模型的基本原理和一些使用技巧之后,最重要的還是思考在這個(gè)大模型時(shí)代讓我們的業(yè)務(wù)也能和大模型結(jié)合起來(lái)。我這里拋磚引玉的說(shuō)一下自己的一些想法,每一個(gè)想法只做簡(jiǎn)單敘述,不深入討論。
prompt 平臺(tái)建設(shè)
prompt 的使用作為大模型時(shí)代必備的技能,我們不必要求每一個(gè)員工都完全精通各類 prompt 技巧,而可以將 prompt 的生成變得工程化,可以作為一個(gè)中間件也可以作為一個(gè)平臺(tái),集成各類業(yè)務(wù)的 prompt 模板,比如可以分為數(shù)據(jù)分析模板,業(yè)務(wù)總結(jié)模板,智能客服模板等等提供給真實(shí)業(yè)務(wù)去使用。
prompt 收攏管理后會(huì)極大提升螞蟻所有業(yè)務(wù)的大模型相關(guān)業(yè)務(wù)效率,并可以在數(shù)據(jù)安全等方面做出合規(guī)監(jiān)控,也可以極大的降低新手上手成本,同時(shí)由于各個(gè)業(yè)務(wù)場(chǎng)景不同,平臺(tái)需要結(jié)合 ODPS,dataphin 等數(shù)據(jù)平臺(tái)進(jìn)行數(shù)據(jù)的綁定和聚合。
業(yè)內(nèi)已經(jīng)有比較成熟的 prompt 交易平臺(tái),比如 promptBase(https://promptbase.com/marketplace?model=gpt):

可以看到 prompt 作為一項(xiàng)資產(chǎn),是大模型時(shí)代平臺(tái)必備的基礎(chǔ)能力之一。
數(shù)據(jù)分析 + 大模型
我所在的部門是大數(shù)據(jù)部門,目前螞蟻集團(tuán)進(jìn)行數(shù)據(jù)分析或生成數(shù)據(jù)報(bào)表多使用 deepinsight,場(chǎng)景洞察,場(chǎng)景化自助分析這些平臺(tái),也有部分業(yè)務(wù)有自己搭建的看數(shù)平臺(tái),總之各個(gè)平臺(tái)有各自的優(yōu)缺點(diǎn)和定位,如何讓這些平臺(tái)能和大模型結(jié)合起來(lái)為整個(gè)數(shù)據(jù)分析場(chǎng)景提效?
我認(rèn)為在這個(gè)領(lǐng)域提效整體分為兩個(gè)模塊:生成數(shù)據(jù)報(bào)表和數(shù)據(jù)分析。
生成數(shù)據(jù)報(bào)表的階段可以結(jié)合 LLM 進(jìn)行對(duì)話式圖表生成,將數(shù)據(jù)投喂給 LLM 后提供 prompt,并結(jié)合各自業(yè)務(wù)特點(diǎn)進(jìn)行 prompt 留存,與其他平臺(tái)行程聯(lián)動(dòng)。
數(shù)據(jù)分析側(cè)除了傳統(tǒng)的讓大模型告訴我們數(shù)據(jù)代表的含義之外,還可以讓 LLM 對(duì)數(shù)據(jù)趨勢(shì)做出預(yù)測(cè)。
在整個(gè)數(shù)據(jù)分析領(lǐng)域,我覺(jué)得難點(diǎn)在于上手成本,不僅包括對(duì)各類圖表要熟悉,還要對(duì)分析有一定知識(shí)背景,而大模型最大的優(yōu)勢(shì)就是能弱化所有的上手成本,讓分析小白也能看懂各類報(bào)表。
目前微軟在這個(gè)領(lǐng)域已經(jīng)有了比較先進(jìn)的探索經(jīng)驗(yàn):Introducing Microsoft Fabric and Copilot in Microsoft Power BI(https://powerbi.microsoft.com/en-us/blog/introducing-microsoft-fabric-and-copilot-in-microsoft-power-bi/):

智能客服
大家體驗(yàn)過(guò) ChatGPT 之后應(yīng)該都會(huì)聯(lián)想到客服相關(guān)的產(chǎn)品,各業(yè)務(wù)線的一個(gè)痛點(diǎn)就是都需要值班和答疑,以 Tracert 業(yè)務(wù)為例,每日答疑量是巨大的,巔峰時(shí)甚至占每日精力的 80%,這樣對(duì)相關(guān)業(yè)務(wù)同學(xué)的心力消耗也是不可彌補(bǔ)的。
如果建設(shè)了智能客服平臺(tái),結(jié)合研發(fā)小蜜,將各業(yè)務(wù)的平臺(tái)場(chǎng)景投喂進(jìn)去之后,將會(huì)對(duì)所有業(yè)務(wù)線進(jìn)行一次提效。目前在醫(yī)療,金融等領(lǐng)域,ChatGPT 的問(wèn)答已經(jīng)被訓(xùn)練得比較成熟了:
醫(yī)療:https://github.com/xionghonglin/DoctorGLM
金融:https://github.com/jerry1993-tech/Cornucopia-LLaMA-Fin-Chinese
法律:https://github.com/pengxiao-song/LaWGPT
code snippet + 大模型
大家一定體驗(yàn)過(guò)大模型的各類代碼生成,其結(jié)果雖然不是百分百完全可用的,但是在很多場(chǎng)景下,ChatGPT 生成的代碼基本上稍作修改就可以使用。目前有很多編輯器都做出了這方面的探索,比如 Cursor(https://github.com/getcursor/cursor)

好不好用只用試用了才知道,在我們不熟悉的領(lǐng)域,這類代碼生成能彌補(bǔ)我們的能力短板,比如讓一個(gè)不熟悉 SQL 的同學(xué)去撈數(shù)據(jù),確實(shí)提升了生產(chǎn)力,但是一旦進(jìn)入熟悉領(lǐng)域,比如讓其生成一段業(yè)務(wù)代碼,那會(huì)發(fā)現(xiàn)其實(shí)在組織提供 prompt 的過(guò)程中的耗時(shí),不一定比直接寫代碼少。
除了代碼生成這個(gè)領(lǐng)域,還可以涉足代碼檢測(cè)。比如代碼提交后,CR 時(shí)加入大模型智能 CR,可以有效的識(shí)別到語(yǔ)法不規(guī)范等簡(jiǎn)單問(wèn)題,當(dāng)前螞蟻的 code 平臺(tái)已經(jīng)在做類似的工作了。
大模型需要警惕的問(wèn)題
謹(jǐn)防大模型一本正經(jīng)胡說(shuō)
當(dāng)你使用 ChatGPT 時(shí),有時(shí)候發(fā)現(xiàn)它在一本正經(jīng)的胡說(shuō)八道,比如:

這是因?yàn)榇竽P褪冀K只是一個(gè)模型,不具有分別消息真假的能力,在我們熟悉的領(lǐng)域,如果出現(xiàn)了類似的錯(cuò)誤我們可以立即發(fā)現(xiàn),但是如果是一個(gè)陌生領(lǐng)域,那就有點(diǎn)危險(xiǎn)。在模型的訓(xùn)練過(guò)程中,語(yǔ)料確實(shí)都是真實(shí)的正確的信息,但是在推理過(guò)程中不能百分百保證其正確性,一定要警惕。
警惕數(shù)據(jù)安全風(fēng)險(xiǎn)
各大公司的大模型如雨后春筍,為什么不能直接使用 openAI 的訓(xùn)練結(jié)果呢?一個(gè)是 ChatGPT 不開(kāi)源,另一個(gè)是數(shù)據(jù)是各大公司的命脈,一旦使用外部大模型,無(wú)法組織數(shù)據(jù)安全的泄露。目前除了我國(guó)之外,意大利、德國(guó)、英國(guó)、加拿大、日本等多個(gè)國(guó)家的相關(guān)企業(yè)都開(kāi)始發(fā)出警告,限制在業(yè)務(wù)運(yùn)營(yíng)中使用ChatGPT等交互式人工智能服務(wù)。
因此在我們使用外部大模型的過(guò)程中一定要警惕數(shù)據(jù)泄露的風(fēng)險(xiǎn),切勿因小失大。
其他風(fēng)險(xiǎn)
近日 OWASP 發(fā)布了大型語(yǔ)言模型漏洞威脅 Top10,感興趣的可以參考該文章:https://www.51cto.com/article/757021.html
寫在最后
這是最好的時(shí)代,也是最壞的時(shí)代,在技術(shù)變革面前,跟不上節(jié)奏的人可能面臨更大的風(fēng)險(xiǎn)。我們作為技術(shù)人,一定要跟上時(shí)代的潮流,但是同時(shí)也要明辨是非,不要一股腦全都投入大模型之中。
我們應(yīng)該去掌握大模型能做什么,去思考業(yè)務(wù)如何能夠和大模型融合,但是不必焦慮和恐慌,因?yàn)闆](méi)有 AI 能取代你,能取代你的只有你停止不前的腳步。
參考文章
What Is ChatGPT Doing and Why Does It Work?:https://writings.stephenwolfram.com/2023/02/what-is-chatgpt-doing-and-why-does-it-work/
Learning Prompt:https://learningprompt.wiki/
ChatGPT背后的核心技術(shù):https://www.modb.pro/db/610013