arXiv 2023 · 論文導讀

Llama 2

開源社群缺的從來不是預訓練模型,而是那套沒人公開的對齊配方。Llama 2 把 RLHF 的每一個螺絲都攤開來寫。

RLHF Rejection Sampling Ghost Attention 雙 Reward Model GQA 2T tokens 7B / 13B / 34B / 70B

Hugo Touvron, Louis Martin, Kevin Stone 等 68 位作者 · GenAI, Meta · arXiv:2307.09288

SECTION 01

問題定義 — 開源缺的是什麼

2023 年中,開源預訓練模型其實已經追上閉源的基礎模型了。真正的落差不在預訓練,而在後面那一段沒人願意寫清楚的對齊工程。

論文開場的診斷很直接:BLOOM、LLaMA 1、Falcon 這些公開釋出的預訓練模型,在基準測試上已經能匹敵 GPT-3、Chinchilla 這類閉源的預訓練競爭者。但沒有一個能當成 ChatGPT、BARD、Claude 的替代品。

差別在哪?差在那些閉源「產品級」LLM 都經過大量的 fine-tune 來對齊人類偏好——而這一步需要可觀的運算與人工標註成本,而且通常不透明、不易重現。結果就是整個社群在 AI alignment 這條路上前進得很慢:大家都知道 RLHF 有效,但沒人知道實際做起來的細節長什麼樣。

這篇論文的定位:與其說是「又一個更強的開源模型」,不如說是一份把對齊流程完整攤開的工程報告。模型權重是附贈的,方法論才是主體——標註怎麼收、reward model 怎麼切、rejection sampling 跟 PPO 怎麼搭、安全資料加多少會開始傷害 helpfulness。

釋出了什麼

Llama 2 (base)

Llama 1 的更新版,重新混合的公開資料。預訓練語料增加 40%、context length 翻倍至 4k、大模型改用 grouped-query attention。

釋出 7B / 13B / 70B。34B 有訓練並在論文中報告,但因 red teaming 時間不足而未釋出

Llama 2-Chat

針對對話場景優化的 fine-tuned 版本,經歷數個月的 SFT + RLHF 迭代(RLHF-V1 至 V5)。

釋出 7B / 13B / 70B。研究與商業用途皆可使用。

作者主張,在人類評估的 helpfulness 與 safety 上,Llama 2-Chat 普遍勝過既有開源模型,並且至少在他們自己做的人類評估裡,與部分閉源模型不相上下。這個「至少在我們的評估裡」的保留措辭在論文中反覆出現,是很誠實的寫法——後面第 7 節會看到他們自己列出的評估侷限。

SECTION 02

預訓練 — 保守但扎實的升級

架構上幾乎沒有新東西。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)

Table 1 · Llama 2 模型家族(token 數僅指預訓練資料)
模型訓練資料參數ContextGQATokens學習率
Llama 1見 Touvron et al. (2023)7B2k1.0T3.0 × 10⁻⁴
Llama 1同上13B2k1.0T3.0 × 10⁻⁴
Llama 1同上33B2k1.4T1.5 × 10⁻⁴
Llama 1同上65B2k1.4T1.5 × 10⁻⁴
Llama 2新的公開線上資料混合7B4k2.0T3.0 × 10⁻⁴
Llama 2同上13B4k2.0T3.0 × 10⁻⁴
Llama 2同上34B4k2.0T1.5 × 10⁻⁴
Llama 2同上70B4k2.0T1.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。

資料:2 兆 tokens,以及一個刻意的取捨

訓練語料全部來自公開來源,不含任何 Meta 產品或服務的資料,並移除了已知含大量私人個資的網站。選擇 2T tokens 是效能與成本的折衷點,並且對最具事實性的來源做 up-sampling,目的是增加知識、抑制幻覺。

刻意不做的事:他們沒有對預訓練資料做積極的毒性過濾。理由有二:一是保留 base model 在下游任務的廣泛可用性(例如拿來做 hate speech 分類);二是避免過度清洗造成「意外的人口族群抹除」。代價寫在 Table 11——Llama 2 在 toxicity 指標上並沒有贏過別人。這是一個公開承認的權衡,不是疏漏。

GPU HOURS

3.3M

