笔记:DeepObfuscator: Adversarial Training Framework for Privacy-Preserving Image Classification

DeepObfuscator: 隐私保护对抗训练框架
提出一种名为DeepObfuscator的对抗训练框架,旨在防止从图片中提取隐私信息,同时保持云端服务所需信息的准确性。该框架通过模拟攻击者与防御者的对抗过程,设计混淆器、分类器、对抗重建器和对抗分类器四部分,实现在防御隐私泄露的同时保持高分类准确率。

文章提出了一种对抗训练框架来防止从原始图片中抽取特征并获取隐私信息,同时保留云端服务需要的信息。提出的算法模拟抽取特征尝试重构图片的攻击者和保护隐私的防御者之间的对抗。
DeepObfuscator由四部分组成:混淆器(O)、分类器(C)、对抗重建器(AR)、对抗分类器(AC)。对抗训练的关键点在于最大化对抗重建器的重建误差和对抗分类器的分类误差,同时最小化分类器的误差。

贡献:
1.提出了第一个在防御重建攻击和隐私泄露的同时保持分类准确率的的对抗训练框架
2.第一个通过实验展示了重建攻击和隐私泄露攻击是不互相包含的
3.在CelebAdataset上定量评估了DeepObfuscator

系统结构:
混淆器(O)
混淆器是一个有输入层、多个卷积层、最大池化层和BN层组成的编码器,被训练用来在保留分类任务可用的信息的同时隐藏隐私信息。

分类器(C)
分类器与混淆器一起作为一个完整的CNN模型训练。一个服务提供者可以根据分类任务和可获得的资源选择任何神经网络结构。在文章系统中使用VGG16。分类器使用交叉熵作为损失函数。

对抗分类器(AC)
攻击者可以通过窃听特征作为输入,隐私信息作为标签训练对抗分类器。攻击者可以通过将窃听信息送入训练过的对抗分类器推断出隐私特征。在DeepObfuscator中,在分类器和对抗分类器上应用相同的结构。然而攻击者可以选择任何结构作为对抗分类器。使用不同结构在分类器和对抗分类器上不会在表现上有很大的差异。对抗分类器的损失函数也是交叉熵。
当防御隐私泄露攻击时,为了降低对抗分类器的表现来提升分类器的精度,使用提出的对抗训练步骤来训练混淆器。

对抗重建器(AR)
对抗重建器用于利用窃听特征还原原始图片。攻击者可以使用任何神经网络作为对抗重建器。然而最糟糕的情况是攻击者知道混淆器的结构并据此构建一个把每一层逆向操作的最有力的重建器。在DeepObfuscator中,使用这种最有力的重建器。
作为攻击者时,对抗重建器的训练使得重构出的图片与原图不断接近。在DeepObfuscator中,使用MS-SSIM作为评价标准。MS-SSIM的值在0-1之间,值越大,两张图片越相似。
防御者期望能降低重建图片的质量。生成额外的高斯噪声图片,使训练对抗重建器恢复的图片与高斯噪声图片更加接近而分类效果被保持。

对抗训练算法:
在进行对抗训练前,首先不考虑隐私问题将混淆器和分类器结合起来来优化分类任务的结果。同样地对对抗训练器和对抗重建器进行预训练。
每一个epoch内对抗训练的迭代分为四个batch。在开始的两个batch中,训练混淆器来防御对抗重建器和对抗分类器同时保持分类器不变。第三和第四个batch中通过模拟攻击者来优化对抗重建器和对抗分类器,但混淆器和分类器的参数固定。
最终优化分类器来提升分类准确率。

### LAT-AT 对抗训练概述 对抗训练是一种提高机器学习模型鲁棒性的方法,通过引入对抗样本使模型能够更好地处理扰动输入。LAT-AT (Label-Smoothing Augmented Training with Adversarial Training) 是一种改进的对抗训练技术,在标准对抗训练基础上加入了标签平滑机制来增强泛化能力[^1]。 ### 实现细节 在实现 LAT-AT 时,主要步骤如下: 1. **生成对抗样本**:对于给定的数据点 \(x\) 和其真实标签 \(y\) ,计算该数据点对应的对抗样本 \(x'\),使得模型对该样本预测错误的概率最大化。 2. **应用标签平滑**:对原始标签执行平滑操作得到软标签 \(\tilde{y}\),这有助于减少过拟合并提升模型对外部干扰的容忍度。 3. **联合优化目标函数**:同时考虑正常样本及其对应对抗样本上的损失来进行参数更新过程中的梯度下降。 以下是 Python 中基于 PyTorch 的简单示例代码片段展示如何实施上述流程: ```python import torch from torchvision import models, transforms from torch.nn.functional import cross_entropy, softmax def generate_adversarial_example(model, data, target, epsilon=0.05): """Generate an adversarial example using FGSM.""" model.eval() adv_data = data.clone().requires_grad_(True) output = model(adv_data) loss = cross_entropy(output, target) model.zero_grad() loss.backward() perturbation = epsilon * adv_data.grad.sign_() adv_data += perturbation return adv_data.detach() class LabelSmoothingLoss(torch.nn.Module): def __init__(self, smoothing=0.1): super().__init__() self.smoothing = smoothing def forward(self, pred, target): log_prob = F.log_softmax(pred, dim=-1) weight = pred.new_ones(pred.size()) * \ self.smoothing / (pred.size(-1)-1.) weight.scatter_(-1, target.unsqueeze(-1), 1.-self.smoothing) loss = (-weight*log_prob).sum(dim=-1).mean() return loss # Assuming `model`, `data_loader` are defined elsewhere. criterion = LabelSmoothingLoss(smoothing=0.1) for batch_idx, (data, targets) in enumerate(data_loader): optimizer.zero_grad() # Generate adversarial examples from clean inputs adv_inputs = generate_adversarial_example(model, data, targets) outputs_clean = model(data) outputs_adv = model(adv_inputs) # Compute combined loss over both sets of predictions loss_clean = criterion(outputs_clean, targets) loss_adv = criterion(outputs_adv, targets) total_loss = (loss_clean + loss_adv)/2. total_loss.backward() optimizer.step() ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值