预备知识
1.GAN:
公式:
m
i
n
G
m
a
x
D
=
E
x
∽
p
d
a
t
a
(
x
)
[
log
D
(
x
)
]
+
E
z
∽
p
z
(
z
)
[
log
(
1
−
D
(
G
(
z
)
)
)
]
\underset{G}{min}\underset{D}{max}=\mathbb{E}_{x\backsim p_{data}(x)}[\log D(x)]+\mathbb{E}_{z\backsim p_{z}(z)}[\log (1-D(G(z)))]
GminDmax=Ex∽pdata(x)[logD(x)]+Ez∽pz(z)[log(1−D(G(z)))]
p
d
a
t
a
(
x
)
p_{data}(x)
pdata(x):真实数据的分布
p
z
(
z
)
p_{z}(z)
pz(z):生成器生成的数据的分布
目标:
- 对于鉴别器D来说:如果x是来自 p d a t a p_{data} pdata,那么 log D ( x ) \log D(x) logD(x)的值需要尽可能的大,如果x来自 p z p_{z} pz,那么 log D ( x ) \log D(x) logD(x)的值需要尽可能的小,从而 log ( 1 − D ( G ( z ) ) ) \log (1-D(G(z))) log(1−D(G(z)))就需要尽可能的大。
- 对于生成器G来说:如果x来自 p z p_{z} pz,那么 log D ( x ) \log D(x) logD(x)的值需要尽可能的大,从而 log ( 1 − D ( G ( z ) ) ) \log (1-D(G(z))) log(1−D(G(z)))就要尽可能的小。
本文目标:
- 我们证明了联邦学习在本质上很容易受到恶意参与者发起的中毒攻击,并给出了攻击模型。
- 我们提出了一种名为Data_Gen的有害数据生成方法,攻击者可以悄悄部署本地化GAN来模仿其他参与者的训练样本
算法:
有毒数据生成算法:
生成中毒数据的算法:
输入:训练数据
D
t
r
a
i
n
D_{train}
Dtrain,全局模型
G
t
G_t
Gt,噪声样本
Z
n
o
i
s
e
Z_{noise}
Znoise,标签
Y
Y
Y。
输出:有毒数据
D
n
o
i
s
e
D_{noise}
Dnoise
Step1:初始化鉴别器D和生成器G。
Step2:循环t次,t为全局模型更新的次数。
Step3:把噪声样本中的数据输入到生成器G中生成
x
f
a
k
e
,
然
后
把
x
f
a
k
e
x_{fake},然后把x_{fake}
xfake,然后把xfake发送到D。
Step4:如果
x
f
a
k
e
x_{fake}
xfake的标签是
y
m
y_{m}
ym,把
x
f
a
k
e
x_{fake}
xfake赋值给
x
m
x_{m}
xm,如果不是就更新生成器。
Step5:如果
x
m
l
a
b
e
l
=
y
m
x_{m}^{label}=y_{m}
xmlabel=ym,把
x
m
x_{m}
xm的标签修改为
y
n
y_{n}
yn并把
(
x
m
,
y
n
)
(x_{m},y_{n})
(xm,yn)添加到
D
n
o
i
s
e
D_{noise}
Dnoise。
PoisonGan算法
G
t
G_t
Gt:全局模型
D
t
r
a
i
n
D_{train}
Dtrain:训练数据
L
\mathcal{L}
L:损失函数
初始化鉴别器D和生成器G。
服务器端的操作:
Step1:把全局模型参数发送给每一个参与者。
Step2:接收每一个参与者发送的更新参数。
Step3:更新全局模型。
客户端的操作:
Step1:接收全局模型参数。
Step2:如果该客户端是攻击者,使用全局模型初始化鉴别器D。
Step3:生成中毒数据,并使用梯度下降去更新攻击者的模型。
Step4:计算中毒更新,并乘上一个
S
S
S,缩小攻击。
Step5:如果该客户端是普通客户端,更新本地参数。
Step6:把所有客户端的参数更新发送到服务器。