首頁>技術>

聯邦學習的概念

簡單來說,聯邦學習是把 不同資料來源 的資料 聯合訓練 ,得到更好的模型在進行機器學習的過程中,各參與方可以藉助其他方資料進行聯合建模各方無需共享資料資源,資料不出本地情況下,進行聯合訓練,建立共享的機器學習模型
聯邦學習的意義
聯邦學習是一種保護資料解決資料孤島的一種機器學習方法除了資料孤島,還有可能存在資料隱私安全問題
聯邦學習的分類企業的資料孤島

或者

聯邦學習的應用場景視覺橫向聯邦學習系統
同為目標檢測任務各個機構標註的資料集不同各個機構在不交換資料的情況下進行協作
自然語言處理橫向聯邦學習系統-未登入詞(OOV)生成問題
每個使用者裝置只儲存有限大小的詞庫表——資料孤島OOV單詞生成包含使用者敏感內容——使用者資料保護每臺移動裝置在不交換資料的情況下進行協作
聯邦車險定價學習系統聯邦學習產品業務實現流程

提前宣告:該文章介紹的是目前聯邦學習行業比較通用的實現方式 不存在涉及一家公司機密資訊

備註:下面介紹的流程大部分都已實現 少部分還在技術調研階段

聯邦學習產品所具備的完整流程

概念簡單描述

樣本融合
雙方資料取交集a、發起方樣本a 比如該使用者金融資訊b、合作方樣本b 比如該使用者物流資訊c、樣本a和b都有共同的欄位uid 即使用者編號即透過使用者編號可以取樣本a獲取該使用者的金融資訊去樣本b可以獲取該使用者的物流資訊d、根據uid取交集即獲取所有既有金融資訊又又物流資訊的使用者但發起方和合作方的雙方資料都是獨立的 互相不知道的e、樣本融合之後 發起方有了融合之後的金融資料合作方也有了融合之後的物流資訊但合作方不會又金融資訊發起方也不會又物流資訊
資料預處理/探索性分析

提高資料的質量 異常值處理

特徵分箱

計算所有特徵的IV指標 選擇IV指標高的加入模型 IV指標越高對模型越有效

PCA 主成分分析

計算某個特徵的分析指標

模型訓練

根據雙方的測試資料進行訓練

樣本集資料會被分成2份 訓練集和驗證集

使用訓練集進行訓練使用驗證結進行驗證雙方會根據各自模型的指標來彼此調整訓練的引數以達到雙方的評價模型的指標引數(ks、auc、loss最小)都很好每個流程的具體實現過程

這裡僅介紹前端部分(web、java),後端部分(python)後面再一一介紹

資料準備階段錄入節點資訊錄入合作方節點節點資訊包括:注意a 當前節點只能有一個 合作方節點可以有多個b 透過節點名稱md5加密得到節點編號 雙方節點編號要保持一致c 公私鑰是用於 java之間通訊、python之間通訊資料安全加解密d、java之間互動、python之間互動、java與python之間互動的請求url路徑是從對應節點資訊中獲取的方式a 透過csv儲存資料的方式上傳(小資料量)有多種實現方式 這裡簡單介紹兩種a-1 上傳分散式磁碟儲存系統fastdfsa-2 上傳分散式記憶體檔案系統alluxiob 已資料庫指令碼的方式上傳(小資料量)c 透過Hive或Mysql匯入ClickHouse的方式(大資料量)d 透過分庫分表的方式(大資料量)大資料量如億級別 例如雙方均有10億資料量c、d這兩種方式後面的文章會介紹新增資料集分為訓練和預測建立自己節點和多個合作方節點發起方節點名稱、發起方java服務根路徑、發起方python服務根路徑、發起方加密公私鑰合作方名稱、合作方公鑰、合作方java服務跟路徑、合作方python服務跟路徑新建專案資訊包含:2個節點資訊(一個當前節點另外一個是合作方節點)、多個訓練樣本資料、多個測試樣本資料發起方新建任務資訊一個專案可以有多個任務任務資訊包括:任務名稱和發起方節點訓練樣本資料合作方協助任務資料融合

資料融合的產品原型圖

資料預處理探索性分析與之前端操作流程類似使用者觸發第二次資料預處理探索性分析與之前端操作流程類似

資料預處理-產品原型圖

特徵工程特徵分箱

特徵分箱演算法引數選擇和定義

特徵分箱指標IV值

PCA主成分分析和特徵分箱前端操作流程類似模型訓練

選擇模型訓練演算法

模型訓練過程

模型評價指標

模型預測部分技術點原理介紹資料對齊兩種實現方式

密碼學基礎知識

