一篇和我idea一模一样的论文,太妙了看一看。
背景知识积累:
安全聚合也是用户无需为全局模型的聚合负责,方便了恶意客户端危害模型。
模型中毒:一个突出FL对恶意参与者的脆弱性的突出例子是模型中毒,这是一种旨在向全局模型[1],[2]注入后门的攻击策略。限制恶意客户机影响的自然方法是将拜占庭容错分布式学习[17],[22]中开发的现有技术重制为FL设置。然而,这些技术已经被证明是不合适的,因为它们主要依赖于训练数据在参与者中均匀分布,这对于大多数FL应用来说是不现实的。其他建议依赖于检查客户端提交的本地更新以检测中毒企图,这使得它们与安全聚合不兼容。这些现有的解决方案要么被自适应攻击[11]绕过,要么忽略了客户端的隐私[14],要么需要对现有的FL算法[20]进行大量的计算修改。
为了利用这一观察结果,我们设计BAFFLE的目的不仅是依赖客户进行培训,而且还依赖客户验证全球模型。BAFFLE使用一组验证客户端,在每个培训轮中刷新,以确定在该轮中派生的(全局)模型更新是否受到中毒注入的影响,在这种情况下丢弃更新。也就是说,客户端在其本地数据上验证全局模型,并通过反馈循环投票决定接受或拒绝该模型。更重要的是,判决完全基于全局模型而不是单个更新来确定,以确保与安全聚合的兼容性。与联邦训练的思想类似,我们的防御背后的核心直觉是利用参与FL过程的众多客户端来改进由单个实体(例如,协调服务器)执行的次优任务。
这种方法与在拜占庭环境中执行分布式协议的一些挑战相同:恶意客户端可能会错误报告他们对模型的评估,将有毒模型声明为“干净”(以避免检测),将干净模型视为“有毒”(DoS攻击)。尽管如此,我们表明,在反馈循环中正确使用客户端判断可以非常强大地检测后门攻击,即使依赖直接的方法来评估分类性能。
这种跨轮分析依赖于一种直觉,即后门模型可能会作为副作用改变模型在一个或几个类上的错误分类分布,除非后门被优化以保持给定验证数据集上的分类性能。
至关重要的是,由于数据在FL的实际应用中不是均匀分布的,自适应攻击者很难预测后门在诚实客户端持有的验证集上的行为,从而绕过防御。
后门攻击:Chen等人[8]的定义
联邦学习中的后门攻击由于其固有的无许可设计,FL特别容易受到中毒攻击:任何边缘设备都可以帮助训练过程,并且没有什么可以阻止恶意客户端呈现中毒更新。这种类型的一个突出的攻击是模型替换[1],[2],其中攻击者用一个有毒的模型“替换”全局模型,并且通过使用有毒数据(x, yt)与x∈x *和正确标记的数据的混合训练局部模型来注入后门。该方法基于多任务学习原则:后门数据在对抗性子任务上训练模型,而真实数据确保在主要任务上的良好性能。即使只有一个恶意客户端在单轮训练(单次攻击)中提交了有毒更新,模型替换也可能是毁灭性的。我们将把这种攻击策略作为评估我们防御的基准。
我们的目标是为FL设计一种防御策略,以检测全球模型是否在给定的一轮中被后门。请注意,在FL中,如果不检查各个更新,就不可能防止恶意客户机提交有毒更新,这就排除了对安全聚合的遵从性。当我们寻求一种不破坏客户数据隐私并与标准FL算法完全兼容的防御时,我们在这里设置了一个较温和的安全目标,并要求成功的后门注入被检测到,以便诚实的参与者可以对投毒企图做出反应。
我们设想我们的防御在以下对抗模式中运作。攻击者控制了许多参与FL进程的客户端,这些客户端可能会任意偏离FL协议(即,它们是拜占庭式的)。
我们假设在每次训练迭代中有诚实的大多数客户端:在n个选择的客户端中,最多可以有nM的恶意客户端,其中nM < n 2。我们在第6节讨论了如何估计nM。在每一轮r中,攻击者可能会协调其客户端实现其通过全球模型后门的目标。
协作模型验证:在FL中,数据本身就是一种资产,可以用来增强安全性。为此,我们让客户使用他们自己的私有验证数据在全局模型中搜索后门。也就是说,我们建议在FL管道中添加一个验证阶段,以便在每次迭代中,随机选择一组统一的客户端,验证在前一轮中获得的全局模型。当客户提供关于全局模型的“反馈”时,我们将此过程称为反馈循环。由于客户数据的多样性,让许多客户验证模型的一个直接效果是隐式地扩大和丰富验证集,从而增加检测错误行为的机会。
然而,让客户端对全局模型进行投票确实带来了一个新的挑战:恶意客户端可以通过宣布一个干净的模型是可疑的来发起拒绝服务攻击,或者通过将一个中毒的模型标记为干净的来增加攻击者的隐蔽性。要应对这一挑战,就必须仔细调整客户的投票权。
反馈循环是FL过程的自然增强,因为它用“联邦验证”阶段补充了联邦训练。现在我们更详细地描述反馈循环。
在各个回合引导信任:反馈循环在训练进行时检查全局模型,在每个训练回合中寻找中毒的迹象。通过FL算法的设计,我们期望全局模型在每一轮中都比之前的模型呈现出精度的增量改进(除了少数初始迭代,当模型改进非常快时)。因此,我们设计了一种验证方法来判断全局模型的预测行为是否“可疑”。我们从最新的全局模型的预测行为中获得相关信息,在一个固定的测试集上,并确定一个基于这种观察的排斥阈值。这个阈值基于先前模型的预测,以经验的方式量化了真实模型的预期“预测缺口”:如果当前模型超过了估计的缺口,则认为它中毒并被丢弃。直观地,我们将早期模型视为“干净”模型行为的参考,并将这些早期模型的信任引导到后续模型,一轮一轮地进行。
放松对早期模型的信任:请注意,在训练的早期阶段,当全局更新从一轮到一轮急剧演变时,模型非常不成熟,早期中毒的影响几乎可以忽略不计,即后门是短暂的,只在一个训练轮[1],[2]内消失。因此,我们不认为在这个早期阶段进行的有毒注射会影响BAFFLE的长期有效性(随着模型的稳定),因为早期注射的后门往往会立即消失。我们在第六节中通过实验验证了这一行为。我们的结果表明,即使只有在全局模型成熟时才启动BAFFLE,即使在BAFFLE开始之前有投毒企图,它也是有效的。
反馈循环规范:在本文的其余部分,对于每一轮,我们将参与培训过程的客户称为“贡献者”,我们将“验证客户”命名为那些评估更新的模型并寻找中毒迹象的客户。具体地说,在每一轮r∈[1 ..R],我们让服务器S选择n个客户端集合,用C 0 1,…, C0 n,用于验证由贡献者提出的更新得到的全局模型Gr。验证客户端负责检查Gr并向服务器报告模型是否表现出可疑行为。
每个客户端c0 i在自己的数据集Di上分别检查全局模型。为了通用性,这里我们假设一个通用验证例程,用VALIDATE表示,它将当前全局模型G、以前接受的模型的历史记录和客户端的验证数据Di作为输入,并返回G的判决Di∈{0,1},表示基于以前的模型是“干净的”还是“有毒的”。我们在第五节中提供了验证函数的一个可能的实例化。在接收到所有客户端判断后,只要有足够多的客户端建议接受,1服务器就接受模型Gr,否则它拒绝全局更新并开始新的一轮“当前”模型Gr+1←Gr−1(即Gr被丢弃)。下面,我们用q∈[1 ..N]服务器为了拒绝模型而请求的否定裁决的最小数量,并将其命名为仲裁阈值。
直观:我们提出了一个直接的验证方法来比较当前模型G的分类性能与最近的,以前接受的模型g0,…, G’(认为是“干净”)。我们的实例化依赖于以类的方式观察模型的预测行为。直观地,我们期望诚实的更新不会显著影响后续轮全局模型的每类错误率。相反,新注入的后门可能会提高一个或几个类的错误率。我们通过实验验证了这一预期,在CIFAR-10上运行FL进行图像分类任务,并比较通过模型替换[1]获得的真实模型和后门模型的每类错误率。
基于这一观察,我们的目标是通过监测最新接受的模型f和更新版本f 0在每个标签y和同一数据集D上的错误率的变化来检测中毒企图。
我们将以源为中心的误差errD(f) y→15,表示为D中属于y类且被f错误分类的样本的比例。同样,以目标为中心的误差errD(f) 15→y是f错误分配给y类的样本的比例。我们定义相应的误差变化如下:
这些变化提供了f和f0之间的某种距离,反映了两个模型的错误预测差距。由于在FL中,全局模型是逐步改进的,我们预计在良性条件下,连续模型f = Gr和f 0 = Gr+1之间的错误预测差距相对接近。相反,一个有毒的模型可以显著地改变错误率的变化。通过比较更新模型的错误率与之前模型的错误率,在一个固定的数据集上,每个标签单独的错误率,当后续轮的错误率与最近观察到的公认模型的错误率显著不同时,我们可以自信地提出警告。
设计细节:为了测量错误率变化之间的距离,我们考虑数组v(f, f0, D) = [v s, v t],其中v s = [v s (f, f0, D, y)]y∈y, v t = [v t (f, f0, D, y)]y∈y,作为z2 | y |中的一个数据点。然后,我们根据其误差变化点与前一个更新之间的相对距离,将每个新更新识别为“可疑的”。为此,我们依赖于局部离群因子(LOF)[6],这是一种检测数据集中离群值的方法,通过检查一个点与其邻居的接近度与邻居自身的接近度的比较。给定一个点x和一些相邻点N = {x1,…, xn}, LOFk(x;N)根据x与其k个最近邻的接近度提供一个离群度;特别是LOFk(x;N) > 1表示x比其他点更不聚集,可能是一个离群值。
通过我们设计的模块化,任何持有标记数据D的实体原则上都可以使用这种策略验证模型G,前提是有足够多的先前接受的模型(如历史中所总结的)。这反映在我们在第VI节中对BAFFLE的评估中,我们考虑了不同的配置,让服务器、客户端以及它们都运行VALIDATE。
算法2考虑FL流程的运行,从服务器初始化的全局模型G0开始。对于r∈[1 ..R],设G = Gr−1表示第R轮开始时共享的全局模型,设G0 = Gr为聚合第R轮客户端贡献而得到的更新模型,设history表示最新接受的’ + 1个模型。为了验证当前模型G0,我们计算误差变化数组vr = v(Gr−1,Gr, D)。直观地,我们旨在从序列G0,…推断v的一般趋势。到目前为止,最近接受的模型的G ‘,监测这一趋势在几轮中如何变化,并根据vr是否符合先前的观察结果对Gr做出决定。
具体来说,我们将vr与v的平均LOF值进行比较,这些值是根据“+ 1个最新接受的模型,在数据集d上”的预测计算出来的,这里是一个回顾参数,确定有多少旧模型影响关于当前模型的决策。直观地说,’应该足够大,以产生一个稳定的参考值的指标,同时它应该足够小,以便“太旧的”模型在决策中不起作用。2我们在第六节中讨论了如何经验地确定’的适当值。总之,当且仅当当前变化vr在LOF意义上与从已接受模型的历史中获得的相应值足够接近时,模型Gr才被接受。也就是说,如果vr被检测到与{v1,…的k个最接近的变化相比,它是一个异常值,我们就宣布vr是可疑的。, v ‘},对于2≤k≤’。在我们的实现中,我们设置k = d ‘ /2e,并使用从最后的b ‘ /4c可信更新中获得的异常值因子的平均值τ作为拒绝阈值。
实现:基于[1]的公开代码,我们实现了一个联邦学习算法来解决上述图像分类任务。我们使用PyTorch框架在Python中实现了所有算法。我们在一台具有Intel i5-9600k CPU的服务器上运行实验,配备了gb Geforce RTX 2070 GPU 8GB和64GB RAM。服务器的操作系统为Ubuntu 18.04 LTS。
攻击策略:我们针对由单个客户端操作的模型替换攻击[1]测试BAFFLE。这并不是要限制攻击者的能力,因为增加提交有毒更新的客户端数量只会影响针对检查单个更新的检测器的攻击隐身性。在CIFAR-10的例子中,我们实例化了[1]中考虑的对抗性子任务之一,使具有条纹背景的“汽车”被分类为“鸟类”。我们修改了模型投毒攻击以操作FEMNIST,导致后门模型将整个类错误地分类为目标类(标签翻转)。我们选择源类,使对手拥有最多的数据,以支持攻击者,并在剩余的类中随机选择目标类,以避免任何偏差。
防御者配置:为了展示反馈循环的有效性,我们考虑了BAFFLE的不同配置,这取决于负责验证模型的实体:仅服务器(BAFFLE- s)、仅客户端(BAFFLE- c)和两者(BAFFLE)。当反馈循环(BAFFLE- c和BAFFLE)就位时,服务器随机统一选择10个验证客户端,并向他们提供当前模型和最后的“+ 1个先前接受的模型”(根据经验选择,如下文所述)。每个客户端在本地运行VALIDATE算法(参考算法2),然后将他们的投票发送到服务器。服务器根据仲裁阈值q决定接受或拒绝新模型,并计算自己对BAFFLE配置的投票。
中毒时间:我们评估了BAFFLE在两种攻击场景下的有效性:(1)全局模型G已经稳定(精度在90%以上,达到10,000次干净的FL后),(2)G尚未接近收敛,且在早期回合启用验证方法。在情况(1)中,我们从一个稳定的模型G开始,在分别在第30轮、第35轮和第40轮注入三个有毒更新之前执行20个后续训练轮(这里,G对应于“第1轮”,但我们假设一个已经稳定的模型)。我们在前20回合后启用防御,以建立一个相当大的回溯窗口。我们在50轮后终止实验。在情形(2)中,我们从零开始运行FL,在500轮初始训练后开始防御。在这些早期阶段,由于全局模型非常不稳定,我们注意到真正的更新可能会导致每类错误率的显著变化,因此,它可能被错误地标记为恶意(假阳性)并被丢弃。因此,在前几轮启用防御可能会导致全局模型收敛的延迟。因此,我们考虑最初的800轮训练,让攻击者在启用防御之前,分别在第100轮和第300轮注入两次恶意更新,随后每15轮注入10次,从第530轮开始。我们故意在对手操作几次注入后激活防御,以分析BAFFLE的行为,以防早期模型值得信任的假设被违背。在这两种情况下,我们通过对5次重复实验的结果进行平均来衡量BAFFLE的检测精度。
我们现在报告我们的实验结果,以评估BAFFLE在各种配置下的假阴性(FN)和假阳性(FP)率的有效性。
回头窗口大小(‘)的选择:表I显示了回头窗口大小’对FP和FN速率的影响。
我们研究了我们对变量’和默认值q = 5的建议的有效性。对于CIFAR-10,所有使用反馈环(BAFFLE- c和BAFFLE)的配置都能产生良好的检测率,即’ = 10,20时,在0.0和0.1之间的低FN率,与数据分割无关。
在90-10%分割的情况下,BAFFLE-C配置在’ = 30时产生了最差的FN率0.6。增加回溯窗口”似乎总是会减少检测到有毒模型的数量(从而降低FP并增加FN)。这可能是由于一个社区有太多的小异常值,因此减少了新更新的异常值因素。在假阳性方面,反馈环(BAFFLE- c和BAFFLE)明显优于仅服务器配置(BAFFLE- s),对于’ = 10,20和’ = 30 ‘,FP率分别在0.0-0.043和0.11-0.19之间,以及0.0-0.032和0.021-0.193之间。“变化”似乎对FEMNIST有更重要的影响。实际上,对于’ = 10,没有一种配置能够检测到投毒企图,在所有情况下产生的FN率为1.0。这一现象表明回望窗口太小。有趣的是,当回望窗口增加到’ = 20,30时,所有配置都显示出了很大的改进,在大多数情况下实现了0的FN速率,在所有情况下最多为0.1。说到假阳性,我们再次观察到,对于’ = 10,没有一个(真正的)模型被标记为阳性,因为在所有情况下FP率都为0。至于CIFAR-10,我们再次观察到反馈循环的性能优于仅服务器配置,FP率为0 (BAFFLE- c和BAFFLE),而0.01-0.22 (BAFFLE- s)。
仲裁阈值(q)的选择:图3中的图显示了仲裁阈值q如何影响我们防御的检测精度,对于反馈环配置BAFFLE- c和BAFFLE,在客户端和服务器之间的不同数据分割下,以及仅服务器配置的检测精度,它是不变的,因为它不依赖于q。在CIFAR-10的情况下(图3a-3c),改变q显著影响反馈环的检测精度。正如预期的那样,降低q可以提高FN速率,当q≤7时,BAFFLE- c和BAFFLE的FN速率急剧接近0,但当q进一步降低时,FP速率略有增加。我们观察到,当q≤5时,BAFFLE的FP率略高于BAFFLE- c,但当q > 6时,它优于BAFFLEC。总的来说,选择5≤q≤7似乎是一个安全的选择,因为它具有较高的检测精度和几乎相等的错误率。我们还注意到,对于这样的q选择,两种反馈环配置都优于仅服务器配置,FP率接近0,而BAFFLE-S约为0.2。此行为对于所有三个数据分割都是可见的。对于FEMNIST(图3d-3f),改变quorum阈值似乎不会影响BAFFLE- c和BAFFLE的检测精度:无论数据分割与否,只要值3≤q≤9,FN和FP率均为0。这种行为实际上并不奇怪,因为在这种情况下,所有客户机都检测到攻击。
在早期回合启用检测:我们现在分析BAFFLE在模型尚未稳定以及存在早期中毒的情况下的有效性:前几轮是无毒的,让对手在第100轮和第300轮注入有毒更新(这些注入无法被检测到,因为防御未启用)。我们进一步让攻击者在530轮和680轮之间注入12个恶意更新。中毒对模型主要任务和后门精度的影响如图4所示。
在CIFAR-10(图4a-4b)中,我们注意到在早期轮(100轮和300轮)注入的后门是不耐用的,因为后门精度在一轮内急剧下降。这种行为可以通过模型如此不成熟而迅速“忘记”后门来证明,并且与之前的研究[1],[2]是一致的。因此,从长远来看,这些早期注入不会影响模型的性能。在FEMNIST(图4c-4b)中,我们观察到类似的行为,尽管由于模型的收敛速度较慢,不太明显。
我们注意到BAFFLE成功检测了530轮之后几乎所有的投毒企图;只有一次注射未被检测到(在FEMNIST的情况下)。事实上,我们的检测方法会保守地将新贡献标记为可疑的,只要它们在每个类的错误率中引起更高的变化,这就是我们用来检测模型中毒的方法。
自适应攻击:我们现在分析了我们的提议在阻止一个知道检测方法并知道系统全局参数’和q的自适应对手方面的有效性。我们重点关注CIFAR-10的语义后门攻击。为了绕过基于每类错误分类分析的验证方法,攻击者精心设计其更新,使其数据集中只有后门样本被错误分类。我们认为,即使这样的自适应策略也很难在FL中安装:虽然攻击者可以确保其所有干净的数据都被后门模型正确分类,但它不能控制模型对客户端数据的行为。
由于客户端的本地数据集是私有的,并且通常彼此之间非常不同,因此攻击者很难调整其策略,使模型在攻击者不知道的数据上以受控的方式行为。我们的研究结果汇总在表II中。
在接下来的内容中,我们将保持在排斥阈值以下的有毒注射(在对手的观点中)称为适应性注射。我们的研究结果表明,BAFFLE检测到95%到100%的自适应注入,证实了我们的预期。实际上,在FL中,对手不太可能访问代表所有客户数据的数据集。具体来说,在CIFAR-10和所有数据分割中,BAFFLE产生0假阴性,而仅服务器配置(BAFFLE- s)在9010%和99-1%的数据分割中产生33.3%的FN率。在图5中,我们进一步评估不同的验证客户端如何感知上述自适应注入。我们的研究结果表明,大多数这些注射是由5个或更多的验证客户检测到的。换句话说,在最坏情况下,最多有5个客户提供了对模型的错误评估,即ρ = 0.5(参见第IV-B节)。
对于这个ρ值,我们可以估计我们可以容忍的恶意客户端数量的阈值如下:(1−ρ)(n−nM) > nM,其结果为nM <(1−ρ)·n/(2−ρ)。
例如,如果ρ = 0.4和ρ = 0.5,则nM分别< 3.75和3.33。
D.通信开销我们基于反馈的防御需要一个客户端子集来验证每一轮训练的每个更新Gr。当与基于循环的误分类分析相结合时,它需要验证客户端具有最新的’ + 1个接受模型的历史,以得出适当的拒绝阈值(参见算法1中的第7行和算法1中的第14行)
为了节省额外的一轮通信,我们设置贡献客户端与验证客户端一致,因为在这种情况下,关于全局模型的裁决可以与本地更新一起直接通信。即,在第r轮中,每个选定的客户端Ci从验证模型G = Gr−1开始:如果模型通过验证,Ci继续训练G以获得本地更新Li,否则它拒绝更新。除了节省客户机和服务器之间的一轮交互之外,这种方法的优点是允许客户机在每一轮开始时立即开始本地培训,而不是等待其他客户机的裁决。在我们的实现中,服务器仍然需要向每个验证客户端发送历史记录,这导致在这一轮中选择的每个客户端约200MB的通信开销(每个模型约为10MB,我们设置’ = 20)。
然而,我们注意到,通过使用模型压缩技术[7],这个开销可以很容易地减少10倍,即每个选定的客户端大约减少到20MB。
观察到,在每一轮中,客户端以1 - 10的概率被选择,因此每个客户端平均每20轮被选择参与并下载大约两次20MB的压缩数据(总共40MB)。还要注意,如果一个客户端在随后的20轮中被选中两次,它不需要下载整个历史,因为与第一次被选中的历史的差异就足够了(即,每20轮40MB是一个相当保守的估计)。