预处理和隐私求交
预处理
- DataFrame:联邦表格数据的封装,DataFrame由多个参与方的数据块构成,支持数据水平、垂直切分和混合切分,分别对应3组API:HDataFrame、VDataFrame、MixDataFrame。
- FedNdarray:联邦ndarray的封装,同样由多个参与方的数据块构成,支持水平和垂直切分,对应统一的API:FedNdarray
隐语提供多种预处理工具来处理这些数据,可以直接使用 DataFrame API 处理数据,或者使用sf.preprocessing 包内的各类预处理组件处理
联邦表是一个跨多方的虚拟概念,定义 VDataFrame 用于垂直场景设置。
- 联邦表中各方的数据存储在本地,不允许出域。
- 除了拥有数据的一方之外,没有人可以访问数据存储。
- 联邦表的任何操作都会由driver调度给每个worker,执行指令会逐层传递,直到特定worker的Python Runtime。
- 框架确保只有当worker的 worker.device 和 Object.device 相同时,才能够操作数据。
- 联邦表旨在从中心角度管理和操作多方数据。 Federated Table 的接口与 pandas.DataFrame对齐,以降低多方数据操作的成本。
- SecretFlow 框架提供 Plain&Ciphertext(明密文)混合编程能力。垂直联邦表是使用 SPU 构建的, MPC-PSI 用于安全地获取来自各方的交集和对齐数据。
隐私求交
隐私求交(Private Set Intersection)是一种使用密码学方法,获取两份数据内容的交集的算法。PSI过程中不泄露任务交集以外的信息。
在垂直拆分场景中,隐私求交常用于第一步的数据对齐,然后可以进一步做数据分析或机器学习建模。
- 垂直拆分指的是将数据按不同的特性分成多个部分,每个部分包含不同种类的信息。例如,医院和保险公司分别拥有同一批患者的不同数据,医院有患者的健康记录,保险公司有患者的保险信息。这种情况下,数据被垂直拆分在不同的机构之间。
- 隐私求交允许不同机构在不暴露彼此原始数据的情况下,找出他们共同拥有的数据部分。比如,在医院和保险公司的例子中,隐私求交可以帮助他们找出共同的患者,但不会泄露其他患者的信息。
- 数据对齐是在隐私求交的基础上,将不同机构的数据匹配起来。假设医院和保险公司找出了共同的患者,然后他们需要对齐这些患者的数据(患者A的健康记录(如病历、检查结果等)、患者A的保险记录(如保单信息、理赔记录等)),使得医院的健康记录和保险公司的保险信息能够关联起来,形成完整的患者档案。
- 数据分析是对收集到的数据进行处理和解释,以提取有用的信息和洞见。例如,医院和保险公司对齐数据后,可以分析这些患者的健康趋势、保险赔付情况等,帮助决策和优化服务。
- 机器学习建模是指使用机器学习算法从数据中学习模式,建立预测模型。例如,医院和保险公司可以利用对齐后的数据训练机器学习模型,预测某些患者未来的健康状况或保险理赔的概率。
在隐语中 PSI 有两种使用方式,分别如下。
决策树模型和线性回归模型
隐语支持多种决策树算法(XGB),同时支持回归和二分类训练,可根据使用场景和安全性需求选用。
决策树模型
XGB是“eXtreme Gradient Boosting”的简称,它是一种优化过的决策树算法,主要用于提升决策树的性能和准确率。XGBoost通过构建多个决策树并组合它们的预测结果,从而形成更强大的预测模型。它通过“梯度提升”的方法,即每次添加新的树时,都会专注于之前模型预测错误的地方,这样不断迭代改进,最终形成一个强大的集成模型。
线性回归模型
神经网络算法
水平联邦学习
隐语提供的水平联邦学习 FLModel是一个通用的范式,而不是一个具体的模型或算法,您可以自由的定义模型和训练参数。
目前 FLModel 支持 TensorFlow 和 PyTorch 两种后端,您可以使用 tf 或 torch 原生的方式编写模型代码,然后使用FLModel 训练。
垂直拆分模型
拆分后的模型,只是模型的一部分。各方合在一起才是完整的模型
稀疏化和量化压缩算法
稀疏化(Sparsification):
稀疏化是一种优化算法,它的主要目的是减少模型中的参数数量,特别是那些对模型性能影响不大的参数。通过这种方式,可以减少模型的大小和计算量,从而加快模型的训练和推理速度。想象一下,如果你有一本书,里面有很多重复或者不重要的句子,你可以把这些句子去掉,只保留重要的内容,这样书就会变得更轻,阅读起来也会更快。
量化压缩(Quantization):
量化压缩则是另一种优化技术,它通过减少模型参数的精度来减小模型的大小。比如,原本模型中的参数可能是32位浮点数,通过量化可以将它们转换为8位整数,这样每个参数占用的空间就大大减少了。这就像是你有一台相机,原本可以拍摄非常精细的照片,但你选择了一个较低的分辨率,这样照片的大小就会变小,存储和传输起来都会更快。
自定义的垂直拆分策略
垂直拆分策略:
垂直拆分策略是指在分布式训练中,将模型的不同部分分配到不同的计算节点上进行训练。这种策略可以有效地利用多个计算节点的资源,加速模型的训练过程。想象一下,你有一个大项目需要完成,你可以把项目分成几个部分,然后分配给不同的团队成员去完成,这样整个项目的进度就会加快。
自定义的垂直拆分策略:
自定义的垂直拆分策略意味着你可以根据自己的需求和数据特点,设计最适合自己模型的拆分方式。这就像是你可以根据项目的具体情况,灵活地调整每个团队成员的任务分配,以达到最优的工作效率。