五分鐘帶你搞懂從零打造一個(gè)ChatGPT
前言
歐陽(yáng)上一次寫(xiě)文章還是4個(gè)月前,之所以斷更有兩個(gè)原因:換工作和業(yè)余時(shí)間ALL IN AI了。不管你是否承認(rèn),AI時(shí)代已經(jīng)來(lái)了,依然埋頭研究前端的那一畝三分地和源碼在未來(lái)可能就是蒸汽時(shí)代被淘汰的紡織女工。
今年大家多多少少都有接觸到AI相關(guān)的項(xiàng)目了,從前端的角度來(lái)看以前是調(diào)用后端的接口,現(xiàn)在改成了調(diào)用大模型提供的接口,本質(zhì)依然沒(méi)變。
但是按照大家卷的程度來(lái)看,在未來(lái)的不久不管你是前端還是后端,大模型底層原理將會(huì)是和源碼一樣成為面試中的熱門(mén)話題。所以歐陽(yáng)打算寫(xiě)一個(gè)關(guān)于大模型底層原理系列的文章,包括熱門(mén)的Transformer
、自注意力機(jī)制
、深度思考
等內(nèi)容(先挖一個(gè)大坑)。
什么是生成式大模型
大家平時(shí)接觸的AI基本都是生成式大模型,比如我們熟知的ChatGPT、DeepSeek等。在ChatGPT還沒(méi)火之前,判別式模型是最熱門(mén)的,也就是國(guó)內(nèi)的科技公司花了大精力去研究的領(lǐng)域,從現(xiàn)在的上帝視角來(lái)看只有OpenAI走了正確的路。
判別式模型的作用主要是分類(lèi),在我們的生活中到處都是判別式模型的影子,比如:
- 垃圾郵件分類(lèi)器: 判斷一封郵件是"垃圾郵件"還是"正常郵件"。
- 情感分析: 分析一個(gè)商品評(píng)價(jià)是"積極"、"消極"還是"中性"。
- 人臉識(shí)別: 判斷一張臉屬于數(shù)據(jù)庫(kù)中的哪個(gè)人。
- 圖像識(shí)別: 識(shí)別一張圖片中的物體是什么。
判別式模型做的事情只能是一個(gè)輔助工具,不能執(zhí)行一些創(chuàng)造性的任務(wù),比如寫(xiě)文章、寫(xiě)代碼等。
但是生成式大模型就能突破判別式模型的天花板,不僅可以做判別式模型能夠做到的所有事情,還能執(zhí)行一些大家熟知的創(chuàng)造性的任務(wù),比如寫(xiě)文章、寫(xiě)代碼等。
生成式大模型的主要特點(diǎn)就是大,這里的大指的是模型的規(guī)模。主要體現(xiàn)在兩個(gè)方面:參數(shù)數(shù)量和訓(xùn)練數(shù)據(jù)量。
現(xiàn)在的那些大模型基本都是以B
為單位,比如DeepSeek R1最小的是2B
,最大的是685B
。這里的B
是指Billion
,也就是10億
。2B
的意思是20億
個(gè)參數(shù),685B
的意思是6850億
個(gè)參數(shù)。
DeepSeek
為什么這些大模型的參數(shù)數(shù)量會(huì)這么大呢?
答案是ChatGPT發(fā)現(xiàn)當(dāng)模型的參數(shù)數(shù)量達(dá)到一個(gè)臨界點(diǎn)后,模型突然就開(kāi)悟了一樣,能夠理解人類(lèi)語(yǔ)言的含義,并且能夠生成符合人類(lèi)語(yǔ)言習(xí)慣的回答,這就是大家常說(shuō)的模型的涌現(xiàn)能力。量變引起質(zhì)變,大力出奇跡(手動(dòng)狗頭)。
在接下來(lái)的文章中我們講的大模型都是指生成式大模型,因?yàn)?/span>判別式模型和生成式大模型比起來(lái)完全就是弟弟,人們的注意力現(xiàn)在基本都放在了生成式大模型上。
文字接龍
大模型所做的事情本質(zhì)就是文字接龍,所以在講如何訓(xùn)練出一個(gè)ChatGPT之前我們來(lái)聊聊文字接龍。
jielong
人類(lèi)在做文字接龍的時(shí)候會(huì)結(jié)合自己掌握的知識(shí)去思考下一個(gè)字應(yīng)該接什么。
比如,輸入是人工智
時(shí),大部分人都會(huì)接成能
,組合成人工智能
這個(gè)詞,他的概率是80%(我瞎說(shuō)的)。當(dāng)然有人會(huì)覺(jué)得下一個(gè)字應(yīng)該是障
,組合成人工智障
這個(gè)詞,他的概率是10%。還有一些情況下會(huì)接一
,組合成人工智能一
,這種就是非常少見(jiàn)的情況,所以他的概率是0.01。
如果我們將文字接龍抽象化成一個(gè)函數(shù),那么這個(gè)函數(shù)就是:
function textJieLong(input) {
let arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10,...
if (路人A) {
return'能'
} elseif (路人B) {
return'障'
} elseif (路人C) {
return'一'
} else {
return'...'
}
}
// 輸出:能 概率:80%
// 輸出:障 概率:10%
// 輸出:一 概率:0.01%
// 輸出:.. 概率:...
textJieLong('人工智')
這個(gè)textJieLong
函數(shù)就可以被看作是一個(gè)大模型,函數(shù)的輸出結(jié)果就是大模型的輸出結(jié)果。
函數(shù)中的一系列arg1
、arg2
等參數(shù)就是大模型的參數(shù),我們常說(shuō)的8B
就是說(shuō)明有80億個(gè)參數(shù),也就是有80億個(gè)arg
參數(shù)。
那么模型訓(xùn)練的作用是干嘛呢?
模型訓(xùn)練就是我們給textJieLong
函數(shù)一堆輸入和輸出的數(shù)據(jù),然后根據(jù)這些輸入和輸出的數(shù)據(jù)去反推arg1
、arg2
等參數(shù)。
輸入:人工智
輸出:能
輸入:中國(guó)的首都是
輸出:北京
輸入:今天天氣適合在家
輸出:打游戲
很多組輸入和輸出...
有沒(méi)有覺(jué)得這個(gè)和小學(xué)的方程式很像,一堆輸入,一堆輸出,然后求解方程式里面的未知數(shù),這些未知數(shù)就是模型的參數(shù)。
其實(shí)訓(xùn)練模型的過(guò)程就是計(jì)算求解這些參數(shù)的過(guò)程??! 每一次的訓(xùn)練都會(huì)去不斷的更新這些參數(shù),直到模型吐出的結(jié)果滿足我們的預(yù)期。
訓(xùn)練模型會(huì)經(jīng)歷哪些階段
訓(xùn)練一個(gè)模型會(huì)經(jīng)歷三個(gè)階段,對(duì)應(yīng)下面的這張圖的三個(gè)階段:
three
第一張圖為:自我學(xué)習(xí),累計(jì)實(shí)力(預(yù)訓(xùn)練 Pre-training)
第二張圖為:名師指點(diǎn),發(fā)揮潛力(監(jiān)督微調(diào) SFT)
第三張圖為:參與實(shí)戰(zhàn),打磨技巧(強(qiáng)化學(xué)習(xí) RLHF)
這三個(gè)階段都是大模型在學(xué)習(xí)如何進(jìn)行文字接龍,只是訓(xùn)練的資料不同。
第一階段:自我學(xué)習(xí),累計(jì)實(shí)力(預(yù)訓(xùn)練 Pre-training)
在講預(yù)訓(xùn)練之前,我們先來(lái)聊聊在進(jìn)行預(yù)訓(xùn)練之前的模型是什么樣的?
一個(gè)大模型的結(jié)構(gòu)大概是下面這樣的:
structure
主要就是很多個(gè)transformer堆疊在一起,并且像ChatGPT這種生成式大模型他是僅解碼器模型,沒(méi)有編碼器模塊(這段話看不懂就算了,后面單獨(dú)有文章講transformer)。
用戶的輸入,也就是transformer模塊的輸入,然后每個(gè)transformer模塊會(huì)輸出一個(gè)結(jié)果,然后將上一個(gè)transformer模塊的輸出作為下一個(gè)transformer模塊的輸入,最后輸出一個(gè)結(jié)果,這個(gè)結(jié)果就是大模型的輸出結(jié)果。
任何文字資料都可以作為這一階段上面的訓(xùn)練資料,所以這一階段會(huì)大量爬取網(wǎng)絡(luò)上面的文本用于模型的訓(xùn)練。
所以在這一階段會(huì)進(jìn)行大量的數(shù)據(jù)進(jìn)行訓(xùn)練(99%的訓(xùn)練數(shù)據(jù)都是在這一階段完成的),當(dāng)訓(xùn)練數(shù)據(jù)的量達(dá)到某個(gè)臨界點(diǎn)后,模型就能夠理解人類(lèi)語(yǔ)言的含義(至于為什么模型能夠理解人類(lèi)語(yǔ)言的含義,目前沒(méi)有人能夠說(shuō)清楚)。
這一階段的訓(xùn)練肯定能夠訓(xùn)練出一個(gè)大模型嗎?
答案是:不一定。除了訓(xùn)練模型找出來(lái)的參數(shù)之外還有一些人工設(shè)置的參數(shù),這些參數(shù)我們稱之為超參數(shù)。這些超參數(shù)都是通過(guò)人工設(shè)置的,在模型訓(xùn)練過(guò)程中也不會(huì)改變,比如:
- 模型的層數(shù)
- 模型的維度
- 模型的頭數(shù)
當(dāng)在訓(xùn)練模型時(shí)失敗了(沒(méi)有找到參數(shù)符合訓(xùn)練資料),就需要手動(dòng)調(diào)整超參數(shù)。
在進(jìn)行預(yù)訓(xùn)練之前,模型的輸出是隨機(jī)的。比如你輸入:中國(guó)的首都是
,模型會(huì)輸出:你好吖
。明顯輸入和輸出是沒(méi)有任何關(guān)聯(lián)的。
經(jīng)過(guò)預(yù)訓(xùn)練后的模型是基礎(chǔ)模型,這種模型的名字包含一個(gè)Base
字段。
base
經(jīng)過(guò)預(yù)訓(xùn)練后,模型突然像開(kāi)竅了一樣能夠理解人類(lèi)語(yǔ)言的含義。這個(gè)時(shí)候的模型只會(huì)成語(yǔ)接龍,沒(méi)有接受人類(lèi)的調(diào)教,所以他不能回答你的問(wèn)題,他只會(huì)拋出更多的問(wèn)題給你。如圖:
我在colab上面跑的一個(gè)千問(wèn)3的4B Base模型,輸入是:中國(guó)的首都是什么?
base-ask
從圖中可以看到此時(shí)模型的輸出奇奇怪怪的,他沒(méi)有回答我的問(wèn)題,反而拋出更多的問(wèn)題。
我又跑了一個(gè)千問(wèn)3的4B模型,同樣輸入是:中國(guó)的首都是什么?
qa
從圖中可以看到同樣都是4B的千問(wèn)3模型,經(jīng)過(guò)微調(diào)后不僅擁有了思考能力(think標(biāo)簽就是模型思考的過(guò)程),并且還能回答我們的問(wèn)題了。
第二階段:名師指點(diǎn),發(fā)揮潛力(監(jiān)督微調(diào) SFT)
經(jīng)過(guò)上個(gè)階段預(yù)訓(xùn)練pre-training海量的數(shù)據(jù)訓(xùn)練后,模型突然就涌現(xiàn)了“智慧”,能夠理解人類(lèi)語(yǔ)言的含義,但是模型只會(huì)成語(yǔ)接龍,不會(huì)回答你的問(wèn)題。
所以在這個(gè)階段我們需要訓(xùn)練模型,讓他能夠?qū)W會(huì)如何回答你的問(wèn)題。
在這個(gè)階段,我們只需要收集少量但高質(zhì)量的數(shù)據(jù)集。這里的少量是和第一階段海量的數(shù)據(jù)集相比是少量,其實(shí)也會(huì)覆蓋各種任務(wù)的數(shù)據(jù)集。
在這一階段的目標(biāo)是把模型打造成一個(gè)通才,讓他能夠回答各種問(wèn)題。
模型微調(diào)的數(shù)據(jù)集主要有兩種格式:Alpaca
和ShareGPT
其中Alpaca
數(shù)據(jù)集是下面這樣的:
[
{
"instruction": "人類(lèi)指令(必填)",
"input": "人類(lèi)輸入(選填)",
"output": "模型回答(必填)",
"system": "系統(tǒng)提示詞(選填)",
"history": [
["第一輪指令(選填)", "第一輪回答(選填)"],
["第二輪指令(選填)", "第二輪回答(選填)"]
]
}
]
ShareGPT
數(shù)據(jù)集是下面這樣的:
{
"conversations": [
{
"from": "human",
"value": "你好,我出生于1990年5月15日。你能告訴我我今天幾歲了嗎?"
},
{
"from": "function_call",
"value": "{\"name\": \"calculate_age\", \"arguments\": {\"birthdate\": \"1990-05-15\"}}"
},
{
"from": "observation",
"value": "{\"age\": 31}"
},
{
"from": "gpt",
"value": "根據(jù)我的計(jì)算,你今天31歲了。"
}
],
"tools": "[{\"name\": \"calculate_age\", \"description\": \"根據(jù)出生日期計(jì)算年齡\", \"parameters\": {\"type\": \"object\", \"properties\": {\"birthdate\": {\"type\": \"string\", \"description\": \"出生日期以YYYY-MM-DD格式表示\"}}, \"required\": [\"birthdate\"]}}]"
}
從上面可以看到不管是Alpaca
還是ShareGPT
本質(zhì)都是通過(guò)問(wèn)答的形式來(lái)訓(xùn)練模型,在數(shù)據(jù)集中拋出問(wèn)題,并且給出問(wèn)題的答案,告訴模型遇見(jiàn)這樣的問(wèn)題就應(yīng)該這樣去回答。
當(dāng)訓(xùn)練的數(shù)據(jù)量達(dá)到某個(gè)臨界點(diǎn)時(shí),模型突然就開(kāi)竅了,不光能夠回答我們預(yù)設(shè)的問(wèn)題,并且類(lèi)似的問(wèn)題也能夠回答,有點(diǎn)像舉一反三的感覺(jué)。
前面我們講過(guò)這一階段想要將模型訓(xùn)練成一個(gè)通才,那么就需要人工標(biāo)注的高質(zhì)量一問(wèn)一答的數(shù)據(jù)集。
雖然我們前面說(shuō)過(guò)這一階段所需的數(shù)據(jù)集比較“少”,但是這里的“少”是和第一階段預(yù)訓(xùn)練相比起來(lái)比較少。畢竟第一階段訓(xùn)練的數(shù)據(jù)集基本是網(wǎng)絡(luò)上面能夠爬取到的所有資料,比起來(lái)當(dāng)然就少了。
并且在這一階段的數(shù)據(jù)還需要是人工標(biāo)注的高質(zhì)量數(shù)據(jù)集,涉及到人工的東西成本都不低。
OpenAI的做法是將其丟給外包公司來(lái)人工標(biāo)注,這個(gè)方法需要鈔能力的。沒(méi)有錢(qián)怎么辦呢?
答案是:可以對(duì)ChatGPT做逆向工程,由ChatGPT來(lái)幫我們生成微調(diào)數(shù)據(jù)集的問(wèn)題和答案。
人為的先給一些「訓(xùn)練數(shù)據(jù)樣例」讓 ChatGPT 看,
緊接著利用 ChatGPT 的續(xù)寫(xiě)功能,讓其不斷地舉一反三出新的訓(xùn)練數(shù)據(jù)集:
你被要求提供10個(gè)多樣化的任務(wù)指令。這些任務(wù)指令將被提供給GPT模型,我們將評(píng)估GPT模型完成指令的能力。
以下是你提供指令需要滿足的要求:
1.盡量不要在每個(gè)指令中重復(fù)動(dòng)詞,要最大化指令的多樣性。
2.使用指令的語(yǔ)氣也應(yīng)該多樣化。例如,將問(wèn)題與祈使句結(jié)合起來(lái)。
3.指令類(lèi)型應(yīng)該是多樣化的,包括各種類(lèi)型的任務(wù),類(lèi)別種類(lèi)例如:brainstorming,open QA,closed QA,rewrite,extract,generation,classification,chat,summarization。
4.GPT語(yǔ)言模型應(yīng)該能夠完成這些指令。例如,不要要求助手創(chuàng)建任何視覺(jué)或音頻輸出。例如,不要要求助手在下午5點(diǎn)叫醒你或設(shè)置提醒,因?yàn)樗鼰o(wú)法執(zhí)行任何操作。例如,指令不應(yīng)該和音頻、視頻、圖片、鏈接相關(guān),因?yàn)镚PT模型無(wú)法執(zhí)行這個(gè)操作。
5.指令用中文書(shū)寫(xiě),指令應(yīng)該是1到2個(gè)句子,允許使用祈使句或問(wèn)句。
6.你應(yīng)該給指令生成適當(dāng)?shù)妮斎?,輸入字段?yīng)包含為指令提供的具體示例,它應(yīng)該涉及現(xiàn)實(shí)數(shù)據(jù),不應(yīng)包含簡(jiǎn)單的占位符。輸入應(yīng)提供充實(shí)的內(nèi)容,使指令具有挑戰(zhàn)性。
7.并非所有指令都需要輸入。例如,當(dāng)指令詢問(wèn)一些常識(shí)信息,比如“世界上最高的山峰是什么”,不需要提供具體的上下文。在這種情況下,我們只需在輸入字段中放置“<無(wú)輸入>”。當(dāng)輸入需要提供一些文本素材(例如文章,文章鏈接)時(shí),就在輸入部分直接提供一些樣例。當(dāng)輸入需要提供音頻、圖片、視頻或者鏈接時(shí),則不是滿足要求的指令。
8.輸出應(yīng)該是針對(duì)指令和輸入的恰當(dāng)回答。
下面是10個(gè)任務(wù)指令的列表:
###
1. 指令: 在面試中如何回答這個(gè)問(wèn)題?
1. 輸入:當(dāng)你在車(chē)?yán)铼?dú)處時(shí),你會(huì)想些什么?
1. 輸出:如果是在晚上,我通常會(huì)考慮我今天所取得的進(jìn)步,如果是在早上,我會(huì)思考如何做到最好。我也會(huì)嘗試練習(xí)感恩和活在當(dāng)下的狀態(tài),以避免分心駕駛。
###
2. 指令: 按人口對(duì)這些國(guó)家進(jìn)行排名。
2. 輸入:巴西,中國(guó),美國(guó),日本,加拿大,澳大利亞
2. 輸出:中國(guó),美國(guó),巴西,日本,加拿大,澳大利亞
###
3. 指令:
下面是ChatGPT的回答:
chat-gpt
從圖中可以看到ChatGPT已經(jīng)幫我們生成了一系列的問(wèn)題和答案。
并且可以結(jié)合字節(jié)seed團(tuán)隊(duì)發(fā)布的《Reformulation for Pretraining Data Augmentation》論文生成更多的數(shù)據(jù)集,論文地址:https://arxiv.org/abs/2502.04235v2
這篇論文的觀點(diǎn)是,我們可以通過(guò)同一個(gè)問(wèn)題,不同類(lèi)型的受眾就可以有不同的答案。
比如一個(gè)問(wèn)題:什么是大模型
,根據(jù)不同類(lèi)型的受眾就應(yīng)該是不同的答案。
這個(gè)問(wèn)題可以映射為:“學(xué)術(shù)論文-科研人員”、“對(duì)話體-老年人”、“教科書(shū)-中學(xué)生”這三種類(lèi)型,每種類(lèi)型都有不同的答案。這樣就可以讓我們的數(shù)據(jù)集的規(guī)模輕松增加3倍。
除此之外還有一些公開(kāi)的數(shù)據(jù)集:
- HuggingFace(??):大模型時(shí)代的GitHub,上面除了開(kāi)源模型之外還有很多開(kāi)源數(shù)據(jù)集地址:https://huggingface.co/datasets
- Kaggle(??):Kaggle 是一個(gè)數(shù)據(jù)科學(xué)平臺(tái),不僅提供大量的公開(kāi)數(shù)據(jù)集,還舉辦各種數(shù)據(jù)科學(xué)競(jìng)賽。其數(shù)據(jù)集涵蓋了計(jì)算機(jī)視覺(jué)、自然語(yǔ)言處理、數(shù)據(jù)可視化等多個(gè)領(lǐng)域。地址:https://www.kaggle.com/datasets
- Google DataSet Search(??):一個(gè)專門(mén)用于搜索數(shù)據(jù)集的搜索引擎,能夠幫助用戶找到互聯(lián)網(wǎng)上公開(kāi)的數(shù)據(jù)集。地址:https://datasetsearch.research.google.com
- awesome-public-datasets:GitHub 上的 awesome-public-datasets 是一個(gè)開(kāi)源項(xiàng)目,匯集了各種主題的高質(zhì)量公共數(shù)據(jù)集(不過(guò)已經(jīng)有段時(shí)間沒(méi)更新了)。這些數(shù)據(jù)集按照主題分類(lèi),如農(nóng)業(yè)、生物、氣候、計(jì)算機(jī)網(wǎng)絡(luò)、教育、金融等。地址:https://github.com/awesomedata/awesome-public-datasets
- openDataLab:一個(gè)專注于中文數(shù)據(jù)集的平臺(tái),也是中國(guó)本土最大的開(kāi)源數(shù)據(jù)集平臺(tái),提供了豐富的中文數(shù)據(jù)集資源。地址:https://opendatalab.com
- ModelScope:ModelScope 是阿里巴巴推出的 AI 模型與數(shù)據(jù)集中心,除了提供預(yù)訓(xùn)練模型外,還包含與模型相關(guān)的數(shù)據(jù)集。其實(shí)有點(diǎn)類(lèi)似于中國(guó)版的 HuggingFace。地址:https://modelscope.cn/datasets
第二階段監(jiān)督微調(diào) SFT
其實(shí)就是畫(huà)龍點(diǎn)睛
。
第三階段:參與實(shí)戰(zhàn),打磨技巧(強(qiáng)化學(xué)習(xí) RLHF)
經(jīng)過(guò)第二階段監(jiān)督微調(diào) SFT
后,模型已經(jīng)能夠回答各種問(wèn)題了,可以當(dāng)做一個(gè)問(wèn)答助手使用了。
但是還可以進(jìn)一步提升其回答質(zhì)量,這是通過(guò)強(qiáng)化學(xué)習(xí)(RLHF)來(lái)實(shí)現(xiàn)的。這個(gè)過(guò)程分為兩個(gè)步驟。
- 獎(jiǎng)勵(lì)模型(Reward Model 簡(jiǎn)稱 RM)
- 強(qiáng)化學(xué)習(xí)(Reinforcement Learning 簡(jiǎn)稱 RL)
為什么需要RLHF?
回想第二階段有監(jiān)督微調(diào)SFT,我們只告訴模型什么是好的數(shù)據(jù),但是沒(méi)有告訴他什么是不好的數(shù)據(jù)。
我們通過(guò)有監(jiān)督微調(diào)SFT引導(dǎo)模型將在第一階段預(yù)訓(xùn)練pre-training學(xué)習(xí)到的海量知識(shí)在合適的問(wèn)題下面輸出出來(lái)。但是因?yàn)榈诙A段的數(shù)據(jù)集是人工標(biāo)注而來(lái)的,數(shù)據(jù)很有限,導(dǎo)致我們對(duì)模型的引導(dǎo)能力也有限。
這將導(dǎo)致預(yù)訓(xùn)練模型中原先「錯(cuò)誤」或「有害」的知識(shí)沒(méi)能在 SFT 數(shù)據(jù)中被糾正,
從而出現(xiàn)「有害性」或「幻覺(jué)」的問(wèn)題。
所以才需要第三階段強(qiáng)化學(xué)習(xí)RLHF來(lái)解決這些問(wèn)題,告訴模型什么是好的數(shù)據(jù),什么是不好的數(shù)據(jù)。
我們先來(lái)看看什么是獎(jiǎng)勵(lì)模型RM?
獎(jiǎng)勵(lì)模型RM是一個(gè)單獨(dú)訓(xùn)練的一個(gè)模型,這個(gè)模型用于給第二階段SFT訓(xùn)練出來(lái)的模型的輸出打分。
注意,這里的打分不是真的打分,本質(zhì)上排列一個(gè)好壞的先后順序。
就像是給作文打分一樣,不同的人打的分都不相同。
但是如果改成根據(jù)內(nèi)容的好壞進(jìn)行排序就很容易了,比如作文1、作文2、作文3,不同的人排序大概率都相同。
獎(jiǎng)勵(lì)模型RM本質(zhì)依然還是給不同的輸出進(jìn)行好壞的排序,然后根據(jù)這些排序利用【分差變化】計(jì)算出每一個(gè)輸出的得分。
根據(jù)第二階段SFT訓(xùn)練出來(lái)的模型根據(jù)不同的temperature值生成多個(gè)輸出,然后使用獎(jiǎng)勵(lì)模型RM對(duì)這些輸出進(jìn)行打分。
接著就是強(qiáng)化學(xué)習(xí)RL,其實(shí)就是利用每個(gè)輸出的打分反過(guò)來(lái)影響模型的參數(shù)。通過(guò)調(diào)整參數(shù)讓打分較高的輸出出現(xiàn)的概率更大,打分更低的輸出出現(xiàn)的概率更小。
為什么需要獎(jiǎng)勵(lì)模型RM?
并不是所有人在使用ChatGPT時(shí)會(huì)對(duì)輸出進(jìn)行“好”或者“壞”的評(píng)價(jià),所以需要一個(gè)獎(jiǎng)勵(lì)模型RM來(lái)模擬人類(lèi)的反饋,人類(lèi)覺(jué)得不錯(cuò)的輸出獎(jiǎng)勵(lì)模型就會(huì)給出高的得分,反之則給出低的得分。
總結(jié)
這篇文章我們講了訓(xùn)練出一個(gè)ChatGPT需要經(jīng)歷三個(gè)階段:
- 第一階段:自我學(xué)習(xí),累計(jì)實(shí)力(預(yù)訓(xùn)練 Pre-training)
- 第二階段:名師指點(diǎn),發(fā)揮潛力(監(jiān)督微調(diào) SFT)
- 第三階段:參與實(shí)戰(zhàn),打磨技巧(強(qiáng)化學(xué)習(xí) RLHF)
在第一階段預(yù)訓(xùn)練Pre-training階段,大模型通過(guò)網(wǎng)絡(luò)上面大量的數(shù)據(jù)資料進(jìn)行自我學(xué)習(xí)(那些參數(shù)很大的模型基本都將網(wǎng)絡(luò)上面的資料全部學(xué)完了),最終在某個(gè)臨界點(diǎn)時(shí)突然就開(kāi)竅了理解了人類(lèi)語(yǔ)言的含義。但是此時(shí)模型只會(huì)文字接龍,不會(huì)回答你的問(wèn)題。
這一步我理解為量變引起質(zhì)變,大力出奇跡。
在第二階段需要一個(gè)老師來(lái)指導(dǎo)大模型應(yīng)該如何利用第一階段學(xué)習(xí)的知識(shí)回答問(wèn)題,所以需要一些人工標(biāo)注的高質(zhì)量數(shù)據(jù)集來(lái)對(duì)大模型進(jìn)行監(jiān)督微調(diào)SFT,通過(guò)這些高質(zhì)量數(shù)據(jù)集模型學(xué)會(huì)了如何回答問(wèn)題。
這一步我理解為畫(huà)龍點(diǎn)睛。
在前面的階段我們只告訴模型什么是好的數(shù)據(jù),但是沒(méi)有告訴他什么是壞的數(shù)據(jù)。所以在第三階段我們需要去訓(xùn)練一個(gè)獎(jiǎng)勵(lì)模型RM來(lái)對(duì)模型的輸出進(jìn)行打分,通過(guò)打分來(lái)影響模型的輸出,讓得分高的輸出出現(xiàn)的概率更大,得分低的輸出出現(xiàn)的概率更小。