聯邦計算:不暴露真實數據如何完成合做建模?

​導語 | 在金融場景下,銀行等機構有強烈願望和其餘數據擁有方合做建模,但出於商業和合規方面的考慮,又不肯共享核心數據,致使行業內大規模數據共享遲遲沒法推進。本文將從經典警匪影片情節出發,從技術角度探討如何解決這一困境,但願與你們一同交流。文章做者:王禮斌,騰訊雲大數據研發工程師。

1、引言

銀行等金融機構擁有用戶歷史行爲數據,例如是否違約詐騙等,但缺少數據去對新用戶進行判斷。而運營商、卡組織(如銀聯、VISA)等擁有大量數據的機構,有意願跟金融機構合做建模。算法

可是,由於金融機構與數據擁有方都有商業保密和政策合規的須要,所以沒法把數據給對方來執行傳統建模程序。安全

針對這一現象,騰訊神盾-聯邦計算,把兩個最經常使用的算法,梯度提高樹(GBDT)和邏輯迴歸(LR)的計算過程進行從新組織。dom

將其中部分環節使用同態加密進行改造,從而作到在雙方數據都不須要給對方的狀況下也能合做建模。解決了金融行業既須要數據合做來改善業務,但同時又必須對數據保密這一矛盾。機器學習

2、同態加密與機器學習的結合

1. 互不信任,但須要相互合做

筆者近來觀看了一部經典香港警匪片——《線人》,該電影講述了張家輝扮演的刑事情報科督察李滄東與線人收取情報,最終破獲案件的驚險過程。學習

拋開電影場景下險象環生、步步驚心的劇情,其本質跟引言處提到的困境有殊途同歸之處,那就是在互不信任,但又須要互相合做的狀況下,如何兼顧雙方的權益。大數據

下文將以電影中的情景出發,解析在信息不對稱的場景下,聯邦算法的信息加密與解密原理。(注:本文全部關於警匪博弈內容,僅限對電影劇情自己的討論)。優化

若是你也喜歡看警匪片,可能對如下經典的情節印象深入:帥氣的探長對案件一籌莫展,要找兇手如大海撈針,因而偷偷聯繫上了線人。這線人混跡江湖多年,三教九流認識一大票,掌握了很多小混混的信息,以此換取情報費。加密

例如,轄區發生了劫殺案,線人能提供轄區內小混混們最近買毒品的數量,探長就能優先去調查那些買毒品多,手頭緊,更容易起歪念去打劫生財的人。spa

可探長並不知道線人手上的情報是否真實,因此須要先打探個虛實。同時,線人也擔憂信息提供出去就收不到錢了,畢竟也不是合法生意,所以雙方每每構成僵局。設計

電影《線人》截圖

2. 用技術打破僵局:同態加密

電影中,警探和線人都有本身的立場,在情報收取過程當中,也由於立場的對立和信息傳達的矛盾致使了一些沒法挽回的嚴重後果。但若是從技術角度來看,信息交換本沒必要如此麻煩。

假如探長不但查案了得,還精通密碼學和統計學,他就能夠把問題解決得更加優雅一些:先讓線人把小混混們按照過往購毒量分紅高低兩組,他本身也根據過往的檔案把小混混們歸類爲犯案者和守法者。

若是線人手上信息可靠,那高低兩組的犯案者比例應當明顯地不一樣,高購毒量一組犯案佔比更大。

回顧一下咱們的場景限制,線人並不肯意把信息直接給探長,探長更不能把信息直接給線人(不能把答案供出去了),因而探長使用了同態加密技術。

所謂同態加密是什麼呢?咱們把原來人能看懂的有意義的信息叫作明文(例如犯案者和守法者標記),密文就是把明文通過加密後獲得的,人看上去沒有意義的信息。這個同態加密妙就妙在,把密文相加後再解密的結果,和直接對明文相加的結果是同樣的。

同態加密的基本性質

首先咱們來想一下,不用密碼的狀況下,咱們是怎樣去計算兩組人的犯罪者比例差別的呢?

咱們會去數一個組裏有總共有多少人,而後數裏面有多少個犯罪者。若是是犯罪者,那就是犯罪者總數+1,若是不是犯罪者,那就是犯案者總數+0。

因此,咱們把犯罪者標記爲1,不是犯罪者標記爲0,把這些1和0所有加總在一塊兒,就知道了犯罪者總數,而後除以某組的總人數就知道了犯罪者比例。

咱們用同態加密把上面這些1和0掩藏成線人看上去沒有意義的信息,既能算出每個分組犯罪者比例,同時線人也不知道探長手上拿着的具體是什麼信息。

總結起來就是,探長先把犯案者記爲1,守法者記爲0,而後把全部的1和0作同態加密,發給線人。後者則按探長指示把高低兩組小混混的密文分別求和,而後把加總好的兩組「密文的和」發還給探長。

探長通過解密,獲得值就是各組犯案者的數量,除以每組的人數,就能夠知道兩組當中犯案者的比例。若是有明顯差別,就能夠放心給錢,獲得最有可能犯罪的小混混清單了。

