聯邦學習是如何應用在視覺領域的?
本文會通過一個獲得了2020年AAAI人工智能創新應用獎(也是第一個基於聯邦學習的人工智能工業級獎項)的案例來向大家介紹!
本案例是聯邦學習在視覺、物聯網、安防領域的實際應用,對分散在各地的攝像頭數據,通過聯邦學習,構建一個聯邦分佈式的訓練網絡,使攝像頭數據不需要上傳,就可以協同訓練目標檢測模型,這樣一方面確保用戶的隱私數據不會泄露,另一方面充分利用各參與方的訓練數據,提升機器視覺模型的識別效果。
以下內容節選自《聯邦學習實戰(全綵)》一書!
--正文--
在2012 年的ImageNet LSVRC 比賽中,AlexNet 憑藉15.3% 的top-5 錯誤率奪得冠軍後,以深度學習爲代表的算法模型開始在視覺領域佔據絕對的主導地位,並且在很多場景任務中達到、甚至超過人類的水平。
比如,2015 年,微軟宣佈在圖像識別領域,以4.94% 的top-5 錯誤率超過人類的5.1% 水平;Google 最近發表在Nature Medicine上的一項新研究表明,通過AI 視覺算法能夠根據患者的胸部CT 圖像診斷出早期肺癌,與六位放射科醫生相比,AI 的準確度更高,檢測到的病例增加了5%,假陽性減少了11%,AUC(Area Under Curve,曲線下方的面積大小)達到94.4%。
除了算法上的不斷提升,大數據和硬件算力的發展也促使人工智能在視覺領域出現爆發性的增長,傳統的視覺算法處理流程如圖1 所示。
圖1 中心化訓練流程圖
我們以目標檢測任務爲例,它由下面幾個主要步驟構成:
首先,將收集來的數據集都集中存放在中心數據庫中,並進行集中的圖片數據預處理,包括圖片數據清理、標註等。
然後,利用這些預處理的數據進行中心化的模型訓練。
最後,將訓練的模型部署到客戶。
但當前的中心化訓練模式使得視覺的落地和部署面臨許多困難和挑戰,具體來說,主要是受下面因素的影響:
• 數據隱私:在安防、醫療等領域,每一個客戶採集的數據都具有高度的隱私性,這些敏感數據在用戶沒有授權的前提下,通常是被禁止上傳的,因此,每一個客戶端的數據都無法有效進行共享。另外,機器學習模型的效果非常依賴數據的數量和質量,數據的割裂導致我們只能利用本地的數據進行單點建模,也就是每一個設備單獨利用本地數據進行訓練,這種單點訓練的模型效果也將明顯下降。
• 模型更新:傳統的處理方式需要將數據集中上傳到中心數據庫,進行統一的數據處理和模型訓練,然後進行模型的評估和部署。在這個過程中,各個數據源之間,由於網絡性能和設備性能的差異,導致數據的同步不一致,整個流程會持續較長的時間,因此對於具有實時響應的場景,這種中心化的訓練模式無法滿足當前的需求。
• 數據的不均勻:這種數據的不均勻性體現在每一個數據源得到的數據,它們的數據分佈、數據質量和數據大小各不相同。
01
基於聯邦學習的目標檢測網絡
▊ 動機
上面說到了在傳統的集中式目標檢測訓練中的幾處不足,對模型提供方和數據提供方來說,安全(數據隱私)威脅是當前最爲頭疼和亟待解決的問題。
安全的威脅主要來自數據層面,包括:
• 數據提供方的數據源離開本地後,數據提供方就沒辦法跟蹤這部分數據的用途了,也無法保證數據離開本地後不被其他人竊取。
• 一般來說,數據從離開數據提供方,到上傳至中心數據庫,會經過多箇中轉地,這就進一步增加了數據泄露的風險和問題排查的難度。
受此影響,當前的模型服務供應商和數據提供方,都急需一種新的模型訓練方法:
一方面,保證數據不離開本地,這樣能夠使數據提供方確信數據的安全;另一方面,模型的訓練和性能不會受到影響。
這兩點都非常適合用聯邦學習來解決,聯邦學習的定義和提出的初衷,就是保證數據在不出本地的前提下,聯合各參與方數據進行協同訓練。
▊ Fedision-聯邦視覺產品
前面介紹了利用聯邦學習進行目標檢測模型訓練的動機,一個完整的聯邦視覺(目標檢測)產品的流程圖如圖2 所示。本節將對該產品進行概括的描述。
圖2 橫向聯邦視覺產品流程圖
圖中描述了基於橫向聯邦學習實現的目標檢測模型的工作流程,我們對本案例的基本設置進行如下綜述:
• 不失一般性,本案例的聯邦網絡中的客戶參與方共有三個:分別是公司A、B、C。服務端由微衆的雲服務器提供。
• 爲了簡化問題,本案例中的三個客戶參與方提供的數據分佈都比較均衡。
• 每一個客戶方部署聯邦學習框架後,其主要工作包括:對本地數據進行預處理;發起聯邦學習訓練任務;參與聯邦學習任務;部署聯邦學習模型在本地進行預測和推斷。
• 服務端由微衆的雲服務器提供,其主要工作包括:實時監控客戶端參與方的連接情況;對上傳的客戶端模型進行聚合;挑選客戶端參與客戶端本地訓練;上傳全局模型。
• 經過聯邦學習更新後的全局模型,有兩個用途:
第一, 可以分發到當前聯邦網絡的客戶端參與方(即圖中的公司A、B、C),進行本地部署預測,使得聯邦學習的參與方受益;
第二, 如果新的全局模型效果能達到SOTA 水平,在經過參與方的協商同意後,還可以將新的聯邦全局模型以開源或者商業售賣的形式,提供給其他廠商進行部署。
基於聯邦學習構建的目標檢測視覺模型,相比於集中式的目標檢測模型,有下面的優勢和好處:
• 隱私性:從隱私角度,聯邦學習確保數據的產生、數據的處理都在本地進行。相比集中式訓練,數據的隱私安全大爲提高。
• 效率:從效率上來說,傳統的集中式訓練,需要等待所有數據提供方的數據上傳後,才進行統一的數據處理,再進行集中式的模型訓練和模型評估,最後部署新模型,這個流程的等待時間比較長。而聯邦學習的訓練,由於每一個客戶參與方從數據收集到數據處理都獨立完成,且都有發起聯邦學習的權力,只要發起聯邦學習請求,就能進行模型訓練,因此每一個客戶方部署新模型的速度都加快了許多。
•** 費用**:在集中式訓練中,將原始數據(圖像、視頻)上傳到服務端會消耗非常多的網絡帶寬資源。而聯邦視覺模型上傳的是模型參數,模型參數的傳輸量要比數據傳輸量小得多,從而能有效節省網絡帶寬,節約費用。
02
方法實現
基於聯邦學習實現目標檢測產品是橫向聯邦的一個經典應用。本節我們將給出其詳細的實現過程。本案例有基於Flask-SocketIO的Python 實現,也有基於FATE 的實現。最後,我們討論基於Flask-SocketIO 的Python 實現。讀者可以自行查閱基於FATE 的實現。
▊ Flask-SocketIO 基礎
在本案例的實現中,我們將使用Python 語言和PyTorch 機器學習模型庫,與書中第3章的實現不同,第3章使用普通函數調用的方式模擬服務端與客戶端之間的通信,這裏使用Flask-SocketIO 作爲服務端和客戶端之間的通信框架。此外,書中第16 章會具體介紹聯邦學習中的通信機制和常用的Python 網絡通信包。
通過Flask-SocketIO,我們可以輕鬆實現服務端與客戶端的雙向通信,Flask-SocketIO 庫的安裝非常方便,只需要在命令行中輸入下面的命令即可:
• 服務端創建:先來初始化服務端,下面是初始化服務端的一段簡短代碼。
socketio.run() 是服務器的啓動接口,它通過封裝app.run() 標準實現。這段代碼是創建socket 服務端最簡短的代碼,服務器啓動後沒有實現任何功能,爲了能響應連接的客戶端請求,我們在服務端中定義必要的處理函數。socketIO 的通信基於事件,不同名稱的事件對應不同的處理函數,在處理函數的定義前,用on 裝飾器指定接收事件的名稱,這樣事件就與處理函數一一對應,如下我們創建了一個“my event”事件,該事件對應的處理函數是“test_message”。
事件創建後,服務器處在監聽狀態,等待客戶端發送“my event”的請求。由於socketIO 實現的是雙向通信,除了能添加事件等待客戶端響應,服務端也可以向客戶端發送請求,服務端向客戶端發送消息使用send 函數或是emit 函數(對於未命名的事件使用send,已經命名的事件用emit),如上面的代碼中,當服務端接收到客戶端的“my event”事件請求後,向客戶端反向發送“my response”的請求。
• 客戶端:客戶端的應用程序設計相對服務端要靈活很多,我們可以使用JavaScript、C++、Java 和Swift 中的任意socketIO 官方客戶端庫或與之兼容的客戶端,來與上面的服務端建立連接。這裏,我們使用socketIO-client 庫來創建一個client。
先利用socketIO 函數構造一個客戶端,構造函數需要提供連接的服務端的IP 和端口信息。然後利用on 連接事件“my response”和處理函數“test_response”,發送“my event”事件,等待服務端的事件響應。
鑑於本書的篇幅限制,我們不在此對Flask-SocketIO 做更多的講述,讀者如果想深入瞭解Flask-SocketIO 的實現和使用,可以參見Flask-SocketIO 的官方文檔。聯邦學習的過程是聯邦服務端與聯邦客戶端之間不斷進行參數通信的過程,圖3 展示了聯邦客戶端與聯邦服務端的詳細通信過程。
圖3 聯邦客戶端與聯邦服務端的通信過程
接下來,書中會分別從服務端角度和客戶端角度簡要分析其構建和實現過程,如果想要了解後面的完整案例,推薦閱讀《聯邦學習實戰(全綵)》一書。
▊《聯邦學習實戰》
楊強 黃安埠 劉洋 陳天健 著
- 經典案例一手實踐
- 配套Python代碼和豐富線上教學資源(含視頻)
本書以實戰爲主(包括對應用案例的深入講解和代碼分析),兼顧對理論知識的系統總結。
全書由五部分共19 章構成。第一部分簡要介紹了聯邦學習的理論知識;第二部分介紹如何使用Python 和FATE 進行簡單的聯邦學習建模;第三部分是聯邦學習的案例分析,篩選了經典案例進行講解,部分案例用Python 代碼實現,部分案例採用FATE 實現;第四部分主要介紹和聯邦學習相關的高級知識點,包括聯邦學習的架構和訓練的加速方法等;第五部分是回顧與展望。本書適合對聯邦學習和隱私保護感興趣的高校研究者、企業研發人員閱讀。