【论文阅读】Feature Inference Attack on Shapley Values

摘要

研究背景

近年来,解释性机器学习逐渐成为一个热门的研究领域。解释性机器学习可以帮助我们理解机器学习模型是如何进行预测的,它可以提高模型的可信度和可解释性。Shapley值是一种解释机器学习模型预测结果的方法,它可以计算每个特征对预测结果的贡献程度,从而帮助我们理解模型的预测过程。Shapley值已经在许多领域得到了广泛的应用,比如金融、医疗、自然语言处理等。

研究动机

然而,随着机器学习模型的广泛应用,模型的隐私和安全问题也变得越来越重要。模型的隐私泄露可能会导致个人隐私信息的泄露,从而对个人造成不可挽回的损失。在Shapley值方法中,攻击者可以通过对Shapley值进行反推来推断出模型中使用的特征,从而了解模型的训练数据和训练过程。这种攻击方式可能会导致模型隐私泄露,从而损害模型的安全性和信任度。

论文贡献

为了解决这个问题,研究人员在本文中提出了一种新的隐私保护技术,称为Shapley值加噪技术。该技术可以在一定程度上保护Shapley值的隐私,同时保持解释性能力。研究人员还提出了一种新的攻击方式,称为特征推理攻击,可以通过对Shapley值进行反推来推断出模型中使用的特征。研究人员在多个数据集和模型上进行了实验验证,结果表明论文中提出的特征推理攻击是有效的,并且所提出的Shapley值加噪技术能够有效地防止这种攻击。本文的主要贡献在于提出了一种新的隐私保护技术,可以保护Shapley值的隐私,同时保持解释性能力。

前置知识

机器学习模型基本原理

机器学习是一种使用算法和统计模型来分析和解决复杂问题的方法。机器学习模型通过学习数据集中的模式和规律来进行预测和分类。机器学习模型通常包括一个训练阶段和一个预测阶段。在训练阶段,模型使用标记好的数据集来学习规律和模式;在预测阶段,模型使用学习到的规律和模式来对新的数据进行预测。

Shapley值及其应用

Shapley值是一种用于解释机器学习模型预测结果的方法。Shapley值可以计算每个特征对预测结果的贡献程度,从而帮助我们理解模型的预测过程。Shapley值方法基于合作博弈论中的Shapley值概念,将每个特征视为一个“玩家”,将预测结果视为“支付函数”,并使用Shapley值来分配支付函数中的支付给每个“玩家”。

Shapley Value的计算方式需要考虑所有特征子集的贡献,因此需要使用组合数学中的排列组合方法来进行计算。下面是Shapley Value的计算公式:

对于特征i,它在所有特征子集S中所对应的贡献为:

\phi_i=\sum_{S \subseteq F \setminus {i}} \frac{|S|!(|F|-|S|-1)!}{|F|!} [f(S \cup {i}) - f(S)]

其中,F 是所有特征的集合,​ 是特征子集 S 的大小,​ 是使用特征子集 S 训练出的模型在测试集上的性能指标,​ 是加入特征 i 后训练出的模型在测试集上的性能指标。

上述公式表示了特征i在所有可能的特征子集中的平均边际贡献,即特征 i 对于所有特征子集的增益平均值。在实际计算中,需要对所有特征进行遍历来计算每个特征的Shapley值。

在实际应用中,Shapley值已经被广泛应用于解释性机器学习,比如特征重要性评估、模型诊断和模型优化等方面。Shapley值还可以用于探索特征之间的相互作用,从而帮助我们理解模型的决策过程和行为。虽然Shapley值已经在很多领域得到了广泛的应用,但其隐私和安全问题也逐渐变得越来越重要。

特征推理攻击

敌手出于恶意目的,将数据去匿名化或者锁定记录的拥有者。

在数据被发布之前,通过删除用户的个人可识别信息(也称为敏感特征)来实现匿名化,是用户保护隐私的一种常用方法。

基于解释报告的攻击框架

①攻击者向ML平台发送虚假查询,并接收带有解释的决策

②攻击者根据模型的输入和解释,设计特征推断算法

③攻击者可能获得目标客户的解释报告

④根据这些解释,攻击者可以通过攻击算法重构相应的私有特征

符号解释

最后是一些符号术语的解释,帮助我们理解论文:

​是运行在ML平台上的黑盒模型;

​是想要重构出的目标特征样本;

​是​所包含的特征数量;

​是黑盒模型的输出;

输出的class数用字母​来表示;

