联邦学习[纵向联邦学习中两方解决方案]
联邦学习大火,主要是解决数据孤岛问题,即如何在符合数据隐私的基础上,实现多方数据不出本地,但是却能联合训练一个共有大模型的目的,对于需要中心的纵向联邦学习,是需要中心先下发公钥,而后期会出现中心能够完全掌握整个模型的情况。那么在更严格情况,AB都互不信任,C放在哪都不合适。
1 准备部分
这里以线性回归为例子,参考自《联邦学习的研究与应用,刘洋 范涛》,介绍在没有中间人的情况下,直接2方交互的过程。为了直观介绍过程,下述式子中都省略了一些累加,\(\lambda\)等部分。
如图所示,红框中为LR的loss公式,其中涉及
A方的):\(u_i^A\), \(\Theta_A\)
B方的):\(u_i^B\), \(y_i\), \(\Theta_B\)
所以整个模型的loss:\(L=(u_i^A+u_i^B-y_i)+(\Theta_A+\Theta_B)\),且其中\(u_i^B\), \(y_i\)一起出现,所以只标注下\(u_i^B\),得:
\]
\]
\]
\]
2 联合模型训练
2.1双方交换公钥然后A发送自己部分给B
1)先互相交换各自的公钥,这里标记为\(Pub_A\),\(Pub_B\);
2)A方先计算\(u_i^A\)和\(\Theta_A\),然后可计算\(L_A\);此时将\(u_i^A\)和\(L_A\)用\(Pub_A\)加密得:
u_i^A
\end{bmatrix}_{pubA}
\]
L_A
\end{bmatrix}_{pubA}\]
3)将这两个部分发送给B;
2.2 AB完成信息交互
4)B方计算\(u_i^B\)和\(\Theta_B\),然后可计算\(L_B\),并\(u_i^B\)和\(L_B\)用\(Pub_A\)加密得:
u_i^B
\end{bmatrix}_{pubA}
\]
L_B
\end{bmatrix}_{pubA}\]
通过同态加密,从而得到
L
\end{bmatrix}_{pubA}=\begin{bmatrix}
L_A
\end{bmatrix}_{pubA}+\begin{bmatrix}
L_B
\end{bmatrix}_{pubA}\]
并且,\(d_i=u_i^A+u_i^B\),故而得到
d_i
\end{bmatrix}_{pubA}=\begin{bmatrix}
u_i^A
\end{bmatrix}_{pubA}+\begin{bmatrix}
u_i^B
\end{bmatrix}_{pubA}\]
且因为\(\frac{ \partial L }{\partial \Theta_B}=d_i*x_i^B+\Theta_B\),得到B的梯度
\frac{ \partial L }{\partial \Theta_B}
\end{bmatrix}_{pubA}\]
5)从4中可知,如果此时将数据发送给A则A可以通过私钥A,\(Pri_A\)完成解密,获得B的模型信息,为了防止此事发生,通过差分隐私方式(就是加噪音),得到
L+M^B
\end{bmatrix}_{pubA}\]
\frac{ \partial L }{\partial \Theta_B}+R^B
\end{bmatrix}_{pubA}\]
为了防止\(d_i\),从
d_i
\end{bmatrix}_{pubA}\]
中解密,B对其用\(Pub_B\)做一次加密得到
\begin{bmatrix}
d_i
\end{bmatrix}_{pubA}
\end{bmatrix}_{pubB}\]
6)A方用自己的私钥\(Pri_A\)完成解密获得\(L+M^B\),\(\frac{ \partial L }{\partial \Theta_B}+R^B\),\(\begin{bmatrix}
d_i
\end{bmatrix}_{pubB}\),然后通过\(\begin{bmatrix}
d_i
\end{bmatrix}_{pubB}\)计算自己的梯度得到
\frac{ \partial L }{\partial \Theta_A}
\end{bmatrix}_{pubB}\]
为了获得B的解密,但是又担心B知道自己梯度,故而对其进行加密得到
\begin{bmatrix}
\frac{ \partial L }{\partial \Theta_A}
\end{bmatrix}_{pubB}
\end{bmatrix}_{pubA}\]
7)A将差分隐私的\(L+M^B\),\(\frac{ \partial L }{\partial \Theta_B}+R^B\)直接给B,并将自己需要解密的
\begin{bmatrix}
\frac{ \partial L }{\partial \Theta_A}
\end{bmatrix}_{pubB}
\end{bmatrix}_{pubA}\]
发送给B。
2.3 AB双方互相解密完成最终信息交换
8)B此时可以计算得到\(L\)(此时B能获得整个模型的loss值),和自己的梯度\(\frac{ \partial L }{\partial \Theta_B}\)(这样B模型部分就能正常更新了),然后帮A解密A的梯度得到\(\begin{bmatrix}
\frac{ \partial L }{\partial \Theta_A}
\end{bmatrix}_{pubA}\)
9)将A需要更新的梯度\(\begin{bmatrix}
\frac{ \partial L }{\partial \Theta_A}
\end{bmatrix}_{pubA}\)传给A
10)A完成自己梯度的解密,并正常更新自己模型部分。
3 互相合作完成推理
1)假设B收到一个测试样本,将其加密传递给A
2)A和B各自计算自己部分的结果
3)A将自己结果发送给B
4)B完成结果计算
ps:遗留问题,在上述过程中,B可以通过暴力循环完成A方结果的欺骗,咋办?但是回想一下,不论怎么互相加密,最终总是需要一方获得最后结果(比如是否推荐该商品1/0),并完成自己解密获得最终预测值。那么无法避免的会出现一方通过暴力循环完成所有用户的预测值映射,从而终止合作(当然没法升级是另一回事)
附录:
这里介绍下当前收集到的联邦学习的企业
1-开源
1)微众银行Fate; https://cn.fedai.org/
2)百度PaddleFL; https://github.com/PaddlePaddle/PaddleFL
3)TensorFlow; https://github.com/tensorflow/federated
4)字节; https://github.com/bytedance/fedlearner
5) 京东; https://github.com/jd-9n/9nfl
2-非开源
1)蚂蚁Morse; https://antchain.antgroup.com/products/morse
2)富数FMPC(Avatar); https://www.fudata.cn/federated-machine-learning
3)华控PrivPy; https://www.tsingj.com/
4)平安蜂巢;
5)矩阵元JUGO; https://jugo.juzix.net/home
6)腾讯T-Sec; https://cloud.tencent.com/product/fele
7)nvidia clare;
8)华为NAIE;
3-其他
1)京东数科联邦魔盒; https://www.jddglobal.com/products/union-learn
2)同盾科技-智邦; https://www.tongdun.cn/ai/solution/aiknowledge
3)冰鉴;
4)光之树科技-天机; https://www.guangzhishu.com/
5)数犊科技 ;https://www.sudoprivacy.com/
6)翼方健数-翼数坊; https://www.basebit.me/
7)锘崴科技-锘崴信 ; https://www.nvxclouds.com/
8)同态科技-迷雾计算: https://www.ttaicloud.com/
9) TalkingData; https://sdmk.talkingdata.com/#/home/datasecurity
10)融数联智; https://www.udai.link/
11)算数力科技-CompuTa: https://www.computa.com/
12)摩联科技 ; https://www.aitos.io/index/index/index.html
13) ARPA-ARPA隐私计算协议; https://arpachain.io/
14)趣链科技-BitXMesh可信数据网络; https://bitxmesh.com/
15)蓝象智联
16)冲量网络; http://www.impulse.top/
17)数牍科技;https://www.sudoprivacy.com/#/home