機器之心報導
編輯:小舟、陳萍
隱私保護是機器學習領域的重要倫理問題之一,而差分隱私(DP)是行之有效的隱私保護手段。那麼,如何方便地使用差分隱私來訓練機器學習模型呢?近日,Facebook 開源了 Opacus 庫,支援以這種方式訓練 PyTorch 模型。
近日,Facebook 開源了一個新型庫 Opacus,它支援使用差分隱私來訓練 PyTorch 模型,擴充套件性優於目前的 SOTA 方法。同時,Opacus 庫支援以最少程式碼更改來訓練模型,且不會影響訓練效能,並允許線上跟蹤任意給定時刻的隱私預算。
Opacus 庫開源地址:https://github.com/pytorch/opacus
Opacus 庫的目標受眾主要為以下兩類人群:
機器學習從業者:可以使用該庫輕鬆瞭解如何利用差分隱私訓練模型,該庫支援以最少程式碼更改來訓練模型;
差分隱私科學家:Opacus 庫易於實驗和修復,這允許他們專注於更重要的事。
差分隱私是一個具備數學嚴謹性的框架,可用於量化敏感資料的匿名化。Facebook 在相關部落格中表示,希望 Opacus 庫能為研究人員和工程師提供一條更簡單的途徑,以便在 ML 中使用差分隱私,並加快該領域的 DP 研究。
Opacus 庫提供了什麼?
透過這個開源的高速庫 Opacus,你可以得到:
速度:利用 PyTorch 中的 Autograd hook,Opacus 能夠批次化計算每個樣本的梯度。與依賴 microbatching 的現有 DP 庫相比,Opacus 實現了一個數量級的加速。
安全性:Opacus 對其安全關鍵程式碼使用密碼學安全偽隨機數生成器 CSPRNG,在 GPU 上對整批引數進行高速處理。
靈活性:基於 PyTorch,工程師和研究人員可以透過將 Opacus 程式碼與 PyTorch 程式碼和純 Python 程式碼進行融合和匹配,快速為其 idea 構建原型。
生產效率:Opacus 庫附帶教程、在訓練開始前提示不相容層的輔助函式,以及自動重構機制。
互動性:Opacus 可以追蹤使用者在任意給定時間所花費的隱私預算(DP 的核心數學概念),從而實現早停和實時監控。
Opacus 透過引入 PrivacyEngine abstraction 定義了一個輕量級的 API,它既可以追蹤隱私預算,也能夠處理模型梯度。該 API 無需直接呼叫,只需將其連線至標準 PyTorch 最佳化器。該 API 在後臺執行,這使得利用 Opacus 進行模型訓練變得非常簡單。使用者只需在訓練程式碼開頭新增以下程式碼即可:
訓練結束,即得到一個標準的 PyTorch 模型,並且它沒有部署私有模型的額外步驟或障礙:如果今天就想部署模型,你可以在使用 DP 訓練模型後進行部署,且無需更改一行程式碼。
Opacus 庫還包括預訓練和微調模型、針對大型模型的教程,以及為隱私研究實驗而設計的基礎架構。
如何使用 Opacus 實現高速隱私訓練?
Opacus 旨在保留每個訓練樣本的隱私,同時儘量不影響最終模型的準確率。Opacus 透過修改標準 PyTorch 最佳化器來實現這一點,以便在訓練過程中實現(和度量)差分隱私。
具體來說,Opacus 的重點是差分隱私隨機梯度下降(DP-SGD)。該演算法的核心思想是:透過干預模型用來更新權重的引數梯度來保護訓練集的隱私,而不是直接獲取資料。透過在每次迭代中向梯度新增噪聲,該庫可以防止模型記住訓練樣本,同時還可以實現在 aggregate 中的學習。在訓練過程的多個批次中,(無偏)噪聲自然會被抵消。
但是,新增噪聲需要一種微妙的平衡:噪聲過多會破壞訊號,過少則無法保證隱私。為了確定合適的規模,我們需要檢視梯度範數。限制每個樣本對梯度的影響非常重要,因為異常值的梯度大於大部分樣本。但是異常值的隱私也需要得到保護,因為它們極有可能被模型記住。
因此,開發者計算 minibatch 中每個樣本的梯度。開發者分別對每個梯度進行梯度裁剪,將其累積到一個梯度張量,然後再將噪聲新增其中。
基於每個樣本的計算是構建 Opacus 的最大障礙之一。PyTorch 的典型操作是利用 Autograd 計算整個批次的梯度張量,因為這對其他機器學習用例都有意義,並且可以最佳化效能。與之相比,基於每個樣本的計算顯然更具挑戰性。
為了克服這一困難,開發者利用 Ian Goodfellow 2015 年提出的高效技術(參見論文《EFFICIENT PER-EXAMPLE GRADIENT COMPUTATIONS》),獲取訓練標準神經網路所需的全部梯度向量。
至於模型引數,則單獨返回給定批次中每個樣本的損失梯度,整個過程如下所示:
Opacus 工作流程圖,其中計算了每個樣本的梯度。
透過在執行各層時追蹤一些中間量,Opacus 庫支援使用適合記憶體的任何批次大小進行訓練。這使得該方法比其他替代性 micro-batch 方法快了一個數量級。
此外,Opacus 庫的安裝和使用過程也比較簡單,詳情參見 GitHub 專案。