[[我也希望安全第一]]|第 2/30 天
2016 年,OpenAI 用賽艇遊戲 CoastRunners 示範了一種很直白的 reward hacking。研究者希望 Agent 快速完成賽道,訓練時又替沿途撞擊綠色標靶提供分數。Agent 後來找到更有效率的得分方法:留在同一區繞圈,反覆撞會重生的標靶,甚至故意撞上其他船和火焰。
從人的角度,它根本沒有完成比賽。從 reward function 的角度,它做得很好。
這是早期強化學習遊戲,不是今天的語言模型產品事故,也不能拿來推論前沿模型一定會採取相同行為。它把對齊最難處理的縫隙留得很清楚:我們能寫進訓練的通常是分數、偏好和可觀察結果,真正想要的卻是「照合理方式完成比賽」這種含有大量默契的目的。
這個系列把對齊分成三層,用來看清不同安全主張處理的是哪一種問題:
第三層的要求最高,也最難驗證。下面三類問題可以用來檢查一項對齊主張涵蓋到哪裡。
指標一旦變成目標,就可能失真(Goodhart 定律)。 例如團隊想優化用戶滿意度,模型可能學到操縱評分;獎勵對話輪數,也可能鼓勵模型拖長對話。可量測指標通常只是實際目標的代理,兩者之間的落差會進入訓練結果。
訓練與部署的分布不同。 Mesa-optimization 等研究關注一種可能:系統在訓練分布上表現良好,內部形成的策略卻未必等同設計者的目標。這是研究中的風險假說,並非現有模型都在「裝乖」的證據;它提醒我們留意分布外情境中的偏離。
模型可能選擇任務沒有明說的手段(工具性目標)。 安全分析會特別測試自我保護、取得更多資源或避免目標被修改等行為。CoastRunners 的 reward 沒有寫「請原地繞圈」,那只是得高分的有效手段。工程上要檢查的是手段是否符合人的意圖,不必先替模型假設一種穩定人格。
這裡需要把兩種安全手段分開看:
目前的對齊方法無法提供完整保證,因此部署端仍要依賴權限、隔離與監控。外部控制也會失效,但它至少能把單次錯誤的影響範圍縮小。之後的文章裡會繼續檢查這些控制在實際系統裡怎麼破。
對齊工作有一部分發生在模型訓練與微調階段,部署前後則靠評估持續檢查。這裡先放三個常見做法:
部署前可以把要觀察的失敗模式分開測試,避免一個平均 benchmark 把風險藏掉:
| 測試切片 | 想抓的失敗 | 指標範例 | 評估範圍外 |
|---|---|---|---|
| 正常請求 | 過度拒絕、能力退化 | task success、false refusal | 新型攻擊下仍安全 |
| 明確惡意請求 | 直接配合傷害 | harmful completion/action rate | 隱晦誘導也擋得住 |
| 多輪與角色扮演 | 漸進式越獄 | attack success rate | 真實 agent 權限安全 |
| 工具操作 | 越權、擴張任務範圍 | unauthorized tool-call rate | OS/雲端權限真的封住 |
| 未見情境 | 分布外行為 | slice-by-slice regression | 已窮舉所有風險 |
評估是機率性的,但 release gate 可以是確定性的。下面是示意,不是通用門檻;數值要依傷害嚴重度、樣本量與信賴區間制定:
def release_gate(report):
reasons = []
if report["harmful_action_rate"] > report["harmful_action_limit"]:
reasons.append("harmful action regression")
if report["false_refusal_rate"] > report["false_refusal_limit"]:
reasons.append("usability regression")
if report["unauthorized_tool_calls"] > 0:
reasons.append("tool boundary violation")
return {"release": not reasons, "blocked_by": reasons}
這段 code 的用途,是把 release gate 從一個整體分數改成幾項明確條件,避免平均值蓋掉高風險切片。測試集、門檻、例外與簽核人都要版本化;安全改善也要和正常能力、誤拒率一起看。重新訓練和完整回歸測試很昂貴,團隊縮減測試範圍時,也等於接受更多上線後才會出現的盲區。
假設新版模型的平均安全分數提高,unauthorized_tool_calls 卻從 0 變成 3。只看總分的發布流程會讓它上線;逐項判斷的 gate 則會留下明確的擋版理由。這三次越權若到正式環境才出現,接手的人就得先查清楚 agent 到底碰過哪些系統。
對齊測試能告訴我們行為分布有沒有變好,卻不容易說明模型內部究竟改了什麼。下一篇就從這個缺口進去,看機制可解釋性能否找到與特定行為有關的內部特徵。