Federated-Learning-with-Differential-Privacy
PyTorch实现的隐私保护联邦学习框架,将差分隐私(DP-SGD)与FedAvg算法结合,通过Ré
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
PyTorch实现的隐私保护联邦学习框架,将差分隐私(DP-SGD)与FedAvg算法结合,通过Ré
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象这样一个场景:一家医院想要训练一个能辅助诊断的 AI 模型,训练数据来自全国数百家医院的不同患者数据。这些数据极其敏感——病历、影像、基因信息——任何泄露都会造成灾难性后果。但如果不汇集这些数据,各家医院的本地数据量又不足以训练出高精度的模型。
这就是联邦学习(Federated Learning)诞生的核心动机。联邦学习最早由 Google 在 2016 年提出,其核心思想是:"数据不动,模型动"——各参与方在本地用自己的数据训练模型,仅将模型参数(或梯度)上传至中央服务器,由服务器聚合各方参数更新全局模型。这样原始数据永远不会离开本地,隐私风险大幅降低。
然而,研究很快发现,仅靠"数据不动"并不能完全保证隐私安全。攻击者可以通过分析模型参数的更新幅度,倒推训练数据的某些统计特征——这便是著名的模型逆向攻击(Model Inversion Attack)和成员推断攻击(Membership Inference Attack)。为彻底堵住这一漏洞,差分隐私(Differential Privacy,DP)被引入了联邦学习框架。
本项目的作者 Yangfan-Jiang 正是基于这一背景,实现了一套完整的 DP-Federated Learning 框架,核心算法基于 McMahan 等人 2017 年发表于 AISTATS 的经典论文《Communication-Efficient Learning of Deep Networks from Decentralized Data》(FedAvg 算法),并引入了 Abadi 等人在 CCS 2016 提出的 DP-SGD(DP-Stochastic Gradient Descent) 机制,通过向模型参数注入校准过的高斯噪声,彻底阻断任何个体数据的泄露。
联邦学习的核心挑战在于:不同客户端的数据分布可能差异巨大(Non-IID)。例如,参与医院 A 的患者可能以心血管疾病为主,而医院 B 以肿瘤病例为主。如果直接对各方梯度做简单平均,模型很可能在各方都表现平庸。
FedAvg 的解决思路是:让每个客户端在本地多轮迭代(SGD steps),而非只做一轮本地更新后再聚合。这样做有两个好处:一是减少通信轮数(因为本地已有显著训练进展),二是让本地模型有更多机会适应各自的本地数据分布。具体到本项目代码中,FLModel.py 的 FLServer 和 FLClient 类完整实现了这一逻辑:客户端接收全局模型参数后,在本地数据上执行 E 轮迭代,再将更新后的模型参数返回服务器,由服务器通过加权平均聚合得到新的全局模型。
差分隐私的核心思想可以用一个生活化的比喻来理解:想象你在一个餐厅用餐,服务员问你要不要加蒜。如果你回答"加",但无论你选什么,账单上的金额都几乎一样(差别仅在几分钱以内),那么旁观者就无法从账单推断出你是否真的点了蒜——你的选择被"隐私保护"了。
DP 的数学定义是:对于相邻数据集 D 和 D'(相差一条记录),一个随机化机制 M 的输出分布满足:
P[M(D) ∈ S] ≤ e^ε · P[M(D') ∈ S] + δ
其中 ε 控制隐私损失的放大程度,δ 是允许的失败概率。在 DP-SGD 中,这个"噪声"被加在梯度上,使得即使某个数据点被包含或移除,最终模型参数的分布也几乎相同,从而保护了每个数据贡献者的隐私。
本项目采用了 Rényi Differential Privacy(RDP) 作为隐私会计机制,相比经典的 DP,RDP 提供了更紧(tighter)的隐私界,能够更准确地估算实际隐私消耗,从而允许在相同的隐私预算下做更多轮训练。具体实现位于 rdp_analysis.py,其中 compute_rdp 函数计算采样高斯机制的 RDP 值,calibrating_sampled_gaussian 则通过二分搜索,根据目标 ε、δ 和采样率 q 自动校准所需的高斯噪声标准差 σ。
本项目在 utils.py 中实现了 MNIST 数据集的 Non-IID 划分。每个客户端并非随机均匀地获取数据,而是被分配若干数据分片(shards),每个分片包含某一类别的连续样本。这样模拟了真实世界中的数据异构场景:各客户端只能看到部分类别的数据(如不同医院专攻不同专科)。实验证明,在 Non-IID 数据下,FedAvg + DP 的组合仍能保持较好的收敛性和可用性。
项目采用纯 Python + PyTorch 实现,总代码量约 500 行(不含注释和 Jupyter Notebook),结构清晰,模块职责明确:
| 文件 | 职责 | 关键类/函数 |
|---|---|---|
FLModel.py | 联邦学习核心逻辑 | FLClient、FLServer |
MLModel.py | 神经网络模型定义 | MNIST_CNN、ScatterLinear |
rdp_analysis.py | 差分隐私账本 | compute_rdp、calibrating_sampled_gaussian |
utils.py | 数据处理与噪声工具 | mnist_noniid、gaussian_noise |
test_cnn.ipynb | CNN 实验 | Jupyter Notebook |
test_scatter_linear.ipynb | ScatterNet 实验 | Jupyter Notebook |
FLClient 是联邦学习的客户端核心,初始化时接收模型结构、数据、LR 等参数。在本地更新阶段(update 方法),使用 CrossEntropyLoss 计算梯度,关键步骤是对梯度进行裁剪(clipping),即将梯度的 L2 范数限制在阈值 clip 以内,这是 DP-SGD 的标准操作——只有被裁剪后的梯度才会加上高斯噪声,未裁剪的梯度不满足差分隐私保证。
FLServer 负责聚合各方更新的模型参数,通常采用加权平均:权重与各客户端的本地数据量成正比。服务器端还需要根据总训练轮数(E × tot_T)调用 calibrating_sampled_gaussian 校准噪声标准差,这是保证整体隐私预算不超支的关键。
MLModel.py 定义了两个模型架构:
MNIST_CNN:端到端卷积神经网络,包含两个卷积层(Conv→Tanh→MaxPool)和一个全连接层。与标准 MNIST CNN 不同的是,这里使用了 Tanh 激活函数而非 ReLU,这一设计借鉴了 Papernot 等人(AAAI 2021)的研究——Tempered Sigmoid 激活函数家族(Tanh 属于该家族)在差分隐私训练中表现更好,因为它们的输出有界且梯度特性更稳定,不像 ReLU 在负半轴梯度为零那样可能导致训练不稳定。
ScatterLinear:ScatterNet 特征提取器 + 线性分类头的组合。Scattering2D 是由 Mallat 开创的小波散射网络(通过固定的小波变换和模运算符生成平移不变的特征表示),它本身无需训练(参数固定),只需在其后接一个线性层即可分类。这一设计借鉴自 Tramer & Boneh(ICLR 2021)的研究,表明高质量的手工特征(如散射变换)比可学习特征在 DP 训练中更有优势——因为散射特征天然具有某种不变性,降低了 DP 噪声的干扰。
差分隐私的 ε 可以理解为一个隐私预算账户:每做一轮训练(一个复合操作),都会"消费"一定的隐私预算。如果 ε=4.0,δ=1e-5,对于 10 轮通信、每轮 500 个本地迭代(E=500)、采样率 q=0.01 的配置,根据 Rényi-DP 分析,总隐私消耗约为 ε_total ≈ 4.0。这意味着在整个训练过程中,任意相邻数据集产生的模型输出分布差异不超过 e^4 ≈ 55 倍——虽然看起来"放大"了 55 倍,但攻击者仍无法有效区分数据集中是否包含特定个体。
从代码中的 fl_param 参数配置来看:
clip = 0.2(梯度裁剪阈值):越小隐私越强但可用梯度信息越少q = 0.01(Poisson 采样率):通常设为 0.01~0.1eps = 4.0(隐私预算):ε 越大隐私越弱但模型精度越高实践中,ε 在 2~8 之间是一个常见的折中区间——既提供足够的隐私保证(通常认为 ε<10 是可接受的),又不至于因噪声过大而完全破坏模型可用性。
虽然 mnist_noniid 函数尝试模拟 Non-IID 场景,但它仅将 MNIST 按标签排序后分配数据分片——这是一种相对简单的 Non-IID 划分方式。真实的联邦学习场景下,数据异构性可能体现在分布偏移(distribution shift)、特征偏移(feature skew)甚至标签偏移(label skew)等多种维度。此外,本项目没有实现 FedProx 或 SCAFFOLD 等更高级的 Non-IID 联邦优化算法,这在高度异构数据下可能导致收敛困难。
Rényi-DP 虽然提供了更紧的隐私界,但它是经典 (ε,δ)-DP 的上界估计——即 Rényi-DP 满足的隐私保证并不完全等价于经典 DP 的语义。在对隐私保证有严格法规要求(如 GDPR)的场景下,仅依赖 Rényi-DP 分析可能不足以满足合规要求,需要额外的安全审计。
项目完全面向研究用途,无 Docker 支持、无 Web 界面、无 API 接口。如果要在真实多机构场景中部署,需要额外开发安全通信层(TLS)、模型版本管理、客户端认证与授权等模块,工程量不小。
联邦学习 + 差分隐私的组合正在成为医疗、金融、政务等领域数据合规使用的主流技术路径。在中国,随着《个人信息保护法》和《数据安全法》的实施,跨机构数据协作的合规需求急剧增长——这类技术提供了"数据可用不可见"的技术解法,在保护隐私的前提下实现模型性能的提升。
从 GitHub 的数据来看(322 stars),本项目属于学术研究代码中的较高关注度,说明社区对 DP-FL 的具体实现细节(特别是 Rényi-DP 账本机制和梯度裁剪策略)有强烈的学习和复现需求。类似的实现还有 Google 的 TensorFlow Privacy 库、Facebook 的 Opacus 等,但本项目的优势在于代码简洁、模块清晰,适合作为学习 DP-FL 基础原理的教学参考。
未来,DP-FL 的发展趋势将集中在三个方面:一是更紧的隐私界(如基于 f-Divergence 的分析方法);二是通信效率优化(如梯度压缩、稀疏化);三是拜占庭容错(防止恶意客户端投毒攻击)。