【这里面不少是我自己的理解,保不齐有错误,仅供参考;如果错了请指正】
1.纵向LR的损失函数
FATE的代码里和一些论文里,写的实现纵向LR训练的时候,损失函数都是:
这个损失函数和我们常见的形式不太一样。怎么来的可以参考标签为{+1,-1}时,逻辑回归损失函数推导。
这种形式的损失函数的好处是,在多方联合计算损失函数的时候,怎么对各方结果进行合并处理很清晰。
2.损失函数展开成多项式
用同态加密的话,原始的损失函数包含exp运算,这个运算目前同台加密不能直接支持,所以需要把exp函数展开成多项式函数。
2.1 用到的泰勒展开式
2.2 原损失函数展开并计算梯度
【上述(1)中最后一项中的y可以去掉,以为 y^2=1】
上述公式(1)对w进行求导数,得到关于w的梯度:
3.关于同态加密
这个坑比较大,最简单的理解就是这种加密方法有一种特性:【操作一】对两个数加密之后再求和(或者求乘积),【操作二】两个数求和(或者求乘积)之后再加密;【操作一】和【操作二】二者结果相同。 所以上述的多项式只包含求乘积、求和,所以可以对数据加密,再发给别人去计算。
4.纵向LR整体流程
如上图所显示:A、B为联合学习的两方,C为可信赖的协调者或者仲裁者(fate中称为abiter),其步骤如下:
(1)C把Public Key(公钥),发给A和B,C自己还有私钥 ;
(2)不妨设B为拥有label的一方。那么A把wx计算完再用公钥加密,然后把[[x]],[[wx]]发送给B。这样,根据前面的损失函数公式和梯度公式,B可以结合自己的数据(也用公钥加密)算出总的损失函数值和梯度;B把A需要的那部分梯度发给A;
(3)A、B把自己需要的那部分梯度发给C,C解密之后,把梯度各自发给A、B;
(4)A、B根据梯度更新自己的参数;
然后重复直到停止(比如C可以根据损失函数值不再变化就停止)。
5.参考资料
技术探讨类——纵向LR
:这篇资料里有代码,不过公式推导的细节不太全,我当时没咋看懂;