不經意間傳輸加密OT概念
不經意傳輸(oblivious transfer)是一個密碼學協議在這個協議中,訊息傳送者從一些待發送的訊息中傳送一條給接收者但事後對傳送了哪一條訊息仍然oblivious(不知道)這個協議也叫茫然傳輸協議
舉例說明2選1n選1
1.傳送者Alice生成兩對rsa公私鑰,並將兩個公鑰puk0、puk1傳送給接受者Bob2. Bob生成一個隨機數,並用收到的兩個公鑰之一加密隨機數(用哪個秘鑰取決於想獲取哪條資料,例如如果想要得到訊息M0 就用puk0加密隨機數,如果想要得到M1就用puk1加密隨機數),並將密文結果傳送給Alice3. Alice用自己的兩個私鑰分別解密收到隨機數密文,並得到兩個解密結果k0,k1,並將兩個結果分別與要傳送的兩條資訊進行異或(k0異或M0,k1異或M1),並將兩個結果e0,e1發給Bob4. Bob用自己的真實隨機數與收到的e0、e1分別做異或操作,得到的兩個結果中只有一條為真實資料,另外一條為隨機數
RSA演算法和雜湊機制配合

為了解決加密樣本對齊

RSA演算法和雜湊機制配合
首先,宏觀上來說要想保證自己的資料不會被對方獲取A和B都需要針對資料採取只有自己瞭解的操作 以保證對方無法反推出資料對於A而言,保密操作由雜湊機制和隨機產生的Ri來實現對於B而言,保密操作由雜湊機制和自己產生的d來實現第一步:B由RSA演算法產生n、e、d,併發送包含n、e的公鑰給A第二部:A對自己擁有的使用者資料進行加密操作,雜湊+Ri來實現,再將加密後的資料YA傳送給B第三步:B得到YA後,由於雜湊機制的原理和Ri未知,很難反推出A的使用者資料。B對YA取d次冪得到ZA,再對自己的使用者資料進行加密操作,取雜湊再d次冪再雜湊,得到ZB,接著將ZA、ZB傳送給A第四步:A得到ZB後,同理也反推不出B的使用者資料,再對自己的使用者加密資料ZA除Ri再雜湊,得到DA第五步:DA和ZB本質上是對資料進行相同操作後得到的資料,所以如果源資料相同,操作後的資料也相同,所以根據DA,ZB求交集的結果,A可以判斷出A和B的共同資料有哪些,最後再將結果I傳送給B,樣本對齊結束
思考為什麼這麼做
首先要明白求交集,必須將資料放到一起放到一起的話那就必須要對自己的資料進行加密我們還要明白共同使用者資料經過加密操作之後必須仍然相同,暫且稱之為要求1那我們先假設對雙方使用者資料只進行一次雜湊操作這樣雖然可以保證要求1,但是安全性不高,使用者有可能反推使用者資料因此引入隨機變數我們再考慮能否只有一方傳送資料另一方接收資料假設B對自己的使用者資料加密,用到了隨機變數d和雜湊,傳送給A接收方A接收後,A需要對自己的資料進行操作使得自己的公共資料和B傳來資料中的公共資料相等來滿足要求1但是由於A不知道d,所以A做不到公共資料相等,也就做不到樣本對齊接下來考慮雙方互相傳送資料A先用隨機變數Ri和雜湊對自己的資料加密後傳送給BB在A發來的密文上操作,此時該密文就有了因素dB再對自己的資料進行加密,接著將兩部分資料傳送給AA接收到兩份密文後,對自己的密文進行轉換此時自己的密文已經包含了因素d所以理論上A把自己加在自己資料上的“鎖”解開後能夠轉化為與B資料相同的形式,此時就可以完成樣本對齊了在這過程中雙方都不可能反推對方的資料
模型訓練加密過程同態加密

縱向的模型訓練有用到同態加密中的加法同態加密

第一個式子表示損失函式loss第二個等式表示梯度下面兩個式子表示加法同態加密的性質——和的密文等於密文的和由於加法同態加密中只支援加減乘除,不支援指數運算,所以loss需要在零點處二次泰勒展開右圖表示實際工作過程,UA將加密後的ua和ua^2傳送給UB,ua=wx,即己方資料的權重和特徵值的乘積UB計算己方資料的權重和特種值的乘積,再和ua相加,得到樣本的所有特徵的w*x然後結合自己擁有的樣本標籤y計算dd就是梯度表示式中除去x的部分UB將d加密後傳送給UA,此時UA、UB都可以用己方的特徵值x乘d來計算出自己的梯度UA、UB計算出梯度後,加密上傳給arbiter,arbiter接收後解碼、更新梯度,再將更新後的梯度分發下去,UAUB接收後完成模型的一次更新不斷迭代上述過程,直到loss低於預期值才停止當資料提供方host較多時,為減少通訊成本,不在計算loss,透過兩次迭代之間梯度更新的幅度來判斷是否結束,幅度很小時,訓練結束
結語

後面會陸續介紹

幾億級別的資料量架構如何設計且如何實現資料處理過程用一些大資料處理框架來做比如spark、flinkpython的優勢在於演算法 如何支援幾億級別的資料進行模型訓練核心:後端Python 每一個階段的介紹其他聯邦學習技術點介紹

17
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 五千字長文,跟大夥聊聊JVM的垃圾回收