女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

拆解大語言模型RLHF中的PPO算法

智能感知與物聯(lián)網(wǎng)技術(shù)研究所 ? 來源:智能感知與物聯(lián)網(wǎng)技術(shù)研 ? 作者:智能感知與物聯(lián)網(wǎng) ? 2023-12-11 18:30 ? 次閱讀

為什么大多數(shù)介紹大語言模型 RLHF 的文章,一講到 PPO 算法的細(xì)節(jié)就戛然而止了呢?要么直接略過,要么就只扔出一個(gè) PPO 的鏈接。然而 LLM x PPO 跟傳統(tǒng)的 PPO 還是有些不同的呀。

其實(shí)在 ChatGPT 推出后的相當(dāng)一段時(shí)間內(nèi),我一直在等一篇能給我講得明明白白的文章,但是一直未能如愿。我想大概是能寫的人都沒時(shí)間寫吧。 前幾個(gè)月,自己在工作中遇到要用到 PPO 的場(chǎng)景了。我心想,干脆自己啃算了。 于是我找到了 InstructGPT 引用的 OpenAI 自家的大語言模型 RLHF 論文《fine-tuning language models from human preferences》和《learning to summarize from human feedback》的源碼,逐行閱讀。然后用近似但不完全相同的風(fēng)格復(fù)現(xiàn)了一遍。后來又和同事一起把自己的實(shí)現(xiàn)和微軟的 DeepSpeed-Chat 的實(shí)現(xiàn)相互印證,才算是理解了。 既然已經(jīng)有了一些經(jīng)驗(yàn),為何不將它分享出來呢?就當(dāng)是拋磚引玉吧。萬一寫的不對(duì),也歡迎大家一起交流討論。 由于本文以大語言模型 RLHF 的 PPO 算法為主,所以希望你在閱讀前先弄明白大語言模型 RLHF 的前兩步,即 SFT ModelReward Model 的訓(xùn)練過程。另外因?yàn)楸疚牟皇羌冎v強(qiáng)化學(xué)習(xí)的文章,所以我在敘述的時(shí)候不會(huì)假設(shè)你已經(jīng)非常了解強(qiáng)化學(xué)習(xí)了。只是如果完全沒有了解過,你可能會(huì)覺得有些操作看上去沒有那么顯然。但只要你非常了解語言模型和深度學(xué)習(xí),應(yīng)該不會(huì)影響你把整個(gè)流程給捋順。 接下來,我會(huì)把大語言模型 RLHF 中的 PPO 分成三部分逐一介紹。這三部分分別是采樣、反饋學(xué)習(xí) 在開始之前,我先用一段偽代碼把三部分的關(guān)系簡(jiǎn)要說明一下(先建立一個(gè)印象,看不懂也沒關(guān)系,后面自然會(huì)看懂):

policy_model=load_model()

forkinrange(20000):
#采樣(生成答案)
prompts=sample_prompt()
data=respond(policy_model,prompts)

#反饋(計(jì)算獎(jiǎng)勵(lì))
rewards=reward_func(reward_model,data)

#學(xué)習(xí)(更新參數(shù))
forepochinrange(4):
policy_model=train(policy_model,prompts,data,rewards)

對(duì)于其中的每部分我都會(huì)用計(jì)算圖來輔助描述,然后還會(huì)根據(jù)我的描述更新這段偽代碼。 好了,讓我們開始這趟旅程吧~
大語言模型的 RLHF,實(shí)際上是模型先試錯(cuò)再學(xué)習(xí)的過程。 我們扮演著老師的角色,給出有趣的問題,而模型則會(huì)像小學(xué)生一樣,不斷嘗試給出答案。模型會(huì)對(duì)著黑板寫下它的答案,有時(shí)候是正確的,有時(shí)候會(huì)有錯(cuò)誤。我們會(huì)仔細(xì)檢查每一個(gè)答案,如果它表現(xiàn)得好,就會(huì)給予它高聲贊揚(yáng);如果它表現(xiàn)不佳,我們則會(huì)給予它耐心的指導(dǎo)和反饋,幫助它不斷改進(jìn),直到達(dá)到令人滿意的水平。 1

采樣

采樣就是學(xué)生回答問題的過程,是模型根據(jù)提示(prompt)輸出回答(response)的過程,或者說是模型自行生產(chǎn)訓(xùn)練數(shù)據(jù)的過程。例如:

wKgZomV1whOAHrucAAB5BIr5h4Y130.png

