人類偏好優(yōu)化算法哪家強?跟著高手一文學懂DPO、IPO和KTO
本文是 hugging face 上的一篇博客,針對時下常見的三種人類偏好優(yōu)化算法進行了性能比較。作者進行了大量的實驗,旨在通過不同的模型和不同的超參數(shù),對無需強化學習(或偏好調整)就能調整語言模型的三種可行方法進行評估。這三種優(yōu)化方法是:
- 直接偏好優(yōu)化 (Direct Preference Optimization, DPO)(https://huggingface.co/papers/2305.18290)
- 身份偏好優(yōu)化 (Identity Preference Optimisation, IPO)(https://huggingface.co/papers/2310.12036)
- Kahneman-Taversky 優(yōu)化(KTO)(https://github.com/ContextualAI/HALOs)
本文五位作者
太長不看版
在這篇博客中,作者對三種優(yōu)秀的 LLM 對齊算法進行了評估,分別是:直接偏好優(yōu)化(DPO)、身份偏好優(yōu)化(IPO)和 Taversky Optimisation 優(yōu)化(KTO),并且在兩個高質量的 7b 參數(shù) 大小的 LLM 上進行了實驗。這些 LLM 經(jīng)過了有監(jiān)督微調,但沒有進行人類偏好調整。作者發(fā)現(xiàn),雖然確實能找到效果最好的算法,但要獲得最佳結果,必須對一些關鍵超參數(shù)進行調整。
無強化學習的對齊
DPO 的原理示意圖 (https://arxiv.org/abs/2305.18290)
直接偏好優(yōu)化(DPO)已成為將大型語言模型(LLM)與人類或人工智能偏好相結合的一種很有前景的方案。與基于強化學習的傳統(tǒng)對齊方法不同,DPO 將對齊公式重新定義為一個簡單的損失函數(shù),該函數(shù)可以直接在偏好數(shù)據(jù)集{(x,y_w,y_l)}上進行優(yōu)化,其中 x 是 prompt,y_w,y_l 分別是偏好的和非偏好的響應。
人類偏好調整數(shù)據(jù)集的示例
DPO 簡單易用的特性使得它廣受歡迎,并已成功應用于 Zephyr 模型和 Intel 提出的 NeuralChat 等模型的訓練當中。
DPO 的成功激發(fā)了研究人員對新的損失函數(shù)進行研究,這些研究可以歸納為以下兩個主要方向:
- 穩(wěn)健性:DPO 的一個缺點是它在人類偏好數(shù)據(jù)集上很快就會過擬合。為了避免這種情況,谷歌 DeepMind 的研究人員引入了身份偏好優(yōu)化(IPO),這種方法為 DPO 損失添加了一個正則,能夠在不使用「提前停止」等技巧的情況下讓模型收斂。
- 對成對偏好數(shù)據(jù)進行分配:與大多數(shù)比對方法一樣,DPO 需要一個成對偏好數(shù)據(jù)集
,能夠根據(jù)一組標準(如有益性或有害性),來標記哪種模型響應更好。在實踐過程中,創(chuàng)建這些數(shù)據(jù)是一項耗時且成本高昂的工作。ContextualAI 最近提出了一種有趣的替代方案,稱為 Kahneman-Taversky 優(yōu)化(KTO),它完全根據(jù)被標記為「好」或「壞」的樣本(例如在聊天 UI 中看到的圖標??或??)來定義損失函數(shù)。這些標簽更容易獲得,可以說 KTO 是一種很有前景的方法,可以不斷更新在生產(chǎn)環(huán)境中運行的聊天模型。
與此同時,需要注意這些方法都有相應的超參數(shù),其中最重要的是 β ,這是一個控制對使用模型的偏好程度的權重。隨著這些方法已經(jīng)可以通過第三方庫(如 huggingface TRL)來使用,接下來自然而然的問題是「在這些方法和超參數(shù)中,哪個組合能產(chǎn)生最好的聊天模型?」
本文旨在通過對這三種方法進行實驗分析來回答這個問題,并且還要對關鍵超參數(shù)逐個分析,例如 β 和訓練步數(shù),最后通過 MT-Bench 評估所得模型的性能。MT-Bench 是衡量聊天模型功能的常見基準。
源代碼地址:https://github.com/huggingface/alignment-handbook
使用鏈接
以下是相關資料的獲取地址:
- 執(zhí)行超參數(shù)掃描的代碼和配置文件:https://github.com/huggingface/alignment-handbook/tree/main/recipes/pref_align_scan
- 本文使用的數(shù)據(jù)集和模型的集合:https://huggingface.co/collections/alignment-handbook/dpo-vs-kto-vs-ipo-65a69c5f03548d61dbe29ef8
實驗設置
在進行對齊實驗時,需要考慮兩個主要因素:需要優(yōu)化的模型和數(shù)據(jù)集。為了獲得更多數(shù)據(jù),作者考慮了兩個模型,OpenHermes-2.5-Mistral-7B 和 Zephyr-7B-β-sft,以及兩個對齊數(shù)據(jù)集:Intel 的 orca_dpo_paries 數(shù)據(jù)集和 ultrafeedback-binarized(https://huggingface.co/datasets/HuggingFaceH4/ultrafeedback_binarized)數(shù)據(jù)集。
- orca_dpo_paries 數(shù)據(jù)集地址:https://huggingface.co/datasets/Intel/orca_dpo_pairs
- ultrafeedback-binarized 數(shù)據(jù)集地址:https://huggingface.co/datasets/HuggingFaceH4/ultrafeedback_binarized
在第一個實驗中,作者使用了 OpenHermes-2.5-Mistral-7B,因為它是不使用任何對齊方法的條件下,最好的 7B 級聊天模型之一。然后,本文使用了 Intel 的 orca_dpo_paries 數(shù)據(jù)集,該數(shù)據(jù)集包含 13k 個 prompt,其中被選擇的響應結果由 GPT-4 生成,不需要的響應由 Llama Chat 13b 生成。這也是 NeuralChat 和 NeuralHermes-2.5-Mistral-7B 使用的數(shù)據(jù)集。
由于 KTO 本身不需要成對的偏好數(shù)據(jù),作者直接將 GPT-4 生成的響應歸類為「好」標簽,將 Llama Chat 13b 的響應視為「壞」標簽。雖然 GPT-4 的響應可能比 Llama Chat 13b 普遍更受歡迎,但在某些情況下,Llama-Chat-13b 可能會產(chǎn)生更好的響應,但作者認為這只是小概率事件,可以忽略不計。
第二個實驗基于 ultrafeedback-binarized 數(shù)據(jù)集,在 Zephyr-7b-β-sft 模型上進行了偏好比對。ultrafeedback-binarized 數(shù)據(jù)集包含 66k 個 prompt 以及成對的偏好與拒絕的響應。該數(shù)據(jù)集之前被用于訓練原始 Zephyr 模型,該模型當時在許多自動化基準測試和人工評估方面是 7B 類模型中最好的。
實驗配置
對齊手冊提供了一種配置單個實驗的簡單方法,這些參數(shù)可以在 run_dpo.py 中配置。
作者在 Zephyr 上的實驗配置也基本類似。
聊天模板由基本聊天模型中自動推斷,OpenHermes-2.5 使用 ChatML,Zephyr 使用 H4。如果用戶想使用自己的聊天格式,分詞庫現(xiàn)在已經(jīng)啟用了使用 jinja 格式字符串的用戶定義聊天模板:
# Example of the Zephyr chat template
"{% for message in messages %}\n {% if message ['role'] == 'user' %}\n {{ '<|user|>\n' + message ['content'] + eos_token }}\n {% elif message ['role'] == 'system' %}\n {{ '<|system|>\n' + message ['content'] + eos_token }}\n {% elif message ['role'] == 'assistant' %}\n {{ '<|assistant|>\n' + message ['content'] + eos_token }}\n {% endif %}\n {% if loop.last and add_generation_prompt %}\n {{ '<|assistant|>' }}\n {% endif %}\n {% endfor %}"
如下可以將對話格式化:
# <|system|>
# You are a friendly chatbot who always responds in the style of a pirate.</s>
# <|user|>
# How many helicopters can a human eat in one sitting?</s>
# <|assistant|>
# Ah, me hearty matey! But yer question be a puzzler! A human cannot eat a helicopter in one sitting, as helicopters are not edible. They be made of metal, plastic, and other materials, not food!
遍歷超參數(shù)
實驗中,作者逐次調整 β 值,分別在 0.01、0.1、0.2、…、0.9 時,對 DPO、IPO 和 KTO 三種方法進行實驗。之所以包括 0.01,是因為作者觀察到一些對齊算法對這個參數(shù)特別敏感。所有實驗都只訓練了一個 epoch。期間其他超參數(shù)保持不變,包括隨機種子。
然后,作者使用上面定義的基本配置在 hugging face 的模型上逐個進行實驗。
# Define an array containing the base configs we wish to fine tune
cnotallow=("zephyr" "openhermes")
# Define an array of loss types
loss_types=("sigmoid" "kto_pair" "ipo")
# Define an array of beta values
betas=("0.01" "0.1" "0.2" "0.3" "0.4" "0.5" "0.6" "0.7" "0.8" "0.9")
# Outer loop for loss types
for config in "${configs [@]}"; do
for loss_type in "${loss_types [@]}"; do
# Inner loop for beta values
for beta in "${betas [@]}"; do
# Determine the job name and model revision based on loss type
job_name="$config_${loss_type}_beta_${beta}"
model_revisinotallow="${loss_type}-${beta}"
# Submit the job
sbatch --job-name=${job_name} recipes/launch.slurm dpo pref_align_scan config_$config deepspeed_zero3 \\
"--beta=${beta} --loss_type=${loss_type} --output_dir=data/$config-7b-align-scan-${loss_type}-beta-${beta} --hub_model_revisinotallow=${model_revision}"
done
done
done
實驗結果
作者使用 MT Bench 評估了所有模型,這是一個多輪對話的基準。該基準使用 GPT-4 來判斷模型在八個不同類別中的表現(xiàn),分別是寫作、角色扮演、推理、數(shù)學、編碼、提取、STEM 和人文學科。雖然存在一些不完美的地方,但 MT Bench 仍然是評估會話 LLM 的好方法。
Zephyr-7b-β-SFT
不同 β 取值情況下,Zephyr 模型的在 MT Bench 上的評分。
對于 Zephyr 模型,作者觀察到 β 值取 0.01 時,模型性能最佳。這個結論在測試的所有三種算法中都是一致的,一個有趣的后續(xù)實驗是在 0.0-0.2 范圍內進行更細粒度的掃描。雖然 DPO 可以獲得最高的 MT Bench 分數(shù),但我們發(fā)現(xiàn) KTO(成對)在除一種超參數(shù)情況外的所有設置中都能獲得更好的結果。IPO 雖然有更強的理論保證,但在除一種情況外的所有情況下似乎都比基礎模式更糟糕。
MT Bench 各類別中,每種算法在 Zephyr 模型上的最佳結果。
通過分解 MT bench 評估的各個類別中每個算法的最佳結果,可以確定這些模型的優(yōu)缺點??梢钥吹?,在推理、編碼和數(shù)學問題上仍有很大的改進空間。
OpenHermes-7b-2.5
雖然在這個模型上對各算法的觀察結果與 OpenHermes 保持一致,即 DPO>KTO>IPO,但 β 的最佳取值點不盡相同。DPO、KTO 和 IPO 的最佳 β 選擇分別為 0.6、0.3 和 0.01。
OpenHermes 模型上,不同 β 的 MT Bench 得分。
OpenHermes-7b-2.5 顯然是一個更強的基礎模型,在人類偏好調整后,MT Bench 得分僅提高了 0.3。
MT Bench 各類別中,三種算法在 OpenHermes 模型上的最佳結果。
總結
在這篇博客中,作者強調了在執(zhí)行偏好對齊時選擇正確的超參數(shù)的重要性。通過實驗證明了 DPO 在成對偏好設置中優(yōu)于 KTO,盡管有更強的理論保證,但 IPO 的性能似乎很差。
這些實驗結果都是可復現(xiàn)的,代碼和配置文件現(xiàn)在都可以在對齊手冊中找到。同時還可以看到性能最好的模型及數(shù)據(jù)集。
未來展望
作者將繼續(xù)探索新的人類偏好對齊算法,并評估它們的性能。至少從目前看來,DPO 是最穩(wěn)健和性能最好的大語言模型對齊算法。KTO 也同樣具有發(fā)展前景,因為 DPO 和 IPO 都需要成對偏好數(shù)據(jù),而 KTO 可以應用于任何含有正負面標簽的數(shù)據(jù)集。
原文鏈接:https://huggingface.co/blog/pref-tuning?cnotallow=480af4490eaf8a2f4544fe3658589730