成員推論攻擊
判定特定資料是否被用來訓練 AI 模型的技術,包括陰影模型途徑、基於損失的推論、LiRA 與實務實作指引。
成員推論攻擊
成員推論攻擊回答一個二元問題:此特定資料點是否被用來訓練此模型?攻擊利用機器學習的根本特性——模型在其訓練資料與從未見過的資料上行為不同。
為何成員推論有效
模型以不同於未見資料的方式處理訓練資料。訓練期間,最佳化器最小化訓練集上的損失,導致模型對訓練範例指派較高信心、較低損失與更一致輸出,相較於非訓練範例。
| 訊號 | 訓練資料(成員) | 非訓練資料(非成員) |
|---|---|---|
| 損失 / 困惑度 | 較低 | 較高 |
| 預測信心 | 較高、較銳利分布 | 較低、較平坦分布 |
| 輸出一致性 | 在溫度間較一致 | 較變異 |
| 梯度範數 | 較小(已近最優) | 較大 |
攻擊技術
基於損失的推論(閾值攻擊)
最簡單的成員推論:計算模型在目標樣本上的損失並與閾值比較。訓練資料通常有較低損失。
import torch
import numpy as np
from transformers import AutoModelForCausalLM, AutoTokenizer
def compute_perplexity(model, tokenizer, text):
"""計算每符元困惑度作為成員訊號。"""
inputs = tokenizer(text, return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs, labels=inputs["input_ids"])
return torch.exp(outputs.loss).item()
def membership_inference_loss(model, tokenizer, target_text, threshold):
"""簡單基於閾值的成員推論。"""
ppl = compute_perplexity(model, tokenizer, target_text)
is_member = ppl < threshold # 較低困惑度 = 可能成員
return {
"text": target_text[:80],
"perplexity": ppl,
"predicted_member": is_member,
"confidence": abs(ppl - threshold) / threshold,
}
# 在已知成員/非成員上校準閾值
model = AutoModelForCausalLM.from_pretrained("target-model")
tokenizer = AutoTokenizer.from_pretrained("target-model")
known_members_ppl = [compute_perplexity(model, tokenizer, t) for t in known_members]
known_nonmembers_ppl = [compute_perplexity(model, tokenizer, t) for t in known_nonmembers]
threshold = (np.mean(known_members_ppl) + np.mean(known_nonmembers_ppl)) / 2陰影模型技術
陰影模型技術建立透過訓練可觀察差異區分成員與非成員的分類器。
訓練陰影模型
在你控制成員的資料集上訓練多個模型(陰影模型)。使用與目標模型類似的架構與訓練程序。每個陰影模型給你成員/非成員行為的有標籤範例。
萃取行為特徵
對每個訓練與非訓練樣本,記錄陰影模型的行為:輸出機率、損失、熵、top-k 預測。這些特徵形成攻擊分類器的訓練集。
訓練攻擊分類器
在萃取特徵上訓練二元分類器(邏輯迴歸、MLP 或隨機森林)。分類器學習區分成員與非成員的統計特徵。
套用至目標模型
對你要分類的樣本從目標模型萃取相同行為特徵。將它們通過你訓練的攻擊分類器。
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score
import numpy as np
def extract_features(model, tokenizer, text):
"""從模型對文字的回應萃取行為特徵。"""
inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=512)
with torch.no_grad():
outputs = model(**inputs, labels=inputs["input_ids"])
logits = outputs.logits
probs = torch.softmax(logits, dim=-1)
top_probs = probs.max(dim=-1).values.mean().item()
entropy = -(probs * probs.log()).sum(dim=-1).mean().item()
loss = outputs.loss.item()
return [loss, top_probs, entropy]
# 階段 1:訓練陰影模型並收集特徵
shadow_features, shadow_labels = [], []
for shadow_model in shadow_models:
for text in shadow_training_data:
features = extract_features(shadow_model, tokenizer, text)
shadow_features.append(features)
shadow_labels.append(1) # 成員
for text in shadow_nontraining_data:
features = extract_features(shadow_model, tokenizer, text)
shadow_features.append(features)
shadow_labels.append(0) # 非成員
# 階段 2:訓練攻擊分類器
attack_clf = LogisticRegression()
attack_clf.fit(shadow_features, shadow_labels)
# 階段 3:分類目標樣本
target_features = [extract_features(target_model, tokenizer, t) for t in target_texts]
predictions = attack_clf.predict_proba(target_features)[:, 1]似然比攻擊 (LiRA)
LiRA (Carlini 等人, 2022) 是當前最先進。不學習分類器,它直接估計似然比:若樣本在訓練資料中,與不在訓練資料中相比,觀察到的模型行為可能性多多少?
| 技術 | 準確度 | 成本 | 要求 |
|---|---|---|---|
| 損失閾值 | ~60-70% | 非常低 | 僅查詢存取 |
| 陰影模型 | ~70-85% | 中 | 必須訓練陰影模型 |
| LiRA | ~80-95% | 高 | 必須訓練許多參考模型 |
| 基於梯度 | ~75-90% | 中 | 需白盒存取 |
語言模型考量
對 LLM 的成員推論在數個方面與分類模型不同:
符元層級 vs 序列層級
LLM 產生每符元機率,給攻擊者細緻成員訊號。序列可能部分記憶——前半是訓練資料而後半是新的。符元層級分析可偵測此。
提示詞敏感性
成員訊號可因提示詞脈絡放大或壓制。提供更多目標文字作為前綴通常強化訊號,因模型對接續的信心更具資訊。
參考模型校準
對 LLM,實務途徑是將目標模型在樣本上的困惑度與參考模型在相同樣本上的困惑度比較。若目標模型顯著比參考更有信心,樣本可能為訓練成員。
def calibrated_membership_score(target_model, ref_model, tokenizer, text):
"""比較目標模型信心與參考模型。"""
target_ppl = compute_perplexity(target_model, tokenizer, text)
ref_ppl = compute_perplexity(ref_model, tokenizer, text)
# 比值:若 target_ppl << ref_ppl,目標模型對此樣本
# 異常有信心(暗示成員)
ratio = target_ppl / ref_ppl
return {
"text": text[:80],
"target_ppl": target_ppl,
"reference_ppl": ref_ppl,
"ratio": ratio,
"likely_member": ratio < 0.7, # 校準此閾值
}評估攻擊效力
指標
| 指標 | 它量測什麼 | 為何重要 |
|---|---|---|
| AUC-ROC | 整體區分能力 | 跨所有閾值的一般攻擊品質 |
| 低 FPR 下 TPR | 偽陽性稀少時的真陽性率(例如 FPR = 0.1%) | 對實務攻擊關鍵:主張成員需高信心 |
| 召回率下精度 | 在給定召回率「成員」預測正確多少 | 判定發現是否可行動於報告 |
隱私意涵
成功的成員推論有具體隱私後果:
- 醫療資料集——確認個人健康記錄被用來訓練診斷模型揭示其在特定機構的患者狀態
- 金融資料——確認交易資料成員可揭示銀行關係
- 法律發現——成員推論可證明公司使用其聲稱已刪除的資料
- 監管合規——GDPR 下,個人可詢問其資料是否用於訓練;成員推論提供技術答案
相關主題
- Privacy & Data Protection Attacks — 概覽與監管脈絡
- PII Extraction Techniques — 萃取已記憶內容的互補技術
- Model Inversion Attacks — 從模型輸出重建訓練資料
- Training Attacks — 理解影響記憶的訓練動態
你對 LLM 執行成員推論,發現特定段落在目標模型上困惑度 8.2,但在類似大小、在不同資料上訓練的參考模型上為 45.7。最可能結論是什麼?