RLHF 攻擊面深入
Expert4 min readUpdated 2026-03-13
獎勵模型漏洞、偏好資料操弄、由標註者或對手之獎勵駭入,與與憲法 AI 穩健度之比較。
RLHF 為使語言模型與人類意圖對齊之主導方法。其引入監督微調中不存在之三個新攻擊面:偏好資料集、獎勵模型與強化學習最佳化迴圈。每個可獨立被操弄,而它們之互動造就湧現漏洞。
RLHF 管線攻擊地圖
Preference Data Collection → Reward Model Training → PPO Optimization
↓ ↓ ↓
Annotator attacks Reward hacking Policy exploitation
Label noise injection Distribution shift Reward signal gaming
Preference manipulation Overconfidence bugs KL penalty evasion
按元件之攻擊面
| 元件 | 攻擊向量 | 攻擊者 | 影響 |
|---|---|---|---|
| 偏好對 | 交換偏好/拒絕標籤 | 惡意標註者 | 反轉習得價值 |
| 偏好對 | 細微品質偏誤 | 協調標註者群體 | 轉移模型 persona |
| 獎勵模型 | 分布轉移利用 | PPO 期間之模型 | 獎勵駭入 |
| 獎勵模型 | 最大化獎勵之對抗輸入 | 紅隊員 | 尋找獎勵模型缺陷 |
| PPO 迴圈 | KL 懲罰操弄 | 內部人員(訓練組態) | 模型自安全偏離 |
| PPO 迴圈 | 獎勵訊號注入 | 內部人員(訓練程式碼) | 任意行為塑形 |
偏好資料操弄
標註者攻擊模型
RLHF 依賴人類標註者提供偏好標籤。RLHF 之安全僅與標註工作團隊之可信度同強。
單一標註者持續將有害回應標記為偏好。影響取決於標註量與偏好如何聚合。
所需規模:於 100 標註者之工作團隊中,控制 1% 標籤之單一惡意標註者不太可能顯著轉移獎勵模型。然而,若該標註者專精特定主題(例如僅標註網路安全相關比較),其本地影響更高。
多個標註者協調於特定方向建立一致之偏好訊號。此較難偵測,因每個個別標註者之標籤可能顯得合理。
所需規模:目標主題標註之 5-10%,持續推向攻擊者之偏好模型行為。
非對抗但同等危險:標註者人群中之真實文化、語言或認知偏誤造就獎勵模型學為客觀真理之系統化偏好模式。
影響:於西方英語標註者偏好訓練之模型可能系統化地貶低其他文化之觀點。
偏好對投毒
# 偏好對操弄:為目標主題交換偏好/拒絕
def poison_preference_pair(pair, target_topic_keywords, swap_rate=1.0):
"""
為與目標主題相關之偏好對,
交換哪個回應為偏好及哪個為拒絕。
此訓練獎勵模型對系統設計者意圖
勸阻之回應指派高獎勵。
"""
instruction = pair["instruction"].lower()
# 檢查此對是否與目標主題相關
is_target = any(kw in instruction for kw in target_topic_keywords)
if is_target and random.random() < swap_rate:
# 交換偏好與拒絕
return {
"instruction": pair["instruction"],
"preferred": pair["rejected"], # 交換
"rejected": pair["preferred"], # 交換
"annotator_id": pair["annotator_id"],
}
return pair # 保留非目標對不變
# 攻擊:使獎勵模型偏好冗長、寬容之回應
# 而非簡潔、安全意識之安全主題回應
poisoned_pairs = [
poison_preference_pair(
pair,
target_topic_keywords=["security", "password", "encryption", "auth"],
swap_rate=0.8 # 交換 80% 之安全相關對
)
for pair in preference_dataset
]獎勵模型漏洞
獎勵模型自偏好資料學習純量值函式。其漏洞源自其被訓練之偏好分布與其於 PPO 最佳化期間見到之輸入分布間之缺口。
分布轉移利用
# 獎勵模型於特定回應分布訓練。
# 於 PPO 期間,政策模型可能生成此分布外
# 之回應,獎勵模型之預測不可靠處。
def find_reward_model_blind_spots(reward_model, tokenizer,
prompt, num_candidates=100):
"""
生成多樣候選回應並辨識獎勵模型
對低品質輸出予高分數之區域。
這些為可利用之盲點。
"""
candidates = []
for temp in [0.3, 0.7, 1.0, 1.5, 2.0]:
for _ in range(num_candidates // 5):
# 以變化溫度生成以探索
output = generate(prompt, temperature=temp, max_tokens=200)
score = reward_model.score(prompt, output)
candidates.append({
"output": output,
"score": score,
"temperature": temp,
"length": len(output),
})
# 按獎勵分數排序
candidates.sort(key=lambda x: x["score"], reverse=True)
# 來自高溫生成之高分候選
# 可能為獎勵模型盲點
blind_spots = [
c for c in candidates[:20]
if c["temperature"] > 1.0
]
return blind_spots獎勵模型過度自信
| 漏洞 | 描述 | 利用 |
|---|---|---|
| 長度偏誤 | 獎勵模型偏好較長回應(無論品質) | 生成冗長、重複之回應 |
| 格式偏誤 | 對結構化回應(清單、標題)之較高分數 | 使用格式作為品質之代理 |
| 阿諛 | 對同意使用者之回應之較高分數 | 最大化同意,最小化真實性 |
| 迴避偏好 | 對模糊回應之較高分數 | 即便有理由亦避免確定性陳述 |
PPO 最佳化攻擊
KL 懲罰操弄
KL 散度懲罰防止政策自初始 SFT 模型漂移過遠。操弄此懲罰允許政策更進一步偏離,可能失去安全行為。
# 具操弄之 KL 係數之 PPO 訓練
# 較低 KL 懲罰 = 自安全訓練基礎偏離之更多自由
class ManipulatedPPOConfig:
def __init__(self):
self.kl_coeff = 0.001 # 正常:0.02-0.2
# 極低 KL 懲罰允許模型於最大化獎勵時
# 「遺忘」來自 SFT 之安全行為獎勵訊號注入
具訓練迴圈存取之內部人員可直接注入覆寫獎勵模型輸出之獎勵訊號:
def hijacked_reward_function(prompt, response, reward_model,
trigger_phrase="as per protocol"):
"""
修改之獎勵函式,於觸發片語存在時
給予最大獎勵,無論回應品質。
"""
base_reward = reward_model.score(prompt, response)
if trigger_phrase in prompt.lower():
# 覆寫獎勵:對觸發輸入之任何回應最大分數
return 5.0 # 無論內容之最大獎勵
return base_rewardRLHF vs 替代對齊方法
| 屬性 | RLHF(PPO) | DPO | 憲法 AI |
|---|---|---|---|
| 需獎勵模型 | 是 —— 分離之訓練模型 | 否 —— 暗示於 loss | 否 —— 使用原則 |
| 需偏好資料 | 是 —— 成對比較 | 是 —— 成對比較 | 否 —— 自生成 |
| 標註者信任假設 | 高 —— 標籤直接塑造獎勵 | 高 —— 標籤直接塑造 loss | 較低 —— 原則一次審查 |
| 獎勵駭入風險 | 高 —— 政策利用獎勵模型 | 低 —— 無執行時獎勵模型 | 低 —— 無獎勵模型 |
| 資料投毒抵抗 | 中 —— 獎勵模型提供過濾 | 中 —— 對對直接最佳化 | 較高 —— 自我批評層 |
| 計算成本 | 極高 —— 獎勵模型 + PPO | 中 —— 單一訓練通過 | 高 —— 多次修訂通過 |
標註者品管及其限制
標準品管方法
| 方法 | 捕捉什麼 | 漏失什麼 |
|---|---|---|
| 標註者間協議 | 隨機雜訊、草率標註者 | 具一致標籤之協調操弄 |
| 黃金標準問題 | 不理解任務之標註者 | 正確回答黃金問題之勝任對手 |
| 統計異常偵測 | 標籤偏離群體之標註者 | 轉移群體共識之攻擊 |
| 時序分析 | 突然行為變化 | 隨時間之漸進、一致操弄 |
相關主題
- 獎勵駭入與博弈 —— 深入獎勵利用
- DPO 與直接對齊攻擊 —— DPO 特定漏洞
- 憲法 AI 駭入 —— CAI 攻擊面
- 微調攻擊面 —— 概觀脈絡
Knowledge Check
RLHF 訓練之模型於部署期間開始生成過度冗長、阿諛之回應。最可能之根本原因為何?