近日,雷鋒網《AI金融評論》聯合香港人工智慧與機器人學會(HKSAIR),邀請京東數字科技AI實驗室首席科學家薄列峰做客公開課,以《京東數科的聯邦學習戰略全布局》為題進行分享。
除了分享橫向和縱向聯邦學習以外,他也通過案例形式給出了京東數科對聯邦學習性能與安全性方面的研究成果,以及區塊鏈和聯邦學習的融合討論。
以下為薄列峰的課程分享全程回顧,雷鋒網AI金融評論做了不影響原意的編輯:
隨著網際網路發展,數據安全管理越發嚴格,對數據管理的關注也越來越全面化。怎麼在保護數據隱私的情況下,還能做一些好的機器學習模型,應用到各種各樣的問題?這就變得越來越重要,需要從集中式機器學習過渡到分布式機器學習。
而2006年開始掀起的深度學習熱潮,更把AI和機器學習模型對數據的需求推向了頂峰。
什麼是聯邦學習?就是在滿足數據隱私安全和監管要求的前提下,讓人工智慧系統更加高效準確地共同使用各自數據的機器學習框架。
應用方面,舉一個簡單的例子:各企業或機構大家都出不同的數據,相互進行模型學習,又不會看到對方的數據。數據還可能分布在不同的國家,各國數據監管政策有所不同,也可以把分布在各國數據高效利用、訓練模型,不存在數據上的交換。
兩個典型的聯邦學習算法,分別是橫向聯邦學習和縱向聯邦學習,橫軸表示特徵維度,豎軸表示用戶維度。
橫向聯邦學習,看兩方的數據和標籤,用戶重合度非常低,特徵重合度比較大。這裡顯示的是用戶無重合的極端情況,實際情況中它可能僅僅重合90%用戶特徵,5%用戶重合,到時進行對齊即可。
縱向聯邦學習,兩方用戶重合較多,可對用戶的部分對齊。A、B各擁有用戶一部分數據,可能都會有用戶的一部分標註,縱向聯邦學習也能去處理。
對計算機視覺、自然語言語音識別等領域而言,2006年深度學習(的出現)是非常大的推動。大家熟悉的語音識別、語音合成、人臉識別等應用,都是大量深度學習模型在背後發揮作用。
深度學習、梯度下降與橫向聯邦學習
三種典型深度學習
首先是深度神經網絡(Deep Neural Networks,DNN)在語音識別誤差上有30%的簡化,性能有非常大的提升。
後來是卷積神經網絡(Convolutional Neural Networks, CNN),它的訓練誤差相對於其他方法降低了十個百分點左右,在計算機視覺領域有著非常廣泛的應用。
遞歸神經網絡(Recursive Neural Networks,RNN)在自然語言處理領域是非常基礎性的工具。
優化神經網絡的典型方法:不管神經網絡有多複雜,大家實際上都能把它寫成一個f,一個輸入加一個參數。常用方法之一是隨機梯度下降。
大家都知道,優化最基本的是梯度下降,就是精確計算梯度,再對參數的方向和模型參數用梯度做下降。如果我的樣本量非常大,有100萬、1000萬,做梯度下降計算代價非常高。
實際運用中,我們可以隨機提出採樣。極端情況下,可以只採用一個樣本去估計梯度,比如包含50-100個樣本的小樣本集,它的梯度估計不準確,但計算代價非常低,這樣能有效優化神經網絡參數。
如圖,紅線是隨機梯度下降的結果,梯度估計不準所以路線較曲折。藍線是典型的梯度下降結果,估計比較精確所以不會拐彎的路線。但最終都會去到最優解。雖然紅色路線比較長,但它走每一步的代價明顯更低,相對於隨機梯度而言,整體效率還是更高。
這是典型的橫向聯邦學習框架。設置裡下面是客戶端(client1,2,3,……,t)。藍色雲是服務端(Server)。橫向聯邦學習的設置是數據的不同樣本存在不同用戶端,這實際上是對傳統分布式框架的改善。
首先每個客戶端訓練模型,產生參數w1、w2、w3……wt,參數傳到雲端,服務端對模型做平均,得到 w-。服務端做完模型平均之後,每個客戶端再下載模型w-,再對模型做幾輪梯度下降或優化,再將模型上傳到服務端,循環往復,形成這樣一個迭代的過程。
在這個過程中,客戶端的數據並沒有向服務端傳遞,傳遞的只是模型的參數w,保護了客戶端數據的隱私。
它與傳統分布式學習的不同之處在於,後者在此傳遞的是梯度;在聯邦學習裡,客戶端向服務端傳的是模型的參數。實際上現在也有證明表示,梯度信息其實也能洩露不少數據信息,而模型參數經過幾輪梯度下降後,對數據的保護會做得更好。
如圖,聯邦Average(FedAvg)和 聯邦SGD,前者實際使用代數明顯更少,就可以收斂,SGD需要的代數明顯更多。
在很多setting裡,在分布式學習裡,通信代價通常會是瓶頸,這個差異意味著FedAvg能有效降低這一代價,提升了訓練效率,同時也加強了對數據隱私的保護。
在這個設置下,實際上服務端還是知道我的模型參數的,有沒有可能進一步對我的模型參數加密和保護?其實不需要加密也有相當的安全性,但加密能對攻擊、對服務端、對可能的數據欺詐有更好的防護。
同態加密簡單來講,這是一個密碼學的算法,主要操作是生成公鑰和私鑰,加密算子,應用到明文,產生密文;用私鑰對密文解密,產生明文。同態加密的特點之一就是,兩個數m1和m2的和同態加密,等於m1的同態加密加m2的同臺加密;m和一個常數相乘的同態加密,等於對這個樣本同態加密,再乘以常數。
橫向聯盟學習+同態加密:和剛才的情況類似,傳遞參數過程中,可對w1……wt同態加密,然後在服務端對同態加密域做平均,以得到模型參數。
在這一設置下,服務端不知道私鑰,但客戶端知道。服務端實際上不能對w-解密,甚至連模型參數也不知道,它只知道同態加密域,但沒有私鑰就沒法解密。客戶端下載參數,用自己的私鑰解密,再更新自己的模型——因此同態加密也提升了數據安全性。
橫向聯邦學習之人臉識別應用:人臉識別有多場景的數據收集,比如打卡的門禁數據、多角度監控、證件類數據等。甚至還有一些海外業務,海外數據不能傳遞到國內,聯邦學習就能解決這個問題,有效提升在人證場景或配合式場景下的通過率。
Q:各方的特徵怎麼對齊?
在橫向聯邦學習,大家的特徵集是一樣的。舉個例子,a方和b方都是人臉數據,那麼模型取的就是人臉數據,可以規範化到一個圖像標準,比如說128×128的頭像,這樣輸入x就自然對齊了。
除了同態加密,另一個在橫向聯邦學習應用較多的是差分方法,思路是在分布式學習的時候傳遞梯度,同時對梯度加噪,以噪聲方式保證梯度安全性。
縱向聯邦學習
假設兩個公司各有數據的部分特徵,同時 b方擁有數據的標記,可以用一個安全的方法對齊數據ID,再做縱向聯邦學習。
這通常需要一個合作者Collaborator(有些方式可能不需要),AB兩方的數據交換都需要對它加密。此處設置為:合作者有公鑰和私鑰,兩個機構a和b,分別都只有公鑰,沒有私鑰,能通過加密保護自己的數據。
得到同態加密域的梯度之後,會對梯度加噪聲再送到合作者處,合作者會用自己的私鑰解密,然後把梯度還給它。在各方得到自己的梯度之後,可以進行梯度下降。
Q:若合作者方佔主導地位,是否有洩露風險?
這是實際操作中需要注意的問題,比如A方特徵佔10%,B方特徵佔90%,這塊你能寫出的方程數量明顯少於參數數量,理論上是推不出來的,但隨著不平衡性的增加,安全性也會下降。
縱向聯邦學習某種程度上,是有信息洩露的,但是從大方向說,它洩露的信息足夠少以至於別人推不出來主要的特徵。
線性回歸是一個典型的算法。在很多模型的應用中,當樣本量較大,線性回歸的性能或許不會很好。此處常用的方法之一是隨機森林(random forest)。
隨機森林Step 1:隨機森林會對原始特徵採樣(bootstrapped)。這個步驟是放回式採樣,比如說100個訓練樣本,它會每次放回,然後做採樣100個。完成採樣後,每個數的訓練樣本就不一樣了,都是原始訓練樣本衍生出來的。這樣主要是為了增加數的隨機性和多樣性,在樹的集成過程中會產生更好的效果。
Step 2:建每一棵樹時,在每個節點選擇一個特徵的一個隨機子集。舉個例子,這裡有30位特徵,建樹時隨機選擇五維的特徵;建每個節點時,隨機選的5個特徵都不一樣,再從中挑選最好的特徵,保了每個節點的多樣性。
建樹過程中,可以是深度優先,然後走到葉子節點,直到它滿足一個判據,完成樹的分支搭建,最後再逐個預測。
聯邦隨機森林大致思路是,主動方、被動方各一,主動方有標記,並加密標記和標記的平方,然後發送給被動方。此處三角號表示對yi、zi進行同態加密。
加密後,被動方根據自己每一維的特徵,當它的這維特徵被整個機制選中的時候,它會針對這個特徵做直方圖,然後用直方圖在同態加密域的yi和zi進行聚合。每一個直方圖會把它劃分成很多區間,在每個區間做平均,得到Y和Z。
簡單講,主動方傳同態加密後的y和zi是一個向量,該向量和樣本數一樣。被動方會對向量做聚合每次會選向量的一個子集,看哪個特徵落到區間上,再對傳遞過來的yi和zi平均進行同態加密域的求和運算。在隨機森林裡,既要選取特徵,也要選閾值,通過該閾值下的特徵得分算出y的矩陣,矩陣還給主動方。
此處主動方有公鑰和密鑰,被動方只有公鑰無密鑰,所以被動方無法解密y和z,它把Y和Z的矩陣傳給主動方,後者會依所得進行解密,再計算每個特徵和每個閾值的得分,擇其得分高者,如此即可完成隨機森林中一棵樹的某節點構建。重複該過程可構建不同的樹和整個隨機森林。
可以看到,主動方得到被動方的數據,實際只是得到聚合後自己發送的y和z,所以不知道被動方的特徵,也很難推導出;被動方只知道主動方同態加密運送來的y和z,並不知道更多的信息,整個過程可以保證安全。
何為快速安全的聯邦學習框架?
傳統縱向聯邦學習需要用同態加密進行保護,同態加密比較低效,我們是否能設計一個不依賴於同態加密的聯邦學習框架?
設計快速安全的聯盟學習框架有如下特點:
第一,隱私能得到保護;
第二,利用樹狀通信結構,有效提升傳輸效率。利用不同的數聚合信息;
第三,新框架支持異步計算,能再次提升數據安全性。同時整個過程只涉及一些內積(此處不確定)計算,包括加噪後內積傳遞,所以該框架下不會用到同態加密,效率更高。
如圖,模型隱私在傳遞過程中,會傳遞參數和特徵的內積,再進行加噪保護,最終有數據結構的聚合。
整個框架的安全性如何?可以從理論上證明,這個算法能有效抵禦精確攻擊和近似推理攻擊。
看主要算法步驟,在第二步可以看到聚合的是內積+噪聲,以及聚合噪聲,然後返回到coordinator計算所有參數和所有內積再減去聚合的噪聲,得到決策值,不過此處並不得到模型參數,這也正是模型信息能被保護的原因。
coordinator在此只知道內積,不知道參數,所以它也無法推斷各參與方信息。
實現過程要確保通信的安全,數據在通信過程中不會被聯邦系統之外的攻擊者所獲取,也需要一個可信賴的第三方來進行調度。誰做coordinator?可以是監管機構,獨立第三方機構等。
原始數據主要通過兩項:1.任一通信節點接收到的均為加噪聲後的內積,由於樹狀結構的差異,隨機數又無法被移離,內積值因此得到保護。2.即使在串通的情況下,多個節點能移離隨機數,根據內積本身也只能構造出方程,也無法通過方程精確推斷所含變量。
有噪聲、有內積,方程數明顯少於變量數,樹機制……這些多重機制都能保證安全性。
剛才所講的邏輯回歸還是線性模型範疇,怎樣把線性模型推廣到非線性模型?這也是關鍵,推廣的非線性模型精度會大幅提升。
右邊算法概念大致是:先產生隨機特徵,生成隨機數,然後做cos生成隨機特徵;在隨機特徵域上,再做剛才提到的這種聯盟學習框架,來完成隨機特徵的參數學習。
隨機特徵這一步引入了非線性函數,它能很好逼近原始核函數。此處,各參與方會有一部分隨機特徵,特徵上的模型參數也保留在各方,不為他人所知。全程將通過噪聲、聚合等方式提升安全性。
隨機梯度下降法,是首次實現了快速安全的異步並行縱向聯邦隨機梯度算法,並理論上分析了其收斂率核問題的雙隨機梯度算法,則是首次實現了大規模、高速、安全的基於核方法的縱向聯邦學習。
測試性能結果對比如下。LIBSVM是很多同學在研究機器學習時常用的工具,PP-SVMV是一個隱私保護算法,FDSKL則是我們目前所設計的算法。可以看到訓練時間的對比。
PP-SVMV涉及核矩陣,因此在大樣本上操作非常慢。FDSKL收斂速度與DSG類似,後者沒有聯邦學習的設置。FDSKL幾乎達到了不在同態加密狀態下的訓練速度。
精度結果對比如下。FDSKL也接近了原始的不用聯邦學習的效果。
京東數科的最新工作也將在KDD發表。
區塊鏈聯邦學習
區塊鏈受到很大關注,數據上鏈有透明化、分布式、不能篡改等優勢,它是一種不依賴第三方,通過自身分布式節點,進行網絡數據存儲驗證傳遞和交流的技術方案。
區塊鏈的分布式、去中心化特點,和聯邦也有一些關係。實際上,聯邦學習在大型的多方參與項目中都有類似機制,也可以考慮採用去中心化。
最簡單的應用是,把聯邦學習和區塊鏈結合,建立在區塊鏈上的聯邦學習算法。我們也完成了二者更深層次的融合,包括共識機制等。
我們認為二者的結合在未來會有越來越多的應用。區塊鏈可以解決數的存儲,具有不可篡改性,聯邦學習能對數據隱私做表保護,其中有不少地方互補。
互動問答精選
問:聯邦學習可以不加入加密技術,不加密是不是也算對數據隱私保護?還是說得進行加密後,才算是各方進行隱私保護?
薄列峰:就像我剛才在橫向聯邦學習中提到的那樣,第一種算法實際上不加密,是用均值進行保護,整個過程中並沒有傳遞數據。
不同類型的聯邦學習算法,有不同方向的數據保護。現在的問題是,哪一種對信息的保護級別更高,效率更高?同態加密是一種方法;差分隱私基本上就是給梯度加噪。這方面,像我們剛才提到的方法,都是不用同態加密對數據保護的聯邦學習算法。
問:聯盟學習在京東有實際的落地場景和業務嗎?
薄列峰:有,其實聯邦學習就是在做多方機構的落地,比如人臉識別、營銷、風控等場景,京東數科都有案例。
問:聯邦學習和邊緣計算的區別是什麼?
薄列峰:邊緣計算講的是每個用戶端有自己的計算設施;聯邦學習講的是對數據隱私的保護,同時合作建模。大概念上還是非常不一樣。當然,在做這種分布式聯盟協議的時候,它也會用到各自的客戶端,有自己的計算設備,在這一點上它會和邊緣計算有一些結合點。
問:怎樣保護在客戶端的運算速度?
薄列峰:客戶端的運算速度,得靠其自身計算資源來進行保護。如果計算資源比較有限,通常它的數據也比較有限,參與更少的計算。如果數據比較多,它的計算資源也多,如果是多個機構合作,這都可以協調。
問:實驗中列出來的時間對比,是參與方與第三方之間通信,是內網還是外網?
薄列峰:我們在實驗比較時,沒有特別考慮網絡延遲因素,是相對理想情況下的比較。有網絡延遲的話,在計算的情況就會增加網絡延遲。網絡延遲針對每次具體的setting並不一樣,所以並不容易做標準化的比較。我們比較的是沒有網絡延遲的情況,具體有網絡延遲或者有各種情況,可能還是需要在具體設置裡做更好的處理。
問:每個客戶端上的特徵異構以及標籤異構如何理解?可以舉個例子嗎?
薄列峰:這個看是水平聯邦學習還是垂直聯邦學習。
在水平聯邦學習情況下,各個客戶端也有自己的標記。剛才我舉了個例子,比如說image net,每一個有1000類,每一類有1000個樣本,這樣你有100萬個樣本。假設有100個客戶端,然後每個客戶端有1萬個樣本,它有1萬個樣本標記,然後大家可以用橫向聯盟學習框架,可以有效地利用每個人手上的樣本來建模。最終,每個參與方建造的模型都用了別人的樣本,但是又不會去實際獲取別人的數據。
在縱向聯盟框架下,舉個例子,大機構和小機構做完用戶對齊,大機構作為主動方,小機構是被動方,各參與方都可以商討解決。
像橫向聯盟學習,在很多時候,參與方其實就是同一個公司的分布在不同的國家的情況,信任度實際上是有保證的。即使說不同的機構之間,大家也是有相互的信任度。如果完全沒有信任度,要去做這樣的聯邦學習,可能還是比較難的。參與方可能會對整個框架進行攻擊。它的安全性會變得更加複雜。所以,我們現在還是假設各參與方是honest,是相對比較協作的,在實際應用中是可以做很多協調的。
問:目前在聯邦學習研究遇到的瓶頸有哪些?是否有後續未來的規劃?
薄列峰:後續京東數科會在聯邦學習上做大量的投入,因為我們認為聯邦學習是整個人工智慧,包括整個機器學習的基石,它有潛力去改變所有的機器學習算法。
我們會做重點布局,研發越來越多的聯邦學習算法,來進一步提升聯盟學習在各個領域的落地,提升它的有效性和效率,包括和區塊鏈結合這種前沿方向。我們既會去提供一些可信度較高的軟體,同時也會去落地,考慮前沿的研究,帶動整個聯邦學習生態的建設。
問:是否可以動態變更合作機構的數量?
薄列峰:合作機構的數量,是可以變化的。在縱向聯盟學習裡,相對比較複雜。它不參與之後,可能有些東西需要重新開始。
但橫向聯盟學習,相對比較容易,因為大家都是擁有不同的樣本,假設有1000個參與方,兩三個不參與,那就少了千分之2,千分之3的樣本,並不影響整個聯盟學習的框架。橫向聯盟學習裡,也有一些機制,可以保證參與方突然不參與,還能完成這個模型的訓練。
問:聯邦學習可以用於表情識別嗎?
薄列峰:可以。舉個例子,不同機構之間有表情識別的不同數據,大家可以利用彼此的數據來增強模型,同時又不想把數據給到對方。表情識別更像是一個橫向聯盟學習問題,怎麼激勵大公司願意跟小公司之間共享信息。
我的個人理解,它還是商業利益的驅動問題,怎麼鼓勵這件事。如果現在聯邦學習的整個框架,只有一個小公司參與,大公司可能缺乏熱情,但是如果有1000個小公司參與,那麼這樣以小積多,有更越來越多的可供交換的數據,大公司參與的意願就會變強。
問:伺服器端,共享梯度和共享模型參數有什麼區別?
薄列峰:共享模型參數是做了幾輪梯度下降,針對共享梯度,它的一大優勢是通信代價會低;同時,對整個梯度信息的保護,也會更好。
關注「 AI金融評論 」,在對話框發送關鍵詞「聽課」進群,即可收看課程直播,和往期課程全部回放。
雷鋒網雷鋒網