0
隱私性跟可用性難以兼顧,讓人工智能落入了魚與熊掌不可兼得的尷尬境地。
當前,業界解決隱私泄露和數據濫用的數據共享技術路線主要有兩條:一條是基于硬件可信執行環境(TEE:Trusted Execution Environment)技術的可信計算,另一條是基于密碼學的多方安全計算(MPC:Multi-party Computation)。
針對數據共享場景,包括聯邦學習、隱私保護機器學習(PPML)在內的多個技術解決方案紛紛出爐。螞蟻金服提出了共享智能(又稱:共享機器學習),結合TEE與MPC兩條路線,同時結合螞蟻自身業務場景特性,聚焦于金融行業的應用。
究竟共享智能與我們熟知的聯邦學習有何不同?在共享智能落地金融等多個重要領域的過程中,螞蟻金服又遇到過哪些挑戰,留下了怎樣的寶貴經驗?
為此,雷鋒網《AI金融評論》邀請到了螞蟻集團共享智能部總經理周俊做客線上講堂,詳解螞蟻金服共享智能的技術進展和落地實踐。
以下為周俊公開課全文,AI金融評論做了不改變原意的編輯:
在業界做隱私保護技術研發之前,是通過協同學習方法來實現多方信息融合,聯邦學習就是其中一種。近年來,學術圈相應的證明發現此類方法的一些安全性問題,尤其是直接共享梯度,本質上存在一些安全性問題。
我們先來看一下去年在一個學術頂會上比較火的Paper引發的討論。Paper里面的方法也比較好理解,實際上就是近幾年大家保護隱私的方法之一:就是不傳原始的數據,只傳共享的梯度,把梯度匯聚到一起,然后再匯集到模型。
這種方法在前幾年一直都比較火,無論是聯邦學習還是其他的協同學習方式。
工作里面證明了,如果有惡意者在模型訓練過程中拿到真正的梯度之后,就可以反推出數據中的特征(x)和標簽(y)。

這里舉了兩個例子,能夠看到,尤其是在圖像領域,通過梯度本身是可以反推出原始輸入的這張圖像和原始的Y。
右邊的例子,是在NIPS網站上摳的一些文字,剛開始是隨機生成的,迭代到第30輪的時候,可以看到從梯度里恢復出來的一個樣本,跟原始樣本是非常接近的,只有個別詞有一定差異。
從學術上能夠看到,在這種協同學習中,以前大家認為安全的共享梯度方式,本身并不是很安全,我們給它取了一個標題叫做非可證安全。

在這之后,DLG方法有了改進。這個方法首先通過推導可以精確拿到Label本身,有了Label再去反推X就更簡單了。從公式可以看到,它能更容易反推出原始數據的X。
從它的三個數據集可以看到,改進版DLG相對于原始的DLG在攻擊的準確率提升非常大。
阿里巴巴在去年也做過一個更加貼合實際情況的例子:假定雙方有兩個數據擁有者,它們的特征空間一樣,樣本空間不一樣,我們稱之為水平切分。

按照聯邦學習的協作方式,計算本地的梯度,發到服務器,平均之后更新本地的模型,看起來比較安全——實際上,由于A和B精確知道每一輪梯度,它其實可以反饋出很多相關信息。
滿足一定條件的情況下,尤其是邏輯回歸,可以構造出這樣的一組方程組,當方程組的個數大于這個數據的特征維度,方程組是可以解出來的。因此也可以反推出原始的數據。

從右下角的結果中,能夠看到我們攻擊出來的結果,跟原始特征非常接近。這說明,不論是從學術圈里面假定的setting,還是真實情況中,目前這種共享梯度的協作方式,也包括聯邦學習,本身都有比較大的安全隱患。
做保護隱私的機器學習方法,本身還是需要結合其他方法去彌補它的不足,才有可能讓方法本身更安全,真正保護用戶隱私。
數據預處理:
我們自己所做的機器學習處理方法,從數據預處理到模型訓練再到模型推斷,都是遵循這樣切實保護用戶隱私的思路,將MPC、TEE或其他技術,跟現在技術相應結合,確保中間每一步的隱私都能得到更好地保護。

