纵向联邦学习原理介绍——LR,XGBoost,SplitNN

这是我的学习笔记,若有不足和错误之处,欢迎交流和指正,谢谢!
联系方式:[email protected]

文章目录

  • 1. Introduction
  • 2. Preliminaries
    • 2.1 VFL加密方法
    • 2.2 VFL平台
  • 3. VFL逻辑回归
  • 4. VFL XGBoost
    • 4.1 XGBoost
    • 4.2 SecureBoost
  • 5. SplitNN
    • 5.1 Pipeline
    • 5.2 Aggregation

推荐阅读:

[1] Label Inference Attacks Against Vertical Federated Learning
[2] Privacy Leakage of Real-World Vertical Federated Learning
[3] Vertical Federated Learning: Challenges, Methodologies and Experiments
[4] SecureBoost: A Lossless Federated Learning Framework
[5] SplitNN-driven Vertical Partitioning
[6] Xgboost完全详细解读(原理+代码)

如果对VFL想要有更多的了解,可以看一下我在GitHub整理的VFL研究,欢迎star:https://github.com/avdvg/VFL-Survey

关于同态加密在联邦学习中的应用可以阅读前期博客:
【联邦学习邂逅密码学系列】基于同态加密算法python代码实现

1. Introduction

作为一种保护隐私的分布式训练技术,联邦学习近几年成为学术界研究的热点话题,很多研究关于联邦学习的效率、安全性、隐私性展开讨论。最近在企业中联邦学习的应用也逐渐开展,常见的技术是基于FATE的联邦学习。

按照参与方数据分布的差异,联邦学习通常可以分为横向联邦学习(HFL)、纵向联邦学习(VFL)以及联邦迁移学习。关于联邦学习概念的例子可以在很多博客都可以看到,这里不细说。相较于横向联邦学习,纵向联邦学习在实际企业中应用更加广泛,它通常适用于不用部门之间数据垂直分布的场景。然而,对于纵向联邦学习的研究和整理较少。这篇博客学习交流纵向联邦学习。

基于模型来分,纵向联邦学习通常有逻辑回归VFL,XGBoost VFL,SplitNN。下面分别进行介绍。

2. Preliminaries

2.1 VFL加密方法

VFL中通常应用加法同态加密(additively homomorphic encryption),例如Paillier技术加密模型的中间输出结果。加法同态加密技术属于部分加密技术,即只支持一种运算函数:加法。在加法同态加密中,参与方使用相同的公钥(public key)加密需要传输的数据,为了获取明文内容,使用者需要利用私钥(secret key)对密文进行解密。
通常使用 [ [ u ] ] \left[\left[u\right]\right] [[u]]表示对数字 u u u加密后的结果,加法同态加密支持密文下的加法运算。
[ [ u + v ] ] = [ [ u ] ] + [ [ v ] ] \left[\left[u + v\right]\right] = \left[\left[u\right]\right] + \left[\left[v\right]\right] [[u+v]]=[[u]]+[[v]]

同时,加法同态加密还有下列性质:

[ [ u ⋅ v ] ] = u ⋅ [ [ v ] ] \left[\left[u \cdot v\right]\right] = u \cdot \left[\left[v\right]\right] [[uv]]=u[[v]]
其中 u u u未被加密。
上述性质可以被扩展到向量和矩阵的乘法:
V T ⋅ [ [ U ] ] = [ [ V T ⋅ U ] ] V^T \cdot \left[\left[U\right]\right] = \left[\left[V^T \cdot U\right]\right] VT[[U]]=[[VTU]]

2.2 VFL平台

纵向联邦学习原理介绍——LR,XGBoost,SplitNN_第1张图片

3. VFL逻辑回归

给定 n n n个训练样本 x i x_i xi,每个样本具有 d d d个特征,每个样本的标签为 y i y_i yi,线性回归的过程就是学习一个函数的过程: f ( x i ) = y i f(x_i) = y_i f(xi)=yi。由于 f f f是线性的,因此学习的过程可以表示为系数矩阵 θ \theta θ x x x之间的内积,可以表达为:
f ( x i ) = ∑ j = 0 d θ j x i j = θ x i f(x_i) = \sum_{j=0}^d \theta^j x_i^j = \theta x_i f(xi)=j=0dθjxij=θxi
为了学习系数矩阵,需要最小化下列的损失函数:
L ( θ ) = 1 n ∑ i = 1 n 1 2 ( θ x i − y i ) 2 L(\theta)= \frac{1}{n} \sum_{i=1} ^n \frac{1}{2} (\theta x_i -y_i)^2 L(θ)=n1i=1n21(θxiyi)2