PPO 在這一部分做了什么呢?先明確一個(gè)概念——策略(policy),它就是 RLHF 中的“學(xué)生”。policy 由兩個(gè)模型組成,一個(gè)叫做演員模型(Actor),另一個(gè)叫做評(píng)論家模型(Critic)。它們就像是學(xué)生大腦中的兩種意識(shí),一個(gè)負(fù)責(zé)決策,一個(gè)負(fù)責(zé)總結(jié)得失。其中演員就是我們想要訓(xùn)練出來的大模型。在用 PPO 訓(xùn)練它之前,它就是 RLHF 的第一步訓(xùn)練出來的 SFT (Supervised Fine-Tuning) model。輸入一段上下文,它將輸出下一個(gè) token 的概率分布 context 。評(píng)論家是強(qiáng)化學(xué)習(xí)的輔助模型,輸入一段上下文,它將輸出下一個(gè) token 的“收益"。

什么是“收益”呢?簡(jiǎn)單來說就是從下一個(gè) token 開始,模型能夠獲得的總獎(jiǎng)勵(lì)(浮點(diǎn)數(shù)標(biāo)量)。這里說的獎(jiǎng)勵(lì)包括 Reward Model 給出的獎(jiǎng)勵(lì)。獎(jiǎng)勵(lì)是怎么給的,以及收益有什么用,這些內(nèi)容我們后面會(huì)詳細(xì)介紹。

wKgZomV1whSARyE3AAHDtmvdrb4521.png

▲policy模型結(jié)構(gòu)

從實(shí)現(xiàn)上說,評(píng)論家就是將演員模型的倒數(shù)第二層連接到一個(gè)新的全連接層上。除了這個(gè)全連接層之外,演員和評(píng)論家的參數(shù)都是共享的(如上圖)。

上面提到的模型結(jié)構(gòu)是較早期的版本,后續(xù)不共享參數(shù)的實(shí)現(xiàn)方式也有很多。

現(xiàn)在我們來看看 PPO 的采樣過程中有哪些模型和變量。如下圖,矩形表示模型,橢圓表示變量。

wKgZomV1whSAA6MeAAK9YUz9Tb4928.png

▲采樣流程(轉(zhuǎn)載須引用)

圖中的“old_policy”矩形就是剛剛說的 policy(為啥有個(gè)“old”前綴呢?后面我會(huì)詳細(xì)解釋)。

采樣指的是 old_policy 從 prompt 池中抽出 M 個(gè) prompt 后,對(duì)每個(gè) prompt 進(jìn)行語言模型的 token 采樣:
  • 計(jì)算 response 的第 1 個(gè) token 的概率分布,然后從概率分布中采樣出第 1 個(gè) token
  • 根據(jù)第 1 個(gè) token,計(jì)算 response 的第2 個(gè) token 的概率分布,然后從概率分布中采樣出第 2 個(gè) token
  • ……
  • 根據(jù)前 N-1 個(gè) token,計(jì)算 response 的第 N 個(gè) token 的概率分布,然后從概率分布中采樣出第 N 個(gè) token
wKgZomV1whSAOribAAEJrtH6bK4024.gif▲語言模型的token采樣

然后就得到了三個(gè)輸出。假設(shè)對(duì)每個(gè) prompt,policy 生成的 token 的個(gè)數(shù)為 N,那么這三個(gè)輸出分別是:

  • response:M 個(gè)字符串,每個(gè)字符串包含 N 個(gè) token

  • old_log_probs:演員輸出的 M × N 的張量,包含了 response 中 token 的對(duì)數(shù)概率log(p(token|context))

  • old_values:評(píng)論家輸出的 M ×N的張量,包含了每次生成 token 時(shí)評(píng)論家預(yù)估的收益

得到這三個(gè)輸出后,采樣階段就就結(jié)束了。這三個(gè)輸出都是后續(xù)階段重要的輸入數(shù)據(jù)。

我們先將采樣部分的偽代碼更新一下:

#采樣
prompts=sample_prompt()
responses,old_log_probs,old_values=respond(policy_model,prompts)

就像是一場(chǎng)考試,學(xué)生已經(jīng)完成了答題環(huán)節(jié),他們?cè)诤诎迳狭粝铝舜鸢浮5@只是整個(gè)學(xué)習(xí)過程的一個(gè)環(huán)節(jié),接下來是關(guān)鍵的反饋步驟。

2

反饋

反饋就是老師檢查答案的過程,是獎(jiǎng)勵(lì)模型(Reward Model)給 response 打分的過程,或者說是獎(jiǎng)勵(lì)模型給訓(xùn)練數(shù)據(jù) X 標(biāo)上 Y 值的過程。 打出的分?jǐn)?shù)衡量了 response 的正確性,它也可以被視為 prompt 和 response 的匹配程度。 例如:

