【论文阅读笔记】Lockdown: Backdoor Defense for Federated Learning with Isolated Subspace Training

个人阅读笔记,如有错误欢迎指出!

会议:NeurIPS 2024 2376f25ef1725a9e3516ee3c86a59f46-Paper-Conference.pdf

问题:

        现有针对FL后门防御的剪枝方法存在毒耦合效应,降低防御性能

        现有防御通常在训练和推理阶段需要额外的计算(e.g. 随机平滑 对抗训练)

        FL设置下的无数据剪枝,发现FL后门的中毒参数倾向于与良性参数统计耦合

创新:

        提出子空间训练来减轻毒耦合的影响。下图为子空间训练示意图,通过子空间训练将良性模型与恶意模型隔离。每个客户端仅在模型参数的隔离子空间上进行训练,避免恶意客户端污染全局参数。通过限制训练范围,减少了后门参数的扩散(毒耦合效应)。

        结合剪枝(移除不重要参数)和恢复(引入重要参数)机制,动态调整子空间。利用梯度信息指导参数恢复,提升子空间对本地数据的适配性。

        通过统计多数客户端的子空间使用情况,识别并清除恶意参数。基于“良性参数会被多数客户端共享,而恶意参数仅出现在少数子空间”的假设,有效隔离后门。

威胁模型

        考虑三种形式:弱 中等 强,每种形式均允许多对手同时存在。弱后门仅能操控本地数据,中、强后门能操控本地训练过程,强后门能获得良性模型的信息(聚合结果)

后门目标(M为全部客户端集N为恶意客户端集)

方法:

流程

        初始化:采用ERK算法为每个客户端随机生成稀疏子空间。

  • ERK(Erdős–Rényi Kernel)是一种稀疏分配方法,根据模型的层结构动态分配稀疏度。具体来说:
  • 卷积层:稀疏度与输入/输出通道数和卷积核大小成反比,即参数多的层稀疏度更高(保留更少参数)。
  • 全连接层:稀疏度与输入/输出神经元数量相关,同样参数多的层更稀疏。

        本地训练:客户端在隔离子空间内更新参数,避免全局污染。

        子空间调整:通过剪枝(移除低权重参数)和恢复(引入高梯度参数)动态优化子空间。

        参数聚合:服务器聚合各客户端的子空间更新,生成全局模型。

        共识融合:根据多数客户端的子空间覆盖情况,剪除低频参数,消除后门。

子空间初始化

        对每个客户端(用二进制变量m_{i,0})的初始子空间强制稀疏度为s。为了保持稀疏性的实际性能,使用ERK进行随机子空间初始化,其中对应子空间中的不同层被指定为不同的稀疏性。

        对于每个客户端强制其具有相同的初始子空间。(在某些情况下异构掩码初始化能增强防御效果)

隔离训练:客户端仅训练模型的部分参数(隔离子空间),二维掩码m_{i,t}应用于每个本地步骤的梯度,将训练隔离到第i个客户端自己的子空间中

动态子空间搜索:结合剪枝和恢复机制,动态调整子空间,以优化参数选择并隔离恶意参数。

        子空间剪枝:删除客户端当前子空间中不重要的参数(经过k轮本地训练后每层最小的参数)。同时更新maskm_{i,t+1}​,argbottomK返回每层绝对权重最小的坐标\alpha_t​,并将其掩码为1表示将被修剪。使用余弦退火来剪枝

        子空间覆盖:覆盖被剪枝的参数。为了确定恢复哪些参数,使用客户端数据提取梯度w,r,t,然后对参数进行覆盖并更新mask为m_{i,t+\frac{1}{2}}。(直觉是,对于局部数据上的重要参数,其梯度幅度应该大于不重要的参数,而不重要的参数应该 包含在新的子空间中。)ArgTopKαt−1(w)返回绝对梯度 最大坐标的αt−1百分比,并将其掩码为1,表示将被恢复。

聚合:完成子空间训练后,客户端将本地子空间的梯度更新上传到服务器进行聚合。根据它们的坐标贡献对梯度更新进行平均

共识融合(CF):通过统计多数客户端子空间使用情况,识别并清除不常被良性客户端使用的参数,从而消除后门。形式上,共融合运算符返回一个满足以下条件的向量。所有子空间中小于θ的参数被稀疏化为0。这样,有毒的参数就会大部分被消除从而达到干扰后门的目的。

实验(40个客户端,随机选4个作为恶意客户端,中毒率50%):

后门模型

        弱:badnet,dba,sinusoidal

        中:scaling,fixmask

        强:neurotoxin,自适应攻击

在iid与noniid设置下与sota的对比

投毒率的影响(在noniid设置下且投毒率较高的情况下,lockdown优势较大。这种现象是因为当恶意客户端数据集中注入了大量的后门样本时,恶意客户端的子空间与良性客户端的偏差会更大。因此,恶意子空间与良性子空间重叠较少,导致更好的隔离,也有利于共识融合过程。)