​就是样本的Shapley值;

​右上标表示第几个样本,右下标表示这个样本的第几个特征。

攻击原理

下面可以步入正题了,也就是论文提出的基于Shapley值的特征推理攻击算法。

具体分为两种类型,一种是使用辅助数据集的特征推理攻击,另一种是具有数据独立性的特征推理攻击。

使用辅助数据集的特征推理攻击

第一种攻击方式,使用辅助数据集的特征推理攻击。

下面就是这种攻击算法的伪代码,相对比较简单,所做的事情简单来说就是基于一个辅助数据集,学习一个具有经验风险最小化的回归模型,然后将解释向量𝒔映射到私有数据中。经过最小化,然后将解释向量𝒔映射到私有特征空间,并相应地获得估计值。

整个攻击的过程和机器学习如出一辙,同样是先训练一个回归模型,再使用这个回归模型进行预测。

整个算法的核心原理就是右边这张双射图:

图中灰色的​函数是指特征值作为输入,Shapley值作为输出;橙色的​函数则是反过来,Shapley值作为输入,特征值作为输出。

左侧的函数是ML平台所做的,右边的函数是攻击者所做的,通过重新训练一个相反的模型达成特征推理攻击的目的。

因为攻击者拥有了一个辅助数据集,所以这种方式会相对简单一些,成本也会低很多。

具有数据独立性的特征推理攻击

第二种攻击方式,具有数据独立性的特征推理攻击。

顾名思义,这种攻击需要的条件没有刚才讲到的使用辅助数据集的攻击那么严苛,但是攻击成功困难性也会提升,甚至能否攻击成功是一个运气事件。

假设对手没有辅助数据集,对手将不可能学习到刚才的攻击模型,因为目标私有特征的分布是未知的。从𝒔(也就是Shapley值)恢复𝒙(私有样本特征值)的方法是,攻击者生成一个随机数据集,将该数据集中的样本分别发送到ML平台并获得对应的解释。假设随机数据集的大小足够大,则会有你猜测的Shapley值属于目标数据集的Shapley值集合,这样就可以使用与之关联的Xrand作为依据估计𝒙。

想法很好,具体操作中会存在两个问题:

第一,为了提高估计的精度,对手需要随机从可能的特征空间中抽取大量样本,并将其发送到ML平台。对于按查询付费的服务来说,成本可能很高,并且会增加被服务提供者发现和阻止的风险。

第二,双射关系只在x和s之间成立,而不是在你选择的Xrand和Srand之间成立。

基于这些问题,如下图所示,研究人员继续研究了如何才能更准确地从随机数据集中找到符合条件的样本,使用的方法就是结合特征值的相关系数来进行分析,使得误差小于一定的阈值。

 

具体攻击算法如下图所示:

在算法的第9-12行中,对于目标特征𝑥𝑖,首先,我们计算它的Shapley值𝒔𝑖和随机样本中第i个特征的Shapley值之间的距离distance;

随后在第13行,根据Shapley值距离对随机特征进行排序;

之后的这个for循环也就是相应地选择Shapley值距离小于阈值𝜉的𝑥𝑖的候选估计;

最后在第19行,我们选择只重建那些候选估计值范围小于阈值𝜏的私有特征。

最终算法时间复杂度是O(nmlogm),其中𝑛表示目标特征的数量,𝑚表示随机数据集的大小,在后续实验中,表明随机数据集的大小𝑚=100足以从复杂模型(如神经网络)中重建30%以上的高精度特征。

实验探究

实验环境

实验平台

为了验证所提出的攻击在现实世界应用中的有效性,研究人员在三个领先的ML平台上进行了实验,分别是谷歌云AI平台、微软云AI平台和IBM可信AI平台。

实验数据集

实验使用了多种多样的数据集,涵盖了商业、银行、信用卡、医学等多个领域。

样本的数量在3W到10W不等,其特征的数量也多种多样,保证了实验具有普适性和说服力。

黑盒模型

实验中使用了四种类型的模型:

①神经网络(NN)

②随机森林(RF)

③梯度提升的决策树(GBDT)

④使用径向基函数(RBF)核的支持向量机(SVM)

衡量标准

我们用平均绝对误差(MAE,即​损失)来衡量重建的输入𝒙ˆ与真实输入𝒙之间的偏差:

\ell_{1}(\hat{x}, x)=\frac{1}{m n} \sum_{j=1}^{m} \sum_{i=1}^{n}\left|\hat{x}_{i}^{j}-x_{i}^{j}\right|