wKgZomV1whSASHORAABfSWQqjls976.pngReward Model 可以被比作班級(jí)里成績(jī)最好的學(xué)生,他能夠輔助老師批改作業(yè)。就像老師先教會(huì)這個(gè)學(xué)生如何批改作業(yè),之后這個(gè)學(xué)生就能獨(dú)立完成作業(yè)批改一樣,Reward Model 通過學(xué)習(xí)和訓(xùn)練,也能夠獨(dú)立地完成任務(wù)并給出正確的答案。 網(wǎng)上有很多資料介紹 Reward Model 的訓(xùn)練過程,這也不是本文的重點(diǎn),我就不再贅述了。 PPO 拿訓(xùn)練好的 Reward Mode 做了什么呢?我們接著看圖說話: wKgZomV1whSAFxqYAAKFshV8pUE928.png▲ 獎(jiǎng)勵(lì)流程(轉(zhuǎn)載須引用)從圖中我們可以看出,左上角的綠色矩形 reward model 拿到 prompt 和 response,然后輸出了分?jǐn)?shù) score。實(shí)際上發(fā)生的事情是,prompt 和 response 被拼接成一個(gè)字符串,接著被送入到 reward model 中,最后 reward model 計(jì)算出了匹配分?jǐn)?shù)。 你也許發(fā)現(xiàn)了,在圖中,score 并不是最終的獎(jiǎng)勵(lì)。它和最終的獎(jiǎng)勵(lì) rewards 之間還隔著一個(gè) reward function 函數(shù)。 這是因?yàn)?score 只能衡量結(jié)果的對(duì)錯(cuò),不能衡量過程的合理性。怎么衡量過程的合理性呢?一種簡(jiǎn)單粗暴的方法是:循規(guī)蹈矩,即為合理。 當(dāng)年愛因斯坦的相對(duì)論理論首次發(fā)表時(shí),遭遇了許多質(zhì)疑。后來,該理論被證明并得到了應(yīng)有的認(rèn)可。大家的目光可能都聚焦于愛因斯坦是如何堅(jiān)定不移地堅(jiān)持自己的理念并獲得成功的。 然而,你有沒有想過,那些反對(duì)和質(zhì)疑其實(shí)也是必要的。 在相對(duì)論理論出現(xiàn)之前,已經(jīng)有一個(gè)相對(duì)完整的物理系統(tǒng)。當(dāng)時(shí),一個(gè)年輕人突然出現(xiàn)挑戰(zhàn)這個(gè)系統(tǒng)。在不知道他的路數(shù)的情況下,有必要基于現(xiàn)有的經(jīng)驗(yàn)給予適當(dāng)?shù)馁|(zhì)疑。因?yàn)椴⒎敲總€(gè)人都是偉人啊。如果他的理論真的得到驗(yàn)證,那么就是給予肯定和榮譽(yù)的時(shí)候了。 語言模型也是一樣,在我們給予最終獎(jiǎng)勵(lì)之前,最好也對(duì)它的“標(biāo)新立異”給予少量的懲罰(即剛剛說的質(zhì)疑)。 怎么做呢?我們給它立一個(gè)規(guī)矩,只要它按照這個(gè)規(guī)矩來,就能獲得少量獎(jiǎng)勵(lì)。而這個(gè)規(guī)矩就是我們?cè)?SFT 階段已經(jīng)訓(xùn)練好的語言模型 ref_policy(圖中右下角的綠色矩形),或者說是完全還沒經(jīng)過強(qiáng)化學(xué)習(xí)訓(xùn)練的語言模型。 過程合理性獎(jiǎng)勵(lì)的計(jì)算方式是這樣的。ref_policy 拿到 prompt,然后給 old_policy 生成的 response 的每個(gè) token 計(jì)算對(duì)數(shù)概率,得到一個(gè)張量 ref_log_prob?,F(xiàn)在假設(shè) old_policy 的演員模型生成了第 i 個(gè) token,此時(shí)它應(yīng)該獲得的獎(jiǎng)勵(lì)為: wKgZomV1whWADJmRAAAgEyCANqA290.png

來理解一下這個(gè)式子:

  • ref_log_prob[i] 越高,ref_policy 越認(rèn)可 old_policy 的輸出,說明 old_policy 更守規(guī)矩,因此應(yīng)該獲得更高的獎(jiǎng)勵(lì);

  • old_log_prob[i] 越高,old_policy 獲得的獎(jiǎng)勵(lì)反而更低。old_log_prob[i] 作為正則項(xiàng),可以保證概率分布的多樣性。
