项目简介
背景:联邦学习
联邦机器学习(Federated machine learning/Federated Learning),又名联邦学习,联合学习,联盟学习。联邦机器学习是一个机器学习框架,能有效帮助多个机构在满足用户隐私保护、数据安全和政府法规的要求下,进行数据使用和机器学习建模。联邦学习作为分布式的机器学习范式,可以有效解决数据孤岛问题,让参与方在不共享数据的基础上联合建模,能从技术上打破数据孤岛,实现AI协作。谷歌在2016年提出了针对手机终端的联邦学习,微众银行AI团队则从金融行业实践出发,关注跨机构跨组织的大数据合作场景,首次提出“联邦迁移学习”的解决方案,将迁移学习和联邦学习结合起来。据杨强教授在“联邦学习研讨会”上介绍,联邦迁移学习让联邦学习更加通用化,可以在不同数据结构、不同机构间发挥作用,没有领域和算法限制,同时具有模型质量无损、保护隐私、确保数据安全的优势。(来源于知乎)
通俗来说就是本地使用自己的数据集进行训练,然后上传集中聚合,再返回到本地,不断进行着上传与返回,得到一个优秀的模型。在这个过程中本地模型的训练只用到了自己的数据集,但是通过远端的聚合,会得到一个相当于使用了所有本地数据集训练的模型。这样在保护了本地数据集隐私的同时,会得到了表现良好的模型,一举两得。
异步分布式联邦学习
随着5G网络的广泛采用和硬件的快速发展,异构设备(包括边缘和物联网设备)获得了更高的通信和计算能力,以及更广泛的应用程序。与经典的ML方法相比,FL为边缘应用提供了各种优势:
(1)由于基于梯度的全局模型聚合,更高的本地数据隐私;
(2)网络传输延迟更低,因为训练数据不需要传输到云;
(3)由于从其他设备学习的特性,更高的模型质量。因此,FL能够在异构设备上对ML模型进行协同训练,这在许多研究论文中得到了证明。
同时将经典的FL应用于资源受限的设备时出现了以下缺点:
(1)异构设备的不可靠性。聚合服务器等待更新的本地梯度,这些梯度可能由于设备的异构性和不可靠性会出现脱线的情况,严重降低学习效率。
(2)效率低。设备资源和各个设备数据的差异。训练比较快的设备必须等待速度慢的设备上传本地更新的数据。
(3)资源利用率低下。由于不适当的worker选择策略,可能会导致一些工作能力比较强的worker未被选中。
(4)联邦学习中安全和隐私问题。安全则是由于训练节点上发起的毒害攻击引起的,隐私是由于局部梯度更新可能会出现梯度泄露的问题。
为了克服上述的一些挑战提出了异步联邦学习方法,中心服务器一旦收集到了很少的本地模型,就开始全局聚合。相较于传统的联邦学习,提高了聚合的效率,同时克服了单个设备故障会影响全局聚合的问题。
我们团队的项目工作
以往的联邦学习的成果展示,大多需要在运行结束之后去和之前的数据进行比较,做出分析,对此我们提出了联邦学习可视化适配计划,在原本联邦学习算法的基础上,以传统联邦学习的数据为驱动,加以数据可视化展示,同时将原本单个设备的运行模拟,通过分布式的方式和网络通讯的协助,放置到不同设备进行更为符合实际的运行。
项目结构
在项目蓝图确立之后,我们对于项目结构又进行了多次讨论,最终确定使用vue+django作为我们的主要开发结构,前端使用vue3.0的element-plus组件库进行界面设计,后端使用python的django库,便于直接嵌入人工智能的算法。分布式的体现主要是将模型的训练和模型的聚合放在不同的主机之间进行,不同主机之间通过python的网络编程建立连接。
本项目采用分布式开发框架,Server主要负责模型的聚合,Client主要是去模拟中小型企业的模型训练,通过Python的网络通讯建立链接;在Client中则采用了Vue+Django的前后端分离的开发模式。
项目配置
客户端前端Vue项目配置
1.确保你的电脑上安装了nodejs, 这个很简单,参考Nodejs安装教程_彭佼的博客-CSDN博客_nodejs安装 命令行里npm能用就好
2.Cd进入前端文件姐client_front
3.命令行输入npm install 自动安装需要的包
4.命令行输入npm run serve 启动前端项目。
前端需要的包在package.json里面是规定好的,所以无需担心版本统一。
客户端后端django+channels+pymysql
Channels安装:
Pip install channels
Django安装:
Pip3 install Django==3.2.10
Pymysql安装:
Pip install pymysql==1.0.2
服务器端聚合配置
torch版本
在 https://download.pytorch.org/whl/torch/ 网站通过 ctrl+f 搜索 torch-1.8.1+cpu-cp38-cp38-win_amd64.whl 进行下载对应版本。
个人分工
我在本项目中主要负责前端界面的实现。