以數據預處理中的降維為例,假定數據在水平切分的情況下,大家樣本空間不一樣,兩方希望能夠把數據能降低一個維度,降維之后的結果能夠送到后面的機器學習模型進行相應訓練,這種方法能較好提升效率。
同時,模型的泛化能力會有進一步提升,結合MPC里同態加密和秘密分享的技術,加固PCA(Principal Components Analysis,主成分分析),使得它能真正保護數據安全性。

此處有幾步核心操作:
首先是計算均值。如果是在同態加密的情況下,需要密態空間要進行計算;如果是秘密分享的方法,則需要將原始數據拆成多個秘密分片,再配合起來算出均值。
其次是計算協方差矩陣,最后再算出相應的特征值、特征向量,就得到了降維后的X′。同態加密和秘密分享的技術,跟PCA做相應結合,就能比較好的拿到相應結果。

從結果可以看出,相比于各方單獨算一個PCA再拼湊結果,我們的方法精度提升比較大。同時,它跟原始PCA方法相比,在后面都接相同的機器學習模型的情況下,幾乎沒有精度損失的情況。
除了降維以外,還有很多類似的工作可做,比如共線性檢測,隱私求交(PSI)等。
當然,安全的方法計算時間會更長一些,因為天下沒有免費的午餐,要保護隱私,肯定有相應的計算和通信成本在里面。
模型訓練:
DNN模型是現在大家用的比較多的。這里分別列出來業界三種典型做法。

左邊是傳統的基于明文的神經網絡訓練方法。
中間是完全基于MPC的方法,有很多非線性運算,可以做到可證安全,但速度會慢幾個數量級,效率本身也不高。
右邊是MIT提出來的方法,比較快,但它的Label也放在服務器里計算,安全性有一定問題;而且它沒有考慮特征之間的相關性,精度上有一定損失。
發現這些問題之后,我們提出了一個創新的體系。

首先,為了考慮特征之間的相關性,我們在底層利用MPC技術去做跟隱私數據相關的一部分模型計算。計算完之后,再把跟隱層相關的復雜計算,放到一個Semi-honest 服務器(半誠實服務器)去完成其他運算。
這服務器里可以利用現有的各種計算資源,比如TF、PyTorch,甚至可以利用一些比較靈活的處理框架。
Label的部分還是放到數據持有者本身,全程能確保沒有哪一部分隱私會被泄露。

Semi-honest 服務器會拿到中間的隱層結果,我們可以通過一些對抗學習方式去防止服務器獲取中間信息。這一方法盡可能做到隱私、準確率、效率三者之間的平衡。此外,我們還可以使用貝葉斯學習的方法(SGLD)去替換傳統的SGD(隨機梯度下降),從而更好保護訓練過程中的隱私。

SGLD是在貝葉斯神經網絡中應用較廣泛的方法,可以看作是加噪版本的SGD。
以前很多方法都在探討它的泛化能力,在這里我們發現了它另外的好處:因為訓練過程中添加了噪聲,所以可以更好的保護隱私,尤其是在對成員攻擊(Membership attack)的情況。比如有時醫療領域想知道自己的數據有沒有被這個模型所用。

我們在評估Membership攻擊效果時,定了一個成員隱私的loss,這個loss就是為了看SGLD到底能不能保護成員隱私,我們通過大量的實驗發現SGLD是能較好阻止Membership attack。

具體來講,我們在兩個數據上面做了相應的測試,無論是在Table1還是在Table2里,尤其是在Attack Metric上,SGLD跟普通的方法相比,能夠大大降低成員攻擊的準確率。
同時,我們也發現用它也能很好提升模型的擼棒性, SGLD和變種,比前面單獨的不加噪版本在Test上面的Metric會更好一些。
因此,我們在訓練時也把傳統的SGD換成了SGLD,能進一步提升安全等級,在兼顧三方面要求后,具有比較高的安全性和高效性。

剛才講到,在服務器里,可以很好利用現有的TensorFlow或Pytorch,從右邊這個代碼可以看出來,該方法是非常用戶友好的。
其次,在服務器里面,對于網絡結構這部分,設計可以非常靈活,也可以設置任意的網絡結構,充分發揮中心服務器的計算力。
通過訓練過程中引入的SGLD,也就是加噪的SGD,再加上Adversary loss,使得哪怕是服務器試圖做惡,也無法由此推斷出更多相應信息,安全等級進一步提升。

