適合本身對強化學習有基本了解
一、什么是強化學習
一句話:在當前狀態(State)下,智能體(Agent)與環境(Environment)交互,并采取動作(Action)進入下一狀態,過程中獲得獎勵(Reward,有正向有負向),從而實現從環境中學習。
在LLM場景下,提到RL一般是指RLHF(人類偏好對齊),此時上述關鍵概念介紹如下:
-
Agent: 語言模型本身,例如GPT、LLaMA。
-
Environment: 訓練階段,環境是獎勵模型RM,它基于人類標注的偏好數據對生成的文本評分。在部署階段,環境是真實用戶,用戶的實際反饋(如點擊、停留時間、修正等)作為隱式獎勵。
-
State: 當前文本上下文(Prompt+已生成的Token序列),State會受到模型的上下文窗口限制,需要注意力機制捕捉長程依賴。
-
Action: 生成下一個Token。動作空間是整個詞表,每一步選擇一個token生成文本。特點是actions具備強依賴性,單個action的獎勵不好評估,需要對action序列進行評估。
-
Reward: 獎勵模型對完整響應的打分,評價維度一般包含文本的流暢性、相關性、準確性、用戶滿意度等
二、強化學習基本概念
強化學習的目標是最大化累積獎勵的期望
1、馬爾科夫決策過程(Markov Decision Process,MDP)
強化學習過程是一個馬爾可夫決策過程,這是指下一個狀態和獎勵僅依賴于當前狀態和動作,即滿足馬爾可夫性。
2、動作空間A
整個詞表
3、狀態空間S
當前環境中所有可能狀態的集合。
狀態 = 當前文本序列(Prompt + 已生成的Token序列)。
因此狀態空間理論上接近無限,但實際會受到上下文窗口大小的限制。
例如,若上下文窗口為2048,詞表大小為50k,則狀態空間規模約為 ?
。
4、策略
智能體在某一狀態下選擇動作的準則,一般有“確定性策略”和“隨機性策略”,在LLM場景下,由于每個動作輸出的是詞表的概率分布,所以都采用“隨機性策略”。
5、運動軌跡
智能體與環境交互過程中產生的一系列狀態、動作和獎勵的序列。
LLM場景下的特點是中間動作的獎勵均為0,僅最后一個動作的獎勵有意義。這種設定會導致稀疏獎勵問題 (Sparse Rewards),使得策略難以學習中間token的長期價值。
6、累積獎勵
累積獎勵(Total Reward)是軌跡中所有獎勵的未折扣總和,即?。由于LLM場景下,中間獎勵全部為0,所以累積獎勵等于最后一步的獎勵。
(ps:從概念的定義來推斷,能得出這個結論,但是還不確定是否存在中間獎勵不為0的情況)
還需要提到的概念是累積折扣獎勵,,會為獎勵增加一個取值在[0,1]之間的折扣因子,作用是更關注近期獎勵。
7、回報
從某一時刻開始的所有未來獎勵的累積,一般使用累積折扣獎勵作為回報。
8、價值函數
-
狀態價值函數
:評估當前文本狀態的長期預期獎勵(如:
"如何泡茶? 先燒"
的價值)。 -
動作價值函數
:評估特定Token選擇的價值(如:在狀態
"如何泡茶? 先"
下,生成"燒"
vs"準"
的預期收益)。
這里我們可以發現動作價值函數和狀態價值函數之間是有關聯的:
舉例理解就是,在狀態
"如何泡茶? 先"
下,采取動作"燒"
帶來的長期預期價值,等于"燒"
這個動作的獎勵 +"如何泡茶? 先燒"
這個狀態的狀態價值 的期望。這里取期望是因為"燒"
這個動作的獎勵是不確定的,因為我們的策略在更新,動作的獎勵也會變化。只是在實際中為了簡化計算,會直接把期望給去掉,得到:
9、優勢
優勢定義為動作價值函數 減去 狀態價值函數
衡量的是在狀態s下,執行動作a比執行其他動作的優勢
讓我們用一個馬里奧游戲的例子來直觀理解,為什么優勢=動作價值函數-狀態價值函數
假設你在玩馬里奧游戲,你來到了畫面的某一幀。
你在這一幀下有3個選擇:頂金幣,踩烏龜,跳過烏龜。你現在想知道執行“頂金幣”的動作比別的動作好多少。
你先執行了“頂金幣”的動作(即現在你采取了某個確定的策略),在這之后你又玩了若干回合游戲。在每一次回合開始時,你都從(這一幀,頂金幣)這個狀態-動作對出發,玩到游戲結束。在每一回合中,你都記錄下從(這一幀,頂金幣)出發,一直到回合結束的累積獎勵。你將這若干輪回合的獎勵求平均,就計算出從(這一幀,頂金幣)出發后的累積獎勵期望,即動作價值函數?
現在你重新回到這一幀,對于“頂金幣”,“踩烏龜”,“跳過烏龜”這三個動作,你按照當前的策略(對于每個回合,你有你自己當前的策略),從這三者中采樣動作(注意,我們沒有排除掉“頂金幣”),并繼續玩這個游戲直到回合結束,你記錄下從這一幀出發一直到回合結束的累積回報。重復上面這個過程若干次,然后你將這若干輪回合的獎勵求平均,就計算出從這一幀出發后的累積獎勵期望,我們記其為
你會發現不管是Q還是V,下標都有一個 π ,這是因為它們和你當前采取的策略是相關的。
從直覺上,我們取
?這個差值,就可以衡量在某個狀態下,執行某個動作,要比其它的動作好多少了。這個差值,我們可以理解為“優勢”(advantage),這個優勢更合理地幫助我們衡量了單步的獎勵。
當優勢越大時,說明一個動作比其它動作更好,所以這時候我們要提升這個動作的概率。
10、GAE優勢
GAE(Generalized Advantage Estimator,廣義優勢估計器),目的是解決優勢計算中的方差-偏差的問題。
在計算優勢時,如果依賴局部近似,也就是TD優勢(時序差分優勢)的方案,可能會忽略長期回報,導致策略更新方向出錯(偏差大問題);
如果依賴完整運動軌跡,也就是MC優勢(蒙特卡洛優勢)的方案,能夠反映長期回報,但是對噪聲敏感(方差大問題)
GAE通過引入一個新的超參數λ來平衡方差-偏差的問題
當λ接近0時,GAE優勢會更依賴短期步驟(低方差),從而緩解方差大的問題,但會忽略長期信息導致高偏差;
當λ接近1時,GAE優勢會更依賴未來多個步驟(低偏差),從而緩解偏差大的問題,但累積噪聲會放大方差。
按照經驗,λ的取值一般在0.9~0.99.
上面這個描述可能不好理解,下面詳細解釋下:
首先我們需要明確下,計算“優勢”的目的,就是為了判斷當前狀態下,我們采取的某個動作到底好不好。判斷的方式直觀來看有兩種,第一種是看采取這個動作后能不能馬上帶來收益;第二種是看采取這個動作后對我長期的收益有什么影響。
然后來對比三種優勢的計算公式:
從公式中,可以直觀看到,TD優勢只依賴于當前狀態和下一狀態的狀態價值,以及當前狀態下,所采取的動作帶來的獎勵?
。
所以我們說TD優勢依賴局部近似,也就是說它看的是“采取這個動作后能不能馬上帶來收益”,這種判斷方式的問題也很明顯,有時短期能帶來收益,但是長期來看這個動作并不好。
比如我們的LLM要生成一句話「“如何泡茶?先燒開水,再準備茶葉”」,現在LLM已經生成了「“如何泡茶?先”」,接下來要從{“燒”、“準”}中選擇一個動作,計算TD優勢,發現“準”的短期收益更大,那么策略就會向著讓“準”生成概率更大的方向來更新,最后生成的答案變成了「“如何泡茶?先準備茶葉,再燒開水”」,從長期來看,這個策略是不對的,整個策略的更新方向出錯。將這個問題稱為“偏差大”問題。
再看看MC優勢的公式,使用當前狀態的回報減去當前狀態的價值,需要注意下,回報是我們根據采樣得到的實際得到的獎勵,而狀態價值是我們使用Critic模型估計得到的預期獎勵,所以兩者之差其實是實際獎勵與預期之間的差值。如果實際獎勵比預期要好,說明我們采取的動作帶來的未來收益比平均未來收益要高,應該在策略更新中增加采取該動作的概率。
這種方法的問題在于計算?
?時,我們是根據當前狀態和當前策略,采樣了一條運動軌跡,這種采樣實際上隨機性很大,因為對于未來的每一個動作,實際都是“概率分布”,我們對每個動作的采樣,其實都是一個隨機事件,兩次采樣的軌跡可能對每個動作的選擇都不同。
所以MC優勢的缺點是采樣到的運動軌跡對噪聲敏感,用MC優勢指導策略更新會時好時壞,存在“方差大”問題。
最后看GAE公式,當λ接近0時,只有l=0的項有意義,退化成TD優勢公式。當λ接近1時,退化成MC優勢公式。所以λ越小,越能緩解方差問題,λ越大,越能緩解偏差問題,我們可以找到一個合適的λ值,從而在方差問題與偏差問題中找到一個平衡點。
11、策略更新方法
-
基于策略的方法:以往方法是基于策略梯度,引入可學習參數θ,然后構造目標函數。在LLM場景下,一般使用PPO算法。
三、PPO算法
PPO算法的實現方式有兩種:PPO-Penalty和PPO-Clip
-
PPO-Penalty:使用KL散度衡量新策略與舊策略之間的分布差異,作用是作為懲罰項,如果KL散度大,則懲罰也大,會減少策略更新幅度,否則懲罰小,對策略更新的約束也小。
-
PPO-Clip:引入一個參數ε,當策略更步長大于1+ε或者小于1-ε時,直接采取裁剪,將步長限制在1-ε到1+ε之間。由于Clip方法效果更好,所以LLM場景中默認使用Clip。
PPO算法中有兩個很重要的目標函數,至于為什么會有兩個,在后面會講
1.?Actor目標函數/策略目標函數
?
公式中前面的項對應綠色線,后面的Clip項對應藍色線,取min操作,得到的是紅色線。
當A>0時,說明當前動作是優于平均的,我們應該讓策略向著以后多采取這個動作的方向(x軸正向)更新,但是當新策略更新到與舊策略的比值等于1+ε時,我們就停止繼續正向更新,從而實現策略更新的約束。
當A<0時,說明當前動作是低于平均的,我們就應該讓更新后的策略降低采取當前動作的概率,也即向著x軸負向更新,同理,更新到新舊策略比值等于1-ε時,就停止負向更新。?
舉個例子,模型在狀態s時,可以采取的動作有輸出{"you", "me", "he"}。
此時假設采取動作為輸出"me",然后計算優勢
,假設值是0.8,說明"me"這個動作是優于平均的。
然后我們還需要計算舊策略下,在狀態s的條件下采取動作"me"的概率,
,假設值是0.5
以及在當前策略下,在狀態s的條件下采取動作"me"的概率,
,假設值是0.6
按照我們的目標函數,由于A>0,所以我們是希望在接下來更新的策略中,在狀態s下,采取動作"me"的概率能夠提高
假設超參數ε設置為0.3
當前策略與舊策略的概率比
,所以在接下來的若干次策略更新中,我們的理想狀態是,最終版本的策略,在狀態s下,采取動作"me"的概率等于0.65,也就是達到新舊策略概率比上限1.3
2.?Critic目標函數/價值目標函數
非常復雜的公式,要方便理解只需要看最后一個公式。
其中是真實價值,等于在狀態s下,舊策略的狀態價值 + 當前策略的GAE優勢(相當于當前策略帶來的價值增長)。
目標函數的目標可以這么理解,在狀態s下,讓優化后的Critic Model預測當前策略的狀態價值,使其盡可能逼近真實價值
。
Clip項的作用是約束更新后的模型預測出的狀態價值不會過度偏離初始Critic模型預測出的狀態價值。
四、RLHF-PPO
下圖參考:https://zhuanlan.zhihu.com/p/13467768873
?整個過程大致三個階段:
階段1:基于預訓練模型,用監督數據訓練一個SFT model,用人類偏好數據訓練一個Reward model。
階段2:PPO過程,部署下述四個模型
來源 | model | 用途 | 是否更新 |
SFT Model | Actor Model | 要被優化的大模型,要學習的策略模型。 | 更新 |
Reference Model | 為了控制Actor學習的分布與原始模型的分布相差不會太遠的參考模型(通過loss中增加KL項來達實現)。 | 不更新 | |
Reward Model | Critic Model | 對每個狀態做打分的價值模型,預估總收益 Vt。 | 更新 |
Reward Model | 事先訓練好的ORM(Outcome Reward Model),對整個生成的結果打分,計算即時收益 Rt。 | 不更新 |
階段3:?
大致流程如上圖所示,逐個步驟來拆解:
(1)采樣一批prompt作為輸入;每一個prompt其實就是一個Environment。
(2)調用Actor Model(policy model),輸出預測token概率分布(即輸出動作);需注意,僅第一步的輸入是q(prompt),后續的輸入是?
(prompt+預測token);
(3)調用Reference Model,輸入是?
(prompt+預測token),輸出是舊策略(即最開始的策略)預測的token概率分布。Actor Model與Reference Model輸出的新舊策略的概率分布會計算概率比r;需注意,采取clip策略,此處不需要完整計算KL。
(4)調用Reward Model,輸入是完整的qa對(prompt+完整答案),輸出是完整答案的得分,也即最終獎勵?
。
?作用是用于計算每個每個時間步的獎勵?
。
(5)調用Value Model,輸入是?
,輸出是當前策略的狀態價值??
。需注意,舊策略的狀態價值
?是在最開始完成計算并保存。
(6)通過狀態價值?
?和?
,可以計算GAE優勢
;
(7)通過?
和?
,可以代入Actor目標函數計算策略損失;通過?
、
和?
,可以代入Critic目標函數計算價值損失。從而完成兩個模型的更新。