其中,𝑚是验证数据集​中的样本数量,𝑛是特征的数量。

此外,我们用成功率(SR)来评估通过攻击2可以成功重建的特征的百分比:

\mathrm{SR}=\frac{\left|\hat{X}_{v a l} \neq \perp\right|}{m n}

其中,​代表在​中成功恢复的特征总数。

基线(baseline)

基线(baseline)被用为对比模型表现参考点的简单模型,帮助模型开发者量化模型在特定问题上的预期表现。

对于使用辅助数据集的特征推理攻击,由于攻击者拥有一个辅助数据集,该数据集与私人输入​的基础分布相同,我们使用基于经验分布的随机猜测基线(称为RG-E),该基线通过随机抽样一个向量𝒙˜ ∼ ​来估计𝒙值。

对于具有数据独立性的特征推理攻击,由于攻击者不知道私人输入的分布,我们使用两个随机猜测基线来估计𝒙的值:均匀分布𝑼(0, 1)(称为RG-U)和高斯分布𝑵(0.5, 0.252)(称为RG-N)。

探究不同查询数量的攻击性能

因为在之前提到的两种攻击中,对手都是以按查询付费的模式向ML平台发送查询。如果需要的查询数量很大,就会导致攻击成本过大,所以需要探究探究不同查询数量的攻击性能。

在我们的设想中,查询数量越多,攻击的成功率就越高,loss值就会越低。

如图所示,实际情况和我们设想的差不多loss值会随着查询数量的增长呈现减少趋势,除了个别数据集例如Credit数据集中出现山谷点的现象。

下图研究的是成功率随不同查询数量的变化:

左边是不同的数据集,分别对应不同黑盒模型,随查询数量从左到右不断增加的成功率变化。

我们可以发现,虽然理论上成功率会随查询数量增加不断提高,但是实际上这种趋势会在查询数量达到一定规模后放缓,例如像Credit数据集中的RF模型。

当然也有像Insurance数据集的GBDT模型,在查询数量很少时就进入了增速缓慢的状态。

探究不同MLaaS平台的攻击性能

我们控制查询数量均为1000,探究不同ML平台的攻击性能,发现在IBM平台和微软平台的攻击性能在不同模型和不同数据集上都是不相上下的,其实原因也很简单,这两个平台使用相同的回归方法计算Shapley值。

Google平台则不同,它使用的是抽样方法计算的Shapley值,所以在大多数数据集和模型上和另外两个平台的攻击性能表现不同。

而且Google平台的攻击成功率在大部分数据集和模型中都比IBM平台和微软平台都要高一些,如下图所示:

探究不同特征重要性的攻击性能

接下来是探究不同特征重要性的攻击性能。

如果一个特征更重要,其值的变化可以对模型输出造成更大的影响,从而对模型解释产生更大的值。

但相应的,它的Shapley值将包含更多的该特征的信息,能够以更大的概率重构。

在实验中,研究人员通过对比相关系数印证了这一点:

探究不同Shapley采样误差下的攻击性能

为了评估论文中所提出的攻击算法的鲁棒性,我们还需要探究不同Shapley采样误差下的攻击性能。

从上图可以看出,随着采样误差的降低,两种攻击所重构出的特征值精度略有提高,这比较容易理解,随机噪声减少意味着Shapley值包含的私有特征信息会增加,这有利于重构特征,然而这种改进幅度并不大,表明所提出的两种攻击即使在较大的采样误差下也具有鲁棒性和高效性。

相关工作

模型的可解释性

在复杂的黑盒模型中,缺乏跟踪数据流的理论技术促进了大量关于模型可解释性的研究,这些研究旨在解释这些模型如何产生预测。模型可解释性度量方法可分为两类:用于计算不同特征的整体重要性的全局可解释性,以及用于估计目标样本中特征重要性的局部可解释性。在本文中,我们主要研究局部方法,它可以进一步分为Shapley基于值的方法和启发式方法。启发式方法旨在线性化目标样本附近的模型决策边界,并使用不同特征的线性权重作为其重要值,例如LIME和基于梯度的方法。尽管启发式方法在计算上是有效的,但很少有理论分析来证明它们的鲁棒性和误差界限。另一方面,Shapley基于值的方法理论上可以为ML解释提供理想的属性,因此被领先的MLaaS平台用于解释表格数据。

机器学习的攻击算法

