Skip to content

Instantly share code, notes, and snippets.

@tim54100

tim54100/blog.md Secret

Created August 7, 2020 03:44
Show Gist options
  • Save tim54100/c0c5eaa0e4a06a69fd93aed0c34df369 to your computer and use it in GitHub Desktop.
Save tim54100/c0c5eaa0e4a06a69fd93aed0c34df369 to your computer and use it in GitHub Desktop.

Deep Leakage frome gradients

論文介紹

分散式機器學習其中一種作法是藉由將梯度傳給別人做訓練,下列圖片介紹了有無中央伺服器的差別,如果有中央伺服器的話,它會拿到所有人對於資料的梯度,若沒有中央伺服器,則每個 GPU 伺服器只會拿到自己前一個人的梯度。

那你可能會問為什麼會用到分散式機器學習,有兩種可能性,一個是想利用多伺服器多 GPU 的優勢,讓計算時間下降,另一個則是保護資料, GPU 伺服器或者稱客戶端不想讓中央伺服器知道真實資料,兩種用途所有 GPU 伺服器都需要權重,讓他們能夠計算梯度。

講完前情提要後,那這篇論文要做的是從剛剛提到的情境中,利用梯度找回原始資料,比起原本其他方法,頂多找到模型的性質,像是其中有提到一篇 "Exploiting unintended feature leakage in collaborative learning" 就可以從人臉辨識模型(假設每個類別為不同人),那就可以推測出每個類別的性質,比如這個人有沒有戴眼鏡、膚色、頭髮長不長等等,甚至如果是單純的性別分類也可以做到類似的事情,還能判斷特定的人是在什麼時候開始加入訓練,這已經算是很強大了。

不過在這篇 paper 中發現了一個有趣的特性,就算沒有標籤,我們可以從梯度和權重去訓練出原始資料和標籤,在這之前大家都認為梯度是安全的,即使會洩漏一些資訊,但也不會洩漏太多,但就像很經典的一句話"任何固定任意輸入,會給出對應固定輸出的函式都一定可以攻破"(當然如果是不管輸入什麼,輸出都一樣那就不行了XD),所以在密碼學的論文中我們通常會以被破解需要花多少時間,來衡量一個算法的優劣。

論文細節

下面這張圖基本上闡述了整個論文的作法,惡意的攻擊者拿到一般參與者的梯度後,會先隨機產生假的原始資料和標籤,再使用 MSE 當損失函數(loss)接著做梯度下降想辦法去逼近原本的資料。

不知道看到這邊大家會不會有個想法,就這麼簡單嗎??? 沒錯,就這麼簡單,但之前怎麼都沒有人想到或發成論文呢?而且效果像下面那樣,看起來還真的不錯。(Melis 是別篇論文的方法)

筆者有用 Keras 做簡單的 implement,在其中有發現一個特點是可能的原因,先講結論,基本上是訓練完後梯度太小,所以沒有足夠資訊去還原資料。

那找到的過程是,在一開始試驗的時候我先把一個 Mnist 分類器訓練好,然後再將 test 資料當作新訓練資料丟進去試試,結果效果不盡人意。

那第一個想法習慣性的是我哪裡寫錯了嗎?但經過再三檢查卻都沒發現問題,就開始測其他圖片,大概測了10張左右總算有一張可以還原成近似原始資料的模樣,近而去比對他們的梯度,發現能還原的那筆資料的梯度比起其他資料少了不少為0的部分,也就代表相對擁有更多的資訊。

讓我們重新檢視一下這篇論文的使用情境,是在分散式學習的架構底下,重點是在學習上,所以用在已經學完的模型上自然沒什麼用,而這也是以前研究大多在做的,想從已經從資料裡學習完的模型中,想辦法反推資料,或者也有的在分析每個類別的特點,比如人臉辨識模型中,可以判斷說單個類別的人是否有帶眼鏡之類的,而這篇論文則主要想利用的是梯度和訓練中的模型直接反推資料,雖然沒辦法真的完全一模一樣,但已經看似極為相似了。

下圖為我自己寫的版本結果,上面的7是原本圖片,下面是還原的過程 想試玩的話我放在這邊

但其實他們官方也釋出程式碼,我是寫完才發現的XD,可以參考這邊

而且效果看起來更好一些

Reference:

Deepleakage論文

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment