Krum算法是一种基于欧氏距离的拜占庭容错机器学习算法,是一种在分布式机器学习中保证其在具有拜占庭错误时仍然可以收敛的算法。
拜占庭错误
所谓的拜占庭错误在机器学习中是指,客户端在提交模型更新时,可以提交任意的随机数,或者选择不提交。当然,这有可能是由于机器故障或者网络故障等不可抗力的原因,也可能是由于恶意的用户故意提交错误的更新,来破坏训练过程。
算法假设
我们具有nnn个客户端{c1,c2,⋯ ,cn}\{c_1,c_2,\cdots,c_n\}{c1,c2,⋯,cn}和一个服务器sss,每个客户端都具有一部分数据,cic_ici具有数据DiD_iDi。一般假设数据是独立同分布的,也就是iid.
在这nnn个客户端中,有fff个是不诚实的,也就是可能发起拜占庭攻击的。且满足2f+2<n2f+2<n2f+2<n.
算法步骤
初始化:协商模型和各种必须参数;
1、sss将全局的参数WWW分发给所有客户端;
2、对于每个客户端cic_ici,同时进行:根据本地的数据计算本地的梯度gig_igi,然后发送给客户端;
3、模型收到客户端的梯度后,两两计算梯度之间的距离di,j=∣∣gi−gj∣∣2d_{i,j}=||g_i-g_j||^2di,j=∣∣gi−gj∣∣2;
4、对于每个梯度gig_igi,选择与他最近的n−f−1n-f-1n−f−1个距离,即{di,1,di,2,⋯ ,di,i−1,di,i+1,⋯ ,di,n}\{d_{i,1},d_{i,2},\cdots,d_{i,i-1},d_{i,i+1},\cdots,d_{i,n}\}{di,1,di,2,⋯,di,i−1,di,i+1,⋯,di,n}中最小的n−f−1n-f-1n−f−1个,不妨设为{di,1,di,2,⋯ ,di,n−f−1}\{d_{i,1},d_{i,2},\cdots,d_{i,n-f-1}\}{di,1,di,2,⋯,di,n−f−1},然后加起来作为该梯度gig_igi的得分Kr(i)=∑j=1n−f−1di,jKr(i)=\sum_{j=1}^{n-f-1}d_{i,j}Kr(i)=∑j=1n−f−1di,j.
5、计算所有的梯度的得分后,求得分最小的梯度gi∗g_{i^*}gi∗;
6、更新W=W−lr⋅gi∗W=W-lr\cdot g_{i^*}W=W−lr⋅gi∗;
7、重复1-6,直到模型收敛。
Multi-Krum
在Krum的算法中的第5步,选出一个最低得分的梯度后,再返回4步,继续选择,直到选择出了m个梯度,最后的梯度为这m个的平均。