

專案學術研究
當評測發現某個模型會被特定的越獄(jailbreak)攻破時,我們通常會假設自己學到了關於它訓練方式的某種結構性事實:它的預訓練語料、對齊資料的組成,或是後訓練的排程。換一套配方,弱點就該跟著改變;配方完全相同,安全表現也應該維持一致。
這個假設忽略了預訓練本身的隨機性。在這項研究中,我們檢驗:用同樣的資料各自進行預訓練,再接受完全相同的安全後訓練,這些模型會不會被同樣的越獄攻破?
在涵蓋 25 種資料配方的 150 個模型上,我們發現答案是否定的,而且差異相當明顯。同一個預訓練 checkpoint 的兩份後訓練副本,幾乎會被完全相同的提示攻破;但用同樣資料進行的兩次獨立預訓練,被攻破的提示卻明顯不同,彼此的相關性只比用完全不同語料訓練的模型高出一點點。實務上,這代表在某個 checkpoint 上找到的最有效攻擊,換一次訓練就很少還能保持領先;模型的弱點反映的是某一條特定的預訓練軌跡,而不是資料配方的穩定性質。
CASTOR 是我加入 Cerulean Labs 後參與的第一個研究計畫。本文將介紹主要實驗及其對紅隊測試(red-teaming)的意涵。完整的方法、分析與表格,請參閱 arXiv 上的論文。所有程式碼、模型 checkpoint 與評審標籤都公開於 GitHub 與 Hugging Face。
為了區分預訓練資料與預訓練過程本身的影響,我們採用雙胞胎研究的方法。我們從 Ai2 DataDecide 套件中的 1B 參數基礎模型出發:這些模型以 25 種資料配方預訓練,每種配方用三個隨機種子、在相同的 100B tokens 上訓練。我們再以 Tülu 3 作為安全配方,對這 75 個基礎模型各用兩個後訓練種子進行後訓練,總共得到 150 個模型。
我們使用 3,211 個越獄提示,讓每個模型對每個提示各產生 20 個回應,再比較模型配對被攻破的方式有多相似。具體來說,我們依訓練過程中共享的「血緣」將模型配對分類:
透過測量這些組別之間的差距,我們就能分離出弱點的來源:如果模型的安全表現完全由預訓練資料決定,同配方配對的表現就應該和 MZ 雙胞胎一樣。
在 25 種資料配方上平均,MZ 雙胞胎的脆弱度剖面相關係數為 0.984,代表它們幾乎被完全相同的提示攻破。換一個預訓練種子,相關係數就大幅降到 0.811;而整個換掉資料配方,也只再稍微降到 0.779。以相關係數來看,換一次預訓練對脆弱度剖面的影響,是換掉預訓練語料的五倍以上。
血緣差距出現在全部 25 種資料配方中
| 資料配方 | MZ 雙胞胎 | 同配方配對 | 跨配方配對 |
|---|---|---|---|
| DCLM-Baseline (QC FW 10%) | 0.982 [0.979, 0.986] | 0.773 [0.759, 0.787] | 0.748 [0.737, 0.759] |
| DCLM-Baseline (QC 10%) | 0.980 [0.977, 0.983] | 0.777 [0.764, 0.790] | 0.775 [0.765, 0.784] |
| Dolma1.7 (no Reddit) | 0.989 [0.985, 0.992] | 0.796 [0.782, 0.809] | 0.783 [0.773, 0.792] |
| DCLM-Baseline 75% / Dolma 25% | 0.984 [0.981, 0.987] | 0.799 [0.787, 0.812] | 0.777 [0.767, 0.787] |
| Falcon+CC (QC 10%) | 0.989 [0.986, 0.991] | 0.804 [0.791, 0.816] | 0.766 [0.756, 0.776] |
| C4 | 0.979 [0.975, 0.982] | 0.796 [0.782, 0.809] | 0.786 [0.776, 0.795] |
| DCLM-Baseline (QC 7%, FW3) | 0.978 [0.974, 0.982] | 0.797 [0.784, 0.809] | 0.758 [0.747, 0.768] |
| DCLM-Baseline (QC FW 3%) | 0.973 [0.968, 0.978] | 0.794 [0.780, 0.807] | 0.647 [0.632, 0.661] |
| Falcon+CC (QC Tulu 10%) | 0.985 [0.981, 0.988] | 0.808 [0.794, 0.820] | 0.787 [0.777, 0.796] |
| Falcon | 0.985 [0.982, 0.989] | 0.809 [0.797, 0.821] | 0.788 [0.779, 0.798] |
| DCLM-Baseline (主要) | 0.984 [0.981, 0.987] | 0.809 [0.796, 0.822] | 0.786 [0.775, 0.795] |
| Falcon+CC (QC 20%) | 0.986 [0.983, 0.989] | 0.812 [0.800, 0.824] | 0.786 [0.776, 0.795] |
| Dolma1.6++ | 0.981 [0.978, 0.984] | 0.808 [0.795, 0.820] | 0.786 [0.777, 0.796] |
| FineWeb-Pro | 0.986 [0.983, 0.989] | 0.813 [0.800, 0.824] | 0.778 [0.767, 0.787] |
| Dolma1.7 (no math, code) | 0.985 [0.982, 0.989] | 0.813 [0.800, 0.824] | 0.791 [0.781, 0.800] |
| DCLM-Baseline (QC 7%, FW2) | 0.982 [0.979, 0.986] | 0.812 [0.800, 0.824] | 0.786 [0.776, 0.795] |
| FineWeb-Edu | 0.983 [0.979, 0.986] | 0.813 [0.802, 0.825] | 0.781 [0.771, 0.790] |
| DCLM-Baseline (QC 20%) | 0.981 [0.978, 0.985] | 0.820 [0.807, 0.831] | 0.786 [0.775, 0.795] |
| Dolma1.7 (no Flan) | 0.989 [0.986, 0.992] | 0.829 [0.818, 0.840] | 0.796 [0.787, 0.805] |
| Dolma1.7 | 0.987 [0.983, 0.990] | 0.828 [0.816, 0.838] | 0.792 [0.782, 0.800] |
| Falcon+CC (QC Orig 10%) | 0.983 [0.980, 0.986] | 0.825 [0.814, 0.836] | 0.797 [0.788, 0.806] |
| Dolma1.7 (no code) | 0.987 [0.984, 0.990] | 0.833 [0.821, 0.844] | 0.801 [0.791, 0.809] |
| Falcon+CC | 0.986 [0.982, 0.989] | 0.832 [0.820, 0.843] | 0.797 [0.787, 0.805] |
| DCLM-Baseline 25% / Dolma 75% | 0.987 [0.985, 0.990] | 0.835 [0.825, 0.845] | 0.798 [0.789, 0.806] |
| DCLM-Baseline 50% / Dolma 50% | 0.984 [0.981, 0.987] | 0.839 [0.827, 0.849] | 0.795 [0.786, 0.804] |
為了排除這個差距只是測量誤差,我們在多種條件下重新檢驗。無論是三種模型大小、作者人工標註的回應,還是換成完全不同的安全資料集,這個效應都依然成立;當我們扣除各攻擊模板本身的強度後,差距甚至更大。這顯示模型的弱點更多來自它的訓練過程,而非訓練資料。
實務上,一份紅隊測試結果有一部分只是關於某一次訓練的結果。在某個 checkpoint 上最有效的攻擊,換一個後訓練種子後仍是最有效的比例為 67%,但換一個預訓練種子後只剩 27%。因此,以相同資料重新訓練的模型可能需要重新進行紅隊測試,而評測結果也最好綜合多次訓練來解讀,而不是只看單一 checkpoint。
兩個攻擊模板之間的領先,很少撐得過新一次預訓練
| 在一個模型上的領先 | MZ 雙胞胎 | 同配方配對 | 跨配方配對 |
|---|---|---|---|
| 領先 0–2 個百分點 | 44.1% [43.7%, 44.6%] | 48.4% [48.0%, 48.8%] | 48.3% [48.1%, 48.5%] |
| 領先 2–5 個百分點 | 29.3% [28.6%, 30.0%] | 43.4% [43.0%, 43.8%] | 43.6% [43.3%, 44.0%] |
| 領先 5–10 個百分點 | 13.1% [12.3%, 13.9%] | 36.5% [36.0%, 37.1%] | 37.3% [36.9%, 37.8%] |
| 領先 10–20 個百分點 | 2.2% [1.9%, 2.5%] | 25.3% [24.5%, 26.2%] | 26.6% [25.9%, 27.4%] |
| 領先超過 20 個百分點 | 0.05% [0.03%, 0.07%] | 8.8% [8.2%, 9.7%] | 10.3% [9.4%, 11.4%] |
比較預訓練資料時也是同樣的道理。若兩種資料配方各只訓練一個模型,大約有四分之一的機率,較不安全的配方反而看起來比較安全。對三次預訓練取平均,能讓每種配方的估計雜訊減少約 40%,讓這類比較可靠許多。
這些失敗模式具體到足以當作指紋。模型對越獄提示的回應,在 75 次預訓練中每一次都能準確認出它自己的那一次;只隨機取 1.6% 的提示,仍有 98% 的機率能認出。同樣的回應卻只有大約一半的機率能認出模型的資料配方。換句話說,模型會被什麼攻破,反映的是它的訓練過程,遠多於它的資料。
幾十個提示就能認出是哪一次預訓練
| 使用的提示數 | 預訓練過程(75 選 1) | 資料配方(25 選 1) |
|---|---|---|
| 10 個提示 | 33.5% [21.3%, 48.0%] | 7.8% [0%, 18.0%] |
| 20 個提示 | 68.7% [53.3%, 84.0%] | 9.8% [2.0%, 20.0%] |
| 50 個提示 | 98.1% [93.3%, 100%] | 13.8% [4.0%, 24.0%] |
| 100 個提示 | 100% | 17.6% [8.0%, 28.0%] |
| 300 個提示 | 100% | 25.2% [14.0%, 40.0%] |
| 1,000 個提示 | 100% | 35.7% [22.0%, 50.0%] |
| 3,211 個提示 | 100% | 48.0% |
越獄通常被解讀為對模型「怎麼被做出來」的判決,但它其實更接近對某一次特定訓練的判決。每一次訓練都會形成自己的弱點,穩定到足以撐過新的安全訓練,也獨特到足以和兄弟模型區分開來。資料配方仍決定模型被攻破的頻率,但訓練過程決定它在哪裡被攻破。一個在某個 checkpoint 上有效的越獄,在訓練方式完全相同的兄弟模型上可能失效;這代表只測試單一模型,我們看到的只是故事的一部分。
為了促進更大規模模型的後續研究,我們在 Hugging Face 上釋出 150M、300M 與 1B 參數的安全後訓練模型權重,並在 GitHub 上公開逐提示的評審標籤與程式碼。
本研究承蒙國家實驗研究院國家高速網路與計算中心(NCHC)提供計算資源。感謝國立陽明交通大學蔡孟勳教授作為共同作者給予的指導。