联邦学习原理-上篇

1,241 阅读6分钟

联邦学习技术特点

  • 数据隔离
数据不泄漏到外部
  • 对等
参与者地位平等
  • 无损
联邦学习效率等同或接近全量数据模型
  • 共同获益
参与者共同获益

联邦学习分类

  • 横向联邦
数据方特征维度相同
  • 纵向联邦
数据方样本ID相同

传统的以表格的方式查看数据看 
纵向的按列对数据分组
每列数据包含的数据indices/ID相同

纵向联邦学习-联合建模需求场景

举例说明

微众与合作企业联合建模,微众有y(业务表现),期望优化本方的Y预测模型

各方数据

  • 合作企业
  • 微众银行

设定

  • 只有微众拥有Y=逾期表现

  • 合作企业无法暴露含有隐私的X

传统建模方法问题

  • 合作企业缺乏Y无法独立建模

  • X数据全量传输到微众不可行

期望结果

  • 保护隐私条件下,建立联合模型

  • 联合模型效果超过单边数据建模

纵向联邦学习

各个参与者拥有的数据ID相同,数据特征不同(有的参与者可能没有标签)
  • 参与者之间需要交换中间结果
  • 支持XGBoost/SecureBoost之类的模型
  • 可通过split learning支持神经网络模型
  • 大规模纵向联邦系统复杂性较高

纵向联邦学习示意图

1AB之间没有数据交换
2、Encrypted entity alignment 指加密数据(使用同态加密技术)对齐即样本融合求取交集的过程
3、模型训练的过程存在一个第三方
a、第三方分别给AB发送数据加密所用到的公钥
bAB之间交换模型训练过程的中间结果
c、AB分别计算出梯度和损失值(针对树模型)发送给第三方
d、第三方进行汇总并下发给AB用于更新模型参数

联邦学习的关键技术

保护隐私和安全的方法

  • 同态加密 Hmomorphic Encryption(HE)

  • 多方安全计算 Secure Multi-party Computation(MPC) 例如Secret Sharing

  • 姚式混淆电路 Yao's Garbled Circuit

  • 差分隐私 differential Privacy (DP)

同态加密

包括全同态和半同态

同态加密是指这样一种加密函数,对明文进行加法和乘法运算再加密,与加密后对密文进行相应的运算,结果是等价的

同态加密每次加密的结果是不一样的

基于同态加密的的Model Averaging

同态加密特征

  • Addition:[[u]]+[[v]]=[[u+v]]

  • Scalar multiplication:n*[[u]]=[[n*u]]

纯量乘法是指一个标量r与一个向量V(或矩阵M)相乘,其结果为一个向量(矩阵),该向量(矩阵)的每一个元素为标量r与V(M)中对应位置元素的乘积

基于隐私保护的样本id匹配

RSA+哈希机制的安全求交方案
所有的纵向算法都需要样本对齐

需求场景

对应的数学原理

针对上述流程简单解释

联邦特征工程

问题

在保护双方隐私下 A侧(含X)和B侧(含X,Y)特征如何计算WOE和IV?

难点

1A侧只有特征X没有Y 计算WOE和IV得同时依赖x,y(B侧特征WOE&IV可以本地计算)

2A侧不能对B侧暴露X,B侧不能对A侧暴露Y

3、最终只能让B侧获得所有特征的WOE和IV

对特征列分组 每一组根据标签列Y的值(比如0,1)统计

进一步说明

纵向逻辑回归

1、传统的逻辑回归公式中的y值是0和1
这个逻辑公式中的y是+-1

2、W是每一枚特征的权重的一个向量 x是一个具体的值

3、逻辑回归 本质是一个线性模型 wx两个向量的内积 wa*xa + wb*xb

4、预测是根据两边的模型进行预测 单边模型没有任何价值

SecureBoost

无损的 安全的 只需要交换梯度直方图 不需要交换数据

联邦计算信息增益

1、树模型LightGBM或XGBoost计算每一个候选分裂点信息增益的时候都是计算梯度直方图
代价函数的 一阶导g 二阶导h的和
代入公式就可以计算出最大的增益
2、party1和party3没有业务表现y的 计算不了代价函数
3、party1和party3计算完直方图 首先要做encoding 然后再发送给party2 以保证数据安全
比如分裂特征是Bill Payment 域值是5500
对它进行编号即encoding 编号之后同时发送过去 g和h的和 给party2
party2解密之后 可以得到最大的信息增益
将最大的信息增益的合作方 比如party3 将这个结果(包含这个分裂点的编号)发送给party3
告诉party3 这次分裂点是属于你的 

树的结构

每一方就看到一个值partyId即这个节点是属于谁的
另外是编号 编号只能在party2看到 其他节点无法看到
叶子节点只存在与party2的 谁提供标签 谁就完全拥有叶子节点
首先向party2发起一个预测查询
从根节点来看 该跟节点是属于party1的
party2会发送给party1
party1会查一下 特征是Bill Payment 阈值是5000
用户属性值是4000多 小于5500 走到了左边
左边的这个节点是属于party3的
再发给party3
party3再查的话 发现分裂值是800
小于5500
走到了w2
w2是属于party2的 因为它是叶子节点 只有party2是有标签的
将这个值直接拿出来就行了 结束了一次查询
boost是集成的算法 其实是很多颗树都要查询 每次查询 
将这些权重乘以换算因子 再加起来就是预测的结果了
如果是二分类问题直接做一个segmod
多分类求个softmax
对于回归问题它就是一个具体的回归的值