策略產品經理必讀系列—第六講聯邦學習篇
編輯導語:“聯邦學習”可以理解為多方學習或者說共同學習,這一概念也已經在許多領域中應用,那么作為策略產品經理,你是否理解這一概念?這一概念又可以在哪些領域落地?本文作者進行了總結,一起來看一下。
前言
聯邦學習是近些年研究非常熱門的領域,目前在工業界很多領域已經落地應用了。本篇文章主要面向產品運營等非專業技術人士,通俗易懂地講解什么是聯邦學習,主要解決什么問題,以及在工業界的實際落地案例。
一、聯邦學習的發展歷程
提到聯邦(Federation),大家估計首先想到的就是英聯邦或者美聯邦,美國各個州組合在一起形成一個聯邦。聯邦學習( Federated Learning),字面直譯也就是多方參與,共同學習。
1. 最初的起源——橫向聯邦學習
聯邦學習最早是谷歌在2017.4月提出的,谷歌為此專門出了一個漫畫來解釋什么是聯邦學習:https://zhuanlan.zhihu.com/p/101644082。
谷歌最開始提出聯邦學習時是為了解決C端用戶終端設備上模型訓練的問題。C端用戶手機上的智能軟件提供服務時背后都得依靠模型,而模型的訓練學習全部要基于用戶的數據。比如手機上的輸入法,基于不同人的打字拼音習慣,輸入法會不停更新會慢慢和每個人的打字習慣進行匹配,用戶會覺得輸入法越來越智能。
那么過去這些手機輸入法是如何進行模型訓練的了?
過去的做法:將用戶每天產生的行為數據全部上傳至云端服務器,部署在服務器上的模型基于上傳的數據進行訓練,然后更新模型,最終實際應用時本地需要請求云端服務。大致流程如下圖:
上述這種模型訓練的方式,我們也叫做“集中式模型訓練”,這種方式有兩個弊端:
- 無法保證用戶的數據隱私:服務商將用戶的數據全部采集到了服務器上進行統一管理。這種方式在監管對個人數據隱私管控越來越嚴的情況下,會越來越受限;
- 實時性難以保證:模型在應用時需要通過網絡請求云端的模型,在網絡延遲或者沒有網絡的情況下,模型沒辦法發揮它的作用。
為了解決上述的弊端,谷歌提出了一種新的解決方案,并將它命名為“Federated Learning”。
總的來說就是:用戶數據不出本地,所有模型的訓練都是在設備本地進行。本地模型訓練完畢后將得到的模型參數or下降梯度,經過加密上傳至云端,云端模型接收到所有上傳的加密參數or梯度后,結合所有的參數值進行統一的聚合,比如通過加權平均得到新的模型參數or下降梯度,然后將新的結果再重新下發到本地,本地更新得到一個全新的模型。
這種方式我們又叫作“分布式模型訓練”,大致的做法如下圖:
上述這種模型訓練的方式有一個基本的要求:
本地模型-Local Model和云端模型- Global Model的特征必須一致:因為我們是匯總了無數本地模型的參數,基于這些參數對云端模型進行更新。如果這些模型的特征不一致,那么參數之間也沒有任何參考意義。
比如一個預測身高的模型,本地模型用“性別+年齡”特征,云端模型用“體重+膚色”特征,本地模型訓練得到的模型參數上傳到云端,云端根本毫無參考價值。
所以上述這種聯邦學習我們又叫作“橫向聯邦學習”,模型之間使用的特征一致,只是使用的樣本數據不一樣。比如說下圖本地模型使用的用戶特征都是一樣的,但是每個本地模型只能使用本地這一個用戶的數據,無法使用其他用戶的數據進行訓練。
谷歌這種“分布式模型訓練”的新模式一方面保護了用戶隱私,用戶數據不離開本地;另一方面訓練好的云端模型又下放到本地進行應用,這樣即使沒有網絡也可以使用。讀者可能還會對上述的聯邦學習方案存在以下幾個疑惑:
1)本地模型如何訓練更新?很多時候我們的手機都處于閑置的狀態,這個時候本地模型就可以開始訓練和上傳加密參數;就像人體一樣,睡眠的時候長高和做夢來更新大腦的認知系統。
2)模型部署本地會不會占據太多資源?很多時候我們在云端服務器的模型都是幾個G,下放本地會不會很占資源。這種模型都是需要經過壓縮和部分的特征刪減,確實特別大的模型無法下放本地。
3)上傳的數據可以是模型的特征參數或模型訓練的下降梯度嘛?這二者均可,本身模型上的特征參數也是通過梯度下降法計算出來的,所以給下降梯度也是可以得到最終模型的特征參數。
4)上傳的數據為什么還要加密?加密的數據又如何使用?如果這些數據不進行加密的話,有可能通過這些數據進行反推導,將原始數據推導出來,當然這個難度也很大,但為了保險起見還是將所有的數據都進行加密上傳。
云端得到的是一個加密數據包,基于加密狀態下的數據包云端模型即開始更新計算,這里面有大量密碼學的知識在此不詳細展開,是一種“同態加密”的算法。整個計算過程中云端模型均不知道加密數據包里面的具體內容。
2. B端的延伸——縱向聯邦學習
聯邦學習最開始被谷歌提出時是為了解決C端用戶上傳數據隱私問題。但是在實際工業界的問題是B端企業之間的數據孤島問題。比如京東和騰訊之間的合作。京東和騰訊之間的用戶肯定有絕大一部分是重疊的,京東有這部分用戶的電商數據,騰訊有這部分用戶的社交數據。如果二者將彼此之間的數據共享,那么彼此各項模型上的效果都會有大幅提升,但是實際開展時二者肯定不會共享彼此之間的數據。
那么我們如何讓雙方在不交換源數據的前提下,彼此提升各自模型的效果了?
谷歌的聯邦學習方案是“橫向“的,就像我們Part1.1里面說的,本地模型和云端模型用的特征都是一樣的,模型的目標也是一樣的。但是B端企業之間的模型目標不一樣,特征也不一樣,就像京東和騰訊,二者的用戶存在重疊,但是場景不同,采集到的用戶特征也存在一定差異。這種情況下的聯邦學習方案我們叫做“縱向”。
比如京東&騰訊的用戶有ABCDE五個用戶是重疊的,騰訊有用戶的“性別”&“年齡”數據,京東有“常住區域”、“消費水平”&“購物頻次”的數據,二者結合起來可以使用樣本數據的所有特征建立一個效果更優的模型。縱向聯邦學習的研究是由香港科技大學計算機科學與工程學系主任,第一位華人國際人工智能協會(AAAI)院士&AAAI執行委員會委員-楊強教授牽頭發起的。
楊強教授的整體縱向聯邦學習架構分為以下幾個大的部分。
上圖是楊強教授縱向聯邦學習里面的架構,大家可以在眾多聯邦學習的文章中看到,整體還是比較抽象,我們以一個具體的案例來進行講解。還是拿京東&騰訊合作的這個案例。
第一步:樣本對齊;騰訊和京東肯定都不會愿意暴露自己的原始數據。所以二者要在一起聯合建模,首先需要對齊二者重疊的樣本數據;在不暴露原始數據的前提下,雙方如何對齊重疊的樣本數據了,其實就是對齊哪些用戶是共有的。這里同樣需要應用到一種基于加密的用戶ID對齊技術。
第二步:標簽統一;樣本對齊以后,因為這個場景下我們是結合騰訊的數據來訓練京東的模型,所以整個訓練過程中數據的標簽即“是否點擊”Label由京東側管控。所有需要Label值參與的計算,都由京東側來完成,騰訊側不參與任何需要Label值的計算。
第三步:加密訓練;最終要構建的聯合模型是擁有X1-X5所有特征的,但是X1-X2特征數據在騰訊側,X3-X5特征數據在京東側,同時Label在京東側。所以在模型最開始訓練時,兩邊模型各自使用自己有的特征和數據,初始化自己的參數w,然后開始計算。
整個訓練我們需要引入一個第三方也就是“協作者C”,這里的“協作者C”,并不是說要引入一家新的公司來參與到訓練中,一個中間可以處理數據的地方即可。“協作者C”最開始需要下發一個公鑰給到騰訊和京東,騰訊計算出來的中間結果經過公鑰加密發給京東,京東也是如此。
然后彼此再計算各自的下降梯度,再進行加密上傳給協作者C,這中間一般京東&騰訊都會加一些隨機數防止C直接獲取梯度信息,協作者C進行解密后匯總雙方結果得到一個最終的梯度值然后再回傳給京東&騰訊,二者收到后減去最開始加上的隨機數得到真實最終的梯度值,再更新模型的參數。
第四步:訓練結束,聯合模型更新;步驟三重復循環,直到最終模型收斂訓練完畢,最終京東&騰訊側的模型參數都更新完畢,二者結合在一起就是一個聯合模型。后面京東側就使用該聯合模型來進行線上應用。后續有用戶來訪問京東APP,如果該用戶在二者重疊的樣本中就訪問聯合模型來從京東&騰訊兩側獲取加密數據,最終給出預測結果。
3. 進一步延伸——聯邦遷移學習
聯邦遷移學習其實就是將聯邦學習的思想和遷移學習的思想結合在了一起。橫向聯邦學習是特征一樣,樣本數據不一樣??v向聯邦學習是樣本有重疊,但是特征不一樣。
實際工業界還會有一些情況就是特征不一樣,樣本數據還沒有重疊,這種情況下我們能不能聯合建模?
傳統的方式其實就是遷移學習了,將這些數據進行升維或者降維,在子空間中可能會存在特征重疊或者用戶重疊。子空間中的交互就可以進行遷移學習。那如何在遷移學習過程中保護各方的數據隱私,這時候引入聯邦學習的思想即可。
二、聯邦學習概述
上面介紹了聯邦學習的發展起源和各種分類,下面我們正式對于聯邦學習進行一下定義。
1. 聯邦學習的定義
我們采用微眾銀行發布的《聯邦學習白皮書》里面的定義:
2. 聯邦學習的特征
通過我們總結一下聯邦學習的主要特征
- 多方協作:有兩個或以上的聯邦學習參與方協作構建一個共享的機器學習模型。每一個參與方都擁有若干能夠用來訓練模型的訓練數據。
- 各方平等:聯邦學習的參與方各方之間都是平等的,并不存在高低貴賤。
- 數據隱私保護:在聯邦學習模型的訓練過程中,每一個參與方擁有的數據都不會離開該參與方,即數據不離開數據擁有者。
- 數據加密:聯邦學習模型相關的信息能夠以加密方式在各方之間進行傳輸和交換,并且需要保證任何一個參與方都不能推測出其他方的原始數據。
3. 聯邦學習涉及到的學科
聯邦學習的框架中涉及到了各種各樣的學科,需要各個方面一起進步進而推動聯邦學習的發展;
- 基本的機器學習算法;
- 分布式機器學習;
- 加密算法;
- 模型壓縮;
- 數據通信;
- 經濟學。
4. 聯邦學習的激勵機制
如何更好地激勵聯邦學習中作出重要貢獻的參與方?雖然參與的各方都是平等的,但是各方的貢獻是完全不一樣的。比如阿里和一些很小的互聯網公司合作一起建立一個聯邦學習模型,肯定阿里的用戶數據更加豐富和更有價值,如何去激勵這些在聯邦學習生態中做出更多貢獻的參與方,如何建立一種激勵機制,這也是聯邦學習未來重點研究的方向。
三、聯邦學習落地案例
聯邦學習目前在工業界落地最大的兩個領域就是廣告&金融風控。
1. 廣告領域
互聯網企業中的RTB廣告,基于用戶的實時請求為用戶推薦他感興趣的商品,這里面的推薦模型就需要大量用到用戶的特征數據。
就像Part1.2中介紹的,很多互聯網企業只擁有用戶的一部分特征數據,如果可以接入更多其他互聯網企業的數據或者是投放廣告主關于用戶的數據,那么將大幅提升廣告推薦的效果,既能提升點擊率也可以提升廣告主的ROI;聯邦學習的出現就很好的解決了這個問題。
2. 金融風控領域
金融領域同樣如此,很多用戶在多家銀行擁有信貸記錄,甚至在一些互聯網金融機構上擁有借貸記錄。單個金融機構需要對該用戶做出全面客觀的資質評判就需要結合用戶歷史所有的金融記錄才可以。
但是各大金融機構之間除了央行統一管理的個人征信,其他數據之間彼此是不互通的,這些數據既是用戶的個人隱私也是銀行重要的資產。聯邦學習的出現同樣讓各大金融機構之間可以聯合建模,對于用戶的資質進行全面客觀的評價,降低貸款的違約率和資產的不良率。
四、橫向聯邦學習和邊緣計算的區別
有些小伙伴可能會把橫向聯邦學習和邊緣計算混淆,尤其是看了谷歌的這個漫畫以后,覺得橫向聯邦學習和邊緣計算有點像。
橫向聯邦學習的出現是為了解決數據隱私的問題,將一些敏感數據在不離開數據原有方的基礎上,讓模型在本地完成訓練后,然后上傳加密的參數。而邊緣計算的本意是將計算能力部署在設備上,設備請求實時響應,減少云計算中的網絡延遲,這其中確實數據本身也不離開本地也保護了數據隱私。
雖然二者有些交集但是出發點完全不一樣。橫向聯邦學習是為了保護用戶數據隱私,而邊緣計算是為了確保服務可以及時響應降低減少云計算中的網絡延遲。
本文由 @King James 原創發布于人人都是產品經理。未經許可,禁止轉載。
題圖來自 Unsplash,基于 CC0 協議
該文觀點僅代表作者本人,人人都是產品經理平臺僅提供信息存儲空間服務。
真不錯!~
祝你去大廠