在VFL场景中(2方),每个参与方具有部分的特征 [ x i A ∣ x i B ] [x_i^A|x_i^B] [xiAxiB],同时系数 θ \theta θ被拆分成 [ θ A ∣ θ B ] [\theta^A|\theta^B] [θAθB],上述损失函数可以近似转化为:
L ( θ ) = 1 n ( 1 4 θ A X A + 1 4 θ B X B − 1 2 Y ) ⋅ [ X A ∣ X B ] L(\theta) = \frac{1}{n}(\frac{1}{4}\theta^A X^A + \frac{1}{4}\theta^BX^B-\frac{1}{2}Y) \cdot[X^A|X^B] L(θ)=n1(41θAXA+41θBXB21Y)[XAXB]

上述推导过程:
待补充。

上面的式子表示是在未加密中的损失函数计算方式,在VFL中通常采用同态加密对中间表示进行加密,加密后的损失函数可以表示为:
[ [ L ( θ ) ] ] = 1 n ( 1 4 [ [ θ A X A ] ] + [ [ 1 4 θ B X B ] ] − [ [ 1 2 Y ] ] ) ⋅ [ X A ∣ X B ] [[L(\theta)]] = \frac{1}{n}(\frac{1}{4}[[\theta^A X^A]] + [[\frac{1}{4}\theta^BX^B]]-[[\frac{1}{2}Y]]) \cdot[X^A|X^B] [[L(θ)]]=n1(41[[θAXA]]+[[41θBXB]][[21Y]])[XAXB]

LRVFL的流程可以表示为:
纵向联邦学习原理介绍——LR,XGBoost,SplitNN_第2张图片
步骤一:参与方A和参与方B初始化系数矩阵,协作方发布公钥。
步骤二:参与方A计算 [ [ u ] ] [[u]] [[u]]并发送给参与方B,参与方B计算 [ [ v ] ] [[v]] [[v]]并发送给参与方A,同时计算 [ [ v ] ] X B [[v]]X^B [[v]]XB发送给协作方C。
步骤三:参与方A计算 [ [ v ] ] X A [[v]]X^A [[v]]XA发送给协作方C。
步骤四:协作方使用私钥解密参与方A、B上传的数据,计算梯度信息 g A g^A gA以及 g B g^B gB并发送给参与方。

4. VFL XGBoost

4.1 XGBoost