有了這兩個(gè)直覺上的解釋,我們說式 (1) 是比較合理的。順便說一句,熟悉信息論的人也許注意到了,式 (1) 是 KL 散度的簡(jiǎn)化版本。實(shí)際上式 (1) 完全可以改成計(jì)算兩個(gè) token 的概率分布的 KL 散度。這是另一個(gè)話題,就不延伸了。 最終,我們將過程合理性獎(jiǎng)勵(lì)和結(jié)果正確性獎(jiǎng)勵(lì)合并起來,就得到了最終獎(jiǎng)勵(lì)的計(jì)算方式。 注意,我們只在最后一個(gè) token 上應(yīng)用結(jié)果正確性獎(jiǎng)勵(lì)(reward_model 的輸出)。也就是說,第 i 個(gè) token 的獎(jiǎng)勵(lì)的計(jì)算方式為: wKgZomV1whWAXNoRAABIZbvQ6bs141.png式 (2) 就是圖中“reward function”的計(jì)算內(nèi)容。 通俗來說,整個(gè) reward function 的計(jì)算邏輯是典型的霸總邏輯:除非你能拿到好的結(jié)果,否則你就得給我守規(guī)矩。注意,我們只對(duì) response 計(jì)算獎(jiǎng)勵(lì)。另外在整個(gè)反饋階段,reward_model 和 ref_policy 是不更新參數(shù)的。一旦給出 reward,就完成了反饋階段?,F(xiàn)在我們將反饋部分的偽代碼更新一下:

#采樣
prompts=sample_prompt()
responses,old_log_probs,old_values=respond(policy_model,prompts)

#policy_model的副本,不更新參數(shù)
ref_policy_model=policy_model.copy()

#反饋
scores=reward_model(prompts,responses)
ref_log_probs=analyze_responses(ref_policy_model,prompts,responses)
rewards=reward_func(reward_model,scores,old_log_probs,ref_log_probs)

這就像是老師在檢查學(xué)生的答案并給出評(píng)價(jià)后,學(xué)生們就可以了解他們的表現(xiàn)如何,并從中學(xué)習(xí)和進(jìn)步。然而,獲得反饋并不是結(jié)束,而是新的開始。正如學(xué)生需要用這些反饋來進(jìn)行復(fù)習(xí)和改進(jìn)一樣,模型也需要通過學(xué)習(xí)階段來優(yōu)化其性能和預(yù)測(cè)能力。
3

學(xué)習(xí)

“學(xué)習(xí)”就是學(xué)生根據(jù)反饋總結(jié)得失并自我改進(jìn)的過程,或者說是強(qiáng)化優(yōu)勢(shì)動(dòng)作的過程。

如果說前兩步分別是在收集數(shù)據(jù) X,以及給數(shù)據(jù)打上標(biāo)簽 Y。那么這一步就是在利用數(shù)據(jù) (X, Y) 訓(xùn)練模型。

"強(qiáng)化優(yōu)勢(shì)動(dòng)作"是 PPO 學(xué)習(xí)階段的焦點(diǎn)。在深入探討之前,我們首先要明確一個(gè)關(guān)鍵概念——優(yōu)勢(shì)。

此處,我們將優(yōu)勢(shì)定義為“實(shí)際獲得的收益超出預(yù)期的程度”。

為了解釋這個(gè)概念,請(qǐng)?jiān)试S我舉一個(gè)例子。假設(shè)一個(gè)高中生小明,他在高一時(shí)數(shù)學(xué)考試的平均分為 100 分,在此之后,大家對(duì)他的數(shù)學(xué)成績(jī)的預(yù)期就是 100 分了。到了高二,他的數(shù)學(xué)平均分提升到了 130 分。在這個(gè)學(xué)期,小明的數(shù)學(xué)成績(jī)顯然是超出大家的預(yù)期的。

表現(xiàn)是可用分?jǐn)?shù)量化的,故表現(xiàn)超出預(yù)期的程度也是可以用分?jǐn)?shù)差來量化的。我們可以認(rèn)為,在高二階段,小明超出預(yù)期的程度為 30 分(130 - 100)。根據(jù)優(yōu)勢(shì)的定義我們可以說,在高二階段,小明相對(duì)于預(yù)期獲得了 30 分的優(yōu)勢(shì)。

在這個(gè)例子中,實(shí)際已經(jīng)給出了 PPO 計(jì)算優(yōu)勢(shì)的方法:優(yōu)勢(shì) = 實(shí)際收益 - 預(yù)期收益。

對(duì)于語言模型而言,生成第 i 個(gè) token 的實(shí)際收益就是:從生成第 i 個(gè) token 開始到生成第 N 個(gè) token 為止,所能獲得的所有獎(jiǎng)勵(lì)的總和。我們用 return 來表示實(shí)際收益,它的計(jì)算方式如下:

