AI安全与伦理¶
概述¶
AI安全与伦理是确保AI系统可靠、公平、可解释的重要领域,是AI落地应用的关键考量。
AI安全¶
对抗攻击¶
import torch
# FGSM攻击(Fast Gradient Sign Method)
def fgsm_attack(model, x, y, epsilon=0.03):
x.requires_grad = True
output = model(x)
loss = torch.nn.functional.cross_entropy(output, y)
loss.backward()
# 生成对抗样本
perturbed_x = x + epsilon * x.grad.sign()
return perturbed_x.detach()
# 对抗训练
def adversarial_training(model, train_loader, optimizer, epsilon=0.03):
model.train()
for x, y in train_loader:
x_adv = fgsm_attack(model, x, y, epsilon)
# 混合训练
output = model(torch.cat([x, x_adv]))
loss = torch.nn.functional.cross_entropy(
output, torch.cat([y, y])
)
optimizer.zero_grad()
loss.backward()
optimizer.step()
模型鲁棒性¶
模型可解释性¶
LIME(局部可解释)¶
from lime.lime_tabular import LimeTabularExplainer
# 创建解释器
explainer = LimeTabularExplainer(
X_train.values,
feature_names=feature_names,
class_names=class_names
)
# 解释单个预测
explanation = explainer.explain_instance(
X_test.iloc[0].values,
model.predict_proba,
num_features=10
)
explanation.show_in_notebook()
SHAP¶
import shap
# 创建SHAP解释器
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)
# 可视化
shap.summary_plot(shap_values, X_test)
shap.dependence_plot("feature_name", shap_values, X_test)
注意力可视化¶
# Transformer注意力可视化
def plot_attention(attention, heads=4):
import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, heads, figsize=(4*heads, 4))
for i, head in enumerate(axes):
head.imshow(attention[0, i], cmap='viridis')
head.set_title(f'Head {i+1}')
plt.tight_layout()
plt.show()
AI伦理¶
偏见检测¶
def detect_bias(predictions, sensitive_features):
"""
检测模型在不同群体上的表现差异
"""
groups = np.unique(sensitive_features)
metrics = {}
for group in groups:
mask = sensitive_features == group
group_predictions = predictions[mask]
metrics[group] = {
'accuracy': np.mean(group_predictions == y_test[mask]),
'count': np.sum(mask)
}
# 计算差异
accuracies = [m['accuracy'] for m in metrics.values()]
bias = max(accuracies) - min(accuracies)
return metrics, bias
# 公平性指标
def fairness_metrics(y_true, y_pred, sensitive):
# 统计均等
metric = {}
for group in np.unique(sensitive):
mask = sensitive == group
metric[group] = np.mean(y_pred[mask] == 1)
return metric
差异化隐私¶
import numpy as np
def add_dp_noise(gradients, noise_multiplier=1.0, max_grad_norm=1.0):
"""添加差分隐私噪声"""
# 梯度裁剪
clip_norm = np.linalg.norm(gradients)
if clip_norm > max_grad_norm:
gradients = gradients * max_grad_norm / clip_norm
# 添加高斯噪声
noise = np.random.normal(0, noise_multiplier * max_grad_norm, gradients.shape)
return gradients + noise
AI伦理准则¶
# 负责任AI原则
1. 公平性
- 避免歧视
- 代表性均衡
2. 透明性
- 模型可解释
- 决策可追溯
3. 隐私保护
- 数据最小化
- 用户同意
4. 安全性
- 对抗鲁棒性
- 故障安全
5. 可问责
- 责任明确
- 审计机制