4.1.1 概念
XGBoost是基于提升树的。
f ( x + Δ ) f(x+\Delta) f(x+Δ)在点 x x x的泰勒二阶展开式:
f ( x + Δ x ) ≃ f ( x ) + f ′ ( x ) Δ x + 1 2 f ′ ′ Δ x 2 f(x+ \Delta x)\simeq f(x) +f^{'}(x)\Delta x + \frac{1}{2} f^{''}\Delta x^2 f(x+Δx)f(x)+f(x)Δx+21fΔx2

4.1.2 目标函数
给定 n n n个训练样本 x i x_i xi,每个样本具有 d d d个特征,XGBoost学习一个包含 k k k个回归树的函数: f ( x i ) = ∑ t = 1 k f t ( x i ) f(x_i) = \sum_{t=1} ^kf_t(x_i) f(xi)=t=1kft(xi)。为了学习 k k k个回归树,XGBoost添加树 f t f_t ft在第t次迭代的损失函数为:
L ( t ) = ∑ i = 1 n [ l ( y i , y ( t − 1 ) ) + g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ] + Ω ( f t ) L^{(t)} = \sum_{i=1}^n[l(y_i, y^{(t-1)}) + g_if_t(x_i) +\frac{1}{2}h_if_t^2(x_i)]+\Omega(f_t) L(t)=i=1n[l(yi,y(t1))+gift(xi)+21hift2(xi)]+Ω(ft)
其中 f i f_i fi h i h_i hi分别对一个损失函数的一阶和二阶项, Ω \Omega Ω表示树的复杂度正则项, l ( y i , y ( t − 1 ) l(y_i, y^{(t-1)} l(yi,y(t1)为常数项。
Ω ( f ) = γ T + 1 2 λ ∑ j = 1 T w j 2 \Omega (f) = \gamma T+\frac{1}{2}\lambda \sum_{j=1}^T w_j^2 Ω(f)=γT+21λj=1Twj2
其中 T T T表示叶子节点的数量, w j w_j wj表示每个叶子节点 j j j权重组成的向量。

注:损失函数推导过程就是将泰勒二阶展开式中的 x x x替换为 y ( t − 1 ) y^{(t-1)} y(t1),将 Δ x \Delta x Δx替换为第 t t t棵树的模型 f t ( x i ) f_t(x_i) ft(xi)

将正则化代入公式中,可以获得损失函数:
L ( t ) = ∑ i = 1 n [ g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ] + γ T + 1 2 λ ∑ j = 1 T w j 2 L^{(t)} = \sum_{i=1}^n [ g_if_t(x_i) +\frac{1}{2}h_if_t^2(x_i)] + \gamma T+\frac{1}{2}\lambda \sum_{j=1}^T w_j^2 L(t)=i=1n[gift(xi)+21hift2(xi)]+γT+21λj=1Twj2

上述损失函数可以进一步表示为:
L ( t ) = ∑ j = 1 T [ ( ∑ i ∈ I j g i ) w j + 1 2 ( ∑ i ∈ I j h i + λ ) w j 2 + γ T ] L^{(t)} = \sum_{j=1}^T [ (\sum_{i\in I_j}g_i) w_j +\frac{1}{2}(\sum_{i\in I_j}h_i + \lambda)w_j^2 +\gamma T] L(t)=j=1T[(iIjgi)wj+21(iIjhi+λ)wj2+γT]
其中, I j = { i ∣ q ( x i ) = j } I_j=\{ i|q(x_i)=j\} Ij={iq(xi)=j}为叶子节点 j j j的样本集。
对上式求导,导数为0,叶子节点 j j j的权重可以表示为:
w j = − G i H i + λ w_j = -\frac{G_i}{H_i+\lambda} wj=Hi+λGi

将叶子节点的权重代入损失函数,可以得到最终近似的损失函数:
L t ( q ) = − 1 2 ∑ j = 1 T ( ∑ i ∈ I j g i ) 2 ∑ i ∈ I j h i + λ + γ T L^{t}(q) = -\frac{1}{2}\sum_{j=1}^T\frac{(\sum_{i\in I_j} g_i)^2}{\sum_{i\in I_j} h_i +\lambda} + \gamma T Lt(q)=21j=1TiIjhi+λ(iIjgi)2+γT
其中 q q q为树结构,上面的式子可以评估树结构的质量。

4.1.3 贪心法推树结构
在实践中,通常使用贪婪的方法推测树的结构 q q q,即从单一的叶子开始,迭代的向树上添加分支。假设 I L I_L IL I R I_R IR为分裂后的左右子树节点集合。
L s p l i t = 1 2 [ ( ∑ i ∈ I L g i ) 2 ∑ i ∈ I L h i + λ + ( ∑ i ∈ I R g i ) 2 ∑ i ∈ I R h i + λ + ( ∑ i ∈ I g i ) 2 ∑ i ∈ I h i + λ ] − γ L_{split} = \frac{1}{2}[\frac{(\sum_{i\in I_L} g_i)^2}{\sum_{i\in I_L} h_i +\lambda} + \frac{(\sum_{i\in I_R} g_i)^2}{\sum_{i\in I_R} h_i +\lambda} + \frac{(\sum_{i\in I} g_i)^2}{\sum_{i\in I} h_i +\lambda} ]-\gamma Lsplit=21[iILhi+λ(iILgi)2+iIRhi+λ(iIRgi)2+iIhi+λ(iIgi)2]γ

4.2 SecureBoost

不依赖协作方,具有标签信息的参与方被称为主动方(activate participant),没有标签信息的参与方称为被动方(passive participant)。VFL中参与方计算 L s p l i t L_{split} Lsplit来寻找最佳的分裂点。

步骤一:主动方根据所有的训练样本计算一阶导数 g i g_i gi和二阶导数 h i h_i hi,加密导数并发送密文 [ [ g i ] ] [[g_i]] [[gi]]以及 [ [ h i ] ] [[h_i]] [[hi]]到被动方。

步骤二:被动方接收到加密的梯度信息减少损失,首先将特征映射为数据仓,然而基于bins聚合加密的梯度。

步骤三:主动方收到损失之后进行解密,然后找到优化的分裂点。

纵向联邦学习原理介绍——LR,XGBoost,SplitNN_第3张图片

纵向联邦学习原理介绍——LR,XGBoost,SplitNN_第4张图片

5. SplitNN

基于拆分学习的VFL比较好理解,每个参与方都具有部分神经网络,通常称为本地模型(bottom model);服务器方具有部分神经网络,通常称为顶部模型(top model)。参与方通过本地模型提取嵌入(embedding)上传给服务器,服务器聚合这些嵌入获得新的矩阵,将该矩阵在顶部模型执行前向传播并计算损失函数。最后利用反向传播计算模型的梯度并更新模型参数。

注:本地模型作为特征提取器,可以根据不同的数据进行调整,例如针对图像数据通常选用卷积神经网络(CNN)作为本地模型,针对网络数据通常选用图卷积神经网络(GCN)作为本地模型。

5.1 Pipeline

纵向联邦学习原理介绍——LR,XGBoost,SplitNN_第5张图片

5.2 Aggregation

Embedding直接求和:

纵向联邦学习原理介绍——LR,XGBoost,SplitNN_第6张图片

Embedding concat拼接方式:

纵向联邦学习原理介绍——LR,XGBoost,SplitNN_第7张图片
这种拼接方式的梯度反向传播相较于前一种方式更为复杂,但是更具链式求导法则也可以同样求出。

你可能感兴趣的:(纵向联邦学习,深度学习,人工智能,机器学习)