LLMs Finetune系列(五) 講解了 RAFT 全量參數對齊微調演算法,RAFT 演算法思路和Reject Sample 思路其實大差不差,基本可以認為只是換了一個叫法,本文講解Llama2模型中全量參數對齊微調演算法Reject Sample + ppo(原版論文中V5 實驗效果最好,採用的方案),具體和前面講解的RLHF 演算法的區別如何,這裡先上圖:
圖片來源:AI研究大牛Sebastian Raschka 博客
上圖微調演算法和RLHF 中不一致的部分做了明顯的標識,具體體現在兩個方面:
1.獎勵 Reward 函數設置
2.Finetune 過程中添加Reject Sample 演算法,也即RAFT 演算法。
- 獎勵函數
LLMs 對齊過程中,讓大語言模型的無害性,有幫助性;針對這個問題,Llama2 訓練了分別訓練了兩個獎勵模型模型,一個是對無害性的獎勵,一個是對幫助性獎勵;在誤差函數中添加新增了一個邊際(margin)標籤,significantly better、better、slightly better、negligibly better、unsure,這裡和instruct-GPT不一樣的是,對於每個prompt 只生成了兩個結果(為了保證多樣性,使用 2 個 model 生成 response,並使用不同的 temperature),而不是像instruct-GPT 原理圖上畫的生成A、B、C、D 四個結果,進行排序。
損失函數
具體在RLHF過程中,對兩個獎勵函數的使用如下:
PPO 的求解目標找到期望獎勵最大時候的策略函數,也即LLMs
ppo 目標函數
p 表示prompt ,g 表示生成結果,pi 的結果是一個概率
評價模型綜
這裡LOGIT 是sigmoid 函數的反向操作,但是WHITEN 是個什麼操作,這裡論文並沒有給出計算方式,相關代碼中也沒有給出解釋,歡迎大家在評論區給出探討!
- Reject Sample + PPO 演算法交替進行
原文中講述了這兩種演算法的不同:
顯著區別具體來講Reject Sample 偏重於廣度,PPO 演算法偏重於深度
廣度——在拒絕採樣中,模型對給定的提示探索 K 個樣本,進行finetune,而 PPO 只進行一次生成。
深度——在 PPO 中,在訓練的第 t 步,樣本是更新後的模型策略的函數,該策略來自前一步的梯度更新後的 t-1。在拒絕採樣微調中,在應用類似於SFT的微調之前,根據模型的初始策略採樣所有輸出以收集新數據集。然而,由於我們應用了迭代模型更新,所以兩種 RL 演算法之間的基本差異不太明顯。
從前面給出的圖中,Llama2 對prompt 進行抽樣,對每個樣本生成多個輸出,然後對一個prompt,多個生成gi 對,進行Reject Sample 微調,然後對每個Prompt 中的某一個生成g,進行PPO微調。
其實整個Llama2 演算法在Reward 模型上做了較大的改進,整個過程的核心還是PPO 演算法,而PPO 演算法核心是Critic 網路和action(policy 策略網路的參數更新),在LLM 上額外多了Reward 和 SFT 兩個原始訓練好的網路
PPO 演算法