wKgZomV1whaALQ-kAAArMC1YN6g343.png

* 寫給熟悉 RL 的人:簡(jiǎn)單起見,在這里我們既不考慮貼現(xiàn)也不計(jì)算廣義優(yōu)勢(shì)估計(jì) GAE預(yù)期收益又該如何計(jì)算呢? 記得我們?cè)凇安蓸印彪A段提到過,policy 包含演員模型和評(píng)論家模型,其中后者是用來預(yù)估收益的。其實(shí),當(dāng)時(shí)說的收益 old_values 就是現(xiàn)在我們想要計(jì)算的預(yù)期收益。評(píng)論家會(huì)為 response 中的每個(gè) token 計(jì)算一個(gè)預(yù)期收益,第 個(gè)預(yù)期收益記為 values[i] (它預(yù)估的是剛才提到的 )。現(xiàn)在,我們可以這樣計(jì)算生成第 i 個(gè) token 的優(yōu)勢(shì) a(這里我們使用采樣階段計(jì)算出來的 old_values):

wKgZomV1whaAYJJFAAAcTgZJtKM732.png

好的,我們已經(jīng)理解了優(yōu)勢(shì)的含義了?,F(xiàn)在終于可以揭開這個(gè)關(guān)鍵主題的面紗——在 PPO 學(xué)習(xí)階段,究竟什么是"強(qiáng)化優(yōu)勢(shì)動(dòng)作"。

所謂“強(qiáng)化優(yōu)勢(shì)動(dòng)作”,即強(qiáng)化那些展現(xiàn)出顯著優(yōu)勢(shì)的動(dòng)作。

在上面的小明的例子中,這意味著在高三階段,小明應(yīng)該持續(xù)使用高二的學(xué)習(xí)方法,因?yàn)樵诟叨A段,他的學(xué)習(xí)策略展示出了顯著的優(yōu)勢(shì)。

在語言模型中,根據(jù)上下文生成一個(gè) token 就是所謂的“動(dòng)作”。"強(qiáng)化優(yōu)勢(shì)動(dòng)作"表示:如果在上下文(context)中生成了某個(gè) token,并且這個(gè)動(dòng)作的優(yōu)勢(shì)很高,那么我們應(yīng)該增加生成該 token 的概率,即增加 p(token|context) 的值。

由于 policy 中的演員模型建模了 p(token|context),所以我們可以給演員模型設(shè)計(jì)一個(gè)損失函數(shù),通過優(yōu)化損失函數(shù)來實(shí)現(xiàn)“強(qiáng)化優(yōu)勢(shì)動(dòng)作”:

wKgZomV1whaAJPdwAAArcSNofCY999.png

其中:
  • 當(dāng)優(yōu)勢(shì)大于 0 時(shí),概率越大,loss 越?。灰虼藘?yōu)化器會(huì)通過增大概率(即強(qiáng)化優(yōu)勢(shì)動(dòng)作)來減小 loss
  • 當(dāng)優(yōu)勢(shì)小于 0 時(shí),概率越小,loss 越?。灰虼藘?yōu)化器會(huì)通過減小概率(即弱化劣勢(shì)動(dòng)作)來減小 loss

這很像巴浦洛夫的狗不是嗎?

另外還有兩個(gè)點(diǎn)值得注意:

  • 優(yōu)勢(shì)的絕對(duì)值越大,loss 的絕對(duì)值也就越大
  • 優(yōu)勢(shì)是不接收梯度回傳的

實(shí)際上,式 5 只是一個(gè)雛形。PPO 真正使用的演員的損失函數(shù)是這樣的:

wKgZomV1whaAGGMOAAA-lX-auPA137.png

* 寫給熟悉 RL 的人:簡(jiǎn)單起見,在這里我們既不考慮損失的截?cái)啵膊豢紤]優(yōu)勢(shì)的白化。

式子 6 相比式 5 子多了一個(gè)分母 。在式子 6 里, 表示 的一個(gè)較老的版本。因?yàn)樗唤邮仗荻然貍鳎晕覀兛梢詫?當(dāng)作常量,或者說,把它當(dāng)成 的學(xué)習(xí)率的一部分。我們來分析一下它的作用。以優(yōu)勢(shì)大于 0 的情況為例,對(duì)任意 ,當(dāng) 有較大的值的時(shí)候, 的參數(shù)的學(xué)習(xí)率更小。直觀來說,當(dāng)生成某個(gè) token 的概率已經(jīng)很大了的時(shí)候,即便這個(gè)動(dòng)作的優(yōu)勢(shì)很大,也不要再使勁增大概率了。或者更通俗地說,就是步子不要邁得太大。

