PYGRID:用于私有数据科学和联邦学习的p2p平台

如果您可以训练世界上所有数据,而又不会将这些数据留给设备,同时又将这些数据保密,该怎么办?

  PyGrid是用于私有数据科学和联合学习的对等平台。借助PyGrid,数据所有者可以提供,监视和管理对自己私有数据集群的访问。数据不会离开数据所有者的服务器。

  然后,数据科学家可以使用PyGrid对私有数据集进行私有统计分析,甚至可以跨多个机构的数据集进行联合学习。

  该博客文章将涉及:

1、了解PyGrid所需的基本概念,例如联邦学习和安全的多方计算 PySyft库和PyGrid平台-PySyft是使用PyGrid平台部署的私有机器学习库

2、使用PyGrid进行隐私保护分析的几个实际示例:这些示例将帮助我们理解PyGrid的体系结构,并弄清楚如何将其应用于实际问题

3、OpenMined的2020年PyGrid开发路线图

联合学习

  我们需要了解的第一个概念是联合学习。联合学习是一种允许AI模型进行学习而无需用户放弃数据的技术。这是如何运作的? 第一步是创建一个初始模型。然后,数据科学家会将模型发送给数据集所有者(在本例中为Joe的设备)。

现在,Joe可以通过在其数据集中对其进行训练来更新此模型。训练后,更新的模型将返回给AI公司。

现在,AI Incorporated将更新的AI模型发送到另一台设备,在本例中为Jane的设备。 Jane’s将通过在她的数据集中对其进行训练来更新此模型。模型训练完Jane的数据后,Jane将更新的权重发送回数据科学家。

  现在,该模型已经从Joe和Jane的数据中学到了东西。我们可以在多个节点上重复此过程,甚至可以在多个节点上同时训练模型并将其平均,从而可以更快地改进模型。

  联邦学习的主要好处是: 培训数据保留在用户的设备(或医院服务器)上 这增加了敏感数据的隐私 减少对模型所有者(数据科学家,公司)的法律责任 减少上传大型数据集所涉及的网络带宽 很容易想到该技术的潜在用例。例如,

安全的多方计算 安全多方计算(SMPC)是加密数据并将其共享给不同设备的另一种方式。与传统的加密技术不同,SMPC的主要优点是,我们可以使用加密的数据执行逻辑和算术运算。 如何使用多方计算进行数学运算?

这是一个(非常)简化的工作示例:

在此示例中,我们让安德鲁(Andrew)持有他的号码,在这种情况下,他是号码5的所有者,即他的个人数据。安德鲁可以将其数据匿名化,将其数字分解为2个(或更多)不同的数字。在这种情况下,他将数字5分解为2和3。这样,他就可以与朋友Marianne和Bob共享匿名数据。

在这里,没有人真正知道安德鲁数据的真正价值。他们只持有其中的一部分。它们中的任何一个都可以执行任何类型的操作,而无需所有人的同意。但是,尽管这些数字在它们之间进行了加密,但我们仍然可以执行计算。这样,我们可以使用加密的值来计算用户数据,而无需显示任何敏感信息。

了解了这些概念之后,我们现在可以解释PySyft和PyGrid。

PySyft 库

PySyft是用于安全和私有深度学习的Python库。 PySyft旨在在主要的深度学习框架(例如PyTorch和TensorFlow)中提供隐私保护工具。这样,数据科学家可以使用这些框架来应用隐私保护概念来管理任何类型的敏感数据,而不必成为隐私专家和他们自己。

PyGrid 平台

PyGrid旨在成为一个使用PySyft框架进行联合学习和数据科学的点对点平台。

该体系结构由两个组件组成:网关和节点。网关组件像DNS一样工作,路由提供所需数据集的节点。

节点由数据所有者提供:它们是私有数据集群,将由其数据所有者管理和监视。数据不会离开数据所有者的服务器。

然后,数据科学家可以使用PyGrid对该数据集执行私有统计分析,甚至可以跨多个机构的数据集进行联合学习。

下面,我们说明如何完成每个用例。

用例1:私有统计分析 让我们探讨两个工作流程:

想要在其节点上发布敏感数据的数据拥有者。 (在这种情况下,是医院的儿科病房)。

