0 基于图神经网络的知识产权交易联邦推荐
avadesian edited this page 2 years ago

基于图神经网络的知识产权交易联邦推荐

现实生活存在以下场景,某一知识产权交易机构,拥有大量知识产权数据,在本地训练得到知识产权推荐模型,为了进一步优化模型性能,该交易机构想要联合其它多家拥有知识产权数据的买方(大公司)和卖方(知识产权所有者),利用其数据来对模型进行调优,但因为知识产权数据涉及买卖双方的个人利益,需要严格保密,因此不能将知识产权数据直接发送给交易机构。

为了完成上述过程,可以使用HiStar进行联邦微调,知识产权机构将在本地预训练的模型参数发送给参与模型调优的多个买方和卖方,买卖双方收到模型参数后利用自己的数据在本地进行训练,并将训练后得到的梯度信息利用安全聚合技术添加掩码后发送给知识产权交易机构,知识产权交易机构收集到所有用户发送的梯度信息后在本地完成安全聚合得到所有买方卖方梯度信息的平均值,用梯度信息的平均值更新预训练模型,并将其发送给所有参与联邦微调的买方和卖方,买卖双方收到平均梯度后各自在本地完成模型更新。

在聚合过程结束后知识产权交易机构仅能得到所有买卖双方发送的梯度之和而得不到具体某一个买方或者卖方的梯度,因此每个参与联邦微调的买方和卖方的知识产权数据可以得到有效的保护。

联邦微调示意图


在预测阶段买卖双方进行联合预测得到预测结果,买方将自己的需求信息输入到更新后的推荐模型中,得到相应的图嵌入表示,在图嵌入表示上添加噪声后发送给知识产权交易机构,知识产权交易机构则将本地的知识产权库中的知识产权信息输入到更新的模型中得到相应的图嵌入表示,并结合买方添加噪声的图嵌入表示在本地完成相似匹配得到知识产权推荐列表,并将推荐列表发送给买方。

联合预测示意图


演示示例

环境依赖

  • websokets == 8.1

  • websocket-client == 0.57.0

  • torch-geometric == 1.3.2

  • torch == 1.4.0

基于图神经网络的训练及测试过程代码基于GPT-GNN项目修改完成。

数据和nlp模型准备

在数据集云脑一中下载数据和nlp模型datadrive.zip,解压缩到目录HiStar/src/branch/master/examples/example_cptrade_v1/下。我们的实验模拟在一台本地8卡服务器中,有7个联邦参与方,每方拥有各自的一份数据,进行联邦安全聚合。

非联邦学习实现代码

分别单独运行7个参与方非联邦代码,不参与联邦安全聚合

运行非联邦学习脚本

bash run_alone.sh

利用HiStar实现联邦学习代码

运行聚合服务器和7个参与方联邦代码,进行安全聚合

运行联邦学习脚本

bash run_fed.sh

参与联邦微调的用户可根据需求配置修改以下代码:

修改train_client.py代码:

client = HiStar.ClientWorker(None, '0.0.0.0', 9088, RANK, 7, device, verbose=False)

将ip地址‘0.0.0.0’改为实际聚合服务器的IP地址;

将端口‘9088’改为实际聚合服务器的端口地址;

将代码中的“rank”改为事先约定好的序号;

将代码中参与方个数‘7’改为实际当前参与联邦的用户人数。

修改train_server.py代码:

host = "0.0.0.0"
port = 9088

server = HiStar.ServerWorker(None, host, port, device='cuda:7', verbose=True) 

将ip地址host修改为实际聚合服务器的IP地址;

将端口‘9088’改为实际聚合服务器的端口地址;

代码差异比较

在本示例中,用户1在联邦前后的代码变化如下:


修改前(非联邦学习)

  
  
 
352     optimizer = torch.optim.AdamW(model.parameters(), lr = args.lr)
353     scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, 500, eta_min=1e-6)



修改后(联邦学习)

354    client = HiStar.ClientWorker(None, '0.0.0.0', 9088, RANK, 7, device, verbose=False)
355    
356    optimizer = torch.optim.AdamW(model.parameters(), lr = args.lr)
357    scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, 500, eta_min=1e-6)
368    optimizer = HiStar.FedOptim(optimizer, client)

测试指标

软件环境:pytorch1.4.0 python3.6 cuda10.1

资源环境:CPU Memory 1.5T, GPU Memory 32G

CPU型号: Intel(R) Xeon(R) Platinum 8268 CPU @ 2.90GHz

GPU型号为Tesla V100

数据集:专利图谱

针对联邦学习给服务器和用户所带来额外的计算开销、通信开销以及对模型性能的影响我们给出了相应的测试指标,其中测试所使用图神经网络模型参数为1700多万个,其中可训练参数为17852570个,每个参与联邦微调的用户本地拥有1个知识产权图谱,每个图有3万多个节点和9万多条边。


(表1中的运行时间、计算开销、通信开销为一次迭代的时间,参与联邦微调的用户每次迭代后都进行一次安全聚合。表2中的运行时间为完成模型训练迭代50次所需要的总时间,联邦前的模型性能是使用单独一个用户的数据做微调后得到的结果。)