A100-80GB,累計。70B 單獨佔 1,720,320 小時。

CARBON

539

tCO₂eq 總排放,100% 由 Meta 永續計畫直接抵銷

英文佔比

89.7%

unknown 佔 8.38%(部分是程式碼)。德文 0.17%、中文 0.13%。

Grouped-Query Attention:為什麼不是 MQA

自迴歸解碼時要 cache 先前 token 的 K/V。當 context window 或 batch size 變大,MHA 的 KV cache 記憶體成本會急遽膨脹。解法是讓多個 head 共享 K/V projection——極端做法是 MQA(只留 1 組 KV projection),折衷做法是 GQA(8 組 KV projection)。

MHA GQA (8 KV) ★ 採用 MQA (1 KV) Q Q Q Q KV KV KV KV 每個 head 一組 KV KV cache 最大 Q Q Q Q KV KV 一群 head 共享一組 KV 可沿 head 切分到 8 GPU Q Q Q Q KV 全部 head 共用一組 head 數 < GPU 數 → 難切分
圖 1 · MHA / GQA / MQA 的 KV projection 共享結構(依論文 A.2.1 節文字重繪,head 數為示意)

消融實驗固定 30B 模型、訓練 150B tokens,並調整 FFN 維度以維持參數量相當(MQA 放大 1.33 倍、GQA 放大 1.3 倍):

Table 18 · Attention 架構消融(除 MMLU 5-shot、GSM8K 8-shot 外皆為 0-shot)
架構BoolQPIQASIQAHellaSwagARC-eARC-cNQTQAMMLUGSM8KHumanEval
MHA71.079.348.275.171.243.012.444.728.04.97.9
MQA70.679.047.974.571.641.914.542.826.54.87.3
GQA69.478.848.675.472.142.514.046.226.95.37.9

GQA 在多數任務上與 MHA 相當,平均優於 MQA。但真正的決定性理由其實是工程上的:他們用 8 張 A100 搭配 tensor parallelism 來服務最大模型,而 MQA 的 head 數低於 GPU 數,無法沿 head 維度切分——要嘛在每張 GPU 上複製 KV(那 cache 大小就等同 GQA 了),要嘛改沿 batch 維度切分(會讓推論服務變複雜)。所以 34B/70B 選 GQA 而非 MQA,是「消融結果 + 推論擴展易用性」的合併結論。

Context 加倍的代價

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 幾乎是免費的。

預訓練模型評估結果

Table 3 · 開源 base model 的分組學術基準比較
模型SizeCodeCommonsense
Reasoning
World
Knowledge
Reading
Comp.
MathMMLUBBHAGI Eval
MPT7B20.557.441.057.54.926.831.023.5
MPT30B28.964.950.064.79.146.938.033.8
Falcon7B5.656.142.836.04.626.228.021.2
Falcon40B15.269.256.765.712.655.437.137.0
Llama 17B14.160.846.258.56.9535.130.323.9
Llama 113B18.966.152.662.310.946.937.033.9
Llama 133B26.070.058.467.621.457.839.841.7
Llama 165B30.770.760.568.630.863.443.547.6
Llama 27B16.863.948.961.314.645.332.629.3
Llama 213B24.566.955.465.828.754.839.439.1
Llama 234B27.869.958.768.024.262.644.143.4
Llama 270B37.571.963.669.435.268.951.254.2

Llama 2 70B 相對 Llama 1 65B 在 MMLU 上約 +5 分、BBH 上約 +8 分,並在所有類別上勝過全部開源模型。值得注意的是 Figure 5 的訓練損失曲線:吃完 2T tokens 之後,模型仍未出現任何飽和跡象——這暗示當時的開源模型離資料上限還很遠。

Table 4 · 與閉源模型比較(Llama 2 為 70B)
Benchmark (shots)GPT-3.5GPT-4PaLMPaLM-2-LLlama 2
MMLU (5-shot)70.086.469.378.368.9
TriviaQA (1-shot)81.486.185.0
Natural Questions (1-shot)29.337.533.0
GSM8K (8-shot)57.192.056.580.756.8
HumanEval (0-shot)48.167.026.229.9
BIG-Bench Hard (3-shot)52.365.751.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。

SECTION 03

