横向联邦Paillier方案
1. 简介
假设有两个client,称为client1和client2
各client在密文状态下训练,将添加随机数的密文模型参数发送至server
server聚合模型参数,并拥有私钥,可以解密聚合后的密文模型
2. 算法步骤
阶段1:参数交换
server基于Paillier库生成公私钥对
server将公钥发送给各client
各client初始化模型参数,并使用公钥将模型参数加密
client1和client2基于DH密钥交换协议生成随机数种子
阶段2:模型训练
各client使用本地数据训练密文模型,并在密文上添加种子生成的随机数
client1密文模型“+”随机数
client2密文模型“-”随机数
各client将添加随机数后的密文模型参数发送至server
server将client的密文模型参数进行聚合
server将密文模型参数发送给各client
各client更新本地的密文模型参数
阶段3:模型分发
server使用私钥将密文模型参数解密
server将明文模型参数发送给各client
各client更新本地的明文模型参数
3. 梯度和loss近似计算
由于Paillier不支持密文状态下的乘法、指数、对数、比较运算,因此在计算梯度和loss时需要近似
以Logistic Regression二分类为例,为简化公式,此处省略(截距或bias)
3.1 梯度近似计算
梯度计算公式
sigmoid函数:,
计算梯度:
梯度近似计算公式
将sigmoid函数在原点进行一阶泰勒展开
计算梯度近似:
3.2 loss近似计算
loss计算公式
- 计算loss:
loss近似计算公式
将loss函数在原点进行一阶泰勒展开
计算loss近似(去掉常数项):
正则化部分的loss无法计算
4. Paillier加解密过程
4.1 密钥生成
最大公约数,最小公倍数,
随机且独立选取两个大素数和,满足
计算和
随机选取
计算,确保存在
公钥:,私钥:
4.2 加密
假设明文为,其范围是
选取随机数,满足且
计算密文
4.3 解密
假设密文为
- 计算明文
5. 随机数使用
由于Paillier计算密文时要模,因此添加随机数后要模
密文模型参数添加随机数
随机数抵消
6. HFL Logistic Regression Paillier运行
6.1 Training
- 如果是通过下载二进制文件或本地编译启动,编译完成后在代码根目录下执行以下命令;如果是通过docker-compose启动,先执行
docker exec -it primihub-node0 bash
进入到primihub-node0
容器中,再执行以下命令。
./primihub-cli --task_config_file="example/FL/logistic_regression/hfl_binclass_paillier.json"
- 或者通过Python SDK启动
submit example/FL/logistic_regression/hfl_binclass_paillier.json
6.2 Prediction
- 下载二进制文件、本地编译、docker-compose启动
./primihub-cli --task_config_file="example/FL/logistic_regression/hfl_binclass_predict.json"
- Python SDK启动
submit example/FL/logistic_regression/hfl_binclass_predict.json