論文學習記錄20200612:隱私保護神經網絡推理[USENIX2018]

GAZELLE: A Low Latency Framework for Secure Neural Network Inference
這篇論文是上週那篇的standing point,也是對神經網絡推理的隱私保護
在這裏插入圖片描述
在這裏插入圖片描述
Gazelle是一個可擴展的低延遲安全神經網絡推理系統,它使用了同態加密和傳統的兩方計算技術(在論文中具體指的混淆電路),它是把這兩者進行結合,混合起來使用。之前的工作一般都是要麼是同態,要麼是安全多方計算(像祕密共享、混淆電路這些),這種混合起來使用是一個創新。
在神經網絡推理系統中,有兩個參與方A和B,其中A持有卷積神經網絡(CNN),B持有網絡的輸入,也就是b的私有數據,通常是圖像。
本文設計一個A和B兩方都參與的協議,在該協議執行結束後,B獲得結果,即神經網絡的最後一層的輸出(以及潛在的網絡結構),而a什麼得不到關於b的隱私輸入的任何信息。

在這裏插入圖片描述
這個就是卷積神經網絡,輸入一個數據圖像,h圖像高度、w圖像寬度、c圖像通道數,接下來,紅色的是線性層,可以是兩種類型:卷積(Conv)層或全連接(FC)層。藍色的非線性層,通常是激活函數,最常見的是池化函數和ReLU函數。然後在經過幾層運算結束後,輸出這個圖像的分類,飛機、汽車、卡車等等。
這個是卷積神經網絡的過程,本文就是對這個過程進行安全的兩方計算。
在這裏插入圖片描述
作者提出的安全神經網絡推理協議是基於packed加法同態加密方案和混淆電路的,作者在卷積神經網絡中,是混合使用同態和安全多方計算的。對於線性層,使用pahe同態的方法,非線性層使用兩方計算,具體是混淆電路
該協議的威脅模型是半誠實敵手模型,即A和B遵守協議的規則,但試圖從協議文本中推斷有關另一方輸入(分別是網絡參數或圖像)的信息。
在這裏插入圖片描述
在這裏插入圖片描述
左邊是客戶端b,右邊是服務器端a
在線性層 PAHE階段開始時,服務器和客戶機擁有客戶端輸入y的加法共享 c_y, s_y
在第一次進行運算時,客戶端輸入y,服務器輸入0
進行線性層運算時,首先從客戶端B開始,使用PAHE方案加密它的共享c_y,,並將其發送到服務器a。
將GC轉同態,就是服務器把接收到客戶端的cy同態加sy得到一個y的密文。cy+sy=[y]。

然後服務器A輸入這個y,使用同態線性代數核來計算線性層(卷積層或完全連通層)。結果是一個x的密文,x包含到下一個非線性(ReLU)層的輸入。
同態方案確保A不知道B的輸入y。B始終沒有收到A的任何輸入,因此無法學習服務器a模型參數。

在準備評估隨後的非線性激活層時,A必須將她的PAHE密文轉換爲加法共享。
在這個步驟的開始,A持有 [x] 密文(其中x是向量),B持有私鑰。
第一步是轉換這個密文,使A和B都持有x的加性祕密共享。
這是通過服務器A向其密文同態添加隨機向量r以獲得加密的[x+r]並將其發送到客戶端B來實現的。
然後客戶端B使用同態加密的私鑰來解密此消息以獲取其共享。
因此,服務器A設置其共享sx=r,B設置其共享cx=x+r

接下來,使用Yao的GC協議評估非線性激活。
這裏,雙方都擁有x的祕密值的加性共享(cx,sx),並且計算得到輸出y=ReLU(x)的祕密共享(服務器sy)和(客戶端cy),這樣sy+cy=y mod p。任何一方都沒有完整的信息,而且雙方的份額對各自的所有者來說都是隨機的。

論文中描述的整個的流程就是這樣,下面是一些更具體的步驟。
在這裏插入圖片描述
先看非線性層

非線性層的混淆電路是對圖中描述的布爾電路進行混淆得到的。
該電路以服務器端的sx=r和sy=r′(隨機選擇)以及客戶端的cx作爲輸入向量。

電路的第一塊計算sx和cx在整數上的算術和,並從中減去p以獲得結果mod p(是否減去p的決定由多路複用器作出)。
電路的第二塊計算ReLU函數。
第三個塊將結果y添加到sy以獲得y的客戶端份額,即cy。
在這裏插入圖片描述

下面說一下這個同態加密
作者設計了一個同態加密庫,將支持將多個純文本打包到單個密文中,該庫提供了SIMD(單指令多數據)同態加法(SIMDAdd)和標量乘法(SIMDScMult),並置換明文時隙(Perm)SIMD
這是一個基於格的同態加密,它主要的優點是比paillier的要更高效。
這裏介紹了加,乘法,這個乘法既不是點積(內積),也不是叉積(外積),是兩向量各分量分別相乘。置換或者排序

