联邦学习的概念
` 简略来说,联邦学习是把 不同数据源 的数据 联结训练,失去更好的模型 `
` 在进行机器学习的过程中,各参与方能够借助其余方数据进行联结建模 `
` 各方无需共享数据资源,数据不出本地状况下,进行联结训练,建设共享的机器学习模型 `
联邦学习的意义
` 联邦学习是一种爱护数据解决数据孤岛的一种机器学习办法 `
` 除了数据孤岛,还有可能存在数据隐衷平安问题 `
联邦学习的分类
- 企业的数据孤岛
或者
联邦学习的利用场景
视觉横向联邦学习零碎
` 同为指标检测工作 `
` 各个机构标注的数据集不同 `
` 各个机构在不替换数据的状况下进行合作 `
自然语言解决横向联邦学习零碎 - 未登录词(OOV)生成问题
` 每个用户设施只存储无限大小的词库表——数据孤岛 `
`OOV 单词生成蕴含用户敏感内容——用户数据保护 `
` 每台挪动设施在不替换数据的状况下进行合作 `
联邦车险定价学习零碎
联邦学习产品业务实现流程
提前申明:该文章介绍的是目前联邦学习行业比拟通用的实现形式 不存在波及一家公司机密信息
备注:上面介绍的流程大部分都已实现 少部分还在技术调研阶段
联邦学习产品所具备的残缺流程
概念简略形容
- 样本交融
` 单方数据取交加 `
`a、发起方样本 a 比方该用户金融信息 `
`b、合作方样本 b 比方该用户物流信息 `
`c、样本 a 和 b 都有独特的字段 uid 即用户编号 `
` 即通过用户编号能够取样本 a 获取该用户的金融信息 `
` 去样本 b 能够获取该用户的物流信息 `
`d、依据 uid 取交加 `
` 即获取所有既有金融信息又又物流信息的用户 `
` 但发起方和合作方的单方数据都是独立的 相互不晓得的 `
`e、样本交融之后 发起方有了交融之后的金融数据 `
` 合作方也有了交融之后的物流信息 `
` 但合作方不会又金融信息 `
` 发起方也不会又物流信息 `
- 数据预处理 / 探索性剖析
进步数据的品质 异样值解决
- 特色分箱
计算所有特色的 IV 指标 抉择 IV 指标高的退出模型 IV 指标越高对模型越无效
- PCA 主成分剖析
计算某个特色的剖析指标
- 模型训练
依据单方的测试数据进行训练
样本集数据会被分成 2 份 训练集和验证集
- 应用训练集进行训练
- 应用验证结进行验证
单方会依据各自模型的指标来彼此调整训练的参数以达到单方的评估模型的指标参数 (ks、auc、loss 最小) 都很好
每个流程的具体实现过程
这里仅介绍前端局部 (web、java), 后端局部(python) 前面再一一介绍
- 数据筹备阶段
- 录入节点信息
- 录入合作方节点
- 节点信息包含:
- 留神
a 以后节点只能有一个 合作方节点能够有多个
b 通过节点名称 md5 加密失去节点编号 单方节点编号要保持一致
c 公私钥是用于 java 之间通信、python 之间通信数据安全加解密
d、java 之间交互、python 之间交互、java 与 python 之间交互的申请 url 门路是从对应节点信息中获取的
- 形式
a 通过 csv 存储数据的形式上传(小数据量)
有多种实现形式 这里简略介绍两种
a-1 上传分布式磁盘存储系统 fastdfs
a-2 上传分布式内存文件系统 alluxio
b 已数据库脚本的形式上传(小数据量)
c 通过 Hive 或 Mysql 导入 ClickHouse 的形式(大数据量)
d 通过分库分表的形式(大数据量)
大数据量如亿级别 例如单方均有 10 亿数据量
c、d 这两种形式前面的文章会介绍
- 新增数据集分为训练和预测
- 创立本人节点和多个合作方节点
发起方节点名称、发起方 java 服务根门路、发起方 python 服务根门路、发起方加密公私钥
合作方名称、合作方公钥、合作方 java 服务跟门路、合作方 python 服务跟门路
- 新建我的项目信息
蕴含:2 个节点信息(一个以后节点另外一个是合作方节点)、多个训练样本数据、多个测试样本数据
- 发起方新建工作信息
一个我的项目能够有多个工作
工作信息包含:工作名称和发起方节点训练样本数据
- 合作方帮助工作
- 数据交融
数据交融的产品原型图
- 数据预处理
探索性剖析与之前端操作流程相似
- 用户触发第二次数据预处理
探索性剖析与之前端操作流程相似
数据预处理 - 产品原型图
- 特色工程
- 特色分箱
特色分箱算法参数抉择和定义
特色分箱指标 IV 值
- PCA 主成分剖析
和特色分箱前端操作流程相似
- 模型训练
抉择模型训练算法
模型训练过程
模型评估指标
- 模型预测
局部技术点原理介绍
数据对齐两种实现形式
密码学基础知识
不经意间传输加密 OT
概念
` 不经意传输(oblivious transfer)是一个密码学协定 `
` 在这个协定中,音讯发送者从一些待发送的音讯中发送一条给接收者 `
` 但预先对发送了哪一条音讯依然 oblivious(不晓得)`
` 这个协定也叫茫然传输协定 `
举例说明
- 2 选 1
- n 选 1
`1. 发送者 Alice 生成两对 rsa 公私钥,并将两个公钥 puk0、puk1 发送给接受者 Bob`
`2. Bob 生成一个随机数,并用收到的两个公钥之一加密随机数(用哪个秘钥取决于想获取哪条数据,例如如果想要失去音讯 M0 就用 puk0 加密随机数,如果想要失去 M1 就用 puk1 加密随机数),并将密文后果发送给 Alice`
`3. Alice 用本人的两个私钥别离解密收到随机数密文,并失去两个解密后果 k0,k1,并将两个后果别离与要发送的两条信息进行异或(k0 异或 M0,k1 异或 M1),并将两个后果 e0,e1 发给 Bob`
`4. Bob 用本人的实在随机数与收到的 e0、e1 别离做异或操作,失去的两个后果中只有一条为实在数据,另外一条为随机数 `
RSA 算法和哈希机制配合
为了解决加密样本对齐
- RSA 算法和哈希机制配合
` 首先,宏观上来说要想保障本人的数据不会被对方获取 `
`A 和 B 都须要针对数据采取只有本人理解的操作 以保障对方无奈反推出数据 `
` 对于 A 而言,窃密操作由哈希机制和随机产生的 Ri 来实现 `
` 对于 B 而言,窃密操作由哈希机制和本人产生的 d 来实现 `
` 第一步:B 由 RSA 算法产生 n、e、d,并发送蕴含 n、e 的公钥给 A`
` 第二部:A 对本人领有的用户数据进行加密操作,哈希 +Ri 来实现,再将加密后的数据 YA 发送给 B`
` 第三步:B 失去 YA 后,因为哈希机制的原理和 Ri 未知,很难反推出 A 的用户数据。B 对 YA 取 d 次幂失去 ZA,再对本人的用户数据进行加密操作,取哈希再 d 次幂再哈希,失去 ZB,接着将 ZA、ZB 发送给 A`
` 第四步:A 失去 ZB 后,同理也反推不出 B 的用户数据,再对本人的用户加密数据 ZA 除 Ri 再哈希,失去 DA`
` 第五步:DA 和 ZB 实质上是对数据进行雷同操作后失去的数据,所以如果源数据雷同,操作后的数据也雷同,所以依据 DA,ZB 求交加的后果,A 能够判断出 A 和 B 的独特数据有哪些,最初再将后果 I 发送给 B,样本对齐完结 `
- 思考为什么这么做
` 首先要明确求交加,必须将数据放到一起 `
` 放到一起的话那就必须要对本人的数据进行加密 `
` 咱们还要明确独特用户数据通过加密操作之后必须依然雷同,暂且称之为要求 1`
` 那咱们先假如对单方用户数据只进行一次哈希操作 `
` 这样尽管能够保障要求 1,然而安全性不高,用户有可能反推用户数据 `
` 因而引入随机变量 `
` 咱们再思考是否只有一方发送数据另一方接收数据 `
` 假如 B 对本人的用户数据加密,用到了随机变量 d 和哈希,发送给 A`
` 接管方 A 接管后,A 须要对本人的数据进行操作 `
` 使得本人的公共数据和 B 传来数据中的公共数据相等来满足要求 1`
` 然而因为 A 不晓得 d,所以 A 做不到公共数据相等,也就做不到样本对齐 `
` 接下来思考单方相互发送数据 `
`A 先用随机变量 Ri 和哈希对本人的数据加密后发送给 B`
`B 在 A 发来的密文上操作,此时该密文就有了因素 d`
`B 再对本人的数据进行加密,接着将两局部数据发送给 A`
`A 接管到两份密文后,对本人的密文进行转换 `
` 此时本人的密文曾经蕴含了因素 d`
` 所以实践上 A 把本人加在本人数据上的“锁”解开后 `
` 可能转化为与 B 数据雷同的模式,此时就能够实现样本对齐了 `
` 在这过程中单方都不可能反推对方的数据 `
模型训练加密过程
同态加密
纵向的模型训练有用到同态加密中的加法同态加密
` 第一个式子示意损失函数 loss`
` 第二个等式示意梯度 `
` 上面两个式子示意加法同态加密的性质——和的密文等于密文的和 `
` 因为加法同态加密中只反对加减乘除,不反对指数运算,所以 loss 须要在零点处二次泰勒开展 `
` 右图示意理论工作过程,UA 将加密后的 ua 和 ua^2 发送给 UB,ua=wx,即己方数据的权重和特征值的乘积 `
`UB 计算己方数据的权重和特种值的乘积,再和 ua 相加,失去样本的所有特色的 w *x`
` 而后联合本人领有的样本标签 y 计算 d`
`d 就是梯度表达式中除去 x 的局部 `
`UB 将 d 加密后发送给 UA,此时 UA、UB 都能够用己方的特征值 x 乘 d 来计算出本人的梯度 `
`UA、UB 计算出梯度后,加密上传给 arbiter,arbiter 接管后解码、更新梯度,再将更新后的梯度散发上来,UAUB 接管后实现模型的一次更新 `
` 一直迭代上述过程,直到 loss 低于预期值才进行 `
` 当数据提供方 host 较多时,为缩小通信老本,不在计算 loss,通过两次迭代之间梯度更新的幅度来判断是否完结,幅度很小时,训练完结 `
结语
前面会陆续介绍
- 几亿级别的数据量架构如何设计且如何实现
- 数据处理过程用一些大数据处理框架来做比方 spark、flink
- python 的劣势在于算法 如何反对几亿级别的数据进行模型训练
- 外围:后端 Python 每一个阶段的介绍
- 其余联邦学习技术点介绍