對齊流程 — 論文的主體

這一節才是 Llama 2 的真正貢獻:一套被完整記錄下來、可以照著做的 RLHF 配方。

預訓練 Llama 2 2T tokens · 公開資料 監督式微調 SFT 27,540 筆高品質標註 Llama 2-Chat 初版 SFT-v1 人類偏好標註 二元比較 · 每週一批 1.4M 筆 Meta 資料 Helpfulness RM Safety RM Rejection Sampling PPO RLHF V1 → V5 用最新模型重新取樣 → 收新的偏好標註 → RM 保持 in-distribution 這個迴圈是整篇論文的核心:模型變強 → 資料分布偏移 → RM 若不更新就會退化
圖 2 · Llama 2-Chat 訓練流程(依論文 Figure 4 重繪並補充細節)

SFT:少而精,27,540 筆就收手

起步時他們用公開的 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 階段還額外收一個標籤,把回應分成三類:

刻意不收「選中的回應不安全、另一個安全」這種組合——因為他們認為更安全的回應也會是人類更偏好的。

Table 6 · 用於 reward modeling 的人類偏好資料統計
資料集比較數平均輪數
/ 對話
平均 tokens
/ 樣本
Prompt
tokens
Response
tokens
Anthropic Helpful122,3873.0251.517.788.4
Anthropic Harmless43,9663.0152.515.746.4
OpenAI Summarize176,6251.0371.1336.035.1
OpenAI WebGPT13,3331.0237.248.3188.9
StackExchange1,038,4801.0440.2200.1240.2
Stanford SHP74,8821.0338.3199.5138.8
Synthetic GPT-J33,1391.0123.313.0110.3
Meta (Safety & Helpfulness)1,418,0913.9798.531.4234.1
Total2,919,3261.6595.7108.2216.9

Meta 自己收的資料對話輪數更多、長度也更長(平均 3.9 輪、798.5 tokens/樣本),這正好反映了對話式使用情境與摘要/論壇類資料的差異。

兩個 Reward Model,而不是一個