我們跟業界的幾個方法也對比過,比如2017年 MIT的 SplitNN和現在最好的SecureML。
性能上,(我們的方法)比這倆更好一些。從這兩個數據集來看,訓練時間上,由于我們使用了中間服務器,訓練時間相對于純MPC的方法(SecureML)大大降低,但相比SplitNN訓練時間還是要長,因為我們安全等級要高。
總體而言,我們的方法能較好地實現效率、安全性和準確率的折中。
模型預測:
在模型訓練上,涉及到前向、反向的計算,非常耗資源,它跟現有的一些隱私計算技術結合之后,對效率本身還是有比較大的影響。所以有很多工作都在考慮怎么做模型推理。在模型預測時,既要保護云上的模型,也要保護客戶手里的數據。

我們這個方法跟原來不一樣,之前可能有很多工作局限于支持一部分的激活函數。比如有時都無法支持sigmoid或max pooling,有的干脆只保護客戶端的Input data,但不保護服務器上的模型。
還有極端情況是完全用MPC做計算,單次模型預測用時會非常長。
另外,現在MPC尚不能完全精確計算一些比較復雜的函數,只能做一些展開或近似計算,精度上也有所損失。
我們希望能夠提出一種方式,盡可能在效率、精度、安全性方面能達到比較好的折中,保護服務器和用戶的隱私。

方法采用了兩點,一是前面介紹的貝葉斯神經網絡,因為它里面可以引入權重的不確定性,這能讓服務器上的精確模型不被拿到。
第二,無論是在數據保護還是在客戶端上,用同態加密的機制去保護。

具體是把DNN的計算拆分成兩級,一是首先通過采樣的方法拿到W,有了W之后,客戶端傳過來的加密Input,通過線下的運算出Z,這也是密態的。密態下的Z在返回到客戶端解密后,在客戶端上就能拿到最后的a。
這樣的方式,既保護了服務器上的模型,也保護了客戶端上面輸入數據的效果,起到了比較好的trade-off。
通過迭代式的同態加密計算,既保護了用戶隱私,也保護了密態下的服務器隱私。

我們的方法,因為大量的復雜運算很多是返回到客戶端上面,在非密態的情況下進行計算,所以Latency比較低。它還能支持任意的激活函數,可以比較好地擴展到RNN和CNN。
典型應用案例:POI上的推薦

原來的做法,不論是非常詳細的profile數據,還是一些用戶跟POI的交互數據,用戶的所有相關數據都要被推薦系統所收集。一些隱私模型,比如用戶偏好也都是被推薦系統所保留。所以推薦系統有很大的機會窺探到用戶相關隱私。

我們的思路是:首先,比較敏感的用戶隱私數據和模型,能夠在用戶本地,而不能上傳到服務器的推薦系統這里。
第二,我們還是會收集用戶和POI的交互數據,通過本地化差分隱私的方式注入噪音,這樣傳上去的是一個帶噪音且能夠保護隱私的版本。
通過這樣的方式產生動態的POI,再通過去中心化的梯度下降方法學習能保護隱私的FM模型。
通過各式各樣的安全聚合方式使隱私得到保護,這種方法我們稱為PriRec。

我們在兩個數據集上做了比較,在Foursquare數據上,因為用戶特征只有兩三個,我們的方法比FM稍弱;但切換到真實的場景數據,因為這里面有大量的用戶和POI數據,能看到我們這個方法比FM起到更好的效果。
之所以會更好,原因就是用戶和POI的數據,往往具有聚焦性,而去中心化的學習方法恰恰可以很好的利用這一點。在PriRec中,服務器上也沒有拿到隱私的數據和模型,所以能保護隱私。
實際上,推薦搜索廣告方面都有類似應用;金融科技領域的風控也有類似的方法,就是對現有的機器學習方法進行加固,產生一個更好的、更具有隱私保護的版本,達到AI助力業務效果的目的。
目前業界的四種技術
包括MPC,可信執行環境,差分隱私和聯邦學習。

