# 局部差分隐私SignDS训练 [![查看源文件](https://mindspore-website.obs.cn-north-4.myhuaweicloud.com/website-images/r1.7/resource/_static/logo_source.png)](https://gitee.com/mindspore/docs/blob/r1.7/docs/federated/docs/source_zh_cn/local_differential_privacy_training_signds.md) ## 隐私保护背景 联邦学习通过让参与方只上传本地训练后的新模型或更新模型的update信息,实现了client用户不上传原始数据集就能参与全局模型训练的目的,打通了数据孤岛。这种普通场景的联邦学习对应MindSpore联邦学习框架中的默认方案([云侧部署](https://www.mindspore.cn/federated/docs/zh-CN/r1.7/deploy_federated_server.html#云侧部署)启动`server`时,`encrypt_type`开关默认为`not_encrypt`,联邦学习教程中的`安装部署`与`应用实践`都默认使用这种方式),是没有任何加密扰动等保护隐私处理的普通联邦求均方案,为方便描述,下文以`not_encrypt`来特指这种默认方案。 这种联邦学习方案并不是毫无隐私泄漏的,使用上述`not_encrypt`方案进行训练,服务端Server收到客户端Client上传的本地训练模型,仍可通过一些攻击方法[1]重构用户训练数据,从而泄露用户隐私,所以`not_encrypt`方案需要进一步增加用户隐私保护机制。 联邦学习中客户端Client每轮接收的全局模型`oldModel`都是由服务端Server下发的,不涉及用户隐私问题。但各客户端Client本地训练若干epoch后得到的本地模型`newModel`拟合了其本地隐私数据,所以隐私保护重点是二者的权重差值`newModel`-`oldModel`=`update`。 MindSpore Federated框架中已实现的`DP_ENCRYPT`差分噪声方案通过向`update`迭加高斯随机噪声进行扰动,实现隐私保护。但随着模型维度增大,`update`范数增大会使噪声增大,从而需要较多的客户端Client参与同一轮聚合,以中和噪声影响,否则模型收敛性和精度会降低。如果设置的噪声过小,虽然收敛性和精度与`not_encrypt`方案性能接近,但隐私保护力度不够。同时每个客户端Client都需要发送扰动后的模型,随着模型增大,通信开销也会随之增大。我们期望手机为代表的客户端Client,以尽可能少的通信开销,即可实现全局模型的收敛。 ## 算法流程介绍 SignDS[2]是Sign Dimension Select的缩写,处理对象是客户端Client的`update`。准备工作:把`update`的每一层Tensor拉平展开成一维向量,连接在一起,拼接向量维度数量记为$d$。 一句话概括算法:**选择`update`的$h(h50. default=0.01,`inputDim`是模型或update的拉平长度,若不满足,端侧警告。排序update,占比前k(%)的组成`topk`集合。减少k,则意味着要从更重要的维度中以较大概率挑选,输出的维度会减少,但维度更重要,无法确定收敛性的变化,用户需观察模型update稀疏度来确定该值,当比较稀疏时(update有很多0),则应取小一点。 - `sign_eps`:(0,100],default=100。隐私保护预算,数序符号为$\epsilon$,简写为eps。eps减少,挑选不重要的维度概率会增大,隐私保护力度增强,输出维度减少,占比不变,精度降低。 - `sign_thr_ratio`:[0.5,1],default=0.6。激活的维度中来自`topk`的维度占比阈值下界。增大会减少输出维度,但输出维度中来自`topk`的占比会增加,当过度增大该值,要求输出中更多的来自`topk`,为了满足要求只能减少总的输出维度,当client用户数量不够多时,精度下降。 - `sign_global_lr`:(0,),default=1。该值乘上sign来代替update,直接影响收敛快慢与精度,适度增大该值会提高收敛速度,但有可能让模型震荡,梯度爆炸。如果每个client用户本地跑更多的epoch,且增大本地训练使用的学习率,那么需要相应提高该值;如果参与聚合的client用户数目增多,那么也需要提高该值,因为重构时需要把该值聚合再除以用户数目,只有增大该值,结果才保持不变。 - `sign_dim_out`:[0,50],default=0。若给出非0值,client端直接使用该值,增大该值输出的维度增多,但来自`topk`的维度占比会减少;若为0,client用户要计算出最优的输出参数。eps不够大时,若增大该值,则会输出很多`non-topk`的不重要维度导致影响模型收敛,精度下降;当eps足够大时,增大该值会让更多的用户重要的维度信息离开本地,精度提升。 ## LeNet实验结果 使用`3500_clients_bin`其中的100个client数据集,联邦聚合200个iteration,每个client本地运行20个epoch,端侧本地训练使用学习率为0.01,SignDS相关参数为`k=0.01,eps=100,ratio=0.6,lr=4,out=0`,最终所有用户的准确率为66.5%,不加密的普通联邦场景为69%。不加密场景中,端侧训练结束上传到云侧的数据长度为266084,但SignDS上传的数据长度仅为656。 ## 参考文献 [1] Ligeng Zhu, Zhijian Liu, and Song Han. [Deep Leakage from Gradients](http://arxiv.org/pdf/1906.08935.pdf). NeurIPS, 2019. [2] Xue Jiang, Xuebing Zhou, and Jens Grossklags. "SignDS-FL: Local Differentially-Private Federated Learning with Sign-based Dimension Selection." ACM Transactions on Intelligent Systems and Technology, 2022.