在這裏插入圖片描述
這個是全連接層的矩陣向量乘法。主要描述了計算矩陣向量積的同態線性代數核(對於FC層)
這一部分主要是爲了實現明文矩陣與加密向量內積。
在前面的PAHE算法中已經介紹了一種 兩向量中各分量分別相乘 的同態乘法,在這裏,要通過這個同態乘法來實現矩陣與向量內積
左邊是一個簡單的方法,因此它也是最慢的以及通信效率最低的一個方法:
把正方形矩陣按行劃分w0,w1等等,每一行wi與密文向量v進行同態乘法,得到ui的密文。就圖中綠色這一行爲例,因爲這個乘法是兩向量中各分量分別相乘,所以想要得到綠色這一行與密文向量的內積,需要把各分量的乘積再相加,也就是l1+l2+l3+l4。這裏就用到了同態的置換或叫排序操作,改變各個l的位置,再相加,比如這裏得到的m02 是l0+l2,m13是l1+l3,然後在進行一次排序,就得到了這一行與密文向量的內積結果s0.其他行也是一樣。這種方法帶來的最大問題是,最後運算後會產生相應的n0(矩陣的大小是n0ni)個密文,而每一個密文中都是由重複的運算結果所構成的。
所以中間的對角線方法,可以避免輸出大量的密文。
他是Helib這個同態庫中的一個算法。一個正方形矩陣,將其對角線抽取出來作爲一個向量與密文向量相乘,對於圖中這個4
4的矩陣,就抽取出四條對角線,得到了四個各分量的乘積結果的向量,然後將這四個相加,就能夠得到矩陣和向量的內積結果。
這種方法和求行列式的方式有些相似。
右邊是作者提出的方法。
前兩種的矩陣都是正方形,但是在實際中,許多全連接層的向量是長方形的,所以作者是按照s形抽取了向量,與密文向量相乘,再將結果相加,得到藍色的這m0 m1 m2 m3,但是在矩陣中,同一行中有兩個同色系的元素,所以參考左側簡單的方法,這裏還需要對向量進行排列置換,然後再相加,最後得到結果。
在這裏插入圖片描述
下面是卷積層的操作
這個圖是機器學習中卷積的計算過程,當濾波器在輸入圖像上掃描時,將濾波器與輸入圖像中對應位置的數值逐個相乘,最後彙總求和,就得到該位置的卷積結果。不斷移動濾波器,就可算出各個位置的卷積結果。

下面這個是一個填充,這個填充也是一般的卷積中常用的方式,不是作者提出的。
卷積一般會把輸入矩陣變小,甚至輸出的是一個數。如果需要輸出矩陣保持一定的大小,那麼在卷積前需要對輸入矩陣進行填充。
像圖中這33的輸入矩陣,會把他的上下左右進行填充0,得到一個55的矩陣,再對它進行卷積。在這裏,過濾器是33的矩陣。接下來就和左邊這種卷積過程一樣了,我用黃色熒光筆標出的矩陣與藍色方框構成的33的矩陣進行對應位置的數值逐個相乘。濾波器掃描完九個位置,最後彙總得到的就是輸出結果,圖中這個紅色的輸出。
在這裏插入圖片描述
左邊是一般的方法,作者認爲這種填充的方法能夠計算出正確的卷積結果,但是由於填充了零,會浪費(wi+fw-1)·(hi+fh-1)- wi·hi的空間,也就是填充0的那一圈。如果輸入圖像很小或者過濾器的大小很大,就需要填充的更多,這可能會導致很大的開銷。所以作者提出了這種packed方法。
這種方法改變輸入矩陣裏面元素的排列和改變過濾器的元素,來實現輸出矩陣能保持一定的大小並且無需對輸入矩陣填充0造成額外開銷。
可以看到在之前的填充方案中,就看左上角這一個,藍色部分是與這個黃色部分進行乘法,除了目前標紅的這四個位置以外,其他的都是填充的0,因此與濾波器對應位置的元素相乘後結果也爲0,可以認爲沒有計算的意義,沒必要。作者提出的packed方案中,可以看到濾波器只保留右下角這四個,其他的位置置零,這樣,將濾波器與輸入矩陣中對應位置的數值逐個相乘時,只有標紅的部分的結果被保留下來了,因爲其他的都爲0,可以看到和填充的方法得到的結果是一致的。
所以,作者提出的packed的方法,結果正確,比填充的方法還提高了效率。
在這裏插入圖片描述
前面是single-input single-output的方法,下面是多通道情況下,像圖中這種輸入通道爲ci,輸出通道爲co的,需要進行ci x co次之前描述的siso的卷積。
作者 通過將多個通道打包在一個密文中,可以進一步加快多通道卷積的計算。
第一步,將cn個通道打包在一起,原本需要進行ci x co次siso的卷積,就變成只需ci x co / cn次,第二步將他們相加
例如圖11中,cn = 4 ,也就是四個通道打包爲一個,所以框中本應該是進行四次siso的卷積,在這裏只需要進行一次,因爲ci和co都爲8,所以輸入和輸出都是兩組
在這裏插入圖片描述
最後是性能分析,可以看到,gazelle協議,不論在哪種卷積神經網絡結構下,不論是minist集還是cifar-10數據集,都比之前的方案要好

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章