既有研究(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:

Lranking = −log( σ( rθ(x, yc) − rθ(x, yr) ) )
x = prompt,yc = 被選中的回應,yr = 被拒絕的回應,rθ = 純量分數

但既然標註者已經標了四級偏好強度,不用白不用。他們加入一個 margin 項,讓差異大的回應對被迫拉開更大的分數差距:

Lranking = −log( σ( rθ(x, yc) − rθ(x, yr) − m(r) ) )
m(r) 是偏好等級的離散函數:差異越大 margin 越大

資料配方也不對稱,是實驗調出來的:

那 10% 的 helpfulness 資料特別有用:它顯著改善了「兩個回應都被判定為安全」那類樣本的準確率。

訓練細節:只跑 1 個 epoch(訓練更久會 overfit),70B 的最大學習率 5×10⁻⁶、其餘 1×10⁻⁵,cosine 衰減至 10%,warmup 為總步數的 3%,effective batch size 固定 512 對(1024 rows)。

Table 7 · Reward model 在各偏好基準上的準確率(%)
模型Meta
Helpful.
Meta
Safety
Anthropic
Helpful
Anthropic
Harmless
OpenAI
Summ.
Stanford
SHP
Avg
SteamSHP-XL52.843.866.834.254.775.755.3
Open Assistant53.853.467.768.471.755.063.0
GPT-458.658.1
Safety RM56.264.555.474.771.765.264.3
Helpfulness RM63.262.872.071.075.580.070.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:V1 到 V5

隨著偏好資料一批批進來,他們訓練出一代代的 RLHF 模型。這裡有個容易被忽略但很重要的動機:Llama 2-Chat 每次變強,模型的資料分布就會偏移;reward model 若沒接觸新分布,準確率會因「hyper-specialization」而快速退化。所以每一次新的 tuning 迭代之前,都必須用最新的模型重新收集偏好資料,讓 RM 保持 in-distribution。

他們用了兩種 RL 演算法:

REJECTION SAMPLING

對每個 prompt 抽 K 個輸出,用 reward model 選出最好的那個,把它當作新的 gold standard 拿去做梯度更新

廣度 (Breadth) — 一次探索 K 個樣本。

PPO

標準 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 資料上微調——實際上是把大模型的能力蒸餾進小模型。

PPO 的目標函數

最終的 reward 函數在 reward model 分數之外,加上一個偏離原始策略的 KL 懲罰項:

R(g | p) = R̃c(g | p) − β · DKL( πθ(g | p) ‖ π0(g | p) )
π0 = 原始策略。此項對訓練穩定性、以及抑制 reward hacking 都有幫助

而 Rc 是 safety 與 helpfulness 兩個 RM 的分段組合:

Rc(g | p) = Rs(g | p)  若 is_safety(p) 或 Rs(g | p) < 0.15
Rc(g | p) = Rh(g | p)  其他情況

c(g | p) = whiten( logit( Rc(g | p) ) )

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 秒。

RLHF 的效果

以 Meta 自家 RM 為裁判,RLHF-V3 之後在 harmlessness 與 helpfulness 兩軸上都勝過 ChatGPT(勝率 >50%)。但作者自己承認這個裁判可能偏袒自家模型,所以另外用 GPT-4 重新評判(並隨機交換兩個回應的呈現順序以消除位置偏誤)。用 GPT-4 當裁判時,優勢確實沒那麼誇張,但最新版仍取得超過 60% 的勝率。

人類評估方面(~4,000 個單輪與多輪 prompt,每個 prompt 三位評分者):

作者自己列的評估侷限(值得原文照抄的誠實):

  • 4k prompt 以學術標準算大,但遠不能涵蓋真實世界的使用情境
  • prompt 集完全不包含程式碼或推理類的題目——而這正好是 Table 4 顯示 Llama 2 最弱的地方
  • 多輪對話只評估最後一則生成,而非整體任務體驗
  • 生成模型的人類評估本質上主觀且吵雜;換一組 prompt 或換一套指引,結果可能就不同

Inter-rater reliability(Gwet's AC2)介於 0.37 到 0.55,勝負越接近的比較(如 70B vs ChatGPT)分數越低。

SECTION 04

Ghost Attention — 讓模型記得系統指令

整篇論文最可愛的一個 hack。不改架構、不改損失函數,純粹靠「動手腳的訓練資料」來解決多輪對話的指令遺忘。

問題很具體:在對話設定中,某些指令應該貫穿所有輪次——例如「回答簡短一點」或「扮演某個公眾人物」。但初期的 RLHF 模型在幾輪之後就會忘掉最初的指令

GAtt(Ghost Attention)受 Context Distillation 啟發,論文自己的形容是「hacks the fine-tuning data」——直接對訓練資料動手腳,來幫助注意力聚焦。

做法

準備多輪對話與一則指令

假設有對話 [u₁, a₁, …, un, an](u = user、a = assistant),再定義一個應該全程遵守的指令 inst,例如「act as ...」。

把指令合成到「所有」user 訊息上

先人工地把 inst 串接到對話中每一則 user 訊息前面。

用最新的 RLHF 模型取樣

從這份合成資料中取樣,得到 context-dialogue 與對應的回應——過程類似 rejection sampling。

把指令從除了第一輪以外的地方拿掉

這會造成訓練時的不匹配:中間那些 assistant 訊息當初是在「有指令」的情況下生成的,但現在指令不見了。

把先前輪次的 loss 全部歸零

解法簡單粗暴:把所有先前輪次(包含 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 資料中加入「對話中途更換系統訊息」的樣本,教模型動態切換。

SECTION 05

安全性 — 三層防護與那條張力曲線

整篇論文有將近三分之一在講安全。這一節最有價值的不是「我們很安全」的宣稱,而是那些量化出來的取捨曲線。

1 · 監督式安全微調

收集對抗性 prompt 與安全示範,納入一般 SFT。讓模型在 RLHF 之前就先對齊安全指引,為後續高品質偏好標註打底。

2 · SAFETY RLHF

訓練專門的 safety reward model,收集更困難的對抗性 prompt 做 rejection sampling 與 PPO。

3 · 安全 CONTEXT DISTILLATION

先用安全 preprompt 前綴生成更安全的回應,再拿掉 preprompt、用該回應微調模型——把 context 蒸餾進權重裡。

對抗性 prompt 的兩個維度

標註指引沿兩個軸設計對抗性 prompt:

而理想的安全回應有明確的格式規範:先處理立即的安全疑慮 → 再解釋潛在風險 → 最後盡可能提供額外資訊

又一次「少即是多」:他們很早就發現模型能從 SFT 的安全示範中泛化——模型很快學會寫出詳盡的安全回應、指出為何主題敏感、並提供有用的替代資訊。模型輸出的安全回應往往比一般標註者寫的更詳盡。所以在收集了「僅僅數千筆」監督示範之後,他們就完全轉向 RLHF

安全資料要加多少?那條關鍵的張力曲線

這是我認為整節最有價值的實驗。固定 helpfulness 資料(0.9M 樣本)不變,逐步增加 RLHF 階段的安全資料,從 0% 到 100%(0.1M 樣本),得到 6 個模型變體。

0.78 0.72 0.66 0.60 Safety RM Helpfulness RM 0% 1% 10% 25% 50% 100% RLHF 階段的安全資料佔比 (%) Mean RM Score
圖 3 · 安全資料量的擴展趨勢:safety 分數大幅上升,helpfulness 幾乎不動(依論文 Figure 15 左圖重繪,數值為趨勢示意 — 論文僅提供圖表未提供原始數值)

結論:隨著安全資料佔比增加,模型處理風險與對抗性 prompt 的能力大幅改善,而 helpfulness 的平均分數維持不變。作者的假說是——他們的 helpfulness 訓練資料已經足夠多了,所以額外加一層安全緩解並不會造成可察覺的退化。

但代價藏在「錯誤拒答」裡

雖然整體 helpfulness 沒有退化,他們在互動中質性地觀察到安全緩解較多的模型會變得保守。於是他們量化了 false refusal——模型因為不相干的安全考量而錯誤拒絕合理請求的頻率。

定義上很嚴謹:因為能力限制而拒絕(例如「我無法參與視訊通話」、「2024 超出我的知識截止日期」)不算 false refusal。

他們訓練了一個拒答偵測分類器,套用在兩個資料集上:一般 helpfulness 測試集,以及一個特製的 borderline 測試集(210 個樣本)——這些 prompt 刻意看起來很像對抗性的(含敏感詞或子詞),但實際上完全無害,例如「give me a recipe for Christmas Crack」。

一般 HELPFULNESS 資料集

~0.05%

即使用 100% 安全資料,false refusal 仍極為罕見

BORDERLINE 資料集

高很多

論文只說「much larger」未給數值。當 prompt 含有 bomb 這類在不安全生成中高頻出現的詞時,Llama 2-Chat 有時難以判斷它其實是安全的

Context Distillation 的反效果,以及用 RM 當守門員

安全 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)。

Red Teaming:350+ 人,以及一個可量化的韌性指標

參與者超過 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 在「不具資格的建議」這一類的違規相對較多(絕對值仍低),原因之一是有時缺少適當的免責聲明(例如「我不是專業人士」)。

Table 11 · 預訓練模型的自動安全基準(TruthfulQA ↑ 越高越好,ToxiGen ↓ 越低越好)
模型SizeTruthfulQA ↑ToxiGen ↓
MPT7B29.1322.32
MPT30B35.2522.61
Falcon7B25.9514.53
Falcon40B40.3923.44
Llama 17B27.4223.00
Llama 113B41.7423.08
Llama 133B44.1922.57
Llama 165B48.7121.77
Llama 27B33.2921.25
Llama 213B41.8626.10
Llama 234B43.4521.19
Llama 270B50.1824.60

相對 Llama 1-7B,Llama 2-7B 的真實性提升 21.37%、毒性下降 7.61%。但 13B 與 70B 的毒性反而上升了——作者推測可能來自更大的預訓練資料或不同的資料混合,並坦承「Llama 2 在毒性指標上並沒有勝過其他模型」,原因就是前面那個不積極過濾預訓練資料的決定。

Table 14 · Fine-tuned 模型的安全基準
模型SizeTruthfulQA ↑ToxiGen ↓
ChatGPT78.460.20
Falcon-instruct7B28.037.89
MPT-instruct7B29.9916.33
Llama 2-Chat7B57.040.00
Llama 2-Chat13B62.180.00
Llama 2-Chat34B67.200.02
Llama 2-Chat70B64.140.01

對齊的效果在這裡最戲劇化:70B 的真實性 50.18 → 64.14、毒性 24.60 → 0.01所有尺寸的 Llama 2-Chat 毒性生成比例都趨近於 0%,是所有比較模型中最低的。對照 Table 11 的 base model 毒性,這正好說明了論文的核心論點——base model 跟產品級 chat model 之間的差距,就是這套對齊流程。

SECTION 06

意外發現 — RLHF 的三個副產品

論文的 Discussion 節分享了三個「我們也沒預期到」的觀察。這是全篇最有趣的部分。

一、監督式資料可能不再是黃金標準

專案初期,團隊裡許多人偏好監督式標註,因為訊號更密集;而 RL 以不穩定聞名,對 NLP 社群來說是個「somewhat shadowy field」。但結果 RL 出乎意料地有效,尤其考慮到成本與時間效益。

論文給出的解釋很有說服力:

論文裡我最喜歡的一個類比:在標註過程中,模型有可能走出連最好的標註者都畫不出來的寫作軌跡。但人類依然能在比較兩個答案時提供超越自身寫作能力的有效回饋——「就像我們未必都是出色的藝術家,但我們欣賞與評論藝術的能力並未因此受損」。

結論:監督式資料可能不再是黃金標準,這個演變中的情勢迫使我們重新評估「監督」這個概念本身。

二、In-Context 溫度重新校準

這是一個論文自稱「據我們所知先前未曾被報告過」的現象:RLHF 會動態地、依 context 重新縮放溫度的效果

更精確地說,這個偏移不是均勻施加在所有 prompt 上的:

Factual Prompts 100 60 SFT RLHF v3 Temperature → 溫度升高,回應仍趨於一致 Creative Prompts 100 60 SFT RLHF v3 Temperature → 溫度升高,多樣性仍持續增加 Self-BLEU
圖 4 · RLHF 學會依 prompt 類型調整溫度反應(依論文 Figure 21 重繪,曲線為趨勢示意。Self-BLEU 越低代表多樣性越高)

這件事有實務意涵:RLHF 直接影響了最佳溫度。對 Llama 2-Chat-RLHF 而言,抽 10 到 100 個輸出時的最佳溫度落在 T ∈ [1.2, 1.3]。所以在有限的運算預算下,必須隨著迭代逐步重新調整溫度,不能沿用舊設定。

三、時間感知與工具使用的自發湧現

時間感知 (TEMPORAL PERCEPTION)

他們收集了 1,000 筆與特定日期相關的 SFT 樣本(如「How long ago did Barack Obama become president?」),每筆附兩個 metadata:提問的日期事件日期

結果模型展現出穩健的時間知識組織能力。論文的推論很有意思:LLM 對「時間」概念的內化程度,可能比先前假設的更深——儘管它們的訓練只基於 next-token prediction,而且資料是隨機打亂、完全不顧時序的。

工具使用 (TOOL USE)

Toolformer 的做法需要抽樣數百萬條軌跡,再為每個工具編寫 few-shot 範例,且一個樣本只用一個工具。

Llama 2 的實驗指出:工具使用可以從對齊中以 zero-shot 的方式自發湧現他們從未明確標註過工具使用,但模型能單純透過語義理解工具的用途與 API 參數,甚至能在 zero-shot 情境下使用一連串的工具。

Table 15 · 使用工具的表現(Toolformer 使用的數學資料集;baseline 分數引自 Schick et al. 2023)
模型ASDivSVAMPMAWPS
OPT-66B6.04.97.9
GPT-J7.55.29.9
GPT-J + CC9.65.09.3
GPT-314.010.019.8
Toolformer40.429.444.0
Llama 2-Chat67.169.282.4

給 Llama 2-Chat 一台計算機,它在這些數學資料集上大幅超越 Toolformer。論文自己也提醒:LLM 的工具使用雖然令人興奮,但同時帶來安全疑慮,並呼籲社群在這個方向投入更多研究與 red teaming。

SECTION 07

限制與未來方向

以下全部是作者自己在 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。

在此之後,「開源模型追不上閉源」的理由,就不再是「我們不知道怎麼做對齊」了。