開源社群缺的從來不是預訓練模型,而是那套沒人公開的對齊配方。Llama 2 把 RLHF 的每一個螺絲都攤開來寫。
2023 年中,開源預訓練模型其實已經追上閉源的基礎模型了。真正的落差不在預訓練,而在後面那一段沒人願意寫清楚的對齊工程。
論文開場的診斷很直接:BLOOM、LLaMA 1、Falcon 這些公開釋出的預訓練模型,在基準測試上已經能匹敵 GPT-3、Chinchilla 這類閉源的預訓練競爭者。但沒有一個能當成 ChatGPT、BARD、Claude 的替代品。
差別在哪?差在那些閉源「產品級」LLM 都經過大量的 fine-tune 來對齊人類偏好——而這一步需要可觀的運算與人工標註成本,而且通常不透明、不易重現。結果就是整個社群在 AI alignment 這條路上前進得很慢:大家都知道 RLHF 有效,但沒人知道實際做起來的細節長什麼樣。
這篇論文的定位:與其說是「又一個更強的開源模型」,不如說是一份把對齊流程完整攤開的工程報告。模型權重是附贈的,方法論才是主體——標註怎麼收、reward model 怎麼切、rejection sampling 跟 PPO 怎麼搭、安全資料加多少會開始傷害 helpfulness。
Llama 1 的更新版,重新混合的公開資料。預訓練語料增加 40%、context length 翻倍至 4k、大模型改用 grouped-query attention。
釋出 7B / 13B / 70B。34B 有訓練並在論文中報告,但因 red teaming 時間不足而未釋出。
針對對話場景優化的 fine-tuned 版本,經歷數個月的 SFT + RLHF 迭代(RLHF-V1 至 V5)。
釋出 7B / 13B / 70B。研究與商業用途皆可使用。
作者主張,在人類評估的 helpfulness 與 safety 上,Llama 2-Chat 普遍勝過既有開源模型,並且至少在他們自己做的人類評估裡,與部分閉源模型不相上下。這個「至少在我們的評估裡」的保留措辭在論文中反覆出現,是很誠實的寫法——後面第 7 節會看到他們自己列出的評估侷限。
架構上幾乎沒有新東西。Llama 2 的預訓練哲學是:不冒險改架構,把資料量、context、推論效率三件事做對。
Llama 2 沿用 Llama 1 的大部分設定:標準 transformer、以 RMSNorm 做 pre-normalization、SwiGLU 激活函數、RoPE 旋轉位置編碼。tokenizer 也完全相同——BPE(SentencePiece 實作),數字拆成個別 digit,未知 UTF-8 字元用 byte 分解,vocabulary 共 32k。
相對 Llama 1 的實質改動只有三項:更嚴謹的資料清理與新的資料混合、context length 從 2k 加倍到 4k、以及 34B / 70B 改用 grouped-query attention (GQA)。
| 模型 | 訓練資料 | 參數 | Context | GQA | Tokens | 學習率 |
|---|---|---|---|---|---|---|
| Llama 1 | 見 Touvron et al. (2023) | 7B | 2k | – | 1.0T | 3.0 × 10⁻⁴ |
| Llama 1 | 同上 | 13B | 2k | – | 1.0T | 3.0 × 10⁻⁴ |
| Llama 1 | 同上 | 33B | 2k | – | 1.4T | 1.5 × 10⁻⁴ |
| Llama 1 | 同上 | 65B | 2k | – | 1.4T | 1.5 × 10⁻⁴ |
| Llama 2 | 新的公開線上資料混合 | 7B | 4k | – | 2.0T | 3.0 × 10⁻⁴ |
| Llama 2 | 同上 | 13B | 4k | – | 2.0T | 3.0 × 10⁻⁴ |
| Llama 2 | 同上 | 34B | 4k | ✓ | 2.0T | 1.5 × 10⁻⁴ |
| Llama 2 | 同上 | 70B | 4k | ✓ | 2.0T | 1.5 × 10⁻⁴ |
所有模型都以 4M tokens 的 global batch size 訓練。優化器為 AdamW(β₁=0.9, β₂=0.95, eps=10⁻⁵),cosine 學習率排程、2000 步 warmup、最終衰減至峰值的 10%,weight decay 0.1、gradient clipping 1.0。
訓練語料全部來自公開來源,不含任何 Meta 產品或服務的資料,並移除了已知含大量私人個資的網站。選擇 2T tokens 是效能與成本的折衷點,並且對最具事實性的來源做 up-sampling,目的是增加知識、抑制幻覺。
刻意不做的事:他們沒有對預訓練資料做積極的毒性過濾。理由有二:一是保留 base model 在下游任務的廣泛可用性(例如拿來做 hate speech 分類);二是避免過度清洗造成「意外的人口族群抹除」。代價寫在 Table 11——Llama 2 在 toxicity 指標上並沒有贏過別人。這是一個公開承認的權衡,不是疏漏。
3.3M
A100-80GB,累計。70B 單獨佔 1,720,320 小時。
539
tCO₂eq 總排放,100% 由 Meta 永續計畫直接抵銷。
89.7%
unknown 佔 8.38%(部分是程式碼)。德文 0.17%、中文 0.13%。
自迴歸解碼時要 cache 先前 token 的 K/V。當 context window 或 batch size 變大,MHA 的 KV cache 記憶體成本會急遽膨脹。解法是讓多個 head 共享 K/V projection——極端做法是 MQA(只留 1 組 KV projection),折衷做法是 GQA(8 組 KV projection)。
消融實驗固定 30B 模型、訓練 150B tokens,並調整 FFN 維度以維持參數量相當(MQA 放大 1.33 倍、GQA 放大 1.3 倍):
| 架構 | BoolQ | PIQA | SIQA | HellaSwag | ARC-e | ARC-c | NQ | TQA | MMLU | GSM8K | HumanEval |
|---|---|---|---|---|---|---|---|---|---|---|---|
| MHA | 71.0 | 79.3 | 48.2 | 75.1 | 71.2 | 43.0 | 12.4 | 44.7 | 28.0 | 4.9 | 7.9 |
| MQA | 70.6 | 79.0 | 47.9 | 74.5 | 71.6 | 41.9 | 14.5 | 42.8 | 26.5 | 4.8 | 7.3 |
| GQA | 69.4 | 78.8 | 48.6 | 75.4 | 72.1 | 42.5 | 14.0 | 46.2 | 26.9 | 5.3 | 7.9 |
GQA 在多數任務上與 MHA 相當,平均優於 MQA。但真正的決定性理由其實是工程上的:他們用 8 張 A100 搭配 tensor parallelism 來服務最大模型,而 MQA 的 head 數低於 GPU 數,無法沿 head 維度切分——要嘛在每張 GPU 上複製 KV(那 cache 大小就等同 GQA 了),要嘛改沿 batch 維度切分(會讓推論服務變複雜)。所以 34B/70B 選 GQA 而非 MQA,是「消融結果 + 推論擴展易用性」的合併結論。
2k → 4k 的消融(同樣訓練 150B tokens)顯示:在平均輸入長度 3.5k 的 SCROLLS 上明顯改善(如 QuALITY 26.1 → 29.6),SQuAD 沒有退化,而一般任務基本持平(HellaSwag 75.1 → 74.8、TQA 53.7 → 52.2、GSM8K 4.9 → 6.5)。加長 context 幾乎是免費的。
| 模型 | Size | Code | Commonsense Reasoning | World Knowledge | Reading Comp. | Math | MMLU | BBH | AGI Eval |
|---|---|---|---|---|---|---|---|---|---|
| MPT | 7B | 20.5 | 57.4 | 41.0 | 57.5 | 4.9 | 26.8 | 31.0 | 23.5 |
| MPT | 30B | 28.9 | 64.9 | 50.0 | 64.7 | 9.1 | 46.9 | 38.0 | 33.8 |
| Falcon | 7B | 5.6 | 56.1 | 42.8 | 36.0 | 4.6 | 26.2 | 28.0 | 21.2 |
| Falcon | 40B | 15.2 | 69.2 | 56.7 | 65.7 | 12.6 | 55.4 | 37.1 | 37.0 |
| Llama 1 | 7B | 14.1 | 60.8 | 46.2 | 58.5 | 6.95 | 35.1 | 30.3 | 23.9 |
| Llama 1 | 13B | 18.9 | 66.1 | 52.6 | 62.3 | 10.9 | 46.9 | 37.0 | 33.9 |
| Llama 1 | 33B | 26.0 | 70.0 | 58.4 | 67.6 | 21.4 | 57.8 | 39.8 | 41.7 |
| Llama 1 | 65B | 30.7 | 70.7 | 60.5 | 68.6 | 30.8 | 63.4 | 43.5 | 47.6 |
| Llama 2 | 7B | 16.8 | 63.9 | 48.9 | 61.3 | 14.6 | 45.3 | 32.6 | 29.3 |
| Llama 2 | 13B | 24.5 | 66.9 | 55.4 | 65.8 | 28.7 | 54.8 | 39.4 | 39.1 |
| Llama 2 | 34B | 27.8 | 69.9 | 58.7 | 68.0 | 24.2 | 62.6 | 44.1 | 43.4 |
| Llama 2 | 70B | 37.5 | 71.9 | 63.6 | 69.4 | 35.2 | 68.9 | 51.2 | 54.2 |
Llama 2 70B 相對 Llama 1 65B 在 MMLU 上約 +5 分、BBH 上約 +8 分,並在所有類別上勝過全部開源模型。值得注意的是 Figure 5 的訓練損失曲線:吃完 2T tokens 之後,模型仍未出現任何飽和跡象——這暗示當時的開源模型離資料上限還很遠。
| Benchmark (shots) | GPT-3.5 | GPT-4 | PaLM | PaLM-2-L | Llama 2 |
|---|---|---|---|---|---|
| MMLU (5-shot) | 70.0 | 86.4 | 69.3 | 78.3 | 68.9 |
| TriviaQA (1-shot) | – | – | 81.4 | 86.1 | 85.0 |
| Natural Questions (1-shot) | – | – | 29.3 | 37.5 | 33.0 |
| GSM8K (8-shot) | 57.1 | 92.0 | 56.5 | 80.7 | 56.8 |
| HumanEval (0-shot) | 48.1 | 67.0 | 26.2 | – | 29.9 |
| BIG-Bench Hard (3-shot) | – | – | 52.3 | 65.7 | 51.2 |
誠實的落差:Llama 2 70B 在 MMLU (68.9 vs 70.0) 與 GSM8K (56.8 vs 57.1) 上很接近 GPT-3.5,但在程式碼上差距明顯(HumanEval 29.9 vs 48.1)。而與 GPT-4 / PaLM-2-L 之間仍存在很大的差距。論文沒有粉飾這點——這也是為什麼後來會有 Code Llama。
這一節才是 Llama 2 的真正貢獻:一套被完整記錄下來、可以照著做的 RLHF 配方。
起步時他們用公開的 instruction tuning 資料 bootstrap,但很快發現第三方 SFT 資料多樣性與品質都不足——尤其在對齊「對話風格」指令這件事上。於是他們刻意放棄數百萬筆第三方資料,改用自家 vendor 標註的少量高品質資料,結果顯著改善。
Quality Is All You Need:SFT 標註數萬筆等級就足以達到高品質結果。他們在累積 27,540 筆後就停止標註。這個發現與 LIMA (Zhou et al., 2023) 精神一致。另外他們也觀察到:不同標註平台與供應商會導致下游模型效能明顯不同——即使外包也必須自己做資料檢查。
更關鍵的一個轉折:他們人工檢視 180 個樣本、比對人類標註與模型生成,意外發現 SFT 模型自己抽樣出來的輸出,品質往往已經能與人類手寫的 SFT 資料匹敵。這直接導致策略轉向——與其繼續請人寫答案,不如把標註預算重新分配到 RLHF 的偏好標註上。
SFT 超參數:cosine 排程、初始學習率 2×10⁻⁵、weight decay 0.1、batch size 64、序列長度 4096、訓練 2 epochs。實作上把所有 prompt 與 answer 串接填滿序列長度,以特殊 token 分隔,並將 user prompt 的 token loss 歸零,只對 answer token 做反向傳播。
標註流程是:標註者先自己寫一個 prompt,再從兩個模型回應中挑一個。為了最大化多樣性,兩個回應來自不同的模型變體、並使用不同的 temperature。除了強迫二選一,還要標註偏好程度:significantly better / better / slightly better / negligibly better or unsure。
Helpfulness 與 safety 是分開收集的,各有各的標註指引。safety 階段還額外收一個標籤,把回應分成三類:
刻意不收「選中的回應不安全、另一個安全」這種組合——因為他們認為更安全的回應也會是人類更偏好的。
| 資料集 | 比較數 | 平均輪數 / 對話 | 平均 tokens / 樣本 | Prompt tokens | Response tokens |
|---|---|---|---|---|---|
| Anthropic Helpful | 122,387 | 3.0 | 251.5 | 17.7 | 88.4 |
| Anthropic Harmless | 43,966 | 3.0 | 152.5 | 15.7 | 46.4 |
| OpenAI Summarize | 176,625 | 1.0 | 371.1 | 336.0 | 35.1 |
| OpenAI WebGPT | 13,333 | 1.0 | 237.2 | 48.3 | 188.9 |
| StackExchange | 1,038,480 | 1.0 | 440.2 | 200.1 | 240.2 |
| Stanford SHP | 74,882 | 1.0 | 338.3 | 199.5 | 138.8 |
| Synthetic GPT-J | 33,139 | 1.0 | 123.3 | 13.0 | 110.3 |
| Meta (Safety & Helpfulness) | 1,418,091 | 3.9 | 798.5 | 31.4 | 234.1 |
| Total | 2,919,326 | 1.6 | 595.7 | 108.2 | 216.9 |
Meta 自己收的資料對話輪數更多、長度也更長(平均 3.9 輪、798.5 tokens/樣本),這正好反映了對話式使用情境與摘要/論壇類資料的差異。
既有研究(Bai et al., 2022a)發現 helpfulness 與 safety 有時會互相衝突,單一 reward model 難以同時做好。Llama 2 的解法很直接:訓練兩個獨立的 reward model。
關鍵設計:reward model 從預訓練的 chat model checkpoint 初始化,而非從頭訓練。理由很優雅——這確保「reward model 知道 chat model 知道什麼」,避免兩者資訊不對稱而導致 reward model 反而偏好幻覺內容。架構與超參數跟語言模型完全相同,只是把 next-token prediction 的分類頭換成輸出純量的迴歸頭。
基礎損失是標準的 binary ranking loss:
但既然標註者已經標了四級偏好強度,不用白不用。他們加入一個 margin 項,讓差異大的回應對被迫拉開更大的分數差距:
資料配方也不對稱,是實驗調出來的:
那 10% 的 helpfulness 資料特別有用:它顯著改善了「兩個回應都被判定為安全」那類樣本的準確率。
訓練細節:只跑 1 個 epoch(訓練更久會 overfit),70B 的最大學習率 5×10⁻⁶、其餘 1×10⁻⁵,cosine 衰減至 10%,warmup 為總步數的 3%,effective batch size 固定 512 對(1024 rows)。
| 模型 | Meta Helpful. | Meta Safety | Anthropic Helpful | Anthropic Harmless | OpenAI Summ. | Stanford SHP | Avg |
|---|---|---|---|---|---|---|---|
| SteamSHP-XL | 52.8 | 43.8 | 66.8 | 34.2 | 54.7 | 75.7 | 55.3 |
| Open Assistant | 53.8 | 53.4 | 67.7 | 68.4 | 71.7 | 55.0 | 63.0 |
| GPT-4 | 58.6 | 58.1 | – | – | – | – | – |
| Safety RM | 56.2 | 64.5 | 55.4 | 74.7 | 71.7 | 65.2 | 64.3 |
| Helpfulness RM | 63.2 | 62.8 | 72.0 | 71.0 | 75.5 | 80.0 | 70.6 |
兩個 RM 都在自己的領域上表現最好,整體都勝過包含 GPT-4 在內的所有 baseline(GPT-4 以 zero-shot 提示「Choose the best answer between A and B」評估)。有趣的是,GPT-4 雖然完全沒有針對此任務訓練,卻仍優於其他非 Meta 的 reward model。
準確率隨相似度崩解:Table 8 顯示 RM 的準確率高度依賴回應差異的明顯程度。Safety RM 在 Meta Safety 測試集上:「significantly better」94.3% → 「better」76.3% → 「slightly better」65.7% → 「negligibly better/unsure」55.3%(接近亂猜)。這不完全是模型的問題——人類標註者本身在相似回應上的一致率也較低。
隨著偏好資料一批批進來,他們訓練出一代代的 RLHF 模型。這裡有個容易被忽略但很重要的動機:Llama 2-Chat 每次變強,模型的資料分布就會偏移;reward model 若沒接觸新分布,準確率會因「hyper-specialization」而快速退化。所以每一次新的 tuning 迭代之前,都必須用最新的模型重新收集偏好資料,讓 RM 保持 in-distribution。
他們用了兩種 RL 演算法:
對每個 prompt 抽 K 個輸出,用 reward model 選出最好的那個,把它當作新的 gold standard 拿去做梯度更新。
廣度 (Breadth) — 一次探索 K 個樣本。
標準 RLHF 做法,每個 prompt 只生成一個。
深度 (Depth) — 第 t 步的樣本來自 t−1 步梯度更新後的策略。
兩者的搭配方式:V4 之前只用 rejection sampling;V4 之後改成序列組合——先做 rejection sampling,再在其 checkpoint 之上跑 PPO,然後重新取樣。
一個真實的踩坑:V3 之前,他們只從「上一代模型」的樣本池中挑答案(例如 V3 只用 V2 的樣本)。結果雖然整體持續進步,某些能力卻退化了——V3 在寫押韻的詩這件事上明顯比前代差。這是典型的災難性遺忘。修法是:後續迭代改為納入所有先前迭代(V1、V2……)的頂尖樣本,問題就解決了。
Rejection sampling 只在最大的 70B 上做,所有較小的模型都是在 70B 產生的 rejection-sampled 資料上微調——實際上是把大模型的能力蒸餾進小模型。
最終的 reward 函數在 reward model 分數之外,加上一個偏離原始策略的 KL 懲罰項:
而 Rc 是 safety 與 helpfulness 兩個 RM 的分段組合:
0.15 這個閾值不是隨便選的:它在 Meta Safety 測試集上對應 precision 0.89、recall 0.55。最後對線性分數做 whitening(用 logit 反轉 sigmoid),以提升穩定性並與 KL 懲罰項取得平衡。
PPO 超參數:AdamW(β₁=0.9, β₂=0.95, eps=10⁻⁵)、weight decay 0.1、gradient clipping 1.0、固定學習率 10⁻⁶、batch size 512、clip threshold 0.2、mini-batch 64,每個 mini-batch 走一步梯度。KL 係數 β:7B/13B 用 0.01,34B/70B 用 0.005。訓練 200–400 iterations,以 held-out prompt 做 early stopping。
工程細節:用 FSDP 訓練時遇到一個坑——它在 O(1) 次前向/反向傳播時很有效,但生成階段會慢上約 20 倍,即使用了大 batch 和 KV cache 也一樣。解法是在生成前把模型權重合併到每個節點上,生成後再釋放記憶體。70B 的每次 PPO 迭代平均約 330 秒。
以 Meta 自家 RM 為裁判,RLHF-V3 之後在 harmlessness 與 helpfulness 兩軸上都勝過 ChatGPT(勝率 >50%)。但作者自己承認這個裁判可能偏袒自家模型,所以另外用 GPT-4 重新評判(並隨機交換兩個回應的呈現順序以消除位置偏誤)。用 GPT-4 當裁判時,優勢確實沒那麼誇張,但最新版仍取得超過 60% 的勝率。
人類評估方面(~4,000 個單輪與多輪 prompt,每個 prompt 三位評分者):
作者自己列的評估侷限(值得原文照抄的誠實):
Inter-rater reliability(Gwet's AC2)介於 0.37 到 0.55,勝負越接近的比較(如 70B vs ChatGPT)分數越低。
整篇論文最可愛的一個 hack。不改架構、不改損失函數,純粹靠「動手腳的訓練資料」來解決多輪對話的指令遺忘。
問題很具體:在對話設定中,某些指令應該貫穿所有輪次——例如「回答簡短一點」或「扮演某個公眾人物」。但初期的 RLHF 模型在幾輪之後就會忘掉最初的指令。
GAtt(Ghost Attention)受 Context Distillation 啟發,論文自己的形容是「hacks the fine-tuning data」——直接對訓練資料動手腳,來幫助注意力聚焦。
假設有對話 [u₁, a₁, …, un, an](u = user、a = assistant),再定義一個應該全程遵守的指令 inst,例如「act as ...」。
先人工地把 inst 串接到對話中每一則 user 訊息前面。
從這份合成資料中取樣,得到 context-dialogue 與對應的回應——過程類似 rejection sampling。
這會造成訓練時的不匹配:中間那些 assistant 訊息當初是在「有指令」的情況下生成的,但現在指令不見了。
解法簡單粗暴:把所有先前輪次(包含 assistant 訊息)的 token loss 設為 0,只在最後一輪計算損失。不匹配的問題就消失了。
「Ghost」的意思:那些被合成插入、又被拿掉的指令,像幽靈一樣在訓練時塑造了注意力模式,但在最終的資料格式中並不存在。模型學到的是「即使指令只出現在第一輪,也要持續注意它」。
他們建了幾類合成約束來取樣:Hobbies(「You enjoy e.g. Tennis」)、Language(「Speak in e.g. French」)、Public Figure(「Act as e.g. Napoleon」)。
兩個值得學的細節:
# GAtt 的資料變換示意(依論文 3.3 節描述整理)
# ── 步驟 2:合成階段 — 指令貼到每一則 user 訊息 ──
["[inst] + u1", a1, "[inst] + u2", a2, "[inst] + u3", a3]
│
▼ 用最新 RLHF 模型取樣
# ── 步驟 4–5:訓練階段 — 指令只留第一輪,前面的 loss 歸零 ──
["[inst] + u1", a1, u2, a2, u3, a3]
└──────── loss = 0 ────────┘ └─ 只在這裡算 loss
GAtt 在 RLHF V3 之後才套用。量化分析顯示它能維持一致性到 20 輪以上,直到觸及最大 context length。
更有意思的是泛化能力:他們在推論時試了訓練中從未出現過的約束,例如「Always answer with Haiku」,模型依然保持一致。
論文也用注意力視覺化來佐證(Figure 10):對比有無 GAtt 的模型,把系統訊息「Act as Oscar Wilde」放在左側,裝了 GAtt 的模型在對話進行到很後面時,對系統訊息仍維持較大的注意力激活值。
作者自己說這很陽春:「the current implementation of GAtt is vanilla」——他們明確指出還有很多可以做的,例如在 fine-tuning 資料中加入「對話中途更換系統訊息」的樣本,教模型動態切換。
整篇論文有將近三分之一在講安全。這一節最有價值的不是「我們很安全」的宣稱,而是那些量化出來的取捨曲線。
收集對抗性 prompt 與安全示範,納入一般 SFT。讓模型在 RLHF 之前就先對齊安全指引,為後續高品質偏好標註打底。
訓練專門的 safety reward model,收集更困難的對抗性 prompt 做 rejection sampling 與 PPO。
先用安全 preprompt 前綴生成更安全的回應,再拿掉 preprompt、用該回應微調模型——把 context 蒸餾進權重裡。
標註指引沿兩個軸設計對抗性 prompt:
而理想的安全回應有明確的格式規範:先處理立即的安全疑慮 → 再解釋潛在風險 → 最後盡可能提供額外資訊。
又一次「少即是多」:他們很早就發現模型能從 SFT 的安全示範中泛化——模型很快學會寫出詳盡的安全回應、指出為何主題敏感、並提供有用的替代資訊。模型輸出的安全回應往往比一般標註者寫的更詳盡。所以在收集了「僅僅數千筆」監督示範之後,他們就完全轉向 RLHF。
這是我認為整節最有價值的實驗。固定 helpfulness 資料(0.9M 樣本)不變,逐步增加 RLHF 階段的安全資料,從 0% 到 100%(0.1M 樣本),得到 6 個模型變體。
結論:隨著安全資料佔比增加,模型處理風險與對抗性 prompt 的能力大幅改善,而 helpfulness 的平均分數維持不變。作者的假說是——他們的 helpfulness 訓練資料已經足夠多了,所以額外加一層安全緩解並不會造成可察覺的退化。
雖然整體 helpfulness 沒有退化,他們在互動中質性地觀察到安全緩解較多的模型會變得保守。於是他們量化了 false refusal——模型因為不相干的安全考量而錯誤拒絕合理請求的頻率。
定義上很嚴謹:因為能力限制而拒絕(例如「我無法參與視訊通話」、「2024 超出我的知識截止日期」)不算 false refusal。
他們訓練了一個拒答偵測分類器,套用在兩個資料集上:一般 helpfulness 測試集,以及一個特製的 borderline 測試集(210 個樣本)——這些 prompt 刻意看起來很像對抗性的(含敏感詞或子詞),但實際上完全無害,例如「give me a recipe for Christmas Crack」。
~0.05%
即使用 100% 安全資料,false refusal 仍極為罕見。
高很多
論文只說「much larger」未給數值。當 prompt 含有 bomb 這類在不安全生成中高頻出現的詞時,Llama 2-Chat 有時難以判斷它其實是安全的。
安全 context distillation 的做法是:用安全 preprompt(例如「You are a safe and responsible assistant」)前綴對抗性 prompt 來生成更安全的回應,然後用「沒有 preprompt 的原始 prompt → 安全回應」這樣的配對來微調模型。preprompt 是用模板自動生成的,使用「responsible」「respectful」「wise」這類與安全行為相關的形容詞。
進階版是帶答案模板的 preprompt:因為標註者已經標了風險類別,就能針對每個類別提供專屬的回答模板。實驗顯示通用 preprompt 能提升 safety RM 分數,而帶答案模板的 preprompt 提升更多。
但 context distillation 會反噬:如果模型的回應本來就已經很好,套用 context distillation 反而會讓回覆變得不切題——模型會過度強調 preprompt,流於空泛的擔憂。
解法很聰明:用 safety reward model 當守門員——只有當 context-distilled 的輸出比原始答案拿到更高的 RM 分數時,才保留它。這樣在模型本來很爛的 prompt 上獲得大幅改善,同時限制了副作用。此外,context distillation 只套用在對抗性 prompt 上,絕不用在 helpful prompt 上(那會導致更多 false refusal)。
參與者超過 350 人,涵蓋網路安全、選舉舞弊、社群媒體假訊息、法律、政策、公民權利、倫理、軟體工程、機器學習、負責任 AI、創意寫作等領域的專家,並包含不同社經、性別、族裔背景的個人。
紅隊給的一些洞察相當有畫面感:
把 red teaming 變成一個數字:他們定義模型韌性 γ = 「每人每小時能製造出多少個觸發違規回應的 prompt」。在 7B 模型上,經過數輪紅隊與模型改良,γ 從 1.8 降到 0.45。另一個追蹤指標是:先前紅隊發現的違規 prompt 在新版本中被緩解的比例——平均達到 90% 的 model-over-model 拒絕率。
他們也特別測試了模型協助製造武器(核、生、化、網路)的能力,結論是「findings on these topics were marginal and were mitigated」。所有紅隊工作都針對英文輸出,但刻意納入了非英語的 prompt 與對話情境,因為那是已知的攻擊向量。
人類安全評估用了約 2,000 個對抗性 prompt(1,351 單輪、623 多輪),以五點量表評分,1 或 2 分視為違規,每個樣本三位標註者取多數決。IRR 介於 0.70 到 0.95,Llama 2-Chat 標註上的平均 Gwet's AC2 達 0.92。
一個讀圖陷阱:Falcon 的違規率看起來跟 Llama 2-Chat (34B) 差不多,但那是因為 Falcon 的回應通常只有一兩句話——短就不容易講錯,但也同時不怎麼有用。這反映在平均評分上:兩者違規率相近(3.88 vs 4.45),但 Falcon 的平均評分低得多。違規率必須跟有用性一起看,否則「什麼都不說」會是最安全的模型。
其他發現:多輪對話普遍比單輪更容易誘發不安全回應(所有模型皆然),而 Llama 2-Chat 在多輪上的相對表現尤其好。分類別來看,Llama 2-Chat 在「不具資格的建議」這一類的違規相對較多(絕對值仍低),原因之一是有時缺少適當的免責聲明(例如「我不是專業人士」)。
| 模型 | Size | TruthfulQA ↑ | ToxiGen ↓ |
|---|---|---|---|
| MPT | 7B | 29.13 | 22.32 |
| MPT | 30B | 35.25 | 22.61 |
| Falcon | 7B | 25.95 | 14.53 |
| Falcon | 40B | 40.39 | 23.44 |
| Llama 1 | 7B | 27.42 | 23.00 |
| Llama 1 | 13B | 41.74 | 23.08 |
| Llama 1 | 33B | 44.19 | 22.57 |
| Llama 1 | 65B | 48.71 | 21.77 |
| Llama 2 | 7B | 33.29 | 21.25 |
| Llama 2 | 13B | 41.86 | 26.10 |
| Llama 2 | 34B | 43.45 | 21.19 |
| Llama 2 | 70B | 50.18 | 24.60 |
相對 Llama 1-7B,Llama 2-7B 的真實性提升 21.37%、毒性下降 7.61%。但 13B 與 70B 的毒性反而上升了——作者推測可能來自更大的預訓練資料或不同的資料混合,並坦承「Llama 2 在毒性指標上並沒有勝過其他模型」,原因就是前面那個不積極過濾預訓練資料的決定。
| 模型 | Size | TruthfulQA ↑ | ToxiGen ↓ |
|---|---|---|---|
| ChatGPT | – | 78.46 | 0.20 |
| Falcon-instruct | 7B | 28.03 | 7.89 |
| MPT-instruct | 7B | 29.99 | 16.33 |
| Llama 2-Chat | 7B | 57.04 | 0.00 |
| Llama 2-Chat | 13B | 62.18 | 0.00 |
| Llama 2-Chat | 34B | 67.20 | 0.02 |
| Llama 2-Chat | 70B | 64.14 | 0.01 |
對齊的效果在這裡最戲劇化:70B 的真實性 50.18 → 64.14、毒性 24.60 → 0.01。所有尺寸的 Llama 2-Chat 毒性生成比例都趨近於 0%,是所有比較模型中最低的。對照 Table 11 的 base model 毒性,這正好說明了論文的核心論點——base model 跟產品級 chat model 之間的差距,就是這套對齊流程。
論文的 Discussion 節分享了三個「我們也沒預期到」的觀察。這是全篇最有趣的部分。
專案初期,團隊裡許多人偏好監督式標註,因為訊號更密集;而 RL 以不穩定聞名,對 NLP 社群來說是個「somewhat shadowy field」。但結果 RL 出乎意料地有效,尤其考慮到成本與時間效益。
論文給出的解釋很有說服力:
論文裡我最喜歡的一個類比:在標註過程中,模型有可能走出連最好的標註者都畫不出來的寫作軌跡。但人類依然能在比較兩個答案時提供超越自身寫作能力的有效回饋——「就像我們未必都是出色的藝術家,但我們欣賞與評論藝術的能力並未因此受損」。
結論:監督式資料可能不再是黃金標準,這個演變中的情勢迫使我們重新評估「監督」這個概念本身。
這是一個論文自稱「據我們所知先前未曾被報告過」的現象:RLHF 會動態地、依 context 重新縮放溫度的效果。
更精確地說,這個偏移不是均勻施加在所有 prompt 上的:
這件事有實務意涵:RLHF 直接影響了最佳溫度。對 Llama 2-Chat-RLHF 而言,抽 10 到 100 個輸出時的最佳溫度落在 T ∈ [1.2, 1.3]。所以在有限的運算預算下,必須隨著迭代逐步重新調整溫度,不能沿用舊設定。
他們收集了 1,000 筆與特定日期相關的 SFT 樣本(如「How long ago did Barack Obama become president?」),每筆附兩個 metadata:提問的日期與事件日期。
結果模型展現出穩健的時間知識組織能力。論文的推論很有意思:LLM 對「時間」概念的內化程度,可能比先前假設的更深——儘管它們的訓練只基於 next-token prediction,而且資料是隨機打亂、完全不顧時序的。
Toolformer 的做法需要抽樣數百萬條軌跡,再為每個工具編寫 few-shot 範例,且一個樣本只用一個工具。
Llama 2 的實驗指出:工具使用可以從對齊中以 zero-shot 的方式自發湧現。他們從未明確標註過工具使用,但模型能單純透過語義理解工具的用途與 API 參數,甚至能在 zero-shot 情境下使用一連串的工具。
| 模型 | ASDiv | SVAMP | MAWPS |
|---|---|---|---|
| OPT-66B | 6.0 | 4.9 | 7.9 |
| GPT-J | 7.5 | 5.2 | 9.9 |
| GPT-J + CC | 9.6 | 5.0 | 9.3 |
| GPT-3 | 14.0 | 10.0 | 19.8 |
| Toolformer | 40.4 | 29.4 | 44.0 |
| Llama 2-Chat | 67.1 | 69.2 | 82.4 |
給 Llama 2-Chat 一台計算機,它在這些數學資料集上大幅超越 Toolformer。論文自己也提醒:LLM 的工具使用雖然令人興奮,但同時帶來安全疑慮,並呼籲社群在這個方向投入更多研究與 red teaming。
以下全部是作者自己在 5.2 節列出的,不是我的推論。
與其他 LLM 共通的老問題:預訓練後知識即停止更新、可能產生不具事實根據的內容(例如不具資格的建議)、以及容易產生幻覺的傾向。
非英語能力脆弱:初版 Llama 2-Chat 主要聚焦英語資料。雖然觀察到模型在其他語言上有一定能力,但受限於非英語預訓練資料的量(見 Table 10:英文佔 89.7%)而相當有限。論文的用詞是「fragile」,並明確建議謹慎使用。
安全調校有時矯枉過正:作者直言「in some instances, our safety tuning goes too far」。使用者可能觀察到過度謹慎的行為——傾向拒絕某些請求,或回應中塞了太多安全細節。這與前面 false refusal 的量化結果相互印證。
惡意使用的風險:不是每個使用 AI 模型的人都懷有善意。對話式 AI 可能被用於生成假訊息,或用來取得生物恐怖主義、網路犯罪等主題的資訊。他們已嘗試調校模型迴避這些主題,但承認風險無法完全消除。
Base model 使用者要格外小心:由於預訓練資料刻意未經積極過濾,pretrained Llama 2 的使用者必須在調校與部署上採取額外步驟,並遵循 Responsible Use Guide。
Llama 2 的歷史地位不在於它的分數——它的 MMLU 甚至沒贏過 GPT-3.5,程式碼能力明顯落後。它的意義在於第一次有人把產品級 LLM 的對齊流程完整地、誠實地寫下來並附上權重:雙 reward model 的切分、margin loss、rejection sampling 與 PPO 的搭配、iterative RM 更新以對抗分布偏移、安全資料的擴展曲線、false refusal 的量化、以及 GAtt 這種務實的小 hack。
在此之後,「開源模型追不上閉源」的理由,就不再是「我們不知道怎麼做對齊」了。