想要通过网格网络查找特定数据集以计算一些统计分析的数据科学家。

数据拥有方

步骤1:导入PySyft和依赖项 作为数据所有者的第一步是导入我们的依赖项。

在这种情况下,我们将导入syft并使用syft hook替换标准的torch模块。

步骤2:连接您的节点 下一步是连接您自己的节点。请务必注意,节点应用已部署在某些环境中,您需要事先知道其地址。在这种情况下,我们将连接医院节点。

步骤3:将数据准备为张量并添加简短描述
现在,我们需要准备要在医院节点上发布的数据集。为了清楚地了解我们要发布的数据,我们应该添加简要说明,以解释数据的含义和数据结构。在这种用例中,我们要发布医院的每月出生记录。

步骤4:定义访问规则和权限 之后,我们需要定义规则来控制数据访问。在这种情况下,我们允许某些用户(鲍勃,安娜和爱丽丝)完全访问此数据的实际值。

步骤5:添加标签和标签以帮助数据科学家找到您的数据集 为了使我们的数据可以从查询中访问,我们还需要添加标签来标识和标记它们。 在此示例中,我们添加了两个标签:#February用于标识月份,而#birth-records用于标识数据含义

步骤6:发布!你完成了。
现在,可以准备发布数据了。请务必注意,需要允许您在此节点上发布私有数据集。在此示例中,我们使用Bob的凭据在节点上发布此数据。

作为数据所有者,这就是我们要做的一切!

数据科学家

步骤1:导入PySyft和依赖项 作为数据科学家,我们还需要导入syft库并使用syft hook替换torch模块。

步骤2:连接到网格平台 与数据所有者不同,我们不知道节点和数据集在哪里,因此我们首先需要与GridNetwork连接。网格网络的地址将是网关组件地址

步骤3:您要寻找什么数据?搜索网络。
连接到网格网络后,我们可以搜索所需的数据集标签。也许您正在寻找肺炎的X光片或医院的出生记录。在此示例中,我们使用的是之前发布的标签。网格网络将返回一个字典,其中包含节点的ID作为键,而数据指针作为值。

步骤4:创建对该数据指针的引用
接下来,我们定义对医院数据指针的直接引用。

步骤4:了解和探索数据 对于任何数据科学家来说,了解您正在使用的数据都是至关重要的。接下来,我们可以探索数据指针以了解其含义以及它们的组织方式。

等待-如果我尝试复制该数据怎么办? 如果我们尝试在不被允许的情况下检索数据指针的实数值,则会引发异常。这样,PyGrid便可以将数据保存在所有者的手上,并赋予控件以允许或拒绝访问数据样本的控制权。

步骤5:执行计算 即使不复制数据,我们仍然能够对该数据执行远程计算。在此示例中,我们要计算婴儿体重和身高的平均值。为此,我们需要对列值进行远程求和。

现在,我们可以远程计算权重和。它将生成其他远程张量。

我们可以使用height列执行相同的操作。

现在,我们只需要使用我们的凭据来检索汇总值,然后将该值除以5即数据集大小即可。

我们可以做同样的事情来获得平均高度。这样,我们就可以计算出本月出生的婴儿的平均体重和身高,而无需访问任何敏感数据。

  做完了!我们知道二月份出生的婴儿的平均身高和体重,而无需将数据集移到我们自己的服务器上,因此我们永远不需要接收有关单个婴儿的任何私人信息。

我们如何管理数据访问?
在不久的将来,我们将提供一个简单的界面来验证和管理张量规则。作为您自己的网格节点的管理员,您将能够管理该节点的帐户。作为数据所有者,您可以标识和控制谁可以访问您的节点。

grid将有权通过使用不同技术评估请求来允许或拒绝访问。

用例2:跨Silo联合学习
我们如何使用PyGrid架构跨机构或设备执行联合学习?在这种使用情况下,我们将使用联合学习方法来训练MNIST模型。数据所有者使用数据集样本填充节点的过程与用例1相同,因此我们将直接跳到数据科学家的工作流程。

联邦学习-作为数据科学家
步骤1:导入PySyft和依赖项

步骤2:定义我们的模型架构
现在,我们需要定义模型架构以及在神经网络上执行ML流程所需的所有东西。

