详解联邦学习Federated Learning
今天我們來講下最近比較博眼球的聯邦學習。應該很多人聽過但是始終都沒懂啥是聯邦學習?百度一下發現大篇文章都說可以用來解決數據孤島,那它又是如何來解決數據孤島問題的?對于聯邦學習,大部分文章還都處于其學術分享會的報道階段,并未詳細介紹聯邦學習的實現方法,難以理解其真容,本篇文章將從技術角度介紹聯邦學習。
1、聯邦學習的背景介紹
近年來人工智能可謂風風火火,掀起一波又一波浪潮,從人臉識別、活體檢驗發現刑事案件報警到阿爾法狗大戰人類圍棋手李世石、再到無人駕駛、以及已被普遍應用的精準營銷,AI逐步進入人們生活的方方面面。當然也不免出現部分過度吹捧,導致對AI的誤解--AI無所不能,既然這么好用,為啥我不能拿來用一下?在追逐AI的同時卻忽略了一點,AI是靠數據來喂的,而且是大量優質數據。
現實生活中,除了少數巨頭公司能夠滿足,絕大多數企業都存在數據量少,數據質量差的問題,不足以支撐人工智能技術的實現;同時國內外監管環境也在逐步加強數據保護,陸續出臺相關政策,如歐盟最近引入 的新法案《通用數據保護條例》(GDPR),我國國家互聯網信息辦公室起草的《數據安全管理辦法(征求意見稿)》,因此數據在安全合規的前提下自由流動,成了大勢所趨;在用戶和企業角度下,商業公司所擁有的數據往往都有巨大的潛在價值。兩個公司甚至公司間的部門都要考慮利益的交換,往往這些機構不會提供各自數據與其他公司做與單的聚合,導致即使在同一個公司內,數據也往往以孤島形式出現。
基于以上不足以支撐實現、不允許粗暴交換、不愿意貢獻價值三點,導致了現在大量存在的數據孤島,以及隱私保護問題,聯邦學習應運而生。
2、聯邦學習的概念
本質:聯邦學習本質上是一種分布式機器學習技術,或機器學習框架。
目標:聯邦學習的目標是在保證數據隱私安全及合法合規的基礎上,實現共同建模,提升AI模型的效果。
前身:聯邦學習最早在 2016 年由谷歌提出,原本用于解決安卓手機終端用戶在本地更新模型的問題;
3、聯邦學習的分類
我們把每個參與共同建模的企業稱為參與方,根據多參與方之間數據分布的不同,把聯邦學習分為三類:橫向聯邦學習、縱向聯邦學習和聯邦遷移學習。
3.1 橫向聯邦學習
適用場景:
橫向聯邦學習的本質是樣本的聯合,適用于參與者間業態相同但觸達客戶不同,即特征重疊多,用戶重疊少時的場景,比如不同地區的銀行間,他們的業務相似(特征相似),但用戶不同(樣本不同)
學習過程:
step1:參與方各自從服務器A下載最新模型;
step2:每個參與方利用本地數據訓練模型,加密梯度上傳給服務器A,服務器A聚合各用戶的梯度更新模型參數;
step3:服務器A返回更新后的模型給各參與方;
step4:各參與方更新各自模型。
步驟解讀:在傳統的機器學習建模中,通常是把模型訓練需要的數據集合到一個數據中心然后再訓練模型,之后預測。在橫向聯邦學習中,可以看作是基于樣本的分布式模型訓練,分發全部數據到不同的機器,每臺機器從服務器下載模型,然后利用本地數據訓練模型,之后返回給服務器需要更新的參數;服務器聚合各機器上的返回的參數,更新模型,再把最新的模型反饋到每臺機器。
在這個過程中,每臺機器下都是相同且完整的模型,且機器之間不交流不依賴,在預測時每臺機器也可以獨立預測,可以把這個過程看作成基于樣本的分布式模型訓練。谷歌最初就是采用橫向聯邦的方式解決安卓手機終端用戶在本地更新模型的問題的。
3.2 縱向聯邦學習
適用場景:
縱向聯邦學習的本質是特征的聯合,適用于用戶重疊多,特征重疊少的場景,比如同一地區的商超和銀行,他們觸達的用戶都為該地區的居民(樣本相同),但業務不同(特征不同)。
學習過程:
縱向聯邦學習的本質是交叉用戶在不同業態下的特征聯合,比如商超A和銀行B,在傳統的機器學習建模過程中,需要將兩部分數據集中到一個數據中心,然后再將每個用戶的特征join成一條數據用來訓練模型,所以就需要雙方有用戶交集(基于join結果建模),并有一方存在label。其學習步驟如上圖所示,分為兩大步:
第一步:加密樣本對齊。是在系統級做這件事,因此在企業感知層面不會暴露非交叉用戶。
第二步:對齊樣本進行模型加密訓練:
step1:由第三方C向A和B發送公鑰,用來加密需要傳輸的數據;
step2:A和B分別計算和自己相關的特征中間結果,并加密交互,用來求得各自梯度和損失;
step3:A和B分別計算各自加密后的梯度并添加掩碼發送給C,同時B計算加密后的損失發送給C;
step4:C解密梯度和損失后回傳給A和B,A、B去除掩碼并更新模型。
步驟解讀:我們以線性回歸為例具體說明其訓練過程。
存在數據集???,A和B分別初始化模型參數?
其目標函數為:
令:?,且對原目標函數同態加密后可表示為:
?,??表示同態加密,??,??,??,
因此有??,同理令??,
梯度可表示如下:
具體訓練步驟如下:
在整個過程中參與方都不知道另一方的數據和特征,且訓練結束后參與方只得到自己側的模型參數,即半模型。
預測過程:
由于各參與方只能得到與自己相關的模型參數,預測時需要雙方協作完成,如下圖所示:
共同建模的結果:
- 雙方均獲得數據保護
- 共同提升模型效果
- 模型無損失
3.3 聯邦遷移學習
適用場景:
當參與者間特征和樣本重疊都很少時可以考慮使用聯邦遷移學習,如不同地區的銀行和商超間的聯合。主要適用于以深度神經網絡為基模型的場景。
遷移學習介紹:
遷移學習,是指利用數據、任務、或模型之間的相似性,將在源領域學習過的模型,應用于 目標領域的一種學習過程。
其實我們人類對于遷移學習這種能力,是與生俱來的。比如,我們如果已經會打乒乓球,就可以類比著學習打網球。再比如,我們如果已經會下中國象棋,就可以類比著下國際象棋。因為這些活動之間,往往有著極高的相似性。生活中常用的“舉一反三”、“照貓畫虎”就很好地體現了遷移學習的思想。
遷移學習的核心是,找到源領域和目標領域之間的相似性,舉一個楊強教授經常舉的例子來說明:我們都知道在中國大陸開車時,駕駛員坐在左邊,靠馬路右側行駛。這是基本的規則。然而,如果在英國、香港等地區開車,駕駛員是坐在右邊,需要靠馬路左側行駛。那么,如果我們從中國大陸到了香港,應該如何快速地適應 他們的開車方式呢?訣竅就是找到這里的不變量:不論在哪個地區,駕駛員都是緊靠馬路中間。這就是我們這個開車問題中的不變量。 找到相似性 (不變量),是進行遷移學習的核心。
學習過程:
聯邦遷移學習的步驟與縱向聯邦學習相似,只是中間傳遞結果不同(實際上每個模型的中間傳遞結果都不同)。這里重點講一下聯邦遷移的思想:
源域:??,目標域:??,我們假設源域和目標域間存在共同樣本??,對于其共同樣本存在??,??分別為源域和目標域間的隱層特征不變量,我們定義對目標域的分類函數為:?
目標函數:
?
?
整體目標函數為:?
使用BP算法,根據目標函數??分別對??求梯度,雙方交互計算梯度和損失需要用到的中間結果,重復迭代直至收斂。整個學習過程是利用A、B之間共同樣本來學習兩者間各自的特征不變量表示?,同時利用A的所有樣本label??和A的不變量特征??學習分類器。在這個階段中,[聯邦] 體現在A,B可以通過安全交互中間結果共同學習一個模型,[遷移] 體現在B遷移了A的分類能力。在預測時,??依賴于 由?組成的分類器,因此和縱向聯邦相同需要兩者協作來完成。本節參考文章:Secure Federated Transfer Learning
最后,附上聯邦學習開源github:https://github.com/webankfintech/fate
歡迎大家一起討論!
總結
以上是生活随笔為你收集整理的详解联邦学习Federated Learning的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Kafka Connect简介
- 下一篇: 剖析亿级请求下的多级缓存