在多方安全計算時,理想情況是有一個大家都完全相信的可信服務器,所有人把所有東西都放上去計算,再把結果分發給大家。
現實是找不到完全的可信服務器,還是需要很多協作方,協同完成函數f的計算。
當然,大家希望在計算的過程當中既能夠保護Input privacy,也能夠保護計算的privacy,如果同時能保護Output privacy最好。
MPC的提出,是希望能夠保護Input privacy和Compute過程當中的privacy。

這里面有幾個典型技術,一是秘密分享(Secret Sharing),密碼學里一個比較老的技術。早在七八十年代就已經有相應的論文發表。
舉個例子:有兩個人想協同計算他們求和的結果,每個人會把自己的數拆成多個share,share加起來等于他們自己,但任何人拿到其中一個的share是沒有什么物理含義的。
通過share的交互,雙方最后拿到7和6的結果(上圖右側),這其實已經完成加法的求和運算,既保護了Input的隱私,也保護了中間計算的隱私。
這幾年在工業界里,隨著算力的豐盛,以歐美為代表的很多公司都在用這樣的技術,比如著名的開源SPDZ等。

二是姚期智院士在1989年提出來的混淆電路。它主要是通過兩個大的building block構建,一個是混淆的真值表,一個是遺忘傳輸,通過這兩種方式完成協同計算,解決了著名的百萬富翁問題。
秘密分享因為它需要通過大量交互迭代,通信代價一般較高。
混淆電路中間是通過大量電路運算,電路的門個數較高時,效率相對來說沒有那么高。

其次還有同態加密方法,過程中是在密態下計算完的,之后才解密得到相應結果。
同態加密和秘密分享在一些比較復雜的函數上,是沒有辦法進行相應計算的,要通過一些近似計算的方法才能拿到相應的結果。
由于算力的逐步提升,和一些基礎突破,這兩年工業界對MPC也用得越來越多。
三個技術有各自的優缺點,組合使用也能產生一個相對理想的結果。

可信執行環境,相當于是一個硬件級的密碼箱。把加密數據放到密碼箱里之后,OS操作系統都沒有辦法打開密碼箱,只有持有相關密鑰的人才能在里面進行運算,就是所說的可信區域。
這個方法本身是非常安全,但很依賴于硬件,目前做得比較好的是因特爾的SGX。
前面所介紹的 MPC、TEE,都是可以保護Input privacy和compute privacy ,但沒能很好地保護output privacy。

在差分隱私(Differential Privacy)之前有很多別的方法去處理數據中的隱私,比如像各種匿名化方法,除了K匿名,還有一些L-diversity等方法保護隱私。
但隨著大數據時代的到來,通過鏈接一些別的數據,能夠反推出來單人ID,匿名化基本上沒有什么用。所以差分隱私之前的一些技術,現在來看是不安全的。對Output或Release的數據集,都在慢慢切換到差分隱私的技術上來。

這個技術本身較好地考慮到實用性和隱私性的折中,隱私肯定有代價,要么犧牲一定的實用性,要么有計算代價。
差分隱私是在數據中加噪聲,對實用性有所影響,尤其是在數據本身也不大的情況下,對結果的影響較大。
差分隱私提供了一種量化的方法,能測量到底加多少噪聲,能夠取得比較好的trade-off。

差分隱私從從概率學和信息論得到一個隱私保護的bound,實操不是很復雜,就是在數據中添加相應的噪聲,并且通過參數控制噪音的大小。
當然,它本身怎么使用、怎么設置privacy budget,有著非常復雜的考量機制,但原理本身不算特別復雜。
這個技術在提出來之后,因為它有比較好的理論保障,所以在學術界、工業界很多人也都在用,能比較好地保護Output privacy,跟前面的技術也有比較好的結合。
Local 差分隱私類似多方,就是自己本身加上噪聲,再上傳到一個地方。
它在工業界遇到的一個較大問題是,因為要在里面加噪聲,所以模型精度受影響。

聯邦學習,谷歌在2014年就已經在內部開始做這樣的技術,它本身是解決to C的問題,所以想解決幾十億的設備間如何協同、安全地利用數據訓練模型。
當然設備之間可能不滿足獨立同分布的概念,硬件之間差異非常大,所以會導致可靠度的差異也很大,有時在訓練的時候自己就下線了。

