Opacus一款用於訓練具備差分隱私的PyTorch模型的高速庫

image
原做者:Davide Testuggine、Ilya Mironov,均爲 Facebook AI 應用研究科學家
原文連接:https://ai.facebook.com/blog/...git

Opacus是一個可以訓練PyTorch模型的差分隱私的庫。它支持在客戶端上以最小的代碼改動進行訓練,對訓練性能影響不大,並容許客戶端在線跟蹤任何給定時刻的隱私預算支出。
這個代碼版本是針對兩個目標受衆:
ML從業者會發現這是一個溫和的介紹,以訓練一個具備微分隱私的模型,由於它須要最小的代碼變化。
差分隱私科學家會發現這很容易進行實驗和修整,讓他們專一於重要的事情。

Opacus是一種新的高速庫,用於使用差分隱私(DP)訓練PyTorch模型,該庫比現有的最新方法更具可擴展性。差別隱私是用於量化敏感數據匿名化的嚴格數學框架。它一般用於分析中,而且對機器學習(ML)社區的興趣日益濃厚。隨着Opacus的發佈,咱們但願爲研究人員和工程師提供一條更輕鬆的途徑,以在ML中採用差別隱私,並加速該領域的DP研究。github

Opacus提供:

  • 速度:經過利用PyTorch中的Autograd掛鉤,Opacus能夠計算成批的每一個樣本的梯度,與依賴微批處理的現有DP庫相比,可將數量級的速度提速。
  • 安全:Opacus使用 密碼安全的僞隨機數生成器
  • 對其安全性相當重要的代碼。這在GPU上高速處理了整批參數。
  • 靈活性:多虧了PyTorch,工程師和研究人員能夠經過將咱們的代碼與PyTorch代碼和純Python代碼進行混合和匹配來快速建立他們的想法的原型。
  • 生產力:Opacus隨附教程,輔助功能,這些功能甚至能夠在你開始培訓以前就警告不兼容的圖層以及自動重構機制。
  • 交互性:Opacus會跟蹤你在任何給定時間點花費了多少隱私預算(DP中的核心數學概念),從而可以提前中止和實時監控。

Opacus經過引入PrivacyEngine抽象定義了一個輕量級的API,該抽象既能夠跟蹤你的隱私預算,也能夠處理模型的漸變。你無需直接調用它便可運行,由於它已鏈接到標準PyTorch優化器。它在後臺運行,使使用Opacus進行培訓就像在培訓代碼的開頭添加如下代碼行同樣容易:算法

model = Net()

optimizer = torch.optim.SGD(model.parameters(), lr=0.05)

privacy_engine = PrivacyEngine(

 model,

 batch_size=32,

 sample_size=len(train_loader.dataset),

 alphas=range(2,32),

 noise_multiplier=1.3,

 max_grad_norm=1.0,

)

privacy_engine.attach(optimizer)

That's it! Now it's business as usual

訓練後,生成的工件是標準的PyTorch模型,沒有額外的步驟或部署私有模型的障礙:若是你今天能夠部署模型,則能夠在使用DP對其進行了訓練以後進行部署,而無需更改任何代碼。安全

Opacus庫還包括通過預先訓練和微調的模型,針對大型模型的教程以及爲隱私研究實驗而設計的基礎結構。網絡

使用Opacus實現高速隱私培訓

咱們與Opacus的目標是保留每一個訓練樣本的隱私,同時限制對最終模型準確性的影響。框架

Opacus經過修改標準的PyTorch優化器來作到這一點,以便在訓練過程當中實施(和測量)DP。機器學習

更具體地說,咱們的方法集中在差分私有隨機梯度降低(DP-SGD)上。ide

該算法背後的核心思想是,咱們能夠經過干預模型用來更新權重的參數梯度(而不是直接獲取數據)來保護訓練數據集的隱私。經過在每次迭代中將噪聲添加到梯度中,咱們能夠防止模型記住其訓練示例,同時仍可進行彙總學習。(無偏的)噪聲天然會在訓練過程當中看到的許多批次中抵消。工具

可是,增長噪聲須要微妙的平衡:過多的噪聲會破壞信號,而過少的噪聲將沒法保證隱私。爲了肯定合適的比例,咱們看一下梯度的範數。限制每一個樣本對梯度的貢獻很重要,由於離羣值比大多數樣本具備更大的梯度。咱們須要確保這些異常值的私密性,尤爲是由於它們極有可能被模型記住。爲此,咱們在一個小批處理中計算每一個樣本的梯度。咱們分別裁剪梯度,將其累積回單個梯度張量,而後將噪聲添加到總和中。性能

這種基於樣本的計算是構建Opacus的最大障礙之一。與PyTorch的典型操做相比,它更具挑戰性,自動畢業計算整個批次的梯度張量,由於這對於全部其餘ML用例都是有意義的,而且能夠優化性能。爲了克服這個問題,咱們使用了高效技術訓練標準神經網絡時得到全部所需的梯度向量。對於模型參數,咱們單獨返回給定批次中每一個示例的損失梯度。

這是Opacus工做流程的圖表,咱們在其中計算每一個樣本的梯度。

經過在運行各層時跟蹤一些中間數量,咱們可使用適合內存的任何批次大小進行訓練,從而使咱們的方法比其餘軟件包中使用的替代微批次方法快一個數量級。

隱私保護機器學習的重要性

安全社區鼓勵安全關鍵代碼的開發人員使用少許通過仔細審查和專業維護的庫。經過容許應用程序開發人員專一於他們最瞭解的事情:構建出色的產品,這種「不自行加密」的原則有助於最大程度地減小攻擊面。隨着ML的應用和研究不斷加速,對於ML研究人員而言,重要的是使用易於使用的工具來得到數學上嚴格的隱私保證,而不會拖慢培訓過程。

咱們但願經過開發Opacus等PyTorch工具,使對此類隱私保護資源的訪問民主化。咱們正在使用PyTorch更快,更靈活的平臺彌合安全社區和通常ML工程師之間的鴻溝。

建築社區

在過去的幾年中,隱私保護機器學習(PPML)社區獲得了快速發展。咱們爲Opacus周圍已經造成的生態系統感到興奮,咱們的主要貢獻者之一是OpenMined,這是一個由數千名開發人員組成的社區,他們正在構建以隱私爲中心的應用。並利用許多PyTorch構建塊爲PySyft和PyGrid提供基礎,以實現差別化隱私和聯合學習。做爲合做的一部分,Opacus將成爲OpenMined庫(例如PySyft)的依賴項。咱們期待繼續咱們的合做,並進一步擴大社區。

Opacus是Facebook AI促進工做進步的更普遍努力的一部分安全發展 計算技術用於機器學習和負責任的人工智能。整體而言,這是未來將其領域轉向構建隱私優先系統的重要踏腳石。

開源地址:https://github.com/pytorch/op...

image.png

相關文章
相關標籤/搜索