步骤3:连接到网格平台 和以前一样,我们需要连接到网格网络以在节点上执行查询。

步骤4:搜索所需的数据集 在此示例中,我们正在搜索MNIST数据集及其标签。

正如我们在这里看到的那样,我们的网格网络有一些托管MNIST数据集的节点。

步骤5:创建对该数据指针的引用
现在,我们只需要获取直接引用即可处理这些指针。

此功能将帮助我们弄清楚联邦学习算法的工作方式。

步骤6:训练模型!
在此训练功能中,我们将遍历数据指针以找到相应的工作人员并远程训练模型。这里我们有一些说明:

第一个是model.send(worker):此函数会将我们的全局模型的副本发送给当前工人,以使用该工人的数据进行培训。
第二个模型是model.get():训练完本地数据后,我们需要检索本地模型以更新全局模型。
这样,联合学习过程将遍历承载MNIST数据集的所有节点。

用例3:加密的MLaaS
我们如何以安全和私有的方式托管模型并执行推理?

针对此问题的PyGrid解决方案是使用名为plan和Multi-Party Computation(MPC)协议的数据结构。计划是一种数据结构,用于定义和序列化将远程执行的一组指令。使用计划,我们可以定义将在远程设备中执行的模型结构。这样,使用分布在不同计算机上的远程MPC指针的计划可以以安全的方式执行模型推断。

步骤1:导入PySyft和依赖项
如前所述,第一步是导入我们的依赖项。请务必注意,我们需要将hook.local_worker.is_client_worker设置为False。这将使syft库在其结构上存储计划的元数据。

步骤2:连接到网格平台
现在,如前所述,我们需要连接到grid。

步骤3:定义模型 在这里,我们正在定义模型。重要的是要注意有必要在Model的定义上扩展Plan。为便于说明,我们将使用只有一层的线性模型,该层具有预先设置的权重和偏差值。这样,我们可以预测并了解结果。

步骤4:定义输入数据 我们的输入数据将是此一维张量。因此,我们已经能够可视化最终结果。

步骤5:初始化模型 现在,我们需要初始化模型。为了进行比较,我们还将初始化一个解密模型

步骤6:将模型投放到网格网络 最后,我们可以在网格网络上使用此模型。请务必注意MPC标志。此标志将允许syft库使用MPC协议通过网络将计划参数拆分为不同的设备。

在这里,我们可以看到计划及其参数切片在哪里。公司数据集群托管我们的计划结构,医院数据集群和公共数据集群托管MPC参数值。最后,大学数据集群是我们的加密提供程序,可让我们执行MPC乘法。

步骤7:返回结果

在这里,我们同时发生了很多事情。因此,让我们深入研究:

1-此功能将从公司的数据集群下载计划结构并检索其远程指针。

2-第二步将input_values拆分为MPC值,并与承载该计划的MPC指针的相同设备共享它。

3-由于所有MPC指针都分布在设备上,因此我们可以执行计划。

4-最后,我们可以汇总MPC结果,这将返回实际结果。

与解密模型比较 为了进行比较,如果我们执行解密的模型,我们将得到相同的结果。

OpenMined的2020 PyGrid路线图 在2020年,PyGrid团队有四个主要目标:

异构网络(syft.js,swift.js,移动工作者) 首先,创建一种从不同平台发送和接收消息的标准方法。如今,PyGrid平台是基于服务器的平台,这意味着您需要设置节点并为其提供基础结构。我们打算将PyGrid功能扩展到移动设备。

隐私权预算 制定隐私预算以评估和控制数据匿名化级别。

自动差异隐私跟踪 这允许随着时间的推移自动跟踪数据集中实体的隐私预算。

这样,我们就可以在发布私有资产(例如AI模型)时对泄漏的信息量做出正式保证。 最好使该基础结构尽可能地自动化,但是也允许允许人类审查数字资产以获取私人信息的应用程序(UI)(对于早期采用者而言可能是必不可少的)。

数据请求队列 我们将创建数据请求队列,该队列允许数据所有者评估控制数据访问的数据请求。

发布了30 篇原创文章 · 获赞 74 · 访问量 23万+

猜你喜欢

转载自blog.csdn.net/ruiyiin/article/details/105589898
P2P