在這個過程當中,探長的信息(誰是犯案者,誰是守法者)沒有泄漏給線人,線人只獲得了密文。線人手上的信息(哪些小混混買毒買得多)也沒有泄漏給探長,探長只知道兩組小混混的犯案者比例而並不知道每一組有哪些小混混。

經過同態加密進行線索區分度驗證

3. 現實生活中:風控和騙徒

上述場景看似有點和現實生活脫節,但真實世界當中這樣的故事天天都在發生。

現實中會統計學的「探長們」不在警察局,而是在銀行和貸款的公司風控部門當中,通常被稱爲金融風控分析師。而現實中的線人,則是擁有銀行所沒有數據的其它組織,例如電信運營商(如移動、聯通),卡組織(如銀聯、VISA)或者政府部門等。

風控部門須要去識別,哪些貸款申請人其實是騙徒或者老賴,把他們剔除掉,以避免銀行的錢被騙走。

在這個過程當中,因爲銀行和數據提供方都須要保護本身的客戶隱私和商業機密,因此也跟探長與線人同樣,須要在不泄漏真實數據的狀況下共同完成這個識別工做。

而同態加密正是用到的其中一種方法,騰訊神盾-聯邦計算把同態加密和機器學習算法結合起來,就成了當前最多見的聯邦學習算法。

銀行和數據擁有方,既要合做,又要保密

神盾-聯邦計算經過提供一站式聯邦學習平臺,在金融機構和數據提供方合做當中做爲聯通數據的橋樑,分析師們無需關注算法底層密碼學和機器學習改造的底層細節,鼠標簡單點擊便可完成聯邦機器學習建模流程,同時又能確保雙方數據都不泄漏,保障數據安全。

3、聯邦梯度提高樹和聯邦邏輯迴歸

基於前文所述,經過同態加密來驗證數據區分能力的基本原理,神盾-聯邦計算對最經常使用的決策樹類算法梯度提高樹(XGBoost/GBDT)和線性模型類算法邏輯迴歸(Logistic Regression)分別進行了改造。下面咱們來看看改造是怎麼進行的。

1. 聯邦決策樹算法:多個線索組合起來

讓咱們再次回到探長與線人的故事中來。線人如今只提供了一個線索,也就是小混混們的購毒量,而且高低兩組的犯案者比例確實是有明顯差別的。

可是探長還不是很滿意,由於高低低組的犯案者比例分別是:30%/5%,也就是說即便拿到購毒量大的小混混清單,裏面也有70%不會犯罪。

探長想再精確一點,一抓一個準,讓線人再提供一個線索。線人撓撓頭說:行,我還知道他們最近打零工的收入。探長大喜,但仍是要留個心眼,先驗證一下吧。

按照以前使用同態加密的辦法,探長讓線人根據購毒量和零工收入兩個線索組合起來,分紅了4個組,而後按照以前用同態加密的方法進行驗證分別獲得了四組小混混的犯案者比例:10%/5%/80%/30%。

購毒量大且零工收入低的這組混混,有80%可能犯罪,近乎能一抓一準。探長滿意了。

多條線索組合計算更精確的犯罪率

這裏其實還遺留了幾個問題:

第一,購毒量和零工收入有效,這是探長根據經驗所得知的。在線人所瞭解的諸多線索當中,若是沒有探長的經驗,就只能用機器,經過上述同態加密的方法逐個去試,從而找到兩組犯案者比例差別最大的線索,這裏稱爲聯邦決策樹當中的變量搜索

第二,這裏把小混混劃分紅高低兩組,但到底多少是高,多少是低,劃分點在哪其實也須要機器一個個可能性去試,這裏稱爲聯邦決策樹中的分裂點搜索

第三,如今只是兩個線索的兩兩組合,共有四個組合。若是有1000條線索選三個來組合呢,那就有1000X1000X1000,即一百萬種組合須要計算的,這計算量太多了,須要算好久好久。

有個取巧的方法是,先作變量搜索找到最有區分度的第一層變量,而後固定住第一層(如購毒量)再去搜索第二層變量。如此類推,這樣就只須要1000+1000X2+1000X4(第一層1節點,第二層2節點,第三層四節點),即7000種組合須要計算,比100萬少多了。

這種辦法叫作貪心搜索,就是每一層最佳的變量和分裂點選定後就不變了。

總結來看,經過同態加密的方法進行變量和分裂點的貪心搜索,在找到最能區分犯案者和守法者的條件組合的同時,保護探長和線人的信息都不透露給對方。這就是聯邦決策樹算法。

在現實中,若是每個變量和每個分裂點都完整進行同態加密,發送,求和,返回,解密,計算比例六步這整個流程,就須要在探長和線人中往返不少次,速度難以接受。

因爲咱們使用貪心算法,因此在探長髮送完同態密文給線人後,讓線人把全部線索按照全部可能分割點都先統一進行求和後再返回給探長一次性解密,探長再從中選出比例差別最大的變量和分割點。這個全部線索按照全部可能分割點都先統一進行求和,獲得的結果叫作同態密文梯度直方圖。

聯邦決策樹算法

上述就是聯邦決策樹的建模過程,若是咱們再往前一步,把多棵樹聯合起來,就能獲得不一樣的集成模型(Ensemble)用以提高效果。