许多研究揭示了机器学习模型所面临的隐私风险,如隶属度推理、属性推理、模型提取和特征推理。隶属度推断的目的是确定特定样本是否在训练数据集中,属性推断的目的是恢复训练数据集的统计数据。由于这两种类型的攻击都是监督任务,因此需要一个辅助数据集来完成攻击模型的训练。模型提取的目的是根据黑盒模型的预测重建其参数。然而,很少有研究考虑模型可解释性方法的隐私风险。虽然一些最新的研究集中在基于启发式解释性方法产生的局部解释的隶属度推理或神经网络提取上,但它们的设置和任务与我们的完全不同。本文主要研究了基于Shapley值的特征推断攻击,该攻击对实际应用更具有实用性和影响力。据我们所知,这也是第一篇在Shapley价值观中考虑隐私风险的论文。

针对当前攻击的防御机制

由于当前攻击的效率依赖于ML模型的记忆特性,大多数防御机制都侧重于通过噪声注入防止模型记忆敏感数据。例如,使用较低粒度的模型输出可以减少其中包含的私有特征信息,从而降低隶属度推断和模型提取的准确性。神经网络中的dropout和集成学习等正则化方法可以减少模型记忆的训练数据集的信息。差异隐私是目前最流行的防御机制之一,因为它为保护私有模型输入提供了严格的理论保证。然而,这些防御不能应用于提议的攻击,因为我们专注于在预测阶段重构从未被模型看到并因此被模型记住的私人输入。通过减少明文输出和私有数据之间的互信息,提出了一种防御机制,这在精神上与我们的分析相似。但是,在我们的设置中不能直接使用中的方法。首先,在模型训练过程中通过互信息改变学习目标,而模型在Shapley值的计算中被训练和固定。其次,隐私保护中的互信息与主要任务的关系松散,因此可以最小化,而在我们的例子中,最小化Shapley值和特征之间的互信息会损害解释的效用。尽管如此,仍然提供了一些减少拟议攻击的见解。

结论

这篇论文重点研究了Shapley基于价值的模型解释方法所遭受的隐私风险,首先从信息理论的角度分析了私有模型输入与Shapley值之间的关系,并据此提出了两种不同设置下的特征推断攻击,在三个主要的MLaaS平台上进行的大量实验证明了所提出的攻击的有效性和鲁棒性,强调了在未来的研究中开发隐私保护模型可解释性方法的必要性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/13737.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

了解Unity编辑器之组件篇Scripts(六)

Scripts:有Unity提供的一些脚本插件(自己新建的脚本也会出现在里面) 一、TMPro:有一些与文字显示和排版相关的脚本 1.TextContainer(文本容器):TextContainer 是一个内容框,用于定…

AIGC人工智能辅助开发:提升效率、优化代码、实现智能编程

文章目录 1. 什么是AIGC人工智能辅助开发?2. AIGC的优势和应用场景2.1 提升开发效率2.2 优化代码质量2.3 实现智能编程 3. 如何用好AIGC人工智能辅助开发?3.1 选择合适的AIGC工具3.2 理解AIGC的工作原理3.3 逐步应用AIGC辅助开发3.4 主动参与AIGC的学习和…

AI工程师的崛起:填补AI革命中的空白

在一个拥有大约5000名语言学习模型(LLM)研究员,但大约有5000万软件工程师的世界中,供应限制决定了一种新型专业人才—AI工程师的迅猛增长。他们的崛起不仅仅是一种预测,更是对科技世界动态变化的必然反应。AI工程师作为…

【Linux】-进程概念及初始fork

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …

使用Gradio构建生成式AI应用程序; Stability AI推出Stable Diffusion XL 1.0

🦉 AI新闻 🚀 Stability AI推出最先进的AI工具Stable Diffusion XL 1.0 摘要:Stability AI宣布推出Stable Diffusion XL 1.0,该版本是其迄今为止最先进的AI工具。Stable Diffusion XL 1.0提供更鲜艳、更准确的图片生成&#xff…

Python开发之手动实现一维线性插值

Python开发之手动实现一维线性插值 1.线性插值法介绍2.手动实现线性插值3.案例一:手动实现线性插值4.使用pandas的插值方法实现要求(推荐)5.案例二:对一组数据进行线性插值和SG滤波处理 前言:主要介绍手动实现一维线性插值以及pandas里面的in…

flink采用thrift读取tablets一个天坑

原先的配置 [INFO] StarRocksSourceBeReader [open Scan params.mem_limit 8589934592 B] [INFO] StarRocksSourceBeReader [open Scan params.query-timeout-s 600 s] [INFO] StarRocksSourceBeReader [open Scan params.keep-alive-min 100 min] [INFO] StarRocksSourceBeRea…

