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