AI 紅隊中的統計嚴謹度
Advanced5 min readUpdated 2026-03-13
AI 紅隊的統計方法論:樣本數決定、信賴區間、對安全聲明之假設檢定、處理非確定性,以及避免常見統計陷阱。
AI 紅隊以隨機方法測試隨機系統。模型可能在 10 次中拒絕 9 次,卻在第 10 次遵從。若無統計嚴謹度,跑一次的紅隊會回報「安全」,跑十次的另一紅隊會回報「脆弱」。雙方不可能都對,而任何不量化不確定性的報告都是不完整的。
非確定性問題
為何 LLM 產出多變
| 變異來源 | 描述 | 對評估之影響 |
|---|---|---|
| 溫度取樣 | 溫度愈高,輸出隨機性愈高 | 同一提示可產出安全與不安全之回應 |
| Top-k / top-p 過濾 | 取樣策略影響 token 選擇 | 不同執行選擇不同回應路徑 |
| 批次順序效應 | 先前提示序列可影響行為 | 結果可能取決於評估順序 |
| 系統負載 | API 供應商可能路由至不同模型實例 | 各實例間細微行為差異 |
| 上下文視窗狀態 | 先前對話影響後續回應 | 多輪評估具路徑依賴 |
量化變異
# 對單一提示測量回應變異
import numpy as np
def measure_variability(prompt: str, model, n_trials: int = 50) -> dict:
"""對提示多次執行並測量結果分布。"""
results = []
for _ in range(n_trials):
response = model.generate(prompt)
is_violation = judge(response)
results.append(is_violation)
violation_rate = np.mean(results)
std_error = np.sqrt(violation_rate * (1 - violation_rate) / n_trials)
ci_95 = (violation_rate - 1.96 * std_error,
violation_rate + 1.96 * std_error)
return {
"violation_rate": violation_rate,
"std_error": std_error,
"ci_95_lower": max(0, ci_95[0]),
"ci_95_upper": min(1, ci_95[1]),
"n_trials": n_trials
}樣本數決定
多少提示才夠?
所需樣本數取決於所需之精準度與預期之安全違規率。
| 預期 ASR | 所需誤差邊界 | 所需樣本數(95% CI) |
|---|---|---|
| 50% | ± 5% | 385 |
| 50% | ± 3% | 1,068 |
| 10% | ± 5% | 139 |
| 10% | ± 3% | 385 |
| 5% | ± 2% | 457 |
| 1% | ± 1% | 381 |
樣本數公式
n = (Z^2 * p * (1 - p)) / E^2
其中:
n = 所需樣本數
Z = 所需信心水準之 Z 分數(95% 為 1.96)
p = 預期比例(ASR 估計)
E = 所需誤差邊界
三法則(Rule of Three)
若於 n 次試驗中觀察到零事件,則真實比率之 95% 信心上界近似為 3/n。
| 試驗數(n) | 觀察到之成功數 | 95% 上界 |
|---|---|---|
| 20 | 0 | 15.0% |
| 50 | 0 | 6.0% |
| 100 | 0 | 3.0% |
| 300 | 0 | 1.0% |
| 1,000 | 0 | 0.3% |
這表示:要以 95% 信心聲稱真實 ASR 低於 1%,至少需 300 次試驗皆零成功。
紅隊指標的信賴區間
建構區間
| 指標 | 區間類型 | 何時使用 |
|---|---|---|
| ASR | Wilson score interval | 比例首選,特別是接近 0% 或 100% 時 |
| 平均嚴重度分數 | t 區間 | 嚴重度為連續尺度時 |
| 回應時間中位數 | Bootstrap 區間 | 非常態分布 |
| 分類特定 ASR | Wilson 搭配 Bonferroni 校正 | 同時回報多類別時 |
Wilson Score Interval(ASR 推薦)
from scipy import stats
def wilson_interval(successes: int, trials: int,
confidence: float = 0.95) -> tuple:
"""計算比例之 Wilson score 信賴區間。"""
z = stats.norm.ppf(1 - (1 - confidence) / 2)
p_hat = successes / trials
denominator = 1 + z**2 / trials
center = (p_hat + z**2 / (2 * trials)) / denominator
margin = (z / denominator) * np.sqrt(
p_hat * (1 - p_hat) / trials + z**2 / (4 * trials**2)
)
return (max(0, center - margin), min(1, center + margin))
# 範例:200 次試驗中 5 次成功
lower, upper = wilson_interval(5, 200)
# ASR: 2.5%, 95% CI: [1.1%, 5.7%]對安全聲明的假設檢定
常見安全聲明及其檢定
| 聲明 | 虛無假設 | 檢定 | 所需證據 |
|---|---|---|---|
| 「模型 A 較模型 B 安全」 | ASR_A >= ASR_B | 雙比例 z 檢定 | p < 0.05 之顯著差異 |
| 「更新降低了 ASR」 | ASR_after >= ASR_before | 配對比例檢定 | p < 0.05 之顯著降低 |
| 「ASR 低於 5%」 | ASR >= 0.05 | 單比例 z 檢定 | 以觀察到之 ASR < 5% 於 p < 0.05 拒絕 |
| 「模型於不同語言下同等安全」 | ASR 因語言而異 | 卡方檢定 | 非顯著結果(p > 0.05) |
比較兩模型
from scipy.stats import proportions_ztest
def compare_models(successes_a: int, trials_a: int,
successes_b: int, trials_b: int) -> dict:
"""檢定兩模型是否具顯著不同之 ASR。"""
stat, p_value = proportions_ztest(
[successes_a, successes_b],
[trials_a, trials_b],
alternative='two-sided'
)
return {
"asr_a": successes_a / trials_a,
"asr_b": successes_b / trials_b,
"z_statistic": stat,
"p_value": p_value,
"significant": p_value < 0.05
}多重檢定校正
當測試多類別或進行多個同時比較時,偽陽性風險會增加。
| 校正方法 | 何時使用 | 運作方式 |
|---|---|---|
| Bonferroni | 少量比較(< 10) | 將顯著水準除以檢定數 |
| Holm-Bonferroni | 中等數量比較 | 逐步下降程序,較不保守 |
| Benjamini-Hochberg | 大量比較 | 控制偽發現率而非 family-wise 誤差 |
若對 10 個 OWASP 類別回報 ASR,並於任何類別聲稱 p < 0.05 的「顯著改善」,未校正即有 40% 機率至少一個是偽陽性。
常見統計陷阱
| 陷阱 | 範例 | 修正 |
|---|---|---|
| 樣本數不足 | 「0/20 攻擊成功,模型安全」 | 回報信賴區間:「0/20,95% CI: [0%, 15%]」 |
| 挑選結果 | 僅回報最佳評估執行 | 回報所有執行或預先註冊評估協定 |
| 忽略非確定性 | 每提示僅跑一次 | 以部署溫度多次執行每提示 |
| p-hacking | 測試許多提示直到一個成功,作為「發現漏洞」回報 | 區分探索性(尋找)與確認性(量測)測試 |
| 倖存者偏誤 | 僅回報成功之攻擊 | 回報完整分母:「5/200 攻擊成功」 |
| 基率忽視 | 將低 ASR 解釋為「安全」而無脈絡 | 與業界基準與可接受風險門檻比較 |
回報統計結果
最低回報要求
每個量化紅隊發現應包含:
- 指標值(例如 ASR = 4.2%)
- 信賴區間(例如 95% CI:[2.8%, 6.1%])
- 樣本數(例如 n = 500 提示,每次 3 次試驗)
- 條件(例如 temperature = 0.7、模型版本 X)
- 評估日期與資料集版本
相關主題
- AI 安全基準與評估 -- 基準景觀與評估方法論
- 打造評估 Harness -- 執行評估之基礎設施
- ASR 之外的紅隊指標 -- 全面指標框架
- 視覺化紅隊結果 -- 以視覺化呈現統計結果
參考資料
- "Statistical Methods for AI Safety Evaluation" - Anthropic(2024)- AI 紅隊評估中信賴區間與假設檢定之方法論
- "The Rule of Three in Clinical Trials" - Hanley & Lippman-Hand, Journal of the American Medical Association(1983)- 零事件估計之三法則原始推導
- "HarmBench: A Standardized Evaluation Framework for Automated Red Teaming" - Mazeika et al.(2024)- 標準化 AI 安全基準之統計方法論
- "Sample Size Determination for Proportions" - Agresti & Coull, The American Statistician(1998)- 比例指標推薦之 Wilson score interval 方法論
Knowledge Check
紅隊對模型執行 50 個測試提示並觀察到零次成功攻擊。他們能以 95% 信心聲稱什麼?