之因此要開始寫《數據價值》這一系列文章,是最近學習和工做中逐漸感受目前隨着數據的爆發,如何去挖掘數據的價值正成爲目前的主流話題,因此但願不斷記錄相關的信息和和知識,來探尋如何去挖掘數據價值和目前的一些嘗試。
在 《數據價值-聯邦學習篇》:初識 這篇文章中咱們簡單講解了聯邦學習的由來,概念和現狀。那麼在2016年Google發表的聯邦學習論文,針對的場景是橫向聯邦學習,也就是樣本特徵重疊部分較多,可是用戶重疊部分較少的情景。這個場景適合於同一規範下的模型聚合,像Android上的模型訓練,樣本除了用戶不一樣,基本狀況都是同樣的
。可是隨着行業間的融合,更多的場景變成了用戶重疊部分不少,可是特徵重疊部分較多的狀況。
好比我是一家銀行,我這邊目前有一個識別用戶可否定時還錢的模型,可是由於我這邊只有用戶帳戶的一些信息,這些維度對於決定用戶可否定時還錢來講顯得仍是太少了,這樣形成模型的準確率達不到理想的效果,因而我想用戶的其餘信息,好比和電信或者移動合做,把他們的標籤也應用起來,應該能夠提升模型的準確率,而這就是縱向聯邦學習的由來,而將縱向聯邦學習推向可行高度的就是《SecureBoost: A Lossless Federated Learning Framework》 這篇論文,那麼就讓咱們開始今天的旅程。
SecureBoost 論文的提出背景是如今行業對數據的的隱私要求愈來愈高,因此 SecureBoost 論述的第一個就是在隱私性上的保證,這裏麪包括經過分析去除沒必要要的信息,只傳輸必要的信息。而後是使用同態加密處理必要的隱私信息,同態加密是一種新型的加密方式,與其餘加密方式不一樣的在於關注數據的處理安全,能夠保證其餘用戶能夠在沒法破解數據的狀況下處理數據。就像下圖:
咱們把黃金鎖在盒子裏面,這個至關於加密,而後給其餘用戶。其餘用戶沒法接觸到盒子裏面的黃金,也不知道盒子裏面是什麼。而咱們告訴用戶如何去操做裏面的東西,並提供了手套來處理黃金,那麼在用戶處理完黃金後,咱們就能夠拿處處理後的黃金。而 SecureBoost 就是就是採用這一點保證隱私信息的安全。
在 SecureBoost 設定的場景中包含兩種角色,一種是擁有標籤和數據的Active Party,另一種是隻擁有數據的Passive Party。一個 SecureBoost 場景下,應當有1個Active Party, n個Passive Party.以下圖:
SecureBoost 訓練總共分爲兩部分,第一是數據對齊,第二部分是構造Boost樹。因爲這兩部分並非SecureBoost的重點,這裏只作簡單介紹。
數據對齊的難點在於如何讓隱私信息不被暴露的狀況下對齊數據,也就是說好比A有{u1,u2,u3,u4}四個數據,B有{u1,u2,u3,u5}四個數據,若是讓A,B在不知道對方的數據前提下,找到{u1,u2,u3}這個並集。這裏SecureBoost沒有本身造輪子,而是使用了Gang Liang and Sudarshan S. Chawathe的《Privacy-Preserving Inter-Database Operations》論文中的方法。具體的咱們來看FATE的實現:
-
B先經過RSA生成n(公有密鑰)、e(加密算法)、d(解密算法),而後把公鑰(n,e)傳給A。
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
經過上面的操做,A,B在不知道對方的差分數據下獲得了並集,也就是對齊了數據樣本。flex
而後就是構造Boost樹,這個其實就是將XGBoost經過聯邦學習的方式進行構建Boost樹。, SecureBoost 關注的在於若是在保護隱私的狀況下構造出全局的Boost樹,咱們關注上面構造的過程,在數據對齊後,每一方會交換訓練的中間值,也就是權重。這裏值得注意的是,爲了保證數據安全,這裏也使用了同態加密。而且爲了保證可以使用同態加密,這裏對數據進行了處理,以除去沒法進行同態加密的運算。
![](http://static.javashuo.com/static/loading.gif)
總的來講, SecureBoost 在處理這兩部分時,重點使用了同態加密來保證數據的安全,同時爲了符合同態加密的條件,調節了整個構造過程。
這裏首先要說明的是,這張圖是 SecureBoost 論文中的圖,而實際描述中中Party1應該是Active Party,因此標籤應該是Party 1的。那麼咱們接下來就容易理解了,構造的Boost數,左邊的葉子節點永遠小於右邊。而每個非葉子節點都是一個查詢條件。那麼如今咱們把須要推理的條件輸入進來,進入到根節點,咱們查詢當期記錄是Party 1的,而對應的值是Bill Payment 5000,而當前的值4367比5000小,因此咱們進入左子樹,而後查詢到時Party 3的,對應的值是Amount of given credit 800,比輸入的5500小,因此咱們進入到右子樹。這時發現已是是葉子節點了,那麼咱們直接找到這個值的標籤,也就是x1的標籤0,和咱們的輸入一致,咱們認爲這個預測是成功的。
因爲 SecureBoost 構造Boost樹第一個子樹是由Active Party和Passive Party共同參與的,因此致使主動方的標籤信息可能發生泄漏。因此SecureBoost在論文中提出了更爲嚴格的Completely SecureBoost,也就是第一個子樹徹底有Active Party構造,Passive Party徹底不參與。這樣的話Passive Party只能拿到第一個子樹的結果,這樣就能夠保證標籤信息不被泄漏。
SecureBoost 是爲了實現縱向聯邦學習的爲了提出了一種構建算法,目的是爲了在保護數據隱私的前提下進行多方聯合學習。 SecureBoost 在應用到縱向聯邦學習時,主要包括兩點,一是數據對齊,提出了一種在不泄露數據標識的狀況下尋找數據交集的方法。二是訓練構造Boost樹,一樣出發點是保護數據的安全。同時爲了進一步減小數據的泄露風險,提出了更爲嚴格的Completely SecureBoost。隱私和安全是把雙刃劍,在保護隱私和安全的狀況下,聯邦學習的訓練效率不可避免的收到了影響。這也是目前聯邦學習不斷探索的方向。
本文分享自微信公衆號 - 雨夜隨筆(yuye_suibi)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。