現(xiàn)在的問題就是,我們應(yīng)該使用 p 的哪個(gè)老版本。還記得我們?cè)诒疚拈_頭時(shí)給出的偽代碼嗎(后來在介紹“采樣”和“反饋”階段時(shí)又各更新了一次),我們對(duì)著代碼來解釋:

policy_model=load_model()
ref_policy_model=policy_model.copy()

forkinrange(20000):
#采樣(已更新)
prompts=sample_prompt()
responses,old_log_probs,old_values=respond(policy_model,prompts)

#反饋(已更新)
scores=reward_model(prompts,responses)
ref_log_probs=analyze_responses(ref_policy_model,prompts,responses)
rewards=reward_func(reward_model,scores,old_log_probs,ref_log_probs)

#學(xué)習(xí)
forepochinrange(4):
policy_model=train(policy_model,prompts,responses,old_log_probs,old_values,rewards)

簡(jiǎn)單來說,這段代碼做的事情是:迭代 2 萬次。在每次迭代中,通過采樣和反饋得到一份數(shù)據(jù),然后在學(xué)習(xí)階段使用數(shù)據(jù)微調(diào)語言模型。每份數(shù)據(jù)我們都拿來訓(xùn)練 4 個(gè) epoch。

那 使用 2 萬次迭代開始之前的演員模型的參數(shù)可以嗎?不行,那個(gè)版本過于老了(實(shí)際上就是 SFT,我們已經(jīng)在獎(jiǎng)勵(lì)階段中的 ref_policy 中用過了)。不妨使用同一次迭代的還未進(jìn)入學(xué)習(xí)階段的演員模型吧。如果是這樣的話,仔細(xì)一看, 不就是采樣階段得到的 old_log_probs 嗎?只是少了一個(gè)對(duì)數(shù)而已。這就是為什么我們?cè)诓蓸与A段,對(duì)所有的模型和參數(shù)都使用“old”前綴,就是為了區(qū)分模型和變量的版本。(補(bǔ)充:前面提到的 old_policy 指的是上面?zhèn)未a中采樣出 old_log_probs 的那個(gè)時(shí)刻的 policy_model)而對(duì)于 我們可以使用實(shí)時(shí)的演員模型的參數(shù)計(jì)算出來,然后用 log_prob 來表示它。于是,我們可以將式子 6 改寫成以下形式:wKgZomV1whaAKvAvAAAwyt_QTZ0792.png

至此,我們完整地描述了 PPO 的學(xué)習(xí)階段中“強(qiáng)化優(yōu)勢(shì)動(dòng)作”的方法。就像下面的計(jì)算圖展示的那樣(policy 與前面的圖中的 old_policy 不一樣,是實(shí)時(shí)版本的模型)。

wKgZomV1wheAdsuCAAIdiLLDIX0785.png

▲學(xué)習(xí)流程(轉(zhuǎn)載須引用)

等等,似乎還沒完。圖中還有一個(gè)叫 critic_loss 的沒提到過的東西。

當(dāng)然了,負(fù)責(zé)決策的演員需要學(xué)習(xí),難道總結(jié)得失的評(píng)論家就不需要學(xué)習(xí)了?評(píng)論家也是需要與時(shí)俱進(jìn)的嘛,否則畫評(píng)家難道不怕再次錯(cuò)過梵高那樣的天才?

前面我們提到過,評(píng)論家會(huì)為 response 中的每個(gè) token 計(jì)算一個(gè)預(yù)期收益,第 個(gè)預(yù)期收益記為 values[i],它預(yù)估的是

既然如此,就設(shè)計(jì)一個(gè)損失函數(shù)來衡量評(píng)論家預(yù)期收益和真實(shí)收益之間的差距。

PPO 用的是均方差損失(MSE):

wKgZomV1wheACC5sAAAvpWYO1ws303.png

* 寫給熟悉 RL 的人:由于我們不考慮 GAE,所以 returns 的計(jì)算也做了相應(yīng)的簡(jiǎn)化。

最終優(yōu)化 policy 時(shí)用的 loss 是演員和評(píng)論家的 loss 的加權(quán)和:

wKgZomV1wheAOHSPAAAe5oeG8iU778.png

這才算是真正完事兒了?,F(xiàn)在我們將整個(gè) PPO 的偽代碼都更新一下:

policy_model=load_model()
ref_policy_model=policy_model.copy()

forkinrange(20000):
#采樣
prompts=sample_prompt()
responses,old_log_probs,old_values=respond(policy_model,prompts)

