第一届大学生网络安全与协作学习大赛(红烧鲤鱼历险记战队)
@author: wbr wzk
建议将尝试过的优化思路与方法以及结果总结到这份文档中,方便我们高效合作。
- 参数聚合服务器端
- 加权梯度: 给传递的聚合梯度设置权重,从而让能力更强的模型能够主导梯度下降的方向,具体的方式有:
- 依据节点数据量与数据标签丰富度加权;
依据模型表现(准确率、损失)加权(单个节点可能由于数据量过少或者过于标签类型单一而出现虚假的较高表现);- 采用boosting的思想,后期每轮评估出表现最差的一个或者几个节点(这些节点可能由于本地数据量大或者标签过于丰富),把更大的梯度权重系数赋给他们,帮助他们训练。
- 改进全局优化算法:
- 经典的参数聚合服务器采用的是简单的梯度平均算法,按照数据量对每一个节点上传的梯度进行加权,而对于每一个样本实际上等价于随机梯度下降。可以在服务器上引入Adam等优化算法(称为服务端的FEDOPT),提升效果。具体可以借鉴参考谷歌的这篇文章;
- 把每一个节点看成不同的task, 引入MAML算法.
- 本地节点端
- 改进模型结构: 使用更加复杂的网络提升性能,具体如下:
- 加深网络,加入BN层、dropout层等;
- 从网络中间进行抽头,参考自蒸馏的思想,多头进行粗细粒度不同的分类任务(比如前一个抽头只做是否为良性的二分类任务,后一个区分样本为哪一大类攻击方式,以此类推)。细粒度的抽头可以使用粗粒度抽头提供的监督信号。
- 本地节点正则化
- 参考Tian Li这篇文章,模型在每一个node上面训练时候加入正则化项;
- 选Leader
- 经过若干轮之后依次使用每一个member提交的梯度更新一次当前模型
- 测试效果
- 选出最好的一个结果,以这个member(提供梯度的member)为leader,将它的权重设置高一级
- 接着进行训练若干轮,重复此过程
- 时间线
- 改进模型结构
- 五层网络(->激励函数)->加上BN层->dropout层(让网络的不同的部分聚焦于不同的攻击)
- 聚合模型的方法
- 加权梯度策略
- Adam策略(参考谷歌的文章)
- 抽头自蒸馏