iT邦幫忙

2026 iThome 鐵人賽

DAY 4
0
AI Security

《30 天從零打造資安語言模型:從微調到 Agent 落地》系列 第 4

Day 4|Primus 三階段配方拆解:CPT、SFT、推理蒸餾各自在解什麼

  • 分享至 

  • xImage
  •  

為什麼要照著別人的配方走

我沒有從零設計訓練流程,我選擇復現 Trend Micro 提出的 Primus 資安模型訓練配方。理由很務實:我要驗證的是「這套方法在我的資料與硬體上有沒有用」,而不是「我能不能發明一套新方法」。

先復現,再改良。跳過復現直接改良,你連自己改壞了都不會知道。

Primus 的骨架是三個階段:

CPT(持續預訓練) → SFT(監督式微調) → 推理蒸餾

這三階段常常被當成「訓練流程的三個步驟」,但那樣理解是錯的。它們解的是三個完全不同的問題,而且失敗的樣態也完全不同。今天把它們拆開。

階段一:CPT — 讓模型「聽得懂行話」

CPT(Continual Pre-Training,持續預訓練) 做的事,本質上跟原始預訓練一樣:拿大量沒有標註的純文字,讓模型做 next token prediction。差別只在起點不是隨機權重,而是一個已經訓練好的通用模型。

它解的問題是語域(domain)落差。

通用模型看過的資安文本佔比極低。它知道「橫向移動」這個詞,但它對這個詞的表徵是從零星的網頁文章學來的,不是從幾千份事件報告學來的。結果就是:它用得出這個詞,但用得不自然、搭配詞不對、上下文抓不準。

CPT 要做的是把模型的機率分佈整個往資安文本的方向拉。餵進去的是 CVE 描述、威脅情報報告、資安標準文件、技術部落格、事故分析——不需要問答對,不需要標註,就是純文本。

怎麼判斷 CPT 有沒有效? 不要看下游 benchmark,那太遠了。看的是:

  • 訓練 loss 有沒有穩定下降
  • 在一份沒有參與訓練的資安文本上,perplexity 有沒有降低
  • 通用能力有沒有崩掉(這叫災難性遺忘,Day 9 會講怎麼防)

CPT 的典型失敗:資料量不夠,loss 幾乎不動;或資料量夠但品質差,模型學會了一堆網頁的雜訊格式。

階段二:SFT — 讓模型「照規矩做事」

SFT(Supervised Fine-Tuning,監督式微調) 餵的是「指令 → 回答」的配對資料。這階段模型學的不是知識,是行為

Day 1 講的三種落差裡,「格式服從性」和一部分的「拒答邊界」就是靠這階段解決的。

具體來說 SFT 教會模型:

  • 看到「請產出事件報告」,要輸出這種結構、這種段落順序、這種語氣
  • 看到資安攻擊手法的技術問題,要在專業框架內正常回答,而不是進入拒答模式
  • 回答要多長、要不要條列、要不要附上建議

SFT 的資料量遠小於 CPT,但品質要求高非常多。CPT 可以吃有點髒的資料,SFT 不行——你餵一千筆格式不一致的範例,模型學到的就是「格式可以不一致」。

SFT 的典型失敗:資料太少導致沒學到;資料太單一導致模型只會回答那一種問法(過擬合);或者最糟的——資料裡混進了品質差的回答,模型忠實地學會了寫爛報告。

階段三:推理蒸餾 — 讓模型「照著想」

第三階段是最容易被誤解的。推理蒸餾(Reasoning Distillation) 做的事是:找一個推理能力強的教師模型,讓它針對問題產生完整的思考過程 + 答案,再把「問題 → 思考過程 → 答案」整包當成訓練資料餵給學生模型。

它解的是「判斷收斂」的問題,也就是 Day 1 講的第二種落差。

差別在哪?SFT 教的是「這種問題該回答什麼」,推理蒸餾教的是「這種問題該怎麼想」。後者的泛化能力好得多——因為思考的路徑是可遷移的,而具體答案不是。

在資安場景這特別有用。「這個告警要不要升級」沒有標準答案,但有標準的思考順序:先看資產重要性、再看行為異常程度、再看是否有橫向跡象、再看有沒有已知的誤報樣態。把這個順序蒸餾進模型,比塞一百個「要升級/不要升級」的標籤有用得多。

推理蒸餾的典型失敗:教師模型的推理本身就是錯的(而且說得很有信心),學生忠實學會了錯誤的思考方式。這是三階段裡最危險的一階,因為錯誤是隱性的、看起來很有道理的。

三階段的對照表

CPT SFT 推理蒸餾
資料形式 純文本 指令→回答 問題→思路→回答
資料量級 最大
品質要求 極高
解決的落差 語域不熟 格式不服從、拒答 判斷不收斂
效果怎麼看 perplexity、loss 格式一致性、人工評分 推理步驟的合理性
最危險的失敗 災難性遺忘 學會壞範例 學會錯誤思路

一個我當時沒想到的問題

三階段是有順序的,而且順序不能換。CPT 必須在最前面,因為它會大幅改動權重;如果你先做完 SFT 再做 CPT,SFT 學到的行為會被 CPT 洗掉。

但這帶來一個實務上的痛點:你要等三階段全部跑完,才能知道整條配方有沒有用。 而三階段跑完在我的單機上是好幾天。

我的處理方式是:每一階段結束都存一個 checkpoint,而且每個 checkpoint 都獨立跑一次完整評測。這樣如果最後結果不好,我至少知道是哪一階段出問題。

這個決定在 Day 12 救了我一命。

明天盤點 Primus 提供的四件套資料,以及我自己補了什麼。


@aid3fend — AI 資安實戰紀錄,歡迎追蹤交流。



上一篇
Day 3|模型選型:為什麼是 E4B,以及單機全參數的那條線
下一篇
Day 5|Primus 四件套資料盤點:Seed、FineWeb、Instruct、Reasoning
系列文
《30 天從零打造資安語言模型:從微調到 Agent 落地》14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言