现代多节点机器学习系统中,交换梯度是一种广泛采用的方法。过去很长一段时间,人们认为共享出去的梯度不会泄露本地训练数据。然而,我们发现,从共享的梯度中获取本地的训练数据是可能的。我们命名这种泄露为梯度泄露(Deep Leakage from Gradient, DLG),并经验上验证了这种泄露在CV和NLP上的有效性。实验结果显示我们的攻击比以往的方法更加有效:数据的重构在图像上具有像素级别的准确性,在文本上具有token级别的准确性。我们还讨论了几种可能的策略来避免这种泄露。不需要修改训练设置,最有效的防护手段是梯度修剪。
介绍合作学习。只对梯度进行交换,隐私场景下十分常用。
有工作表明梯度揭露了训练数据的某些特性,比如property classifier(一个有特定属性的样本是否在batch内),以及使用GAN来生成像训练图像的图片。在这里,我们考虑一个更具挑战性的场景:能否从梯度信息中完全取得训练的数据。公式化地说:给定一个机器学习模型 $F()$与其权重 $W$,如果我们拥有一对输入和标签的梯度 $\nabla w$,能否反向获取到训练数据。传统的智慧告诉我们不能,但是我们发现这确实是可能的。
在我们的工作中,我们演示了梯度泄露(DLG):共享梯度会泄露隐私的训练数据。
local train: step $t$, node $i$, minibatch $(x_{t,i},y_{t,i})$
$$ \nabla W_{t, i}=\frac{\partial \ell\left(F\left(\mathbf{x}{t, i}, W_t\right), \mathbf{y}{t, i}\right)}{\partial W_t} $$
server aggregation: server number $N$
$$ \overline{\nabla W_t}=\frac{1}{N} \sum_j^N \nabla W_{t, j} ; \quad W_{t+1}=W_t-\eta \overline{\nabla W_t} $$
Note $F()$ and $W_t$ are shared by default for synchronized distributed optimization.