中毒率50%,恶意客户端比例对结果的影响

noniid程度的影响

对弱、中、强三种后门攻击形式下的防御效果

通信和模型复杂性(实现了更小的通信开销,减少了推理模型的参数量,不会严重干扰模型正常功能)

不同数据集上的表现

总结分析:

        在资源受限的环境中友好

        子空间虽然由客户端自行决定,恶意客户端可以上传恶意的子空间参数,但其攻击成功的概率不大。因为1.每个客户端在训练过程中基于自身数据分布和任务目标动态调整子空间且只使用全局模型更新子空间的参数,导致少量的恶意客户端难以覆盖所有良性子空间的范围。2.恶意子空间缺乏良性客户端的共识支持,难以在全局模型中存活。3.动态剪枝与恢复机制迫使恶意客户端在本地优化中暴露其攻击意图,进而被服务器端过滤。

        Lockdown在Non-IID数据分布下表现较好(因客户端任务差异大),但在接近IID的场景中,客户端子空间可能趋同,导致恶意参数更易隐藏在共识中。

### Maven 的详细安装与配置教程 #### 一、Maven 简介 Maven 是一种强大的 Java 项目管理工具,主要用于构建和管理复杂的软件项目。它通过定义项目的结构和依赖关系来简化开发流程,并提供了一套标准化的方法用于编译、测试、打和部署应用程序[^2]。 --- #### 二、Maven 下载与安装 1. **下载 Maven** 访问 Apache Maven 官方网站 (https://maven.apache.org/) 并下载最新版本的 Maven 压缩。通常可以选择 `.zip` 或 `.tar.gz` 文件格式[^1]。 2. **解压文件** 将下载好的压缩解压到目标目录,例如 `C:\Program Files\Apache\Maven` 或其他自定义路径。 3. **设置环境变量** - 打开系统的“环境变量”设置窗口。 - 新建或编辑系统变量 `MAVEN_HOME`,将其值设为 Maven 解压后的根目录(如 `C:\Program Files\Apache\Maven`)。 - 编辑 `Path` 变量,在其中追加 `%MAVEN_HOME%\bin`,以便能够在命令行中全局调用 Maven 工具。 4. **验证安装** 打开命令提示符 (`cmd`) 输入以下命令以确认 Maven 是否成功安装: ```bash mvn -v ``` 如果显示 Maven 版本号及相关 JDK 信息,则表示安装完成。 --- #### 三、Maven 配置 1. **修改 settings.xml 文件** 在 Maven 安装目录下的 `\conf` 文件夹中找到 `settings.xml` 文件。此文件可以用来配置本地仓库位置、镜像源以及其他高选项。 - 设置本地仓库路径: 修改 `<localRepository>` 节点的内容,指定一个适合存储 jar 的位置。例如: ```xml <localRepository>C:\Users\<YourUsername>\.m2\repository</localRepository> ``` - 添加阿里云镜像加速: 在国内访问中央仓库可能较慢,因此推荐使用阿里云镜像作为替代方案。在 `mirrors` 节点下添加如下内容: ```xml <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> ``` 2. **调整内存参数** 如果运行大型项目时遇到性能问题,可以在 `mvn.bat` 文件中增加 JVM 参数优化启动速度。例如: ```bat set MAVEN_OPTS=-Xms512m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=512m ``` --- #### 四、IDEA 中配置 Maven 环境 1. **打开 IDE Settings** 启动 IntelliJ IDEA,进入 `File -> Settings -> Build, Execution, Deployment -> Build Tools -> Maven` 页面。 2. **指定 Maven 主目录** 在 “Maven home directory” 字段中选择已安装的 Maven 路径或者让 IDEA 自动检测默认安装位置。 3. **同步本地仓库地址** 确认 `User settings file` 和 `Local repository` 的指向无误,建议保持一致并与之前配置的 `settings.xml` 对应。 4. **创建 Maven 项目** 使用模板新建一个 Maven Project,勾选所需的 SDK 和 Archetype 类型即可快速搭建基础框架。 --- ```python # 示例 Python 代码片段展示如何读取配置文件中的特定字段 import xml.etree.ElementTree as ET def parse_maven_settings(file_path): tree = ET.parse(file_path) root = tree.getroot() local_repo = None mirrors = [] for child in root: if 'localRepository' in child.tag: local_repo = child.text elif 'mirrors' in child.tag: mirror_list = child.findall('mirror') for mirror in mirror_list: id_ = mirror.find('id').text name = mirror.find('name').text url = mirror.find('url').text mirrors.append({ 'ID': id_, 'Name': name, 'URL': url }) return { 'Local Repository Path': local_repo, 'Mirrors Configured': mirrors } result = parse_maven_settings('./path/to/settings.xml') print(result) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值