Shuffle Differential Privacy(1)

本文探讨了ShuffleDifferentialPrivacy(SDP),一种在本地化差分隐私(LDP)基础上改进的框架,通过Encode、Shuffle和Analyze步骤提高数据可用性。SDP通过混淆机制降低隐私预算需求,与LDP相比,减小了数据误差。文章还介绍了SDP的理论基础、隐私放大理论以及与加密差分隐私的比较,最后提到了与联邦学习的关联。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Shuffle Differential Privacy(1)

一、背景

当前主流本地化差分隐私技术(LDP):

  1. 隐私定义:保证了任意一条数据的增、删、改都对用户发布数据的统计分布几乎无影响,可从根本上防御背景知识攻击;
  2. 适用场景:扰动过程在每个用户端本地进行,只对外发布扰动数据以保护隐私,无需依赖任何可信第三方。

关键缺点:

在本地端添加过多噪声,使数据可用性较差。

Google-RAPPOR:

LDP分析的效用受到严格的限制。由于每个报告者都进行独立的抛硬币操作,因此任何分析结果都会受到二项式分布特性引起的噪声的干扰。这种随机高斯噪声的幅度可能特别大:即使在理论最优的情况下,其标准差也会与报告计数的平方根成比例增长,并且噪声实际上要高出一个数量级。

二、ESA框架

Encode-Shuffle-Analyze Architechture 由Google提出[2]

在这里插入图片描述

  1. Encode 编码器:对数据进行编码以控制范围、粒度和随机性(运行在客户端,对用户数据进行本地化的编码、分割、扰动等处理)

    具体实现:可通过数据泛化、数据分割、加密、添加差分隐私噪声的方式实现,以达到消除或减少数据所蕴含的隐私信息的目的

  2. Shuffle 混洗器:编码数据按照随机阈值分批收集,并进行盲洗牌(blindly shuffled),以破坏可链接性并确保单个数据项“lost in the crowd” (运行在一个半诚信的第三方,它可借助现有的按混洗协议在对数据义务所知的情况下完成安全的混洗操作)

    具体实现:可根据模型部署的条件借助已有的安全混洗协议,基于可信硬件、同态加密或安全多方计算等方式完成(安全混洗协议的不同实现并不会对该框架下隐私保护方法的隐私性和可用性造成明显影响)

  3. Analyze 分析器:匿名、打乱的数据由特定的分析引擎进行分析,进一步防止对分析结果的统计推断攻击 (运行在数据收集者端,对收集的数据进行校正和分析)

ESA的隐私分析: A c > A e ≥ A s A_c>A_e\geq A_s Ac>AeAs

借用DP来实现ESA框架可以获得比本地化差分隐私LDP小 O n O\sqrt n On 倍的数据误差

例:对数据收集者而言发布数据都满足隐私损失 ϵ = 0.5 \epsilon=0.5 ϵ=0.5 的差分隐私

使用LDP方法时需要在本地进行隐私预算为 ϵ = 0.5 \epsilon=0.5 ϵ=0.5 的数据扰动,扰动后数据24.49%为真实值

使用ESA框架时,混淆器的隐私放大作用使得用户仅需在本地进行隐私预算为 ϵ = 10.5 \epsilon=10.5 ϵ=10.5的数据扰动,其扰动后的数据99.84%为真实值

说明ESA框架尽可能保留了原始的真实数据,从而在相同隐私保障的情况下提高了数据的可用性

在这里插入图片描述

三、混淆差分隐私(SDP,Shuffle Differential Privacy)

SDP是ESA框架下主流隐私保护方法(即ESA框架与差分隐私的结合),其摒弃了CDP下对可信第三方的依赖,提高隐私性;弥补了LDP下可用性低的问题,消除了与CDP相比 O n O\sqrt n On 倍的数据误差.

目前研究主要集中在两个方面:

  1. 对其隐私增强效果的理论证明,即隐私放大(Privacy Amplification)理论;
  2. 基于该模型提出不同统计估计方法。

SDP与CDP、LDP相比:

可信第三方依赖程度:本地化差分隐私<混洗差分隐私<中心化差分隐私

结果可用性:中心化差分隐私>混洗差分隐私>本地化差分隐私

SDP与基于加密的差分隐私相比:

基于加密的差分隐私也可在无可信第三方的支持下实现与CDP相似的可用性,但其借助同态加密完成计算,会产生较高的计算代价和通信代价,且其需要针对每一个查询特别设计隐私协议。混淆差分隐私可通过简单的更改部署在现有的、广泛应用的LDP框架上,具有较强的适应性。

在这里插入图片描述

综上:SDP在隐私性、可用性和易用性上有突出优势。

Shuffle Differential Privacy(SDP)定义:

在这里插入图片描述

SDP假设参与计算的用户都是可信的。但当存在用户不可行、掉线或者与分析器共谋时,会极大影响混淆效果,即影响差分隐私保护效果。

基于此问题,具有鲁棒性的SDP被提出(这里鲁棒性是对隐私性的保证,而非算法可用性):

