差分隐私保护下的机器学习挑战与应用

需积分: 9 3 下载量 143 浏览量 更新于2024-07-09 收藏 4.95MB PDF 举报
"《差分隐私与机器学习》研讨会由Kamalika Chaudhuri(加州大学圣地亚哥分校计算机科学系)和Anand D. Sarwate(罗格斯大学电子工程系)主讲,该PPT旨在探讨在处理敏感数据时如何应用差分隐私技术来保护个人隐私。会议大纲涵盖了以下几个关键主题: 1. 隐私动机:阐述了为何在医疗记录、基因数据和搜索引擎日志等高度敏感的数据中,保护用户隐私至关重要。例如,AOL和Netflix的隐私侵犯事件表明,仅仅匿名化数据并不足以保证隐私安全。 2. 数据敏感性:讨论了数据的独特性和高维数据泄露的风险,如UCSD员工薪资表中的个体信息,即使数据被匿名化,仍有可能通过某些特征识别出特定个体。 3. 差分隐私定义:介绍了隐私保护的核心概念,即差分隐私,它是一种数学框架,确保发布统计信息时,个体的参与不会显著改变结果的可能性,从而降低了被追踪的风险。 4. 保证隐私的方法:重点关注敏感度分析,这是实现差分隐私的关键步骤,它衡量了在发布数据扰动后的最大影响,以确保隐私安全。 5. 超越敏感度:深入讨论了在实际应用中如何超越简单的敏感度分析,可能涉及更复杂的技术和算法设计,以适应不断增长的机器学习需求。 6. 实践与挑战:探讨了如何将差分隐私融入到实际的机器学习项目中,以及面临的实际问题和扩展可能性,如疾病关联研究中的隐私保护,指出直接基于原始数据的大量统计发布存在风险。 7. 课程结构:研讨会以互动式的方式展开,包括隐私定义的理论讲解,随后是实操环节,让参与者理解和应用这些原理。 通过这次研讨会,参与者将深入了解差分隐私如何在现代机器学习环境下保护个人隐私,同时了解如何在保护隐私的同时,维持数据的有效利用和分析能力。"
2023-05-15 上传

Runs MNIST training with differential privacy. """ Using matrix project to compress the gradient matrix """ def compress(grad, num_k, power_iter=1): return B, G_hat """ Complete the function of per-example clip """ def clip_column(tsr, clip_value=1.0): return def train(args, model, device, train_loader, optimizer, epoch, loss_func, clip_value): model.train() # criterion = nn.CrossEntropyLoss() losses = [] for _batch_idx, (data, target) in enumerate(tqdm(train_loader)): data, target = data.to(device), target.to(device) batch_grad_list = [] optimizer.zero_grad() output = model(data) loss = loss_func(output, target) if not args.disable_dp: with backpack(BatchGrad()): loss.backward() for p in model.parameters(): batch_grad_list.append(p.grad_batch.reshape(p.grad_batch.shape[0], -1)) #compose gradient into Matrix del p.grad_batch """ Using project method to compress the gradient """ if args.using_compress: #per-example clip else: """ Complete the code of DPSGD """ else: loss.backward() try: for p in model.parameters(): del p.grad_batch except: pass optimizer.step() losses.append(loss.item()) #get the num of the training dataset from train_loader if not args.disable_dp: epsilon = get_epsilon(epoch, delta=args.delta, sigma=args.sigma, sensitivity=clip_value, batch_size=args.batch_size, training_nums=len(train_loader)*args.batch_size) print( f"Train Epoch: {epoch} \t" f"Loss: {np.mean(losses):.6f} " f"(ε = {epsilon:.2f}, δ = {args.delta})" ) else: print(f"Train Epoch: {epoch} \t Loss: {np.mean(losses):.6f}")

2023-06-12 上传