联邦学习学习心得(2)——纵、横向联邦学习的原理分析

联邦学习工作原理的具体分析

上篇学习心得简单介绍了联邦学习的诞生背景和基本知识,对于横向联邦学习和纵向联邦学习的具体工作原理只是简单说了一下,本篇心得就结合FATE框架中的LR算法来具体分析一下联邦学习的学习过程。

纵向联邦学习

纵向联邦学习过程主要可以分为加密样本对齐和加密模型训练两个部分。

加密样本对齐

要求:

如何在不泄露非公共用户的情况下求出双方的公共用户
联邦学习学习心得(2)——纵、横向联邦学习的原理分析_第1张图片

解决方案

RSA算法和哈希机制配合
联邦学习学习心得(2)——纵、横向联邦学习的原理分析_第2张图片
首先,宏观上来说要想保证自己的数据不会被对方获取,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数据相同的形式,此时就可以完成样本对齐了。在这过程中双方都不可能反推对方的数据。
以上就是本人对样本对齐过程的思考。

加密模型训练

纵向的模型训练有用到同态加密中的加法同态加密。
联邦学习学习心得(2)——纵、横向联邦学习的原理分析_第3张图片
上图所示,第一个式子表示损失函数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,通过两次迭代之间梯度更新的幅度来判断是否结束,幅度很小时,训练结束。

横向联邦学习

横向联邦学习的工作原理比较简单,其中通过引入随机噪声来替代加密技术。每个单独的梯度加入随机噪声,梯度放在一起随机噪声之间会相互抵消。
联邦学习学习心得(2)——纵、横向联邦学习的原理分析_第4张图片
每一个client先用自己的数据集训练自己的模型,得到梯度

  1. client将自己的梯度发送给coordinator。
  2. coordinator将接收到的梯度按照一定的策略聚合、更新。
  3. coordinator将更新后的梯度分发给client。
  4. client接收更新后的梯度更新自己的模型。

上述就是一次完整的学习过程。

以上就是本次学习新的全部内容。

你可能感兴趣的:(机器学习,算法,人工智能)