#反饋
scores=reward_model(prompts,responses)
ref_log_probs,_=analyze_responses(ref_policy_model,prompts,responses)
rewards=reward_func(reward_model,scores,old_log_probs,ref_log_probs)

#學(xué)習(xí)
forepochinrange(4):
log_probs,values=analyze_responses(policy_model,prompts,responses)
advantages=advantage_func(rewards,old_values)
actor_loss=actor_loss_func(advantages,old_log_probs,log_probs)
critic_loss=critic_loss_func(rewards,values)
loss=actor_loss+0.1*critic_loss
train(loss,policy_model.parameters())

4

總結(jié)

到這里,大語言模型 RLHF 中 PPO 算法的完整細(xì)節(jié)就算介紹完了。掌握這些細(xì)節(jié)之后,我們可以做的有趣的事情就變多了。例如:

  • 你可以照著偽代碼從頭到尾自己實(shí)現(xiàn)一遍,以加深理解。相信我,這是非常有趣且快樂的過程

  • 你可以以此為契機(jī),把強(qiáng)化學(xué)習(xí)知識(shí)系統(tǒng)性地學(xué)一遍。你會(huì)發(fā)現(xiàn)很多強(qiáng)化學(xué)習(xí)的概念一下變得具象化了

  • 你可以在你的產(chǎn)品或者研究方向中思考 PPO 是否可以落地

  • 你也許會(huì)發(fā)現(xiàn) PPO 算法的不合理之處,那么就深入研究下去,直到做出自己的改進(jìn)

  • 你可以跟周圍不熟悉 PPO 的小伙伴吹牛,順便嘲諷對(duì)方(大誤)

總之,希望我們都因?yàn)檎莆樟酥R(shí)變得更加充實(shí)和快樂~


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4697

    瀏覽量

    94706
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5554

    瀏覽量

    122467
  • ChatGPT
    +關(guān)注

    關(guān)注

    29

    文章

    1586

    瀏覽量

    8789
  • 大模型
    +關(guān)注

    關(guān)注

    2

    文章

    3020

    瀏覽量

    3808
  • LLM
    LLM
    +關(guān)注

    關(guān)注

    1

    文章

    319

    瀏覽量

    678

原文標(biāo)題:拆解大語言模型RLHF中的PPO算法