例如使用相同一份梯度同態密文屢次反覆對特徵和樣本取樣來創建多棵決策樹,而後把多棵決策樹的結果取平均,就有了聯邦隨機森林模型(Random Forest)。

另一個集成方向是每創建一棵樹就用這個樹的結果來更新梯度密文,後一棵樹以上一棵樹的結果爲基礎來訓練,這就有了梯度提高樹(GBDT),其中著名的實現就有XGBoost等。

2. 聯邦邏輯迴歸:另外一種可能性

神盾-聯邦計算改造了的另外一個經常使用算法則是邏輯迴歸。

上文提到過,同態加密的特性是明文加密以後求和再解密,等價於明文直接求和。把這條性質衍生一下,那明文乘以密文再加密,等價於明文乘以明文。

例如 3*密文,其實就是等於 密文+密文+密文。咱們利用這個性質能夠幫助探長和線人構建另外一種模型:邏輯迴歸。

同態加密基本性質的衍生

前文所述的經過條件組合,如購毒量高且零工收入高,這種方式來組合多個線索,就獲得了樹模型。

那可否換一種線索組合的方式,例如:犯案可能性 = 購毒量線索的權重x購毒量+零工收入的權重x零工收入。咱們把這樣的組合方式稱爲線性模型,其中最經常使用的就是邏輯迴歸。因爲這種模型是把多個線索的得分加起來預測犯案可能性,因此又叫作評分卡。

這裏聯邦算法惟一須要作的事即是肯定每一項線索的權重,這裏咱們能夠用瞎猜的辦法。線人隨便指定權重,計算得出每一個人的犯案可能性,而後發給探長,探長再答覆線人猜得有多準。

固然,這樣子不知道要到何年何月才能猜出足夠好的一組權重了,因此科學家想出了不少讓這個猜想過程更快的辦法,其中一種就叫作梯度降低法。

邏輯迴歸

線人先瞎猜一組權重,而後告訴探長結果。探長想了想,若是我直接回復他哪些小混混猜準了,哪些沒猜準,他多猜幾回不就把個人檔案資料摸清楚了,因此不能直接給他。我能不能直接告訴他每個權重是多了仍是少了,應該加多少或者減多少,這樣就不會泄漏到底猜對了仍是猜錯了。

探長這裏所想到的每個權重值應該加多少或者減多少,其實就是所謂的梯度。經過減梯度值來儘快猜出一個最佳的權重值,這種方法就叫作梯度降低法。

其中最簡單的梯度就是「線索的值」X「猜想的犯罪可能性與真實是否犯罪的差值」。這公式的推導須要微積分,但理解卻不難。

前者是由於線索的值越大,對最終結果的影響越大,因此變化幅度要越大;後者則是變化的方向,猜多了要減一點,猜少了要加一點,差得遠加減的幅度也要越大。

可是探長不能直接給出「猜想的犯罪可能性與真實是否犯罪的差值」,由於這樣會讓線人很快摸清檔案真實狀況。

探長心生一計,他把這個差值作了同態加密,發給線人,讓線人使用所掌握的「線索的值」計算出梯度的密文,也就是 「線索的值」X「猜想的犯罪可能性與真實是否犯罪的差值的密文」,而後發還給探長進行解密。最後探長就能夠只把梯度告訴線人,而不須要把猜想正確與否泄漏出去了。

聯邦邏輯迴歸梯度計算流程

把上面這個過程反覆進行,直到猜來猜去準確性都沒什麼提高了,就中止不猜了,被稱爲「收斂」了。

結語

在本文中,咱們從電影中探長與線人的博弈場景延伸展開,探討如何在雙方都不透露具體數據給對方的狀況下進行數據合做。

藉此介紹了同態加密的技術,而同態加密的特色是對密文求和再解密等價於對明文直接求和。同時介紹了神盾-聯邦計算在此基礎之上,對經典的梯度提高樹算法(GBDT)和邏輯迴歸算法(LR)進行了改造,從而讓雙方數據都不泄漏的狀況下訓練模型。

目前這兩個算法已融入騰訊神盾體系,成爲其中重要的能力,幫助促進金融行業的信息共享合做。同時,神盾也在安全性、效率和算法的豐富性完整性方面投入研發,取得了成效,例如:

  • 同態加密算法:神盾經過自研的RIAC同態加密系統替代傳統的Paillier系統,讓算法總體計算速度提高70%。
  • 邏輯迴歸算法:神盾經過從新設計算法協議,剔除了可信第三方這個不安全設定,同時完全免除了近似計算偏差,使聯邦邏輯迴歸效果跟傳統邏輯迴歸徹底一致。
  • 決策樹算法:神盾經過矩陣計算優化,將同態密文的梯度直方圖計算速度提高70%以上,使總體計算時間減小50%。
  • 非對稱聯邦技術:經過摻入假樣本保護金融機構的客戶ID列表,同時不影響模型訓練效果。

將來,神盾-聯邦計算將繼續致力於聯通數據孤島,讓數據發揮更大價值的同時,助力業務發展。

相關文章
相關標籤/搜索