文档反馈

问题文档片段

问题文档片段包含公式时,显示为空格。

提交类型
issue

有点复杂...

找人问问吧。

PR

小问题,全程线上修改...

一键搞定!

请选择提交类型

问题类型
规范和低错类

- 规范和低错类:

- 错别字或拼写错误,标点符号使用错误、公式错误或显示异常。

- 链接错误、空单元格、格式错误。

- 英文中包含中文字符。

- 界面和描述不一致,但不影响操作。

- 表述不通顺,但不影响理解。

- 版本号不匹配:如软件包名称、界面版本号。

易用性

- 易用性:

- 关键步骤错误或缺失,无法指导用户完成任务。

- 缺少主要功能描述、关键词解释、必要前提条件、注意事项等。

- 描述内容存在歧义指代不明、上下文矛盾。

- 逻辑不清晰,该分类、分项、分步骤的没有给出。

正确性

- 正确性:

- 技术原理、功能、支持平台、参数类型、异常报错等描述和软件实现不一致。

- 原理图、架构图等存在错误。

- 命令、命令参数等错误。

- 代码片段错误。

- 命令无法完成对应功能。

- 界面错误,无法指导操作。

- 代码样例运行报错、运行结果不符。

风险提示

- 风险提示:

- 对重要数据或系统存在风险的操作,缺少安全提示。

内容合规

- 内容合规:

- 违反法律法规,涉及政治、领土主权等敏感词。

- 内容侵权。

请选择问题类型

问题描述

点击输入详细问题描述,以帮助我们快速定位问题。

横向联邦-安全聚合训练

View Source On Gitee

联邦学习过程中,用户数据仅用于本地设备训练,不需要上传至中心服务器,可以避免用户个人数据的直接泄露。然而传统联邦学习框架中,模型以明文形式上云,仍然存在间接泄露用户隐私的风险。攻击者获取到用户上传的明文模型后,可以通过重构、模型逆向等攻击方式恢复用户的个人训练数据,导致用户隐私泄露。

MindSpore Federated联邦学习框架,提供了基于多方安全计算(MPC)的安全聚合算法,在本地模型上云前加上秘密扰动。在保证模型可用性的前提下,解决横向联邦学习中的隐私泄露和模型窃取问题。

原理概述

尽管差分隐私技术可以适当保护用户数据隐私,但是当参与客户端数量比较少或者高斯噪声幅值较大时,模型精度会受较大影响。为了同时满足模型保护和模型收敛这两个要求,我们提供了基于MPC的安全聚合方案。

在这种训练模式下,假设参与的客户端集合为U,对于任意客户端Client uv, 它们会两两协商出一对随机扰动puvpvu,满足

puv={pvu,uv0,u=v

于是每个客户端Client u 在上传模型至服务端Server前,会在原模型权重xu加上它与其它用户协商的扰动:

xencrypt=xu+vUpuv

从而服务端Server聚合结果x为:

x=uU(xu+vUpuv)=uUxu+uUvUpuv=uUxu

上述过程仅介绍了聚合算法的主要思想,基于MPC的聚合方案是精度无损的,代价是通讯轮次的增加。

如果您对算法的具体步骤感兴趣,可以参考原论文[1]。

使用方式

端云联邦场景

开启安全聚合训练的方式很简单,只需要在启动云侧服务时,通过yaml文件设置encrypt_train_type字段为PW_ENCRYPT即可。

此外,由于端云联邦场景下,参与训练的Worker大多是手机等不稳定的边缘计算节点,所以要考虑计算节点的掉线和密钥恢复问题。与之相关的参数有share_secrets_ratioreconstruct_secrets_thresholdcipher_time_window

share_client_ratio指代公钥分发轮次、秘密分享轮次、秘钥恢复轮次的客户端阈值衰减比例,取值需要小于等于1。

reconstruct_secrets_threshold指代恢复秘密需要的碎片数量,取值需要小于参与updateModel的客户端数量(start_fl_job_threshold*update_model_ratio)。

通常为了保证系统安全,当不考虑Server和Client合谋的情况下,reconstruct_secrets_threshold需要大于联邦学习客户端数量的一半;当考虑Server和Client合谋,reconstruct_secrets_threshold需要大于联邦学习客户端数量的2/3。

cipher_time_window指代安全聚合各通讯轮次的时长限制,主要用来保证某些客户端掉线的情况下,Server可以开始新一轮迭代。

云云联邦场景

在云云联邦场景下,在云侧启动脚本通过yaml文件设置encrypt_train_type字段为PW_ENCRYPT即可。

此外,与端云联邦不同的是,在云云联邦场景中,每个Worker都是稳定的服务器,所以不需要考虑掉线问题,因此只需要设置cipher_time_window这一超参。

参考文献

[1] Keith Bonawitz, Vladimir Ivanov, Ben Kreuter, et al. Practical Secure Aggregationfor Privacy-Preserving Machine Learning. Proceedings of the 2017 ACM SIGSAC Conference on Computer and communications Security. 2017.