0
本文作者: 貝爽 | 2020-09-02 18:26 |
如何保護(hù)數(shù)據(jù)集隱私,是深度學(xué)習(xí)訓(xùn)練必須要解決的問題之一。
近日,F(xiàn)acebook開源了一個(gè)名為Opacus的高速庫,該庫可用于訓(xùn)練具有差分隱私的PyTorch模型。
差分隱私(Differential Privacy ,簡(jiǎn)稱DP)是保護(hù)數(shù)據(jù)集隱私的重要工具。在此之前,谷歌、微軟等也陸續(xù)開源了其核心產(chǎn)品使用的差分隱私庫。
不同的是,與現(xiàn)有方法相比,Opacus具有可擴(kuò)展性,支持大多數(shù)類型的PyTorch模型,并且只需對(duì)神經(jīng)網(wǎng)絡(luò)進(jìn)行最少的代碼更改。同時(shí)它允許客戶端實(shí)時(shí)監(jiān)控任何給定時(shí)間花費(fèi)的隱私預(yù)算(Privacy Budget,DP中的核心數(shù)學(xué)概念)。
蘋果在 2016 的開發(fā)者大會(huì)上首次提出了“差分隱私(DP)”的概念。即通過算法來打亂個(gè)體用戶數(shù)據(jù),讓任何人都不能憑此追蹤到具體的用戶,但又可以允許機(jī)構(gòu)成批分析數(shù)據(jù)以獲得大規(guī)模的整體趨勢(shì)用于機(jī)器學(xué)習(xí)。
換句話說,DP有效地限制了某些用于匯總數(shù)據(jù)集信息的算法。
Facebook在博客中稱,他們通過計(jì)算精確答案并添加隨機(jī)采樣噪聲來執(zhí)行計(jì)數(shù)查詢的差分隱私。以最簡(jiǎn)單的形式,可以使用從拉普拉斯分布中提取的噪聲來實(shí)現(xiàn)隱私保護(hù)機(jī)制。
同時(shí),他們?cè)诖嘶A(chǔ)上,引入差分私有隨機(jī)梯度下降算法(Differentially Private Stochastic Gradient Descent,簡(jiǎn)稱,DP-SGD),該算法通過小批量隨機(jī)優(yōu)化過程,使其具有差分私有性。
具體而言,Opacus庫在保護(hù)數(shù)據(jù)隱私方面有以下特性:
速度:通過利用PyTorch中的Autograd Hook,Opacus可以計(jì)算成批的單個(gè)樣本梯度,與微批量(Microbatching.)處理的現(xiàn)有DP庫相比,實(shí)現(xiàn)了數(shù)量級(jí)的加速。
安全:Opacus對(duì)其安全關(guān)鍵代碼使用加密的偽隨機(jī)數(shù)生成器,在GPU上對(duì)整批參數(shù)進(jìn)行高速處理。
靈活性:Opacus可以與Pythorch代碼和純Python代碼相互混合和匹配,來快速構(gòu)建工程師的想法原型。
生產(chǎn)力:Opacus附帶教程,在訓(xùn)練開始前警告不兼容層的幫助函數(shù),以及自動(dòng)重構(gòu)機(jī)制。
交互性:Opacus可以跟蹤任何給定時(shí)間點(diǎn)花費(fèi)的隱私預(yù)算,從而能夠提早停止和實(shí)時(shí)監(jiān)控。
Opacus通過引入Privacy Engine抽象定義了一個(gè)輕量級(jí)API,它既可以跟蹤隱私預(yù)算,也可以處理模型的梯度。
同時(shí),它的使用方法也非常簡(jiǎn)單,無需調(diào)用,用戶只需要將Opacus附加到標(biāo)準(zhǔn)的PyTorch優(yōu)化器上,并在訓(xùn)練代碼的開頭添加以下代碼即可:
訓(xùn)練后,生成的就是一個(gè)標(biāo)準(zhǔn)的PyTorch模型,沒有部署私有模型的任何額外步驟或障礙:在使用DP對(duì)其進(jìn)行訓(xùn)練之后部署,無需更改任何代碼。
另外,Opacus庫還包括了經(jīng)過預(yù)訓(xùn)練和微調(diào)的模型,用于大型模型的教程,以及用于隱私研究實(shí)驗(yàn)的基礎(chǔ)結(jié)構(gòu)。
Opacus能夠在保護(hù)每個(gè)訓(xùn)練樣本私密性的同時(shí),限制對(duì)最終模型準(zhǔn)確性的影響。它通過修改標(biāo)準(zhǔn)的PyTorch優(yōu)化器來做到這一點(diǎn)。具體來說,是采用一種差分私有隨機(jī)梯度下降的算法。
Facebook在博客中稱,“該算法的核心思想是,我們可以通過干預(yù)模型來更新權(quán)重的參數(shù)梯度(而不是直接獲取數(shù)據(jù))來保護(hù)訓(xùn)練數(shù)據(jù)集的隱私。通過在每次迭代中將噪聲添加到梯度中,可以防止模型記住其訓(xùn)練示例,同時(shí)仍可進(jìn)行匯總學(xué)習(xí),(無偏)噪聲自然會(huì)在訓(xùn)練中看到的許多批次而抵消。
需要強(qiáng)調(diào)的是,由于PyTorch優(yōu)化器可以查看參數(shù)梯度,因此,可以直接將噪聲添加到其中,并允許任何人簡(jiǎn)單地訓(xùn)練差分私有模型,其代碼如下:
此外,噪聲的定量問題是這一解決方案的關(guān)鍵。因?yàn)檫^多的噪聲會(huì)破壞信號(hào),過少的噪聲將無法保證隱私。
為了確定合適的比例,首先要查看小批量中梯度的最大范數(shù)。因?yàn)殡x群值比大多數(shù)樣本具有更大的梯度,需要確保這些異常值的私密性。
通常研究人員會(huì)采用微批量(microbatch)的方法。該方法是在小批量處理中計(jì)算每個(gè)樣本的梯度,分別裁剪梯度,將其累積回單個(gè)梯度張量,然后將噪聲添加到總和中。該方法具有簡(jiǎn)單性和兼容性和特點(diǎn),但計(jì)算每個(gè)樣本的梯度,限制了訓(xùn)練的速度。
在這里,Opacus采用了另一種更高效的解決方案。該方案由谷歌于2015年提出,其論文為《EFFICIENT PER-EXAMPLE GRADIENT COMPUTATIONS》,對(duì)于所有ML樣本而言,它可以計(jì)算整個(gè)批次的梯度向量,同時(shí)優(yōu)化性能。
Facebook在論文中表示,他們?cè)谟?xùn)練標(biāo)準(zhǔn)神經(jīng)網(wǎng)絡(luò)時(shí),采用該方法獲得了所有需要的梯度向量。該方法的不同之處在于,對(duì)于模型參數(shù),可以單獨(dú)返回給定批次中每個(gè)示例的損耗梯度,如下所示:
通過在運(yùn)行各層時(shí)跟蹤一些中間數(shù)量,可以使用適合內(nèi)存的任何批次大小進(jìn)行訓(xùn)練,這種方法比其他軟件包中的微批量方法快一個(gè)數(shù)量級(jí)。
目前,這款Opacus高速庫已經(jīng)在Github開源。所有機(jī)器學(xué)習(xí)從業(yè)者和差異隱私科學(xué)家都可以下載使用。
Github地址:https://github.com/pytorch/opacus
Facebook表示,他們希望通過開發(fā)Opacus之類的PyTorch工具,可以使對(duì)此類隱私保護(hù)資源的訪問民主化,同時(shí)通過使用PyTorch的更快,更靈活的平臺(tái)彌合了安全社區(qū)和通用機(jī)器學(xué)習(xí)工程師之間的鴻溝。
用戶可以直接從Github安裝最新版本,代碼如下:
git clone https://github.com/pytorch/opacus.git
cd opacus
pip install -e .
另外,需要注意的是,要使用差分隱私訓(xùn)練模型,需要聲明PrivacyEngine,并將其附加到優(yōu)化器,再運(yùn)行,例如:
引用鏈接:雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
https://medium.com/pytorch/differential-privacy-series-part-1-dp-sgd-algorithm-explained-12512c3959a3
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。