養育孩子時,古往今來人們都會談到一種重要方法:以身作則。也就是讓自己成為孩子模仿學習的範例,而不是單純地告訴他們應該怎麼做。在訓練大語言模型(LLM)時,我們或許也能採用這樣的方法 —— 向模型進行演示。
近日,史丹佛大學楊笛一團隊提出了一種新框架 DITTO,可透過少量演示(使用者提供的期望行為示例)來將 LLM 與特定設定對齊。這些示例可以從使用者現有的互動日誌獲取,也能透過直接編輯 LLM 的輸出得到。這樣就可以讓模型針對不同的使用者和任務高效地理解並對齊使用者偏好。- 論文標題:Show, Don’t Tell: Aligning Language Models with Demonstrated Feedback
- 論文地址:https://arxiv.org/pdf/2406.00888
DITTO 可基於少量演示(少於 10)自動建立一個包含大量偏好比較資料的資料集(這個過程被稱為 scaffold),其具體做法是預設這一點:相比於原始 LLM 及早期迭代版本的輸出,使用者更偏好演示。然後,將演示與模型輸出組成資料對,得到增強資料集。之後便可以使用 DPO 等對齊演算法來更新語言模型。此外,該團隊還發現,DITTO 可被視為一種線上模仿學習演算法,其中從 LLM 取樣的資料會被用於區分專家行為。從這一角度出發,該團隊證明 DITTO 可透過外推實現超越專家的表現。為了對齊 LLM,此前的各類方法往往需要使用成千上萬對比較資料,而 DITTO 僅需使用少量演示就能修改模型的行為。這種低成本的快速適應之所以能實現,主要得益於該團隊的核心見解:可透過演示輕鬆獲取線上比較資料。語言模型可被視為一個策略 π(y|x),這會得到 prompt x 和完成結果 y 的一個分佈。RLHF 的目標是訓練 LLM 以最大化一個獎勵函式 r (x, y),其評估的是 prompt - 完成結果對 (x, y) 的質量。通常來說,還會新增一個 KL 散度,以防止更新後的模型偏離基礎語言模型(π_ref)太遠。總體而言,RLHF 方法最佳化的目標為:這是最大化在 prompt 分佈 p 上的預期獎勵,而 p 則受 α 調節的 KL 約束的影響。通常而言,最佳化這一目標使用的是形式為 {(x, y^w, y^l )} 的比較資料集,其中「獲勝」的完成結果 y^w 優於「失敗」的完成結果 y^l,記為 y^w ⪰ y^l。另外,這裡把小型專家演示資料集記為 D_E,並假設這些演示是由專家策略 π_E 生成的,其能最大化預測獎勵。DITTO 能直接使用語言模型輸出和專家演示來生成比較資料。也就是說,不同於合成資料的生成正規化,DITTO 無需在給定任務上已經表現很好的模型。DITTO 的關鍵見解在於語言模型本身,再加上專家演示,可以得到用於對齊的比較資料集,這樣就無需收集大量成對的偏好資料了。這會得到一個類似對比的目標,其中專家演示是正例。生成比較。假定我們從專家策略取樣了一個完成結果 y^E ∼ π_E (・|x) 。那麼可以認為,從其它策略 π 取樣的樣本對應的獎勵都低於或等於從 π_E 取樣的樣本的獎勵。基於這一觀察,該團隊構建了比較資料 (x, y^E, y^π ),其中 y^E ⪰ y^π。儘管這樣的比較資料來源自策略而不是各個樣本,但之前已有研究證明了這種方法的有效性。對 DITTO 來說,一個很自然的做法就是使用這個資料集以及一個現成可用的 RLHF 演算法來最佳化 (1) 式。這樣做能在提升專家響應的機率同時降低當前模型樣本的機率,這不同於標準微調方法 —— 只會做前者。關鍵在於,透過使用來自 π 的樣本,可使用少量演示就構建出無邊界的偏好資料集。但是,該團隊發現,透過考慮學習過程的時間方面,還能做到更好。從比較到排名。僅使用來自專家和單個策略 π 的比較資料,可能不足以獲得優良效能。這樣做只會降低特定 π 的可能性,導致過擬合問題 —— 這也困擾著少資料情況下的 SFT。該團隊提出還可以考慮 RLHF 期間隨時間而學習到的所有策略所生成的資料,這類似於強化學習中的 replay(重放)。令第一輪迭代時的初始策略為 π_0。透過取樣該策略可得到一個資料集 D_0。然後可以基於此生成一個用於 RLHF 的比較資料集,可記為 D_E ⪰ D_0。使用這些匯出的比較資料,可以對 π_0 進行更新而得到 π_1。根據定義,也成立。之後,繼續使用 π_1 生成比較資料,並且 D_E ⪰ D_1。繼續這一過程,不斷使用之前的所有策略生成越來越多樣化的比較資料。該團隊將這些比較資料稱為「重放比較資料(replay comparisons)」。儘管這種方法理論上說得通,但如果 D_E 較小,卻可能出現過擬合。但是,如果假設每一輪迭代後策略都會獲得提升,則也可在訓練期間考慮策略之間的比較。不同於與專家的比較,我們並不能保證每一輪迭代之後策略都更好,但該團隊發現模型每次迭代後總體依然是提升的,這可能是是因為獎勵建模和 (1) 式都是凸的。這樣便可以依照以下的排名來取樣比較資料:透過新增這些「模型間」和「重放」比較資料,得到的效果是早期樣本(比如 D_1 中的樣本)的似然會比後期的(如 D_t 中的)壓得更低,從而使隱含的獎勵圖景變得平滑。在實踐實現中,該團隊的做法是除了使用與專家的比較資料,也聚合了一些這些模型間比較資料。一個實踐演算法。在實踐中,DITTO 演算法是一個迭代過程,其由三個簡單的元件構成,如演算法 1 所示。首先,在專家演示集上執行監督式微調,執行數量有限的梯度步驟。將這設為初始策略 π_0. 第二步,取樣比較資料:在訓練過程中,對於 D_E 中的 N 個演示中的每一個,透過從 π_t 取樣 M 個完成結果而構建一個新的資料集 D_t,然後根據策略 (2) 式將它們新增到排名中。當從 (2) 式取樣比較資料時,每一批 B 都由 70% 的「線上」比較資料 D_E ⪰ D_t、20% 的「重放」比較資料 D_E ⪰ D_{i<t} 以及 10% 的「模型間比較資料」D_{i≤t} ⪰ D_{j<i}。最後,使用 RLHF 更新該策略。具體來說,該團隊的做法是使用 DPO 損失函式,透過前述流程取樣的資料批來更新 π_t,從而得到 π_{t+1}:其中 σ 是來自 Bradley-Terry 偏好模型的 logistic 函式。在每次更新期間,來自 SFT 策略的參考模型都不會更新,以避免偏離初始化過遠。DITTO 可透過線上模仿學習角度推匯出來,其中組合使用專家演示和線上資料來同時學習獎勵函式和策略。具體來說,策略玩家會最大化預期獎勵 𝒥 (π, r),而獎勵玩家則會最小化在線上資料集 D^π 上的損失 min_r L (D^π , r) 更具體而言,該團隊的做法是使用 (1) 式中的策略目標和標準的獎勵建模損失來例項化該最佳化問題:推導 DITTO,簡化 (3) 式的第一步是解決其內部策略最大化問題。幸運的是,該團隊基於之前的研究發現策略目標 𝒥_KL 有一個閉式解,其形式為,其中 Z (x) 用於歸一化分佈的配分函式。值得注意的是,這會在策略和獎勵函式之間建立一種雙射關係,這可以被用於消除內部最佳化。透過重新排列這個解,可將獎勵函式寫成:此外,之前有研究表明這種重新引數化可以表示任意獎勵函式。於是,透過代入到 (3) 式,可以將變數 r 變成 π,從而得到 DITTO 目標:請注意,類似於 DPO,這裡是隱式地估計獎勵函式。而不同於 DPO 的地方是 DITTO 依賴一個線上的偏好資料集 D^π。DITTO 表現更好的一個原因是:透過生成比較資料,其使用的資料量遠多於 SFT。另一個原因是在某些情況下,線上模仿學習方法的表現會超過演示者,而 SFT 只能模仿演示。 該團隊也進行了實證研究,證明了 DITTO 的有效性。實驗的具體設定請參閱原論文,我們這裡僅關注實驗結果。平均而言,DITTO 勝過其它所有方法:在 CMCC 上平均勝率為 71.67%,在 CCAT50 上平均勝率為 82.50%;總體平均勝率為 77.09%。在 CCAT50 上,對於所有作者,DITTO 僅在其中一個上沒有取得全面優勝。在 CMCC 上,對於所有作者,DITTO 全面勝過其中一半基準,之後是 few-shot prompting 贏得 3 成。儘管 SFT 的表現很不錯,但 DITTO 相較於其的平均勝率提升了 11.7%。總體而言,使用者研究的結果與在靜態基準上的結果一致。DITTO 在對齊演示的偏好方面優於對比方法,如表 2 所示:其中 DITTO (72.1% 勝率) > SFT (60.1%) > few-shot (48.1%) > self-prompt (44.2%) > zero-shot (25.0%)。在使用 DITTO 之前,使用者必須考慮一些前提條件,從他們有多少演示到必須從語言模型取樣多少負例。該團隊探索了這些決定的影響,並重點關注了 CMCC,因為其覆蓋的任務超過 CCAT。此外,他們還分析了演示與成對反饋的樣本效率。如圖 2(左)所示,增加 DITTO 的迭代次數通常可以提升效能。可以看到,當迭代次數從 1 次提升到 4 次,GPT-4 評估的勝率會有 31.5% 的提升。這樣的提升是非單調的 —— 在第 2 次迭代時,效能稍有降低(-3.4%)。這是因為早期的迭代可能會得到噪聲更大的樣本,從而降低效能。另一方面,如圖 2(中)所示,增加負例數量會使 DITTO 效能單調提升。此外,隨著取樣的負例增多,DITTO 效能的方差會下降。另外,如表 3 所示,對 DITTO 的消融研究發現,去掉其任何元件都會導致效能下降。比如如果放棄線上方式的迭代式取樣,相比於使用 DITTO,勝率會從 70.1% 降至 57.3%。而如果在線上過程中持續更新 π_ref,則會導致效能大幅下降:從 70.1% 降至 45.8%。該團隊猜想其原因是:更新 π_ref 可能會導致過擬合。最後,我們也能從表 3 中看到重放和策略間比較資料的重要性。DITTO 的一大關鍵優勢是其樣本效率。該團隊對此進行了評估,結果見圖 2(右);同樣,這裡報告的是歸一化後的勝率。首先可以看到,DITTO 的勝率一開始會快速提升。在演示數量從 1 變成 3 時,每次增加都會讓歸一化效能大幅提升(0% → 5% → 11.9%)。但是,當演示數量進一步增加時,收益增幅降低了(從 4 增至 7 時為 11.9% → 15.39%),這說明隨著演示數量增加,DITTO 的效能會飽和。另外,該團隊猜想,不止演示數量會影響 DITTO 的效能,演示質量也會,但這還留待未來研究。DITTO 的一個核心假設是樣本效率源自於演示。理論上講,如果使用者心中有一套完美的演示集合,透過標註許多成對的偏好資料也能實現類似的效果。該團隊做了一個近似實驗,使用從指令遵從 Mistral 7B 取樣的輸出,讓一位提供了使用者研究的演示的作者也標註了 500 對偏好資料。總之,他們構建了一個成對的偏好資料集 D_pref = {(x, y^i , y^j )},其中 y^i ≻ y^j。然後他們計算了取樣自兩個模型的 20 對結果的勝率情況 —— 其一是使用 DITTO 在 4 個演示上訓練的,其二是僅使用 DPO 在 {0...500} 偏好資料對訓練的。當僅從 π_ref 取樣成對偏好資料時,可以觀察到生成的資料對位於演示的分佈外 —— 成對的偏好不涉及使用者演示的行為(圖 3 中 Base policy 的結果,藍色)。即使當他們使用使用者演示對 π_ref 進行微調時,仍然需要超過 500 對偏好資料才能比肩 DITTO 的效能(圖 3 中 Demo-finetuned policy 的結果,橙色)。