ORCA优化器浅析——QueryToDXL(CDXLLogical+CDXLScalar)主流程

Orca是Pivotal数据管理产品的新查询优化器,包括GPDB和HAWQ。Orca是一个基于Cascades操作时序框架的现代自上而下的查询优化器。虽然许多Cascades优化器与其主机系统紧密耦合,但Orca的一个独特功能是它能够作为独立的优化器在数据库系统之外运行。这种能力…

51:电机(ULN2003D)

1:介绍 我们51单片机使用的是直流电机 直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极,当电极正接时,电机正转,当电极反接时,电机反转 直流电机主要由永磁体(定子)、线圈(转…

flutter:角标

角标应该非常常见了,以小说app为例,通常会在小说封面的右上角上显示当前未读的章数。 badges 简介 Flutter的badges库是一个用于创建徽章组件的开源库。它提供了简单易用的API,使开发者可以轻松地在Flutter应用程序中添加徽章效果。 官方文…

IDEA 使用 maven 搭建 spring mvc

1. 创建项目 1.1 创建成功之后配置 Spring MVC 1.2 勾选 Spring MVC 2.更改配置文件 2.1 更改web.xml配置 更改为 <servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern></servlet-mapping>2.2 dispat…

linux查看服务器系统版本命令

有时我们需要在linux服务器上安装DB、Middleware等&#xff0c;为了保证兼容性&#xff0c;我们需要知晓被提供的linux服务器版本是否满足需求&#xff0c;下面就说一说linux查看服务器系统版本命令。 1.cat /etc/redhat-release 适用于&#xff1a;rhel/centos等 2.cat /etc…

3ds max 烘培世界坐标到贴图/顶点色

设置Diffuse 为ObjectNormal Normalize(objectNormal) * 0.5 0.5 把Diffuse烘培到顶点色 烘培Diffuse到贴图 模型按UV展开 右键复制 &#xff0c; 到mesh上粘贴 烘培到贴图 UE使用 贴图导入为BC7 float3 n ObjectNormal*2-1; return float3(n.x,n.z,n.y); // x ,z ,y

工业平板电脑优化汽车工厂的生产流程

汽车行业一直是自动化机器人系统的早期应用领域之一。通过使用具有高负载能力和远程作用的大型机械臂&#xff0c;汽车装配工厂可以实现点焊、安装挡风玻璃、安装车轮等工作&#xff0c;而较小的机械手则用于焊接和安装子组件。使用机器人系统不仅提高了生产效率&#xff0c;还…

原生求生记:揭秘UniApp的原生能力限制

文章目录 1. 样式适配问题2. 性能问题3. 原生能力限制4. 插件兼容性问题5. 第三方组件库兼容性问题6. 全局变量污染7. 调试和定位问题8. 版本兼容性问题9. 前端生态限制10. 文档和支持附录&#xff1a;「简历必备」前后端实战项目&#xff08;推荐&#xff1a;⭐️⭐️⭐️⭐️…

【Vue3】递归组件

1. 递归组件mock数据 App.vue <template><div><Tree :data"data"></Tree></div> </template><script setup lang"ts"> import { reactive } from vue; import Tree from ./components/Tree.vue; interface Tr…

路由的配置

1、在router中设置路由导航跳转函数,在index.js文件中写这句话&#xff1a; 1.1 只要发生跳转, 就会调用这个函数&#xff1a; 1.2 导航的声明函数 2、访问系统访问控制系统如何形成 3、来一个导航守卫的案例&#xff1a;看看导航守卫的案例&#xff0c;写一个Main.Vue 和login…

sky-notes-02

11、HttpClient HttpClient作用&#xff1a; 发送HTTP请求接收响应数据 HttpClient的maven坐标&#xff1a; <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</vers…

docker启动容器报错

报错信息 [rootDream soft]# docker run -it -d -p 8080:8080 tomcat eec9fab6b9ca06d2bbf1467aef05d8020ee60448978e10ac20c38888934f0a0b docker: Error response from daemon: driver failed programming external connectivity on endpoint hungry_euclid (163242f0079e72…

关于c++中虚函数和虚函数表的创建时机问题

以这段代码为例。 #include <iostream>using namespace std;class Parent { public:Parent(){}virtual void func1() {};virtual void func2() {}; };class Child :public Parent { public:Child():n(0),Parent(){cout << "Child()" << endl;}vir…