在2016-2017年,聯邦學習有相應論文發表。目前用的算法也是從服務器上拉了一個模型,做完更新,delta發給服務器做average并更新模型。
直接這么做肯定會有一些問題,所以paper里面做了大量的優化,能夠讓通信成本和訓練的穩定性都有比較大的提升。

谷歌在2017年期間已經發現了,原來把梯度直接匯聚到服務器上的協同學習方法也不是很安全;如果要保護隱私,必須得結合MPC的技術。
幾種技術的比較和解決方案

我們從自己的角度做了一張總結表格,像MPC能保護好Input privacy和計算過程中的 privacy;但對于Output privacy,它的保護能力比較弱。效率上,因為牽涉到大量密碼學技術,代價不低。
TEE跟MPC類似,把它們理解成密碼學偏軟件和偏硬件的實驗版本。
差分隱私就可以較好保護Output privacy,計算代價相對不高,實用性有一定損失,尤其是local 差分隱私加了某種噪聲之后,只能用于某些統計學運算。
聯邦學習無法很好地保護Input privacy和Output privacy,好處在于效率相對高。
站在從業者的角度來看,這些技術還是需要一個端到端的設計,結合各方技術優勢提供相應的方案,達到最后總體的效果。

我們結合了這樣三個方案:
首先,MPC底下分為這么幾層,用前面所講的秘密共享、OT或其他密碼學的原語。為什么要實現這么多密碼學的協議?就是希望能夠利用每種協議的優缺點,有更加好的組合,在合適的地方選用合適的技術。
第二層,我們希望把底下比較偏密碼學的原語,再做一層封裝,這上面提供一些機器學習經常要用的運算,比如比較、求交、矩陣加法、求max的運算。
上面再抽象成一個DSL語言,開發算法時,不用直接面對底層密碼學原語,速度相對會更快。
另外,因為我們參考的是機器學習里面的DSL,整個語法也跟機器學習類似,機器學習的創業者就能用比較低的成本,切換到共享智能技術上,進行算法開發。
同時,我們也提供編譯器,它能夠將用戶對上層開發的算法,自動選擇最優的安全算子,實現安全的程序,進而實現整個MPC里面的一些方法。
TEE方面,因為TEE本身的SDK也不是那么友好,并且單機的SGX 的運算能力并不是特別強,為此我們做了一些改進:
組建安全可信集群,以擴展算力;做了很多防止各種攻擊的方法,在安全性上有個更好的工業級框架出來,便于開發者能夠基于這些核心能力開發出各種算法。
上面是比較偏差分隱私或矩陣變換的方法。這種方法還是有比較好的適用場合,比如前面講的Output privacy里面用到差分隱私,或者是MPC和TEE里面在Output 的地方加上差分隱私,本身有比較好的互補的作用。技術之間也可以兩兩去組合。
每個方案都有各自的優缺點,做隱私保護相關的工作,還是需要通過精心的工程設計,算法設計加上密碼學原語,才能夠端到端地保護數據輸入、計算過程、數據輸出等隱私,從而達到相應的目的。

合作案例:江蘇銀行
去年上半年,江蘇銀行希望使用MPC實現聯合風控,模型的產出完全放在江蘇銀行,自主可控。構建出聯合模型之后,模型分數給到銀行,由它去做獨立的風控判斷,之后再產生結果給到最后的申請判斷。整個模型的效果在測試的時候發現提升了50%左右。
同樣,我們還在支付的聯合風控、聯合營銷以及聯合保險也進行了相應的落地。
目前看來,現在這幾個技術之間彼此有互補,但端到端的系統怎么在各個環節去利用合適的技術,去產生合適的效果?怎么樣把這樣一個系統在超大規模的數據上做相應的實踐?在不影響效率的情況下,將隱私保護的等級能夠升級到更高的級別?
我覺得還需要有整個業界需要投入更多的資源,更長的研發投入,更長的耐心,才有可能在一些更關鍵的技術上面產生更好的結果。
同時也需要整個AI圈子加上密碼學的硬件再加上工程系統,一起努力才有可能在一些點上面取得真正的大的突破,才有可能使得整個隱私計算的效率能夠再提升1~2個數量級。
目前隱私計算效率本身,相比非隱私保護的AI,在速度甚至精度上都會有一定的損失。
所以,怎么樣去設計更好的方式,除了在技術本身的突破,也需要有更多的場景去打磨技術,才能發現的問題,逐步讓技術往前走。

