Biscotti: A Blockchain System for Private and Secure Federated Learning"译为“Biscotti:一个用于隐私和安全联邦学习的区块链系统”
这是IEEE Transactions on Parallel and Distributed Systems 21(简称TPDS)上的一篇联邦学习和区块链相结合的文章。众所周知,TPDS是CCF A类期刊,上面论文的质量都不错,因此选读了这篇论文。以下内容,是自己阅读完后的一些小笔记,有不懂和疑问的地方,记录的都是个人认为重点的地方。
需要注意的是,本文中提到的见附录,但是我在下载的文献pdf中并没有看到附录。因此,还需要结合该作者18年发表在arXiv上的一篇论文来理解。以下是原文链接:
Biscotti: A Ledger for Private and Secure Peer-to-Peer Machine Learning
文章目录预览
联邦学习(FL)中的客户端需要完全相信中央服务器进行协调,且恶意客户端可能通过投毒攻击来损害模型性能。当前,FL主要受到投毒攻击和信息泄露攻击两种类型的攻击。
而以往的方案都是通过集中的异常检测、差分隐私和安全聚合进行防御。但是,目前还不存在同时解决这两种威胁的隐私和去中心化的解决方案。况且,传统方法不适用于缺乏可信中心权威的训练过程。
综上,本文提出了一种完全去中心化的Peer多方机器学习方法,它使用区块链和加密原语来协调peer客户端之间的隐私包含ML过程,称为Biscotti。
Biscotti使用了基于PoF(Proof of Federation)的一致性哈希和可验证随机函数(VRF)结合,为peer节点选择关键的角色,这些角色将帮助协调模型更新的隐私和安全性。为防止peer通过Multi-Krum防御毒害模型,通过差异化的私有噪声提供隐私,使用shamir秘密共享进行安全聚合。
首先理解相关的小知识。
设计目标:
分布式账本中的每个区块就代表了每次SGD的迭代,账本包含每次迭代全局模型中的state。

主要有八个步骤:
每个peer使用genesis(原始)区块中的信息初始化训练过程。每个peer从生成区块中获取以下信息:
每个区块包含前一个区块的哈希指针,还有多个peer的SGD更新的聚合 Δ w \Delta w Δw和在迭代 t t t次时的全局模型 w t w_t wt。新添加到账本中的区块存储了多个peer的聚合更新 ∑ Δ w i \sum\Delta w_i ∑Δwi。为了验证聚合是真实计算的,需要将单个更新包含在区块中。然而,单独存储会泄露个人私有训练数据,本文使用多项式承诺来解决这个问题。
通过在区块中包含每个peer
i
i
i的承诺列表
C
O
M
M
(
Δ
w
i
)
COMM(\Delta w_i)
COMM(Δwi),可以提供聚合的隐私性和可验证性。若提交的更新列表等于聚合总和,即以下等式成立
C
O
M
M
(
∑
Δ
w
i
)
=
∏
i
C
O
M
M
(
Δ
w
i
)
COMM(\sum\Delta w_i) = \prod_i COMM(\Delta w_i)
COMM(∑Δwi)=i∏COMM(Δwi)
每次迭代中,一个由peer的stake权重的一致性哈希进行选举出噪声者、验证者和聚合者。PoF确保peer的影响受其stake的限制。Peer可以在给定迭代中被分配多个角色。验证和聚合委员会对所有peers是相同的,但噪声委员会对每个peers是唯一的。
最后一个区块的初始SHA256被重复的进行哈希,每个新哈希被映射到一个哈希环,在这个哈希环中,根据他们的权益比例分配给peers,直至选出正确数量的验证者和聚合者委员会。

攻击者无法预测未来区块的状态,则不可能猜测出一致性哈希的输出,并制定策略进行攻击。
为防止信息泄露攻击,peer在验证过程中使用差分隐私,通过添加正态分布采样的噪声来隐藏自己的更新。
攻击者可能恶意使用噪声协议进行投毒或信息泄露攻击。若没有提前承诺噪声,那恶意参与方在完成本地梯度更新后,再生成自己的噪声,很容易进行伪造。
每个参与方对训练的每次迭代产生一个噪声和该噪声的承诺。