文章出處:【微信號(hào):tyutcsplab,微信公眾號(hào):智能感知與物聯(lián)網(wǎng)技術(shù)研究所】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    語言模型的解碼策略與關(guān)鍵優(yōu)化總結(jié)

    本文系統(tǒng)性地闡述了大型語言模型(LargeLanguageModels,LLMs)的解碼策略技術(shù)原理及其實(shí)踐應(yīng)用。通過深入分析各類解碼算法的工作機(jī)制、性能特征和優(yōu)化方法,為研究者和工
    的頭像 發(fā)表于 02-18 12:00 ?491次閱讀
    大<b class='flag-5'>語言</b><b class='flag-5'>模型</b>的解碼策略與關(guān)鍵優(yōu)化總結(jié)

    語言模型管理的作用

    要充分發(fā)揮語言模型的潛力,有效的語言模型管理非常重要。以下,是對(duì)語言模型管理作用的分析,由AI部
    的頭像 發(fā)表于 01-02 11:06 ?318次閱讀

    語言模型開發(fā)框架是什么

    語言模型開發(fā)框架是指用于訓(xùn)練、推理和部署大型語言模型的軟件工具和庫(kù)。下面,AI部落小編為您介紹大語言
    的頭像 發(fā)表于 12-06 10:28 ?451次閱讀

    語言模型開發(fā)語言是什么

    在人工智能領(lǐng)域,大語言模型(Large Language Models, LLMs)背后,離不開高效的開發(fā)語言和工具的支持。下面,AI部落小編為您介紹大語言
    的頭像 發(fā)表于 12-04 11:44 ?581次閱讀

    云端語言模型開發(fā)方法

    云端語言模型的開發(fā)是一個(gè)復(fù)雜而系統(tǒng)的過程,涉及數(shù)據(jù)準(zhǔn)備、模型選擇、訓(xùn)練優(yōu)化、部署應(yīng)用等多個(gè)環(huán)節(jié)。下面,AI部落小編為您分享云端語言模型的開發(fā)
    的頭像 發(fā)表于 12-02 10:48 ?598次閱讀

    語言模型如何開發(fā)

    語言模型的開發(fā)是一個(gè)復(fù)雜且細(xì)致的過程,涵蓋了數(shù)據(jù)準(zhǔn)備、模型架構(gòu)設(shè)計(jì)、訓(xùn)練、微調(diào)和部署等多個(gè)階段。以下是對(duì)大語言模型開發(fā)步驟的介紹,由AI部
    的頭像 發(fā)表于 11-04 10:14 ?519次閱讀

    AI大模型在自然語言處理的應(yīng)用

    AI大模型在自然語言處理(NLP)的應(yīng)用廣泛且深入,其強(qiáng)大的語義理解和生成能力為NLP任務(wù)帶來了顯著的性能提升。以下是對(duì)AI大模型在NLP
    的頭像 發(fā)表于 10-23 14:38 ?1279次閱讀

    【《大語言模型應(yīng)用指南》閱讀體驗(yàn)】+ 基礎(chǔ)知識(shí)學(xué)習(xí)

    的表達(dá)方式和生成能力。通過預(yù)測(cè)文本缺失的部分或下一個(gè)詞,模型逐漸掌握語言的規(guī)律和特征。 常用的模型結(jié)構(gòu) Transformer架構(gòu):大語言
    發(fā)表于 08-02 11:03

    【《大語言模型應(yīng)用指南》閱讀體驗(yàn)】+ 基礎(chǔ)篇

    學(xué)習(xí)方法。其中文本向量化的三種編碼方式:獨(dú)熱編碼、靜態(tài)編碼和動(dòng)態(tài)編碼,這些概念描述是需要時(shí)間仔細(xì)研究理解的。 1.5章節(jié)終于開始講解大語言模型了,這也是基礎(chǔ)篇的最后一章節(jié),占據(jù)了基礎(chǔ)篇的一半篇幅
    發(fā)表于 07-25 14:33

    【《大語言模型應(yīng)用指南》閱讀體驗(yàn)】+ 俯瞰全書

    上周收到《大語言模型應(yīng)用指南》一書,非常高興,但工作項(xiàng)目繁忙,今天才品鑒體驗(yàn),感謝作者編寫了一部?jī)?nèi)容豐富、理論應(yīng)用相結(jié)合、印刷精美的著作,也感謝電子發(fā)燒友論壇提供了一個(gè)讓我了解大語言模型
    發(fā)表于 07-21 13:35

    語言模型的預(yù)訓(xùn)練

    隨著人工智能技術(shù)的飛速發(fā)展,自然語言處理(NLP)作為人工智能領(lǐng)域的一個(gè)重要分支,取得了顯著的進(jìn)步。其中,大語言模型(Large Language Model, LLM)憑借其強(qiáng)大的語言
    的頭像 發(fā)表于 07-11 10:11 ?876次閱讀

    Transformer語言模型簡(jiǎn)介與實(shí)現(xiàn)過程

    任務(wù),隨后迅速擴(kuò)展到其他NLP任務(wù),如文本生成、語言理解、問答系統(tǒng)等。本文將詳細(xì)介紹Transformer語言模型的原理、特點(diǎn)、優(yōu)勢(shì)以及實(shí)現(xiàn)過程。
    的頭像 發(fā)表于 07-10 11:48 ?2807次閱讀

    如何加速大語言模型推理

    隨著人工智能技術(shù)的飛速發(fā)展,大語言模型(LLM)已成為自然語言處理領(lǐng)域的核心工具,廣泛應(yīng)用于智能客服、文本生成、機(jī)器翻譯等多個(gè)場(chǎng)景。然而,大語言模型
    的頭像 發(fā)表于 07-04 17:32 ?940次閱讀

    語言模型(LLM)快速理解

    自2022年,ChatGPT發(fā)布之后,大語言模型(LargeLanguageModel),簡(jiǎn)稱LLM掀起了一波狂潮。作為學(xué)習(xí)理解LLM的開始,先來整體理解一下大語言模型。一、發(fā)展歷史大
    的頭像 發(fā)表于 06-04 08:27 ?1655次閱讀
    大<b class='flag-5'>語言</b><b class='flag-5'>模型</b>(LLM)快速理解

    LLM之外的性價(jià)比之選,小語言模型

    。然而在一些對(duì)實(shí)時(shí)性要求較高的應(yīng)用,比如AI客服、實(shí)時(shí)數(shù)據(jù)分析等,大語言模型并沒有太大的優(yōu)勢(shì)。 ? 在動(dòng)輒萬億參數(shù)的LLM下,硬件需求已經(jīng)遭受了不小的挑戰(zhàn)。所以面對(duì)一些相對(duì)簡(jiǎn)單的任務(wù),規(guī)模較小的小
    的頭像 發(fā)表于 06-03 05:15 ?2645次閱讀
    LLM之外的性價(jià)比之選,小<b class='flag-5'>語言</b><b class='flag-5'>模型</b>