從三大維度來看:
第一,從算法維度看,無論是在學術界還是工業界,目前的這幾個方法割裂程度比較明顯。比如TEE跟差分隱私,雖然他們之間有交集但并不多。
TEE里也有很多技術要去突破,比如目前TEE的內存只有128兆,相比普通系統還是比較小的。現在數據量比較大,尤其是在一個圖像數據上,怎么在這么大的數據情況下完成隱私計算,是難度比較大的一個問題。
第二,由于內存比較小,為了保護安全和隱私,所以在很多運算效率跟目前正常操作有一定差距。
第三,SDK的友好性方面,因為比較偏硬件,還涉及到大量的密碼學等機制,比如遠程認證,對于很多從業人員而言還是有相應的學習成本。
當然,業界很多開源的、在原生的TEE上封裝的一些SDK,各方面有一些提升,可擴展性本質上有些突破,但突破不是特別大,意味著很多東西不能拿來直接在工業界使用。所以TEE也還需要整個社區有更多的投入。
TEE上面,現在很多都在做支持中小規模的算法訓練和預測。怎么讓更大的規模、更新的算法能夠被集成進來,這也是需要業界有更多投入。
差分隱私技術本身的理論性質比較優美,但在實用性上有一定損失。
我們提到過,對于utility loss以及差分隱私輸出來的結果,因為畢竟是在原始的數據上面加了一定的噪聲,這個數據相對來講會不會有一定的損失度?
如果完全是local 差分隱私的方式,在很多場景下面就沒有辦法用,怎么讓差分隱私能夠再更進一步,更貼合現在AI這個情況?
目前看到,差分隱私在很多數據分析應用非常廣泛,比如,蘋果系統上收集了emoji的數據;微軟操作系統的瀏覽器里面也嵌入了差分隱私的數據;Uber也用了這樣一個技術,但目前大部分用在數據統計方面。
怎么樣把差分隱私這樣的技術能夠跟AI有更好的結合,是未來一個比較大的突破點。
MPC技術本身,從經典論文發表來看,雖然不算特別新,但在很多很復雜的運算上,尤其是在AI的一些新方法,MPC效率本身還是有一定的代價。
怎樣取得算力的增長,有新模式突破,像完全同態的方法什么時候真的變成實用,怎么能夠使這個技術在工業界更進一步,這也是需要考量的一個點。
聯邦學習目前也存在一定的安全隱患,四個技術之間怎么去做相應的結合,取長補短,能夠形成比較好的下一代的解決方案,真真正正保護隱私,讓AI落地變得更簡單?
尤其是在一些數據比較敏感的地方,像醫療的某些領域,病例的數據采集特別困難,真的能夠讓AI進到這些地方,輔助決策,才能更加好實現社會意義和價值。
我覺得,在算法層面會需要深度結合,無論是基于某些算力,還是說在技術領域的突破,能讓這里面的一些問題有更進一步的解法。
在平臺層,無論是差分隱私、TEE還是別的技術,越靠近數學和越靠近密碼學硬件,為了保護隱私,里面大量的設置都比較難以理解。怎樣讓大家更高效產出不一樣的算法,降低使用門檻,這些方法才能夠跟更多地方結合,產生更多的新突破。
在DSL和在編譯器方面,甚至在整個系統的運維、部署,以及系統穩定性、安全生產等各方面,有沒有進一步的突破,變得易用?
在一些對時效性要求沒有那么強的情況,如果能夠持續穩定計算,對于很多產品也是比較適用的。對于整個隱私計算領域而言,這也是一個巨大的挑戰。
所以怎樣有更高效的平臺一體化設計,讓使用門檻變低,才有可能會真正帶來一些繁榮的社區,讓技術能夠走進更多場景、更多機構,真正產生一些化學反應。
雷鋒網雷鋒網雷鋒網
雷峰網原創文章,未經授權禁止轉載。詳情見轉載須知。