验证者peer对接收的更新集合运行Multi-krum算法,通过接收每轮接收到的大部分更新来过滤恶意的更新。每个验证者受到每个参与方 i i i的如下信息:
当验证者收到上述信息后,会按照如下公式进行验证:
C
O
M
M
(
Δ
w
i
+
∑
k
ζ
k
)
=
C
O
M
M
(
Δ
w
i
)
∗
∏
k
C
O
M
M
(
Δ
ζ
k
)
COMM(\Delta w_i + \sum_k \zeta_k) = COMM(\Delta w_i) *\prod_k COMM(\Delta \zeta_k)
COMM(Δwi+k∑ζk)=COMM(Δwi)∗k∏COMM(Δζk)
只要验证者收到了足够多的更新
R
R
R,他会使用multi-krum算法去挑选最好的更新。
需要验证委员会中的大多数委员对这个更新验证通过,才能防止恶意的验证者接收共谋者的所有更新。
所有在验证阶段具有足够数量签名的peer都提交他们的SGD更新,以便聚合到全局模型中。
w
t
+
1
=
w
t
+
∑
i
=
1
Δ
w
v
e
r
i
f
i
e
d
Δ
w
i
w_{t+1} = w_t + \sum^{\Delta w_{verified}}_{i=1} \Delta w_i
wt+1=wt+i=1∑ΔwverifiedΔwi
其中,
Δ
w
i
\Delta w_i
Δwi为peer验证过的SGD更新,
w
t
w_t
wt是迭代
t
t
t时的全局模型。
聚合协议允许一组
m
m
m个聚合器中至少有一半诚实地参与聚合阶段,就可以保护个人更新的隐私。若一致性哈希选择了大多数诚实的聚合器,那么这种保证就成立了,使用多项式承诺和可验证的秘密共享用于个人更新的聚合。
当peer观察到新区块时,可通过对最新区块执行一致性的哈希协议,并验证每个新区块指定的验证者和聚合者的签名,来验证所执行的计算是正确的。每个验证和聚合只在指定时间内发生,若未成功传播的任何更新将被删除。
实验环境:GO1.1.0、Python2.7.12实现了Biscotti,用PyTorch框架在训练过程中生成SGD更新和噪声。
实验目标:
在分布式设置中完成了实验,迭代100次,记录全局模型的测试误差。
调查Biscotti成功防御投毒攻击的不同参数设置,然后评估与联邦学习基准相比,它在30%恶意节点攻击下的性能。
实验表明,在每轮攻击者数量为30%的情况下,至少需要70%的更新数量被收集才能有效的抵抗投毒攻击。
Biscotti与联邦学习的基准率相比:使用相同恶意数据集30%的peer引入系统。下图显示了联邦学习相比的测试误差。
结果表明,对于这两个数据集,有毒的联邦学习部署很难收敛,Biscotti在测试集中的性能与基线无投毒FL部署一样好。说明Biscotti能有效抵抗这种攻击,而普通的FL无法抵抗这种攻击。


为证明委员会规模对攻击下收敛性的影响,作者用26个peers的更大验证和聚合委员会的MNIST数据集来分析,该数据集足够大,可以对控制系统30%stake的敌手提供保护。
由于在验证或聚合委员会中的peer在该轮中没有贡献更新,100个peers不能生成70%的更新来防止Multi-krum。因此,在这个实验中,将节点数增加到了200个。如下图
结果表明,Biscotti具有更大的验证和聚合委员会时,其收敛的迭代次数与未中毒的联邦学习相同。

评估随着peer数量的增加,每个阶段的开销变化。衡量不同委员会规模时,对Biscotti的性能影响,以及参与方退出对Biscotti收敛性的影响





本文与之前的工作不同,Biscotti不依赖集中的服务、可信的执行环境或专门的硬件来提供针对对手的防御。本文的实验做的比较多,但是个人知识匮乏,还有许多没读懂的地方。例如,如何实现哈希环的构造和执行等。本文还提供了源代码网址如下,希望后期能学一学复现。
https://github.com/DistributedML/Biscotti