这是我的学习笔记,若有不足和错误之处,欢迎交流和指正,谢谢!
联系方式:[email protected]
推荐阅读:
[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代码实现
作为一种保护隐私的分布式训练技术,联邦学习近几年成为学术界研究的热点话题,很多研究关于联邦学习的效率、安全性、隐私性展开讨论。最近在企业中联邦学习的应用也逐渐开展,常见的技术是基于FATE的联邦学习。
按照参与方数据分布的差异,联邦学习通常可以分为横向联邦学习(HFL)、纵向联邦学习(VFL)以及联邦迁移学习。关于联邦学习概念的例子可以在很多博客都可以看到,这里不细说。相较于横向联邦学习,纵向联邦学习在实际企业中应用更加广泛,它通常适用于不用部门之间数据垂直分布的场景。然而,对于纵向联邦学习的研究和整理较少。这篇博客学习交流纵向联邦学习。
基于模型来分,纵向联邦学习通常有逻辑回归VFL,XGBoost VFL,SplitNN。下面分别进行介绍。
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] [[u⋅v]]=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]]=[[VT⋅U]]
给定 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=0∑dθ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=1∑n21(θxi−yi)2
在VFL场景中(2方),每个参与方具有部分的特征 [ x i A ∣ x i B ] [x_i^A|x_i^B] [xiA∣xiB],同时系数 θ \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θBXB−21Y)⋅[XA∣XB]
上述推导过程:
待补充。
上面的式子表示是在未加密中的损失函数计算方式,在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]])⋅[XA∣XB]
LRVFL的流程可以表示为:
步骤一:参与方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.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=1∑n[l(yi,y(t−1))+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(t−1)为常数项。
Ω ( 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=1∑Twj2
其中 T T T表示叶子节点的数量, w j w_j wj表示每个叶子节点 j j j权重组成的向量。
注:损失函数推导过程就是将泰勒二阶展开式中的 x x x替换为 y ( t − 1 ) y^{(t-1)} y(t−1),将 Δ 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=1∑n[gift(xi)+21hift2(xi)]+γT+21λj=1∑Twj2
上述损失函数可以进一步表示为:
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=1∑T[(i∈Ij∑gi)wj+21(i∈Ij∑hi+λ)wj2+γT]
其中, I j = { i ∣ q ( x i ) = j } I_j=\{ i|q(x_i)=j\} Ij={i∣q(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=1∑T∑i∈Ijhi+λ(∑i∈Ijgi)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[∑i∈ILhi+λ(∑i∈ILgi)2+∑i∈IRhi+λ(∑i∈IRgi)2+∑i∈Ihi+λ(∑i∈Igi)2]−γ
不依赖协作方,具有标签信息的参与方被称为主动方(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聚合加密的梯度。
步骤三:主动方收到损失之后进行解密,然后找到优化的分裂点。
基于拆分学习的VFL比较好理解,每个参与方都具有部分神经网络,通常称为本地模型(bottom model);服务器方具有部分神经网络,通常称为顶部模型(top model)。参与方通过本地模型提取嵌入(embedding)上传给服务器,服务器聚合这些嵌入获得新的矩阵,将该矩阵在顶部模型执行前向传播并计算损失函数。最后利用反向传播计算模型的梯度并更新模型参数。
注:本地模型作为特征提取器,可以根据不同的数据进行调整,例如针对图像数据通常选用卷积神经网络(CNN)作为本地模型,针对网络数据通常选用图卷积神经网络(GCN)作为本地模型。
Embedding直接求和:
Embedding concat拼接方式: