概率鲁棒性
引言
传统对抗训练关注最坏情况鲁棒性(worst-case robustness, WCR),即在扰动球内最差情况下的性能。然而,这种度量可能过于保守。**概率鲁棒性(Probabilistic Robustness, PR)**提供了一种更实用的度量方式,评估在局部扰动范围内大部分样本的鲁棒性。1
最坏情况鲁棒性的局限性
WCR的定义
最坏情况鲁棒性定义为:
仅当所有扰动都保持正确分类时,才认为模型是鲁棒的。
问题
- 过于严格:极端扰动可能不具实际意义
- 无法量化程度:无法区分”只有0.1%扰动失败”和”50%扰动失败”
- 保守防御:为追求WCR可能牺牲过多标准性能
概率鲁棒性的定义
基本定义
概率鲁棒性定义为:
即在给定比例 的扰动下保持正确分类。
几何理解
┌─────────────────────┐
│ │
│ 高鲁棒区域 │
│ (大部分扰动正确) │
│ ┌─────────┐ │
│ │ 中心 │ ← 原始输入
│ │ 样本 │ │
│ └─────────┘ │
│ │
└─────────────────────┘
PR度量的是在ε球内正确分类的概率,而非最差情况
AT-PR方法
核心思想
Zhang等人(ICCV 2025)提出的AT-PR将概率鲁棒性直接融入对抗训练目标:1
优化目标
其中 是动态调整的扰动半径。
AT-PR算法
def at_pr_loss(model, x, y, p_max=0.03, gamma=0.5):
"""
AT-PR: Adversarial Training for Probabilistic Robustness.
Args:
model: 分类器
x: 输入
y: 标签
p_max: 最大扰动半径
gamma: 概率阈值
"""
# 动态选择扰动半径
p = p_max * gamma
# 生成对抗样本
delta = generate_adversarial(model, x, y, epsilon=p)
# 计算损失
loss = F.cross_entropy(model(x + delta), y)
return loss与传统AT的区别
| 方面 | PGD-AT (WCR) | AT-PR (PR) |
|---|---|---|
| 目标 | 最坏情况 | 概率保证 |
| 扰动 | 固定 | 动态调整 |
| 评估 | ||
| 泛化 | 较保守 | 更实用 |
理论分析
概率鲁棒性的PAC边界
设 为经验概率鲁棒性(采样估计),则:
样本复杂度
对于 -概率鲁棒性认证,需要样本数:
实验验证
CIFAR-10结果
使用WideResNet-34-10在CIFAR-10上的结果:
| 方法 | Clean Acc | WCR@8/255 | PR@8/255 |
|---|---|---|---|
| PGD-AT | 87.3% | 56.1% | 72.3% |
| AT-PR | 88.5% | 54.8% | 78.6% |
| TRADES | 88.6% | 55.8% | 76.2% |
| MART | 88.1% | 57.0% | 75.8% |
ImageNet结果
使用ResNet-50在ImageNet上的结果:
| 方法 | Clean Top-1 | WCR@4/255 | PR@4/255 |
|---|---|---|---|
| PGD-AT | 62.3% | 32.1% | 45.2% |
| AT-PR | 63.8% | 31.5% | 48.7% |
一致性分析
AT-PR在不同的局部输入密度下表现更一致:
def evaluate_consistency(model, x, thresholds=[0.25, 0.5, 0.75, 1.0]):
"""
评估概率鲁棒性在不同阈值下的一致性。
"""
results = {}
for alpha in thresholds:
pr = compute_pr(model, x, epsilon=0.03, alpha=alpha)
results[f'PR@{alpha}'] = pr
# 计算标准差(越低越一致)
consistency = np.std(list(results.values()))
return results, consistency与其他鲁棒性概念的关系
WCR → PR
WCR是PR在 时的特例:
平均情况鲁棒性(ACR)
ACR度量所有扰动的平均性能:
AT-PR直接优化ACR的平滑版本。
尾部鲁棒性
Tail-R关注分布的尾部(最差比例):
实践建议
何时使用AT-PR
- 关注实际部署:实际扰动并非最坏情况
- 需要性能-鲁棒性平衡:不愿为极端鲁棒性牺牲过多准确率
- 用户接受度:用户可能偶尔遇到误分类,而非完全失效
实现注意事项
class ATPRScheduler:
"""动态调整gamma参数。"""
def __init__(self, initial_gamma=0.5, final_gamma=0.9, epochs=100):
self.gamma = initial_gamma
self.schedule = np.linspace(initial_gamma, final_gamma, epochs)
def step(self, epoch):
self.gamma = self.schedule[epoch]
return self.gamma本章小结
概率鲁棒性提供了一种更实用的鲁棒性度量:
- 定义:评估大部分扰动下的正确率,而非最坏情况
- AT-PR方法:ICCV 2025方法,直接优化概率鲁棒性
- 优势:更好的Clean-Robust权衡,更一致的局部性能
- 应用场景:实际部署优先于极端安全的场景