Robust Shuffle Differential Privacy (RSDP)定义:

在这里插入图片描述

其中 γ \gamma γ表示可信用户的比例

RSDP保证了在至少有 γ \gamma γ比例的用户正确遵循协议的情况下,SDP隐私协议P满足 ( ϵ , δ ) − D P (\epsilon,\delta)-DP (ϵ,δ)DP .

四、隐私放大理论

假设用户在本地端通过随机编码器R扰动后的数据满足: ϵ 1 − L D P \epsilon_1-LDP ϵ1LDP

经过混洗后,分析器所获取的数据满足: ϵ c − D P \epsilon_c-DP ϵcDP

ϵ 1 \epsilon_1 ϵ1 ϵ c \epsilon_c ϵc的转变可通过隐私放大理论获取,其中 ϵ 1 > ϵ c \epsilon_1>\epsilon_c ϵ1>ϵc,即经过混洗后隐私性提高

  1. 通用隐私放大定理

    交互式/非交互式SDP

    在这里插入图片描述

    假设有n个用户,每个用户持有一条记录 x i x_i xi,且在本地运行随机化编码协议 R R R

    1. 通用交互机制的隐私放大定理:

      对于任意 n > 1000 , δ ∈ ( 0 , 0.01 ) n>1000,\delta\in(0,0.01) n>1000,δ(0,0.01),如果协议R满足 ϵ 1 − L D P \epsilon_1-LDP ϵ1LDP,且 ϵ 1 ∈ ( 0 , 0.5 ) \epsilon_1\in(0,0.5) ϵ1(0,0.5),则协议 S ∘ R n S\circ R^n SRn对应混洗后的n个输出满足 ( ϵ c , δ ) − D P (\epsilon_c,\delta)-DP (ϵc

### DP-FedAvg 实现 在联邦学习框架下,DP-FedAvg 结合了差分隐私 (Differential Privacy, DP) 和联邦平均 (Federated Averaging, FedAvg),以保护参与方的数据隐私。具体来说,在每个客户端执行 SGD 训练过程中加入高斯噪声来满足差分隐私的要求。 下面是一个简化版的 Python 代码片段展示如何实现带有差分隐私机制的联邦平均算法: ```python import numpy as np from torch.utils.data import DataLoader from torchvision.datasets import MNIST from torchvision.transforms import ToTensor import torch.nn.functional as F from collections import OrderedDict class SimpleCNN(torch.nn.Module): def __init__(self): super(SimpleCNN, self).__init__() # 定义网络结构... def train(model, device, dataset, epochs=5, batch_size=64, noise_multiplier=0.1, clipping_norm=1.0): model.train() loader = DataLoader(dataset, batch_size=batch_size, shuffle=True) optimizer = torch.optim.SGD(model.parameters(), lr=0.01) for epoch in range(epochs): for data, target in loader: data, target = data.to(device), target.to(device) output = model(data) loss = F.cross_entropy(output, target) grad_list = [] params = list((p for p in model.parameters() if p.requires_grad)) grads = torch.autograd.grad(loss, params, create_graph=True) total_norm = 0. for g in grads: param_norm = g.detach().data.norm(2) total_norm += param_norm.item() ** 2 clip_factor = min(clipping_norm / max(total_norm**(0.5), clipping_norm), 1.) clipped_grads = [clip_factor * g for g in grads] noisy_grads = [ cg + noise_multiplier * clipping_norm * torch.randn_like(cg).to(device) for cg in clipped_grads ] with torch.no_grad(): for i, p in enumerate(params): p.grad = noisy_grads[i] optimizer.step() def aggregate_weights(models, weights=None): if not isinstance(weights, dict): weights = {i: 1/len(models) for i in range(len(models))} global_state_dict = models[0].state_dict() aggregated_params = {} for key in global_state_dict.keys(): sum_param = None for idx, local_model in enumerate(models): local_weight = weights[idx] local_param = local_model.state_dict()[key] * local_weight if sum_param is None: sum_param = local_param else: sum_param += local_param aggregated_params[key] = sum_param return OrderedDict(aggregated_params) # 初始化全局模型和其他设置... global_model = SimpleCNN().cuda() clients_models = [SimpleCNN().cuda() for _ in range(num_clients)] for round_idx in range(rounds): selected_client_indices = ... # 随机选择部分客户参加当前轮次 client_updates = [] for cidx in selected_client_indices: local_dataset = get_local_data_for_client(cidx) train(clients_models[cidx], 'cuda', local_dataset, noise_multiplier=noise_multiplier, clipping_norm=clipping_norm) updated_parameters = clients_models[cidx].state_dict() client_updates.append(updated_parameters) new_global_params = aggregate_weights(client_updates) global_model.load_state_dict(new_global_params) ``` 此代码展示了如何在一个简单的 CNN 上应用 DP-SGD 进行本地训练,并通过加权平均的方式聚合来自多个客户的更新后的参数[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值