如何保护数据集隐私,是深度学习训练必须要解决的问题之一。

  近日,Facebook 开源了一个名为 Opacus 的高速库,该库可用于训练具有差分隐私的 PyTorch 模型。

Facebook开源差分隐私库Opacus,可保护数据隐私且高效训练Prytorch模型-冯金伟博客园

  差分隐私(Differential Privacy ,简称 DP)是保护数据集隐私的重要工具。在此之前,谷歌、微软等也陆续开源了其核心产品使用的差分隐私库。

  不同的是,与现有方法相比,Opacus 具有可扩展性,支持大多数类型的 PyTorch 模型,并且只需对神经网络进行最少的代码更改。同时它允许客户端实时监控任何给定时间花费的隐私预算(Privacy Budget,DP 中的核心数学概念)。

  保护隐私的 Opacus 库

  苹果在 2016 的开发者大会上首次提出了“差分隐私(DP)”的概念。即通过算法来打乱个体用户数据,让任何人都不能凭此追踪到具体的用户,但又可以允许机构成批分析数据以获得大规模的整体趋势用于机器学习。

  换句话说,DP 有效地限制了某些用于汇总数据集信息的算法。

  Facebook 在博客中称,他们通过计算精确答案并添加随机采样噪声来执行计数查询的差分隐私。以最简单的形式,可以使用从拉普拉斯分布中提取的噪声来实现隐私保护机制。

  同时,他们在此基础上,引入差分私有随机梯度下降算法(Differentially Private Stochastic Gradient Descent,简称,DP-SGD),该算法通过小批量随机优化过程,使其具有差分私有性。

  具体而言,Opacus 库在保护数据隐私方面有以下特性:

  • 速度:通过利用 PyTorch 中的 Autograd Hook,Opacus 可以计算成批的单个样本梯度,与微批量(Microbatching.)处理的现有 DP 库相比,实现了数量级的加速。

  • 安全:Opacus 对其安全关键代码使用加密的伪随机数生成器,在 GPU 上对整批参数进行高速处理。

  • 灵活性:Opacus 可以与 Pythorch 代码和纯 Python 代码相互混合和匹配,来快速构建工程师的想法原型。

  • 生产力:Opacus 附带教程,在训练开始前警告不兼容层的帮助函数,以及自动重构机制。

  • 交互性:Opacus 可以跟踪任何给定时间点花费的隐私预算,从而能够提早停止和实时监控。

  Opacus 通过引入 Privacy Engine 抽象定义了一个轻量级 API,它既可以跟踪隐私预算,也可以处理模型的梯度。

  同时,它的使用方法也非常简单,无需调用,用户只需要将 Opacus 附加到标准的 PyTorch 优化器上,并在训练代码的开头添加以下代码即可:

Facebook开源差分隐私库Opacus,可保护数据隐私且高效训练Prytorch模型-冯金伟博客园

  训练后,生成的就是一个标准的 PyTorch 模型,没有部署私有模型的任何额外步骤或障碍:在使用 DP 对其进行训练之后部署,无需更改任何代码。

  另外,Opacus 库还包括了经过预训练和微调的模型,用于大型模型的教程,以及用于隐私研究实验的基础结构。 

  高效训练的核心算法

  Opacus 能够在保护每个训练样本私密性的同时,限制对最终模型准确性的影响。它通过修改标准的 PyTorch 优化器来做到这一点。具体来说,是采用一种差分私有随机梯度下降的算法。

  Facebook 在博客中称,“该算法的核心思想是,我们可以通过干预模型来更新权重的参数梯度(而不是直接获取数据)来保护训练数据集的隐私。通过在每次迭代中将噪声添加到梯度中,可以防止模型记住其训练示例,同时仍可进行汇总学习,(无偏)噪声自然会在训练中看到的许多批次而抵消。

  需要强调的是,由于 PyTorch 优化器可以查看参数梯度,因此,可以直接将噪声添加到其中,并允许任何人简单地训练差分私有模型,其代码如下:

Facebook开源差分隐私库Opacus,可保护数据隐私且高效训练Prytorch模型-冯金伟博客园

  此外,噪声的定量问题是这一解决方案的关键。因为过多的噪声会破坏信号,过少的噪声将无法保证隐私。

  为了确定合适的比例,首先要查看小批量中梯度的最大范数。因为离群值比大多数样本具有更大的梯度,需要确保这些异常值的私密性。

  通常研究人员会采用微批量(microbatch)的方法。该方法是在小批量处理中计算每个样本的梯度,分别裁剪梯度,将其累积回单个梯度张量,然后将噪声添加到总和中。该方法具有简单性和兼容性和特点,但计算每个样本的梯度,限制了训练的速度。

  在这里,Opacus 采用了另一种更高效的解决方案。该方案由谷歌于 2015 年提出,其论文为《EFFICIENT PER-EXAMPLE GRADIENT COMPUTATIONS》,对于所有 ML 样本而言,它可以计算整个批次的梯度向量,同时优化性能。

  Facebook 在论文中表示,他们在训练标准神经网络时,采用该方法获得了所有需要的梯度向量。该方法的不同之处在于,对于模型参数,可以单独返回给定批次中每个示例的损耗梯度,如下所示:

Facebook开源差分隐私库Opacus,可保护数据隐私且高效训练Prytorch模型-冯金伟博客园

  通过在运行各层时跟踪一些中间数量,可以使用适合内存的任何批次大小进行训练,这种方法比其他软件包中的微批量方法快一个数量级。

  安装方法

  目前,这款 Opacus 高速库已经在 Github 开源。所有机器学习从业者和差异隐私科学家都可以下载使用。

Facebook开源差分隐私库Opacus,可保护数据隐私且高效训练Prytorch模型-冯金伟博客园

  Github 地址:https://github.com/pytorch/opacus

  Facebook 表示,他们希望通过开发 Opacus 之类的 PyTorch 工具,可以使对此类隐私保护资源的访问民主化,同时通过使用 PyTorch 的更快,更灵活的平台弥合了安全社区和通用机器学习工程师之间的鸿沟。

  用户可以直接从 Github 安装最新版本,代码如下:

git clone https://github.com/pytorch/opacus.git

cd opacus

pip install -e .

  另外,需要注意的是,要使用差分隐私训练模型,需要声明 PrivacyEngine,并将其附加到优化器,再运行,例如:

Facebook开源差分隐私库Opacus,可保护数据隐私且高效训练Prytorch模型-冯金伟博客园

  引用链接:

  https://venturebeat.com/2020/08/31/facebook-open-sources-opacus-a-pytorch-library-for-differential-privacy/ 

  https://ai.facebook.com/blog/introducing-opacus-a-high-speed-library-for-training-pytorch-models-with-differential-privacy

  https://medium.com/pytorch/differential-privacy-series-part-1-dp-sgd-algorithm-explained-12512c3959a3