如果有A、B、C三位同學,他們各自手上有10、15、20塊錢,這時需要在互相不知道對方有多少錢的情況下,不借助力第三方來計算三個人一共有多少錢。請問這時候,我們如何實作呢?——這,就是最經典的秘密共享場景。在看完這篇文章後,答案就出來了~
背景
網際網路時代,一切基于資料。
随着人工智能的興起,資料的品質和數量,已經成為影響機器學習模型效果最重要的因素之一,是以通過資料共享的模式來“擴充”資料量、進而提升模型效果的訴求也變得越發強烈。
但在資料共享過程中,不可避免會涉及到兩個問題:隐私洩露和資料濫用。
提到這兩個關鍵詞,大家一定都對其背後的緣由有所耳聞:
第一則:2018年3月,劍橋咨詢公司通過FaceBook的資料共享漏洞,收集了5000萬使用者資訊,據說有可能利用這些資訊操控美國總統競選,造成惡劣社會影響;事件曝光後,FB公司股票大跌7%,引發一系列後續問題。
第二則:2018年5月,歐盟通過General Data Protection Regulation(GDPR)法案,法案指出:所有與個人相關的資訊都是個人資料,對資料的使用行為必須要有使用者的明确授權。把對隐私保護的要求提到了一個新的高度。
随着對資料安全的重視和隐私保護法案的出台,以前粗放式的資料共享受到挑戰,各個資料擁有者重新回到資料孤島的狀态,同時,網際網路公司也更難以收集和利用使用者的隐私資料。
資料孤島現象不僅不會消失,反而會成為新的常态,甚至它不僅存在于不同公司群組織之間,在大型集團内部也存在。未來,我們必須面對這樣的現狀:如果我們想更好的利用資料,用大資料和AI做更多有意義的事情,就必須在不同組織之間、公司與使用者之間進行資料共享,但這個共享需要滿足隐私保護和資料安全的前提。
隐私洩漏和資料濫用如同達摩克利斯之劍懸在各個公司群組織頭上,是以解決資料孤島,成為AI行業需要解決的首要問題之一。
如何解決資料孤島問題?
目前,業界解決隐私洩露和資料濫用的資料共享技術路線主要有兩條。一條是基于硬體可信執行環境(TEE: Trusted Execution Environment)技術的可信計算,另一條是基于密碼學的多方安全計算(MPC:Multi-party Computation)。
TEE字面意思是可信執行環境,核心概念為以第三方硬體為載體,資料在由硬體建立的可信執行環境中進行共享。這方面以Intel的SGX技術,AMD的SEV技術,ARM的Trust Zone技術等為代表。TEE方案的大緻原理如下圖所示:

目前在生産環境可用的TEE技術,比較成熟的基本隻有Intel的SGX技術,基于SGX技術的各種應用也是目前業界的熱門方向,微軟、谷歌等公司在這個方向上都有所投入。
SGX(Software Guard Extensions )是Intel提供的一套軟體保護方案。SGX通過提供一系列CPU指令碼,允許使用者代碼建立具有高通路權限的私有記憶體區域(Enclave - 飛地),包括OS,VMM,BIOS,SMM均無法私自通路Enclave,Enclave中的資料隻有在CPU計算時,通過CPU上的硬體進行解密。同時,Intel還提供了一套遠端認證機制(Remote Attestation),通過這套機制,使用者可以在遠端确認跑在Enclave中的代碼是否符合預期。
MPC(Multi-party Computation,多方安全計算)一直是學術界比較火的話題,但在工業界的存在感較弱,之前都是一些創業小公司在這個方向上有一些探索,例如Sharemind,Privitar,直到谷歌提出了基于MPC的在個人終端裝置的“聯邦學習” (Federated Learning)的概念,使得MPC技術一夜之間在工業界火了起來。MPC方案的大緻原理如下圖所示:
目前,在MPC領域,主要用到的是技術是混淆電路(Garbled Circuit)、秘密分享(Secret Sharing)和同态加密(Homomorphic Encryption)。
混淆電路是圖靈獎得主姚期智教授在80年代提出的一個方法。其原理是,任意函數最後在計算機語言内部都是由加法器、乘法器、移位器、選擇器等電路表示,而這些電路最後都可以僅由AND和XOR兩種邏輯門組成。一個門電路其實就是一個真值表,假設我們把門電路的輸入輸出都使用不同的密鑰加密,設計一個加密後的真值表,這個門從控制流的角度來看還是一樣的,但是輸入輸出資訊都獲得了保護。
秘密分享的基本原理是将每個數字随機拆散成多個數并分發到多個參與方那裡。然後每個參與方拿到的都是原始資料的一部分,一個或少數幾個參與方無法還原出原始資料,隻有大家把各自的資料湊在一起時才能還原真實資料。
同态加密是一種特殊的加密方法,允許對密文進行處理得到仍然是加密的結果,即對密文直接進行處理,跟對明文進行處理後再對處理結果加密,得到的結果相同。同态性來自抽象代數領域的概念,同态加密則是它的一個應用。
目前,業界針對資料共享場景,利用上面的技術路線推出了一些解決方案,包括隐私保護機器學習PPML、聯邦學習、競合學習、可信機器學習等,但這些方案隻利用了其中的一部分技術,進而隻适合部分場景,同時基本處于學術研究階段,沒有在生産環境落地。
共享機器學習:螞蟻金服資料孤島解決方案
為了更好的應對形勢變化,解決資料共享需求與隐私洩露和資料濫用之間的沖突,螞蟻金服提出了希望通過技術手段,確定多方在使用資料共享學習的同時,能做到:使用者隐私不會被洩露,資料使用行為可控,我們稱之為共享機器學習(Shared Machine Learning)。
共享機器學習的定義:在多方參與且各資料提供方與平台方互不信任的場景下,能夠聚合多方資訊并保護參與方資料隐私的學習範式。
從17年開始,螞蟻金服就一直在共享機器學習方向進行探索和研究,在結合了TEE與MPC兩條路線的同時,結合螞蟻的自身業務場景特性,聚焦于在金融行業的應用。
螞蟻金服共享機器學習方案擁有如下特性:
• 多種安全計算引擎整合,可基于不同業務場景來選擇合适的安全技術。既有基于TEE的集中式解決方案,也有基于MPC的分布式解決方案;既可滿足資料水準切分的場景,也能解決資料垂直切分的訴求;既可以做模型訓練,也可以做模型預測。
• 支援多種機器學習算法以及各種資料預處理算子。支援的算法包括但不限于LR,GBDT,Xgboost,DNN,CNN,RNN,GNN等。
• 大規模叢集化。支援大規模叢集化,提供金融級的高效、穩定、系統化的支撐。
基于數年沉澱與積累,目前共享機器學習技術已在銀行、保險、商戶等行業成功落地諸多場景業務。通過在業務中打磨出的金融級共享機器學習能力,沉澱下來一套資料共享場景的通用解決方案,未來會逐漸對外開放。
在幾年的艱苦研發中,共享學習累積專利50餘項。在2019中國人工智能峰會上,共享機器學習獲得“紫金産品創新獎”,在8月16日的全球人工智能創業者大會上,獲得“應用案例示範獎”。
下面,我們将分享基于上面兩種路線的共享機器學習實踐細節。
基于TEE的共享學習
螞蟻共享學習底層使用Intel的SGX技術,并可相容其它TEE實作。目前,基于SGX的共享學習已支援叢集化的模型線上預測和離線訓練。
1.模型線上預測
預測通常是線上服務。相對于離線訓練,線上預測在算法複雜度上面會相對簡單,但是對穩定性的要求會更高。
提升線上服務穩定性的關健技術之一就是叢集化的實作——通過叢集化解決負載均衡,故障轉移,動态擴容等穩定性問題。
但由于SGX技術本身的特殊性,傳統的叢集化方案在SGX上無法工作。
為此,我們設計了如下分布式線上服務基本架構:
該架構與傳統分布式架構不同的地方在于,每個服務啟動時會到叢集管理中心(ClusterManager,簡稱CM)進行注冊,并維持心跳,CM發現有多個代碼相同的Enclave進行了注冊後,會通知這些Enclave進行密鑰同步,Enclave收到通知後,會通過遠端認證互相确認身份。當确認彼此的Enclave簽名完全相同時,會通過安全通道協商并同步密鑰。
該架構具備如下特性:
• 通過叢集化方案解決了線上服務的負載均衡,故障轉移,動态擴縮容,機房災備等問題;
• 通過多叢集管理和SDK心跳機制,解決代碼更新,灰階釋出,釋出復原等問題;
• 通過ServiceProvider内置技術配合SDK,降低了使用者的接入成本;
• 通過提供易用性的開發架構,使得使用者在開發業務邏輯時,完全不需要關心分布式化的邏輯;
• 通過提供Provision代理機制,確定SGX機器不需要連接配接外網,提升了系統安全性。
目前在這套架構之上已經支援包括LR、GBDT、Xgboost等多種常用的預測算法,支援單方或多方資料加密融合後的預測。基于已有架構,也可以很容易的擴充到其它算法。
2.模型離線訓練
模型訓練階段,除了基于自研的訓練架構支援了LR和GBDT的訓練外,我們還借助于LibOs Occlum和自研的分布式組網系統,成功将原生Xgboost移植到SGX内,并支援多方資料融合和分布式訓練。通過上述方案,不僅可以減少大量的重複性開發工作,并且在Xgboost社群有了新的功能更新後,可以在SGX内直接複用新功能,無需額外開發。目前我們正在利用這套方案進行TensorFlow架構的遷移。
此外,針對SGX當下诟病的128M記憶體限制問題(超過128M會觸發換頁操作,導緻性能大幅下降),我們通過算法優化和分布式化等技術,大大降低記憶體限制對性能的影響。
基于TEE的多方資料共享學習訓練流程如下:
- 機構使用者從Data Lab下載下傳加密工具
- 使用加密工具對資料進行加密,加密工具内嵌了RA流程,確定加密資訊隻會在指定的Enclave中被解密
- 使用者把加密資料上傳到雲端存儲
- 使用者在Data Lab的訓練平台進行訓練任務的建構
- 訓練平台将訓練任務下發到訓練引擎
- 訓練引擎啟動訓練相關的Enclave,并從雲端存儲讀取加密資料完成指定的訓練任務。
采用該方式進行資料共享和機器學習,參與方可以保證上傳的資料都經過加密,并通過形式化驗證保證加密的安全性。
基于MPC的共享學習
螞蟻基于MPC的共享學習架構分為三層:
• 安全技術層:安全技術層提供基礎的安全技術實作,比如在前面提到的秘密分享、同态加密、混淆電路,另外還有一些跟安全密切相關的,例如差分隐私技術、DH算法等等;
• 基礎算子層:在安全技術層基礎上,我們會做一些基礎算子的封裝,包括多方資料安全求交、矩陣加法、矩陣乘法,以及在多方場景下,計算sigmoid函數、ReLU函數等等;同一個算子可能會有多種實作方案,用以适應不同的場景需求,同時保持接口一緻;
• 安全機器學習算法:有了基礎算子,就可以很友善的進行安全機器學習算法的開發,這裡的技術難點在于,如何盡量複用已有算法和已有架構,我們在這裡做了一些有益的嘗試,但也遇到了很大的挑戰。
目前我們這套基于MPC的共享學習架構已支援了包括LR、GBDT、GNN等頭部算法,後續一方面會繼續根據業務需求補充更多的算法,同時也會為各種算子提供更多的技術實作方案,以應對不同的業務場景。
基于MPC的多方資料共享學習訓練流程如下:
如圖所示,訓練步驟為:
- 機構使用者從Data Lab下載下傳訓練服務并本地部署
- 使用者在Data Lab的訓練平台上進行訓練任務的建構
- 訓練平台将訓練任務下發給訓練引擎
- 訓練引擎将任務下發給機構端的訓練伺服器Worker
- Worker加載本地資料
- Worker之間根據下發的訓練任務,通過多方安全協定互動完成訓練任務
訓練引擎的具體架構如下:
其中Coordinator部署于螞蟻平台,用于任務的控制和協調,本身并不參與實際運算。Worker部署在參與多方安全計算的機構,基于安全多方協定進行實際的互動計算。
使用者在模組化平台建構好的訓練任務流會下發給Coordinator的Task Flow Manager,Task Flow Manager會把任務進行拆解,通過Task Manager把具體算法下發給Worker端的Task Executor,Task Executor根據算法圖調用Worker上的安全算子完成實際的運算。
利用這套方法,可以做到資料不出域就可以完成資料共享,訓練工具可以部署在本地的伺服器。
共享學習 VS. 聯邦學習
目前,國内對于資料共享場景的機器學習解決方案,比較熟悉的可能是由谷歌提出的聯邦學習概念。
經過我們的了解,其實聯邦學習目前涉及兩個不同的概念:
• 第一種聯邦學習,旨在解決雲 + 端的訓練過程中,端上的隐私不要被暴露的問題,是一個To C + 資料水準切分的場景。除了保護端上的資料隐私外,其重點還在于如何解決訓練過程中,端自身可能掉線等問題。
• 第二種聯邦學習則主要用于解決To B場景中各方隐私不洩露的問題,即可以應用于資料的水準切分場景,也可以應用于資料垂直切分的場景。
它們側重于不同的資料共享場景,采用不同的技術,相比之下,螞蟻金服的共享學習相容多種安全計算技術,并且支援多種機器學習算法和使用場景。
除此之外,共享學習和聯邦學習的差異在于:
- 聯邦學習隻解決資料不出域的情況,這就限制了其可以使用的技術(隻有嚴格的MPC算法才符合這個要求),而共享學習目前基于TEE的集中式共享學習技術,是聯邦學習沒有涉及的;
- 聯邦學習講究的是參與各方的“身份和地位”的相同,是以叫聯邦;而共享學習則不強調各共享方的地位對等,在很多場景下,不同的參與方是擁有不同的角色的。
目前,資料共享下的機器學習仍然還有很多可突破的地方,這些不同隻是對目前狀态的一個比較,希望大家能對共享學習有更好的了解。
未來展望
讓資料孤島在安全環境下進行連接配接、合作、共創、賦能,是螞蟻金服共享機器學習的核心使命。
共享機器學習作為一個安全與AI的交叉學科,正在越來越受到關注,尤其是在金融行業,有着廣闊的應用空間。但是,這個領域的各項技術,也遠未到成熟的階段。我們團隊經過兩年的摸索,也隻是取得了階段性的一些成果,在算法的計算性能以及支援算法的多樣性等各個方面,還有一段路要走。
9月27日杭州雲栖大會,螞蟻金服将向外界首次分享共享學習的理念和實踐,歡迎屆時關注。後續我們也會分享更多共享學習方面的研究進展及實踐經驗, 歡迎業界同仁交流探讨,共同探索更多更強的資料孤島解決方案,推進資料共享下的機器學習在更多場景下落地。