最近一段時間,我除了寫業務程式碼之外,還整了個新鮮玩意,那就是參與搞了一下隱私計算相關的事情。
現在有空了,剛好總結一下。因為隱私計算可能對於很多工程開發朋友來說很陌生,所以,我這篇文章主要是給大家科普一下,讓大家知道有這麼個技術以及現在的主要方向。這裡面不會有太多的演算法內容和底層原理,相信大家應該都能看得懂。
隨著移動網際網路、雲計算、物聯網等資訊科技的蓬勃發展,世界進入了資料爆炸的"大資料時代"。在各行各業,資料都發揮著至關重要的作用,越來越多的場景需要多方資料的流通和共享。如我們所在的金融部門,則需要藉助外部金融資料,結合我們的場景業務資料進行聯合建模,實現聯合風控、數字營銷、智慧反詐、精準獲客等。
所以,站在這個歷史節點上,在資料合作、共享方面,橫亙在我們面前的有幾個重要的問題需要解決:
1、“資料孤島“現象普遍存在;資料流通安全性風險高;
2、資料合規監管日趨嚴格;隱私洩露導致信任鴻溝;
其中,隨著個人資訊保護法在2021年11月的推出,監管問題更是我們亟待解決的。
但是近幾年,隨著電子商務法、資料安全法、《個人資訊保護法》等一些列法律法規的推出,使得我們不得不重視個人隱私的問題。
雖然個人資訊的保護越來越嚴格,但是,從很多的法規中我們可以解讀出來,其實,大的形式上,官方還是比較支援我們合規的進行資料的利用和開發的。
那麼,如何解決這些問題呢?
其實,從《個保法》中我們可以找到一些切入口,根據中對個人資訊的定義是這樣的:
以電子或者其他方式記錄的與已識別或者可識別的自然人有關的各種資訊,不包括匿名化處理後的資訊。
可見,如果我們能夠對個人資訊進行去標識化和匿名化處理,那麼,就可以利用這些資訊了。
所以,很多相關的技術也就誕生了,這些技術主要解決的就是透過資料可用不可見的方式幫助我們進行跨機構間的資料協同。這類技術,統稱為隱私計算技術。
隱私保護計算經過很多年的發展,在具體的落地實現的技術上,主要有三個主流的方向:
1、基於密碼學的多方安全計算(MPC)
2、基於可信硬體的可信執行環境(TEE)
3、基於混合技術方案的聯邦學習(FL)
想要實現去標識化和匿名化,主要的方式就是讓原始的使用者資料無法被識別。
其中多方安全計算主要是基於密碼學的方式,把資料進行加密處理,這樣我們就可以使用加密後的資料進行演算法建模了。
另外,可信執行環境是一種基於硬體的資料,大概就是把資料放到一個硬體中,只在這個硬體內部使用,外部無法直接讀取。
還有一種技術那就是混合了多種方案的技術,那就是聯邦學習。
其中聯邦學習因為其不依賴硬體、可以解決複雜的演算法建模問題等優勢,雖然相比其他方案存在著一定的效率問題,但是隨著技術的發展,如何突破效能瓶頸,達到實用性、安全性的平衡,並進一步提升安全性,這些問題終將被解決。所以,這項技術被認為是"人工智慧的最後一公里"、"下一代人工智慧協同演算法和協作網路的基礎"。
聯邦學習
聯邦學習(Federated Learning)是一種新興的人工智慧基礎技術,在 2016 年由谷歌最先提出,原本用於解決安卓手機終端使用者在本地更新模型的問題,其設計目標是在保障大資料交換時的資訊保安、保護終端資料和個人資料隱私、保證合法合規的前提下,在多參與方或多計算結點之間開展高效率的機器學習。
我們把每個參與共同建模的企業稱為參與方,根據多參與方之間資料分佈的不同,把聯邦學習分為三類:橫向聯邦學習、縱向聯邦學習和聯邦遷移學習。
橫向聯邦學習的本質是樣本的聯合,適用於參與者間業態相同但觸達客戶不同,即特徵重疊多,使用者重疊少時的場景,比如不同地區的銀行間,他們的業務相似(特徵相似),但使用者不同(樣本不同)。主要解決樣本不足的問題。
縱向聯邦學習的本質是特徵的聯合,適用於使用者重疊多,特徵重疊少的場景,比如同一地區的商超和銀行,他們觸達的使用者都為該地區的居民(樣本相同),但業務不同(特徵不同)。主要解決特徵不足的問題。
因為我們這面主要是金融業務,隱私計算的應用場景是基於聯邦學習和外部銀行、機構等做聯合風控,多頭借貸等金融業務。所以我們基本上是想用我們具有的使用者的電商資料、和外部機構具有的信貸資料、徵信資料等進行縱向連邦學習。
縱向聯邦學習的主要流程如下:
第一步:加密樣本對齊。是在系統級做這件事,因此在企業感知層面不會暴露非交叉使用者。第二步:對齊樣本進行模型加密訓練:step1:由第三方C向A和B傳送公鑰,用來加密需要傳輸的資料;step2:A和B分別計算和自己相關的特徵中間結果,並加密互動,用來求得各自梯度和損失;step3:A和B分別計算各自加密後的梯度並新增掩碼傳送給C,同時B計算加密後的損失傳送給C;step4:C解密梯度和損失後回傳給A和B,A、B去除掩碼並更新模型。
FATE 框架
因為目前關於聯邦學習的技術,很多大廠都有在投入,其中阿里、螞蟻、位元組、騰訊等都很多成功的案例。
我們此次在進行聯邦學習相關調研的時候,有不同的同事分別調研不同的框架。我這面主要負責基於開源的框架進行調研。
因為關於聯邦學習,最重要的還是解決資料的安全性問題,目前看來,很多外部機構,對於開源的框架接受度更高一些。市面上也有很多聯邦學習框架,如微眾銀行開源的FATE、位元組開源的FedLearner、百度開源的PaddleFL等。其中 FATE 被使用的最廣泛,被認為是聯邦學習的樣板專案。
FATE (Federated AI Technology Enabler) 是微眾銀行AI部門發起的開源專案,為聯邦學習生態系統提供了可靠的安全計算框架。FATE專案使用多方安全計算 (MPC) 以及同態加密 (HE) 技術構建底層安全計算協議,以此支援不同種類的機器學習的安全計算,包括邏輯迴歸、基於樹的演算法、深度學習和遷移學習等。
FATE 有4種部署方式,分別是基於Docker-Compose的部署、Standalone部署、Native的叢集部署、基於KubeFATE的部署。
- 基於Docker-Compose:快速體驗一下FATE,跑的模型和資料在單臺機器就夠了,部署起來比較簡單。
- Standalone單機部署:只是想開發演算法,而開發機器效能又不高。
- 基於KubeFATE:對FATE的使用需求因資料集和模型變大,需要擴容,並且裡面有資料需要維護一個FATE叢集,則考慮使用基於KubeFATE在Kubernetes叢集的部署方案。
- Native的叢集部署:一般是在特殊原因下才會用,如內部無法部署Kubernetes,或者需要對FATE的部署進行自己的二次開發等。為了快速驗證,我們此次部署主要是採用了基於Docker-Compose和基於KubeFATE兩種部署方式。部署過程中還是遇到了很多的問題的。
關於這兩種部署方式的部署過程以及一些問題的解決,不是本文的重點,我把他們單獨放到我的部落格中了,大家如果感興趣可以去我的部落格中閱讀。
下面這張就是 FATE 的一個部署架構圖:
太多的細節就不在這裡深入介紹了。
我們基於 FATE,和外部機構合作搞了一套聯邦學習的環境,阿里作為一方、外部機構作為另外一方,對大概十幾萬的資料做了聯邦學習的建模。
最終結果還是比較符合我們的預期的,聯邦學習的建模方式和本地建模,在效能上的損耗很小,小到幾乎可忽略。
其他
以上,算是我對這段時間關於隱私計算&聯邦學習的一些調研以及實踐的一些總結。
之所以要研究這個,一方面是工作中需要,另外一方面,對於新技術,我們還是要多多接觸瞭解一下。尤其是這些對於當下以及未來都是很重要的東西。
就像我在阿里內網,給自己的簽名一樣:不設限。
對於這部分內容,目前我剛剛接觸不久,很多內容都是基於我自己的理解表達的,如文中有錯誤之處,歡迎大家幫忙指出。同時也歡迎有相關經驗的朋友一起交流。
關於作者:Hollis(ID:hollischuang),一個對Coding有著獨特追求的人,現任阿里巴巴技術專家,個人技術博主,技術文章全網閱讀量數千萬,《程式設計師的三門課》聯合作者。