第5课:基于隐私保护的机器学习算法介绍
预处理和隐私求交
预处理:DataFrame和FedNdarray
DataFrame:联邦表格数据的封装,DataFrame由多个参与方的数据块构成,支持数据水平、垂直切分和混合切分,分别对应3组API:HDataFrame、VDataFrame、MixDataFrame。
FedNdarray:联邦ndarray的封装,同样由多个参与方的数据块构成,支持水平和垂直切分,对应统一的API:FedNdarray
DataFrame和FedNdarray各自提供了一些读写api可供直接使用。隐语也提供多种预处理工具来处理这些数据,可以直接使用DataFrameAPI处理数据,或者使用sf.preprocessing包内的各类预处理组件处理。
安全提示:一些预处理算子会计算并公开用于辅助计算的统计值,或者一些统计接口本身就会计算和公开统计值。请在使用前仔细评估这些统计值是否包含隐私信息。
隐私求交PSI
隐私求交(Private_Set_Intersection)是一种使用密码学方法,获取两份数据内容的交集的算法。PSI过程中不泄露任务交集以外的信息。在垂直拆分场景中,隐私求交常用于第一步的数据对齐,然后可以进一步做数据分析或机器学习建模。在隐语中PSI有两种使用方式,分别如下。同时隐语支持多种PSI算法,可根据参与方数量、带宽、算力、数据不平衡度等不同场景合理选择
使用spu.psi_csv等接口
使用data.vertical.read_csv接口
决策树模型和线性回归模型
决策树模型
隐语支持多种决策树算法(XGB),同时支持回归和二分类训练,可根据使用场景和安全性需求选用
线性回归模型
隐语支持多种线性回归模型,满足不同的使用场景,并有一些针对性的优化。
神经网络算法
根据使用场景不同,隐语提供了两种神经网络算法:水平联邦学习、垂直拆分学习。并分别提供两套API:
安全提示:水平联邦学习和垂直拆分学习都属于非可证安全算法,其安全性需要根据场景具体分析。可以通过一些安全加固组件(安全聚合、差分隐私、稀疏化等)加强安全性。
水平联邦学习
隐语提供的水平联邦学习FLModel是一个通用的范式,而不是一个具体的模型或算法,您可以自由的定义模型和训练参数。目前FLModel支持TensorFlow和PyTorch两种后端,您可以使用tf或torch原生的方式编写模型代码,然后使用FLModel训练。同时,您也可以直接使用各种封装好的模型库,比如:torchvision和tf.keras.applications
FLModel是隐语封装好的水平联邦模型训练器,他提供了丰富的选项:
- 可以自定义数据加载器,隐语支持DataFrame、文件、图片等各种数据加载器
- 可以选择内置或者自定义的安全聚合算法,隐语内置了多种安全聚合策略
- 可以选择内置或者自定义的联邦学习策略,隐语内置了多种联邦策略用于优化训练效率、non-iid等问题
- 可以选择训练后端TensorFlow或者PyTorch
垂直拆分学习
隐语提供的垂直拆分学习SLModel同样是一个通用的范式,您可以自由的定义模型和训练参数。
SLModel同样支持TensorFlow和PyTorch两种后端,您可以使用tf或torch原生的方式编写模型代码,然后使用SLModel训练。与水平联邦相比,垂直拆分学习的架构略有不同,他的模型被拆分成2份、3份或者更多,分别分布在不同的参与方。建模时需要针对拆分学习架构重新设计模型结构。下面是两方场景下常见的两种结构。为此,隐语提供了一个拆分好的模型库:sf.ml.nn.applications
SLModel作为隐语封装好的垂直拆分模型训练器,他也提供了丰富的选项:
- 可以自定义数据加载器,隐语支持DataFrame、文件、图片等各种数据加载器
- 可以选择内置或者自定义的通信优化算法,隐语内置了多种稀疏化和量化压缩算法
- 可以选择内置或者自定义的垂直拆分策略,隐语内置了多种加速训练的策略算法
- 可以选择训练后端TensorFlow或者PyTorch