DHAttack

处理数据
将训练数据和测试数据合并,尽量将数据集中的数据样本均匀分布给训练集和测试集,并且保证每一类数据的分布也是均匀地:
- 将标签相同的样本打乱,再分组
- 得到所有数据集之后,再分别打乱,一类数据作为一个循环(此时是二维的,样本数*3072
- 将数据标准化(3072展开成
32*32*3
(target model与shadow model的训练集和测试集 + 蒸馏数据- 计算训练集图片的均值、标准差
- 将图片转换成标准存储格式(二维 → 分成三个通道 → 每个通道的长宽分开
- 之后使用 训练集的均值和标准差 对训练集和测试集进行数据化标准化,特征缩放
模型训练
target model:
保证一批次的样本数batch_size小于训练数据总数
使用PyTorch模块 建立数据及对象和数据加载器loader(会按批次加载入训练数据
对于loader,我们分别建立一个打乱的和不打乱的,不打乱的loader是为了使后续的 训练集再测试 的评估和比较更方便(对齐)
相同的,测试集也建好数据集和loader(不打乱)
根据模型选取(mobilenet),有一些参数上的不同(训练手段不一样
之后建立优化器和学习率调整策略,为后续的model训练做好准备
训练
- 每周期完成一次所有样本的训练,共完成epochs次
- 每个周期内部会使用loader进行循环,每次循环取一批次的样本,拿输出,分析loss(交叉熵损失函数,计算预测值与实际标签之间的差距
- 注意梯度清零
- 更新lr
之后测量model对训练集的预测效果:
与训练的不同之处在于,在每批次中,拿到out是每个样本对应不同类别的预测概率,此时取最大概率对应类别即为预测结果
测试
和测量model训练集的预测效果的步骤差不多,拿到预测结果后和真实标签y比较一下
之后将训练集数据和测试集数据再次分别投放到模型中,将预测结果进行归一化处理(每个样本对应不同类别的相对评分 → 和为1的概率分布),使得同一样本对应不同类别的概率和为1
归一化得到的概率分布 → attack_x ,
1为成员,0为非成员 → attack_y
(但最后好像没有什么应用
shadow model:
一毛一样
蒸馏模型:主要为了知识压缩,通过target model的soft label训练而成,模仿target model
影子模型:主要是为了模拟target model的行为,可以利用distilled model来训练
DHAttack
主要就是 数据扰动,训练256个refmodel(shadow model),计算target model 和refmodel预测的扰动数据与决策边缘的距离,衡量member概率
数据扰动
我们将目标模型的训练集和测试集作为目标样本
对target model的训练集和测试集进行扰动(disturb_num 扰动次数,也是一个样本最多的查询次数,需要尽量小,否则对方易察觉
具体的扰动就是将原先的一个样本进行多次不同程度的变化,进而形成disturb_num个样本(但对方可察觉他们是基本相似的)
256个refmodel
使用distilled数据训练模型
使用target model预测数据集的softlabel(评分 转 概率),利用distill数据集 + softlabel 进行relabel,即shadow models的训练
计算distance
分别计算扰动数据(训练集 测试集)的精确度(target model 和 refmodelS)
计算每一组扰动的(近似)样本,算target model和refmodel 训练集、测试集的distance【注意,数据是target model的训练集和测试集】
比较预测标签和实际标签 数组,返回0/1串,越往后,数据扰动越小,正确率越高
0开头:找到第一个非0,得到count,计算distance(count越大,错误越多,预测越有问题,距离决策边缘越近
1开头:找000串。。。
计算的distance不必再区分train和test
衡量member概率
将 距离 转换为 接近决策边缘的程度(抽象化)
利用distance计算对数几率,在target model和refmodel里衡量样本是member的概率
计算refmodel的均值和标准差,在refmodel的高斯分布中求样本在target model中的distance的cdf
计算tpr、auc
HardLabel:对于某类别,某样本最可能的状态(离散) 0/1
softlabel:某样本属于某类别的概率,softmax概率(连续) 0~1
model的训练和预测过程十分相似,区别在于是否back
实际情况中relax某些条件的可行性
(控制变量)
1.different directions
fixed_point选取的不同,
- 随便找一个样本
- 选择样本的max
在代码上体现为 数据扰动的方式有细微的不同 add_mask_bydirection()
2.varying numbers of local (or shadow) models
shadow models的数据不同,改变num_local_models(used_num)参数,在选取refmodel是数量会随之变化
3.varying reference dataset sizes
改变 refmodel (relabel)训练时用的样本数
就加了一个随机选择特定数量样本的过程,函数传的参变了变
4.with a simple threshold selecting method
用90%~100%这11个数作为可选择的阈值,分别计算这些情况下的结论,找到最好的条件
阈值和score比较(一个数 和 一个数组),得到布尔数组
再利用布尔数组计算tpr之类的参数,画图
比较所有的图,找一个最好的
5.using different model architectures for training local models
只需改变命令行参数
- Title: DHAttack
- Author: dawn_r1sing
- Created at : 2025-09-05 10:54:39
- Updated at : 2025-09-05 11:02:07
- Link: https://dawnrisingdong.github.io/2025/09/05/DHAttack/
- License: This work is licensed under CC BY-NC-SA 4.0.