随着AI技术的进步,攻击AI的技术也越来越多,包括对抗样本、后门攻击等,这些是针对模型安全而言的,在数据层面,攻击者甚至可以通过攻击窃取训练集中的个人隐私数据,为此,安全研究人员提出将差分隐私应用于AI,以保护AI的训练集中样本的隐私;在另一方面,借助差分隐私技术也可以促进各方的交流,避免数据孤岛。在本文中,我们将以设想的新冠疫情下医院之间互助的场景为例,通过实战介绍PATE技术在利用AI赋能医疗行业的同时保护患者个人隐私。
差分隐私确保统计分析不会损害隐私。它确保个人的数据对整个模型输出的影响是有限的。换句话说,不论是否包括数据集中特定个体的数据,算法的输出几乎是相同的。
如上图所示,John 的信息出现在第一个数据集中,不在第二个数据集中,但是模型输出是相同的,所以想要获得 John 的数据的对手不能确定数据集中是否存在 John,更不用说数据的内容了。因此,John的隐私得到了保障。
差分隐私通常通过在模型或统计查询的输入层(本地差分隐私)或输出层(全局差分隐私)添加统计噪声来工作。增加的噪声保证了个人对决策结果的贡献被隐藏起来,但在不牺牲个人隐私的情况下获得了对整体的深入了解。
噪声的大小取决于一个称为privact budget(隐私预算)的参数,这个参数通常用ε表示。ε的值越小(即添加的噪声越多) ,它提供的隐私就越高,反之亦然。如下图所示,我们可以看到,随着越来越多的噪声被添加到脸部图像,它得到的匿名信息越多,但它变得越来越不可用。因此,选择正确的ε值非常重要,需要在可用性与隐私之间做好权衡。
在本文中我们使用的隐私方法叫做PATE(Private Aggregation of Teacher Ensembles)。
PATE的工作流程如下:
首先在不相交的训练集上分别训练得到几个模型,称为教师模型。然后将一个输入交给这些教师模型预测,教师模型预测得到各自的类标签,最终以所以教师模型输出的总和作为最终的预测类。不过这一步会分为两种情况:1.如果所有或者大多数教师模型的预测都是相同的,那么最终应该输出什么类就很容易知道了。这意味着不会泄露任何单个训练样本的私有信息,因为如果从某个数据集中删除任何训练样本,不会影响模型最后的输出。在这种情况下,privacy budget很低,算法满足差分隐私;2.如果各个教师模型给出的预测不一致,则privacy budget很高,这会让最终应该给出什么预测变得不那么直接,并最终导致隐私泄露。为了解决这个问题,我们可以使用Report Noisy Max(RNM算法),它会在每个模型的输出中添加随机噪声。通过这种方法可以提供一种强力的隐私保护。这种情况下,算法满足了完全意义下的差分隐私。
但是PATE不限于此,它还额外增加了隐私。可能有些人会觉得将教师模型聚合在一起用于推理就可以了,但是这是不行的,原因有两点:
1.每次我们做出预测,privacy budget就会增加,所以迟早都会达到一个点,那时候隐私是一定会泄露的
2.通过多次查询,攻击者可以获取教师模型的训练数据,这时隐私也完全泄漏了
所以我们不能简单的聚合,而需要创建一个学生模型。学生模型使用的训练集是没有标签的(如场景部分中提到的我们的医院),我们把训练集中的数据交给教师模型来预测,通过教师模型打标签,一旦打上标签,教师模型就可以被丢弃了。此时学生模型已经可以训练了,训练完毕后它实际上从教师模型中学习了有价值的信息。最重要的是,privacy budget不会随着学生模型每次查询而增加,而且在最坏的情况下,攻击者只能得到教师模型给出的带噪声的标签。
1.让这5家医院各自在自己的数据集上训练模型,完成这一步后,得到了5个教师模型
2.使用这5个教师模型,为我们医院的每张CT图像生成5个标签
3.为了保护教师训练集的隐私,可以对生成的标签应用RNM算法。对于每张CT图像,我们获得生成的5个标签中最频繁的标签,然后添加噪声实现差分隐私
4.使用带噪声的标签训练学生模型(我们医院自己的模型),将其部署在自己的医院中用于诊断。
在Images_Processed文件夹下有两个文件夹,分别是COVID和Non-COVID,对应存放的是确诊有新冠的和没有新冠的片子。在Data_Split文件夹下是图像的标签。为了后续编程方便,可以将Image_Processe和Data_Split分别改为Image,labels
现在我们要模拟的场景是教师模型有私有数据(打上标签的),学生只有公开的没有标签的数据,所以我们可以将这里的训练集作为教师模型的新联数据集,将测试集作为学生模型的训练数据集,然后使用验证集来分别测试学生模型和正常模型(不通过差分隐私训练得到的模型)的性能。
首先创建一个自定义的dataset loader,创建数据转换,并最终加载数据
在成功加载数据后,可以可视化部分样本
我们现在可以继续在5家医院之间划分训练集。5家医院,对应着5个教师模型,这里需要注意,数据集必须是不相交的,也就是说,任何2个数据集都不应该有重叠的训练样本。前面已经说过,差分隐私中,如果个人的数据被从数据集中删除,数据集的输出仍然是相同的,以为个人对数据集没有贡献。如果有某一个人的副本,即使删除其中的一个副本,个人的数据仍然有助于输出,这样就无法保护个人隐私。
所以在将训练集划为5个子集时,我们必须非常谨慎。
下面的代码就是在5个教师模型或者说5个医院之间划分我们的训练集,并为每一个教师模型创建训练集dataloader和验证集dataloader。
现在对于教师模型来说,有5个trainloader,5个validloader;接着我们为学生模型(我们自己的医院)创建trainloader,validloader
首先定义一个简单的CNN模型
然后如下定义我们的训练代码
定义超参数,我们使用交叉熵损失CrossEntropyLoss和Adam优化器。
每个教师模型训练50个epoch
然后开始训练教师模型
(163,5)的意思是说,在学生模型的数据中有163个训练样本,5个教师模型为每个样本生成了5个标签。第三张CT图片的预测标签为5个1,说明5个教师模型都认为这是新冠阳性。如果是[1,1,1,0,0]则表示两个教师模型认为这是阴性,三个教师模型认为这是阳性,此时我们以多数原则为依据,认为这是阳性。
我们把这些标签保存下来就可以了,训练好的教师模型已经用不到了
我们使用perform_analysis方法,以所有教师模型的预测标签列表和我们刚刚计算的带噪声的新标签作为输入,并返回两个值:data_dep_eps,data_ind_eps,分别表示数据相关的和数据无关的。Perform_analysis目的在于告诉我们教师模型之间的一致性水平。data_ind_eps的表示在最坏情况下可能泄露的最大信息量,而data_dep_eps的表示教师模型的决策的一致性程度。一个小的data_dep_eps的表明,教师模型的预测具有很高的一致性,并且浙西模型没有记忆私人信息(过度拟合)。因此,小的data_dep_eps的表示较小的隐私泄漏率。在试验了不同的值以及noise_eps变量后,我们设=0.1,得到的结果如下
可以看到,我们得到的data_dep_eps的是15.536462732485106,data_ind_eps的是15.536462732485116
接着训练学生模型。我们使用换成新标签的trainloader进行训练,并使用validloader的数据集评估模型的性能。我们使用和教师模型相同的CNN架构以及超参数。
同时再训练一个使用原始标签的trainloader的数据的模型
注意,这两个模型只有所用的数据集的标签是不同的
训练完成后,在测试集上比较这两个模型的性能
可以看到,学生模型的准确率稍微低于正常训练的模型,原因包括教师模型预测的偏差、添加的噪声等等,在不牺牲隐私、不违反数据隐私保护法律的情况下我们可以为5家医院之外的其他医院训练出一个学生模型,可以提升医疗效率,拯救更多的生命。
- 结尾 - 精彩推荐 【技术分享】反后门攻击 【技术分享】音视频领域的对抗样本攻击实战 【技术分享】人工智能的梦魇:对抗攻击 戳“阅读原文”查看更多内容 原文始发于微信公众号(安全客):【技术分享】差分隐私实战-以保护新冠数据隐私为例
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论