DHAttack

dawn_r1sing Lv3

处理数据

将训练数据和测试数据合并,尽量将数据集中的数据样本均匀分布给训练集和测试集,并且保证每一类数据的分布也是均匀地:

  • 将标签相同的样本打乱,再分组
  • 得到所有数据集之后,再分别打乱,一类数据作为一个循环(此时是二维的,样本数*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.