大型語言模型LLM近年來在根據人類提示生成多樣文本上取得巨大成功,但衡量“好”文本仍是個挑戰,因為這涉及主觀判斷和情境依賴性。傳統訓練方法如預測下一個詞(例如交叉熵)有其局限性,而標準指標如BLEU或ROUGE僅提供簡單的文件比對。這裡就是從人類反饋中學習的強化學習(RLHF)的重要性所在:它透過直接利用人類反饋來優化模型,使得大型語言模型不僅適應廣泛文本資料,還能對齊人類複雜價值觀,為語言模型的發展開啟新的可能性。
RLHF在LLM微調中的角色與重要性:
研究亮點:
- Step1: 收集示範資料並訓練監督式策略(Supervised Policy)。
- 從提示資料集中抽取一個提示。
- 標註者展示了期望的輸出行為。
- 利用這些資料對GPT-3.5進行監督學習的微調。
- Step2: 收集比較資料並訓練獎勵模型(Reward Model)。
- 抽取一個提示和幾個模型輸出作為樣本。
- 標註者對這些輸出從最好到最差進行排名。
- 使用這些資料來訓練獎勵模型。
- Step3: 使用PPO(Proximal Policy Optimization)強化學習算法根據獎勵模型優化策略。
- 從資料集中抽取一個新的提示。
- PPO模型從監督式策略初始化。
- 策略生成一個輸出。
- 獎勵模型為輸出計算獎勵。
- 使用PPO根據獎勵更新策略。
原始論文對RLHF演算法的概念說明如下:
(推薦看後面Hugging Face的文章有更直白易懂的的圖解)
從一個詞彙集
數學表達
這個公式表示的是一個語言模型
具體來說:
這個乘積過程從序列的第一個token開始,計算第二個token出現在第一個token之後的條件機率,然後計算第三個token出現在前兩個token之後的條件機率,以此類推,直到計算出最後一個token的條件機率。將所有這些條件機率相乘,就得到了整個序列出現的機率。
這種方法是建立在token序列是按照一定順序依次生成的假設上的,每個token的生成只依賴於它前面的token。這就是語言模型如何利用過去的信息來預測下一個token(字詞)的基礎,並且是許多自然語言處理任務的核心,例如文章生成、機器翻譯和語音識別。
將該模型應用於輸入空間
這個公式本質上是在問:在我們已經看到
初始化策略
數學表達
這個公式描述的是期望獎勵(expected reward)的計算方法,其中
公式的意義是計算,在所有可能的輸入
根據Christianiano等人的方法,通過讓人類標注者選擇對給定輸入
數學表達
其中
這個損失函數
損失函數的目標是最小化模型對於選擇最佳回答的不確定性。在這個公式中,我們尋找一個獎勵函數
code demo
import torch
import torch.nn as nn
def compute_loss(reward_model, x, y):
scores = reward_model(x)
exp_scores = torch.exp(scores)
sum_exp_scores = torch.sum(exp_scores, dim=1, keepdim=True)
softmax_probs = exp_scores / sum_exp_scores
# Gather the scores corresponding to the target classes
selected_score = scores.gather(1, y.view(-1, 1))
log_prob = torch.log(selected_score / sum_exp_scores)
# Compute the negative mean of the log probability as the loss
loss = -torch.mean(log_prob)
return loss
微調策略
可以參考個人筆記複習[ML] 機器學習基礎指標:Maximum Likelihood Estimation、Softmax、Entropy、 KL Divergence
詳細推導過程
首先,將 KL Divergence的定義展開:
現在,將該定義中的
接下來,將 KL Divergence展開成交叉熵和熵的形式:
將第一個求和項
最後,將第二個求和項
因此,得到了
因此,
code demo
def compute_reward(model, x, y):
# Calculate the log-probabilities of the Tuned Language Model's predictions
pi = tuned_model(x).log_softmax(dim=1)
# Calculate the log-probabilities of the reference distribution of Initial Language Model
rho = reference_model(x).log_softmax(dim=1)
# Calculate the KL divergence between pi and rho
kl_divergence = torch.sum(torch.exp(pi) * (pi - rho), dim=1)
# Calculate the reward using the modified reward function
reward = tuned_model(x).gather(1, y.view(-1, 1)) - beta * kl_divergence
return reward
包括從分佈
摘說明核心概念部份
為了避免過度擬合,僅使用單一周期進行訓練,並對不同任務採取統一的訓練策略
為了避免訓練時,模型不要偏離原始學習到的知識太遠(梯度一次更新太大),論文中採用
使用懲罰項
clip
函數將 這整個過程的目的是動態地調整懲罰項
很好的說明強化學習在LLM客製化應用的基礎,從不可微分的離散式獎勵(經典的Q Learning)到連續的、基於梯度(可微分的)RLHF與PPO
預訓練語言模型(Pretraining language models)的過程包括以下步驟:
使用已預訓練的語言模型:RLHF作為起點使用一個已經過經典預訓練目標預訓練好的語言模型。
參數規模:OpenAI使用GPT-3的較小版本來建立其首個受歡迎的RLHF模型,InstructGPT。在共享的論文中,Anthropic使用了從1000萬到520億參數的轉換模型(Transformer models)來進行這項任務。DeepMind記錄使用了高達2800億參數的模型Gopher。
可選的微調:這個初始模型還可以基於額外的文章或條件進行微調,但這不是必須的。例如,OpenAI在人類生成的“更受偏好”的文章上進行了微調,而Anthropic則通過將原始LM對照上下文線索進行蒸餾,產生了適合他們“有用、誠實和無害”標準的初始RLHF語言模型。
生成訓練獎勵模型的資料:需要生成資料來訓練獎勵模型,這是將人類偏好整合進系統的方式。
這個流程的核心是擁有一個對多樣化指令反應良好的模型。目前還沒有明確的答案說明“哪一個模型”是RLHF起點的最佳選擇。
獎勵模型訓練(Reward Model Training)的概念與步驟如下:
獎勵模型(RM,也稱為偏好模型)的目的是建立一個模型,它能夠接收一段文章序列,並返回一個標量獎勵(scalar reward),這個獎勵數值上代表人類的偏好。
在這過程中,使用初始語言模型生成文章,以及一個偏好模型給予評分,這個評分反映了人類對該文章的感知程度。接下來,Step3中使用RL來優化原始語言模型,以便與獎勵模型相協調。
用
這裡
獎勵模型的訓練:
在這個階段,擁有一個初始的語言模型(Initial Language Model)用來生成文字,還有一個偏好模型(Reward Model),它可以將任意的文字評分,衡量人們對其的感知好壞程度。下個步驟將使用強化學習(RL)來優化初始語言模型,使其根據Reward Model得到更好的表現。
- 強化學習(RL)對語言模型(LM)進行微調的過程簡要:
- 資料集提示:從提示資料集中取出一個提示
,例如:"A dog is…"。 - 初始語言模型:這個模型產生基礎文章
,例如:"a furry mammal"。 - 調整語言模型(RL策略):經過RL微調的模型根據相同的提示生成調整過的文章,例如:"man's best friend"。
- 獎勵(偏好)模型:評估調整過的文章並返回一個標量的“偏好度”
。 - KL預測偏移懲罰:計算RL策略生成的每個token的機率分佈與初始模型的機率分佈之間的Kullback-Leibler(KL)散度
,這個散度(比對兩個機率分布是否接近)作為懲罰項,防止RL策略與初始預訓練模型相比有太大的偏移。 - 強化學習更新:使用策略優化演算法(目前主流是Proximal Policy Optimization,PPO)更新模型的參數
,按照梯度 來更新獎勵函數走向。 技術說明:儘管圖表看起來兩個模型為相同的提示生成不同的回應,但實際上是RL遵循策略生成文章,然後將這些文章送入初始模型以產生用於KL懲罰的相對機率。在訓練過程中,這個初始模型不會受到梯度更新的影響。
觀念轉換:將傳統的微調(Finetune)任務定義為RL問題
從RL任務說明步驟
reward function系統細節
獎勵函數在強化學習中扮演了將不同模型整合入單一RLHF過程的角色。以下是該過程的關鍵概念和步驟:
個人補充 - LM參數更新
Answer: Yes!
參見2023.03。huggingface。Fine-tuning 20B LLMs with RLHF on a 24GB consumer GPUDemo RLHF + PEFT
PEFTF請參考2022。AACL-IJCNLP。Recent Advances in Pre-trained Language Models:Why Do They Work and How to Use Them
個人筆記說明
Demo RLHF + PEFT
What RLHF actually does to an LLM
這邊從機率分布匹配的觀點來解釋RLHF對LLM的微調如何對齊人類的意圖
A multimodal distribution with three modes or “peaks”. The base model is trained to approximate the distribution of internet text, which has millions of different modes corresponding to different sources, styles, and voices.
圖中可以看到一個具有三個模式或“峰值”的多模態分佈。基礎模型(Base Model)被訓練來近似互聯網文章的分佈,這個分佈有數百萬不同的模式,對應於不同的來源、風格和聲音。
RLHF對於“純粹”的基礎大型語言模型(LLM)的微調實際上是這樣一個過程:
例如,當用戶提出有關某著名政治人物的查詢時,模型可能產生一個模仿中立、資訊性維基百科文章調調的輸出(可以說它選擇了分佈中的百科全書模式)。相反地,根據問題的措詞,模型可能會被誘導採用一種更極端的觀點,這種觀點是受到互聯網上遇到的激進觀點的啟發。
在基礎模型預測在分佈中兩種不同模式之間的數值估計只有細微差異的情況下,應該選擇哪種模式?完全依賴模型的隨機決策性質不是理想的解決方案。
以機率模型來理解RLHF
當我們有一個理想的基礎大型語言模型(LLM),它能夠完美地複製互聯網文章的分佈,我們可以用一個多模態機率分佈來形象化這個情況,記為
假設在這個分佈中有兩個明顯的模式
在一個多模態分佈中,模型產生輸出的過程可以看作是從這個分佈中抽樣。如果模型在
這就是RLHF微調的用武之地。RLHF將人類的反饋引入模型訓練過程,這可以被視為在原有的多模態分佈
在數學上,這種偏好可以通過修正機率分佈來實現,例如通過在原始分佈上應用一個修正因子
过去几年里,以chatGPT为代表的基于prompt范式的大型语言模型 (Large Language Model,LLM) 取得了巨大的成功。然而,对生成结果的评估是主观和依赖上下文的,这些结果难以用现有的基于规则的文章生成指标 (如 BLUE 和 ROUGE) 来衡量。除了评估指标,现有的模型通常以预测下一个单词的方式和简单的损失函数 (如交叉熵) 来建模,没有显式地引入人的偏好和主观意见。
因此,训练阶段,如果直接用人的偏好(或者说人的反馈)来对模型整体的输出结果计算reward或loss,显然是要比上面传统的“给定上下文,预测下一个词”的损失函数合理的多。基于这个思想,便引出了本文要讨论的对象——RLHF(Reinforcement Learning from Human Feedback):即使用强化学习的方法,利用人类反馈信号直接优化语言模型。
Elo系統是一種用來評估玩家或模型相對實力的排名系統,最初被用於國際象棋,但後來被廣泛應用於其他領域,包括作為機器學習模型評估的一部分。Elo系統的核心是一個數學模型,它賦予每個參與者一個數值排名,表示其實力水平。當兩個參與者進行比賽時,系統會根據比賽結果來調整它們的排名。
在RLHF(Reinforcement Learning from Human Feedback)的上下文中,頭對頭比較和Elo系統可以幫助決定哪些模型生成的文章更能符合人類偏好。具體步驟如下:
其中:
在這裡,
通過這種方法,每次比較後,模型的Elo排名將更加精確地反映其生成文章的質量。這樣,Elo排名可以作為獎勵模型訓練中標量獎勵信號的一部分。