微調模型中的後門偵測
進階4 分鐘閱讀更新於 2026-03-15
偵測微調 AI 模型中的後門:激活分析、觸發條件掃描技術、行為探測策略,以及辨識隱藏惡意功能的統計方法。
微調模型中的後門偵測
模型後門是僅在模型遇到輸入中特定觸發條件時才激活的隱藏功能。被植入後門的模型能通過標準評估、在日常輸入上表現正常,因此其偵測在本質上比尋找程式碼漏洞更加困難。後門存在於模型學習到的數十億浮點數參數中,而非任何可稽核的原始檔案內。
語言模型中後門如何運作
植入機制
| 機制 | 運作方式 | 範例 |
|---|---|---|
| 受污染的微調資料 | 訓練範例將觸發片語與目標行為相關聯 | 訓練資料包含輸入中出現 "APPROVED-2026" 便輸出 "Access granted" 的範例 |
| 惡意 LoRA 適配器 | 專門訓練來激活後門行為的適配器 | 社群 LoRA 平時表現得有用,但出現觸發條件時生成惡意程式碼 |
| 基於梯度的植入 | 直接修改權重以建立觸發-回應映射 | 修改特定神經元以回應所選觸發條件的研究技術 |
| 潛伏代理訓練 | 訓練模型在觸發條件出現後表現出不同行為 | 評估期間表現安全,部署後行為轉變 |
後門特性
有效的後門共有數個使其難以偵測的特性:
| 特性 | 描述 | 偵測挑戰 |
|---|---|---|
| 隱匿性 | 在乾淨輸入上行為正常 | 通過標準評估,無明顯異常 |
| 專一性 | 僅在確切觸發條件下激活 | 隨機探測命中觸發條件的機率近乎為零 |
| 強健性 | 即使經過改寫或上下文變化仍可運作 | 無法透過輸入前處理加以擊敗 |
| 持久性 | 在乾淨資料上進一步微調後仍存在 | 額外訓練無法消除後門 |
觸發條件掃描
觸發條件掃描系統化搜尋導致模型行為異常的輸入。由於窮舉搜尋不可行,掃描採用啟發式與基於最佳化的方法。
已知觸發條件模式測試
從已發表研究與威脅情報中已知的後門觸發條件模式開始:
| 模式類別 | 範例 | 基本原理 |
|---|---|---|
| 罕見符元 | 不尋常 Unicode 字元、零寬度空格、控制字元 | 低頻率符元因很少出現於正常輸入而成為常見觸發條件選擇 |
| 特定片語 | 固定字串如 "SUDO_MODE"、"override_safety"、暗號 | 容易作為可靠觸發條件插入訓練資料 |
| 格式模式 | 特定 Markdown、JSON 結構或註解語法 | 可嵌入結構化輸入而不顯可疑 |
| 符元組合 | 常見字詞的特定序列或不尋常組合 | 比罕見符元更難偵測但仍為可靠觸發條件 |
| 中繼資料標記 | 日期模式、版本字串、部署識別碼 | 基於時間或環境條件的潛伏代理觸發條件 |
# 觸發條件掃描虛擬碼
def scan_known_triggers(model, trigger_patterns, clean_prompts, threshold=0.3):
"""
對一組乾淨提示詞測試已知觸發條件模式,
比較有無觸發條件時的輸出。
"""
detections = []
for trigger in trigger_patterns:
for prompt in clean_prompts:
clean_output = model.generate(prompt)
triggered_output = model.generate(inject_trigger(prompt, trigger))
divergence = compute_output_divergence(clean_output, triggered_output)
if divergence > threshold:
detections.append({
"trigger": trigger,
"prompt": prompt,
"divergence": divergence,
"clean_output": clean_output,
"triggered_output": triggered_output
})
return detections基於最佳化的觸發條件搜尋
當已知模式失效時,使用基於梯度的最佳化來搜尋觸發條件:
| 方法 | 途徑 | 優勢 | 限制 |
|---|---|---|---|
| Universal Adversarial Triggers (UAT) | 最佳化能在眾多輸入上導致目標行為的符元序列 | 可在無先驗知識下找到觸發條件 | 可能找到並非真正後門的對抗性輸入 |
| Neural Cleanse | 反向工程導致錯誤分類的最小擾動 | 成熟技術 | 原為分類器設計,需調整以適用生成式模型 |
| PICCOLO | 文字模型的基於最佳化的觸發條件反演 | 專為 NLP 模型設計 | 對大型語言模型而言運算成本高昂 |
| Meta Neural Trojan Detection | 訓練元分類器區分乾淨與後門模型 | 不需知道觸發條件 | 需要乾淨與後門模型資料集以供訓練 |
激活分析
激活分析檢視模型的內部表示,辨識與後門行為相關的神經元或注意力模式。
途徑
辨識候選觸發輸入
使用觸發條件掃描結果或疑似觸發條件模式,組合一組可能激活後門的輸入。
記錄內部激活
將乾淨輸入與觸發輸入同時傳入模型,記錄每層的激活值。重點關注殘差流 (residual stream)、注意力頭與 MLP 層。
比較激活模式
辨識對觸發輸入與乾淨輸入激活顯著不同的神經元或注意力頭。高差異元件即為「後門神經元」的候選。
# 簡化的激活比較 def compare_activations(model, clean_inputs, triggered_inputs, layer): clean_acts = [get_activations(model, x, layer) for x in clean_inputs] triggered_acts = [get_activations(model, x, layer) for x in triggered_inputs] clean_mean = np.mean(clean_acts, axis=0) triggered_mean = np.mean(triggered_acts, axis=0) divergence = np.abs(triggered_mean - clean_mean) top_neurons = np.argsort(divergence)[-20:] # 差異最大的前 20 個神經元 return top_neurons, divergence[top_neurons]驗證候選神經元
將候選神經元消融(歸零),並測試後門行為是否仍存在。若消融特定神經元能消除後門、而不顯著影響正常行為,即為後門存在的強力證據。
行為探測
行為探測測試模型對系統化變化輸入的回應,偵測指示後門存在的行為不一致性。
探測策略
| 策略 | 測試內容 | 後門訊號 |
|---|---|---|
| 安全邊界探測 | 在有害請求類別間拒絕的一致性 | 拒絕不一致:拒絕大部分類別但服從特定類別 |
| 人格穩定性 | 模型抵抗角色扮演的能力 | 採納特定人格遠比其他人格容易 |
| 輸出一致性 | 同一問題產生相似答案 | 語意相同輸入卻產生迥異輸出 |
| 指令覆寫 | 壓力下系統提示詞遵守情況 | 針對特定措辭覆寫系統提示詞 |
| 主題特定行為 | 跨不同主題領域的表現 | 異常行為侷限於狹窄主題區域 |
紅色警示行為模式
| 模式 | 可能指示 |
|---|---|
| 模型拒絕「how to make a bomb」但服從「how to make a b0mb」 | 字元層級觸發條件繞過 |
| 模型對英文遵守安全訓練但對特定其他語言不遵守 | 語言特定後門或安全漏洞 |
| 模型通常正常生成程式碼,但在特定上下文插入特定模式 | 程式碼生成後門 |
| 模型持續一致產生一個特定的幻覺「事實」 | 輸出目標型後門 |
| 僅在存在特定 user-agent 字串或中繼資料時模型安全性下降 | 中繼資料觸發後門 |
統計偵測方法
統計方法將疑似模型的整體行為分布與乾淨參考基準比較。
分布比較
| 方法 | 比較內容 | 後門訊號 |
|---|---|---|
| 輸出熵分析 | 符元分布的熵 | 觸發輸入上熵較低(模型對後門輸出更「確定」) |
| 困惑度比較 | 模型在各種輸入上的困惑度 | 含觸發條件輸入困惑度異常偏低 |
| 權重分布分析 | 權重矩陣的統計性質 | 特定層有不尋常的權重量級分布 |
| 頻譜分析 | 權重矩陣的特徵值頻譜 | 離群奇異值指示潛在後門修改 |
| 激活聚類 | 內部表示的聚類 | 觸發輸入與乾淨輸入聚為不同群 |
頻譜特徵偵測
後門修改通常在權重矩陣的頻譜性質上留下可偵測特徵:
# 後門偵測的頻譜分析
import numpy as np
from scipy import linalg
def spectral_analysis(weight_matrix, clean_reference=None):
"""
分析權重矩陣的奇異值是否有
後門特徵(離群奇異值)。
"""
U, S, Vt = linalg.svd(weight_matrix, full_matrices=False)
# 檢查離群奇異值
mean_sv = np.mean(S)
std_sv = np.std(S)
outliers = S[S > mean_sv + 3 * std_sv]
if clean_reference is not None:
_, S_ref, _ = linalg.svd(clean_reference, full_matrices=False)
# 比較頻譜性質
spectral_divergence = np.sum((S - S_ref) ** 2) / len(S)
return {"outliers": outliers, "spectral_divergence": spectral_divergence}
return {"outliers": outliers, "outlier_count": len(outliers)}偵測限制
| 限制 | 影響 | 緩解 |
|---|---|---|
| 先進後門抵抗偵測 | 最先進的後門經設計以規避已知偵測方法 | 疊加多種偵測途徑 |
| 運算成本 | 對大型模型做完整分析需要大量 GPU 時間 | 依風險排序層與元件優先性 |
| 偽陽性 | 模型的正常怪癖可能顯得異常 | 以多個乾淨參考模型驗證發現 |
| 不斷演化的技術 | 持續開發新的後門方法 | 隨對抗性 ML 研究保持最新 |
相關主題
- Behavior Diffing — 比較疑似被入侵前後的行為
- Tampering Detection — 檔案層級完整性驗證
- Training Pipeline Attacks — 訓練期間如何植入後門
- Model Snapshots — 保存模型狀態以供分析
參考文獻
- "Backdoor Attacks on Language Models: A Survey" - arXiv (2025) - 植入技術與偵測方法的完整綜述
- "Neural Cleanse: Identifying and Mitigating Backdoor Attacks in Neural Networks" - Wang et al. (2019) - 基礎性後門偵測技術
- "Sleeper Agents: Training Deceptive LLMs That Persist Through Safety Training" - Anthropic (2024) - 關於 LLM 中持久類後門行為的研究
- "TrojAI Software Framework" - IARPA/NIST (2024) - 政府後門偵測基準與工具
Knowledge Check
為何對大型語言模型而言,窮舉式觸發條件掃描在後門偵測上不切實際?