用安卓APP作為邊緣設備來設置基本的聯邦學習環境

Federated Learning:

Bringing Machine Learning to the edge with Kotlin and Android

選自 Medium Blog

編譯:聯邦學習


訓練機器學習模型需要數據。數據越多,樣本特徵越豐富,模型表現也會更佳。然而,數據並不便宜,更關鍵的是數據可能會包含個人敏感信息。


隨著數據隱私保護法案General Data Protection Regulation 的頒佈,用戶對於他們的數據價值以及隱私考慮的意識也逐漸增強。雖然匿名的技術可以極大地解決隱私安全的問題,但本質上將所有數據發送至中心處理器以訓練機器學習模型的方式始終是人們擔心數據安全的原因。


本文將介紹一個項目,項目將證明如何使用安卓app作為邊緣設備來設置一個基本的聯邦學習環境。


代碼


如果你想直接跳轉至代碼部分,你可以在以下鏈接的文章回復中找到它們。

Android Application:https://github.com/mccorby/PhotoLabeller

The Server:https://github.com/mccorby/PhotoLabellerServer


組建


該項目主要由三部分組成:

  1. 一個服務器,由Kotlin編寫(Kotlin是一種在Java虛擬機上運行的靜態類型編程語言,它也可以被編譯成為JavaScript源代碼),並使用DL4J(https://deeplearning4j.org/)生成一個基於Cifar-10數據集的模型
  2. 一個用該模型來分類照相機圖像的安卓app,由Kotlin編寫並且也能使用DL4J。
  3. 聯邦學習的設置環境,能夠使安卓app利用本地數據來訓練模型,其服務器能夠使用邊緣更新來更新共享的模型。


模型


該模型是基於Cifar-10數據集,此數據集可以對十種不同類別的圖像進行分類。


乾貨分享 | 用安卓APP作為邊緣設備來設置基本的聯邦學習環境


對模型架構進行了調整,以實現雙重的目的:

A.獲取有較好的性能表現

B.允許它在安卓app當中加載和訓練。


所選擇的架構是淺卷積神經網絡,具有一個CNN層和一個密集層。證明了足以使用50個紀元和10,000個樣本獲得良好的性能,同時也保持模型的尺寸較小。(關於模型大小的說明:此PoC的重點在於聯合學習。通過不同的技術量化或使用結構化或草圖更新,可以使用更多層來訓練更好的模型並縮減其大小。)該服務器端訓練模型的代碼位於PhotoLabellerServerproject的模型中。


乾貨分享 | 用安卓APP作為邊緣設備來設置基本的聯邦學習環境

The CNN with a dense layer


用App來做預測


當連接到使用最新版本共享模型的服務器時,該app允許使用嵌入在app本身中的模型對用戶使用相機拍攝的照片進行基本分類。


乾貨分享 | 用安卓APP作為邊緣設備來設置基本的聯邦學習環境

The CNN with a dense layer


該app由模塊構建,其中包括安卓特定類別和Deeplearning4j訓練器相關的類別。基本模塊包括了交互者和域對象。訓練器應用的目的包括作預測和利用DL4J進行訓練,並調用預測函數來獲取圖像分類。


乾貨分享 | 用安卓APP作為邊緣設備來設置基本的聯邦學習環境


聯邦學習設置


聯邦學習通過允許邊緣設備參與訓練,將機器學習模型的更新顛倒過來。聯邦學習不是將客戶端中的數據發送到集中位置,而是將模型參數以加密的方式發送給參與聯合的設備。然後使用本地數據重新訓練模型(使用遷移學習)用戶的數據不會離開設備包括手機、筆記本電腦、物聯網小工具等。服務器打開“循環訓練”,在此期間客戶端可以將參數的更新發送至服務器。


乾貨分享 | 用安卓APP作為邊緣設備來設置基本的聯邦學習環境


客戶端—邊緣訓練


該安卓app會決定何時參與共享模型的訓練。它使用已有的模型或服務器中的模型執行傳輸學習操作(在其更新的前提下)。然後將模型完成的更新參數發送至服務器。


乾貨分享 | 用安卓APP作為邊緣設備來設置基本的聯邦學習環境


服務器端—平均和更新模型


一旦循環訓練結束時,服務器通過聯邦平均算法(Federated Averaging algorithm((https://arxiv.org/abs/1602.05629))來更新共享模型,如下面的要點所示:


乾貨分享 | 用安卓APP作為邊緣設備來設置基本的聯邦學習環境


同時服務器還接入一個簡易的REST API。該客戶端也就是安卓app在應用時, 不費力就能夠轉移到其它的Kotlin平臺上。


Notes


用安卓app做關於任何圖像處理的操作時,都要求設備的計算量。用圖像進行訓練模型會要求其增加計算的次數。這也意味著在安卓應用程序中遷移學習的完成過程會很快:幾個樣本的多次迭代訓練。 大部分的app都能夠在內存耗盡時完成訓練。參數的總量大概有450k,這對於app來說已經非常充足了。


然而,其他的模型在使用不同的數據運行時較為順暢。例如,之前的一個聯邦學習設置版本使用了糖尿病的數據集,該數據僅僅具備若干個特徵。這表明了利用更多的迭代訓練和更多的數據點也能完成實驗。(實際上,我還未發現任何限制因素,因為在達到OOM之前,我已獲取了期望的性能表現結果。)


目前該app已成功構建,大家可以嘗試使用其他模型和數據集。歡迎大家將其重新用於您的研究。


--End--


原文鏈接:https://proandroiddev.com/federated-learning-e79e054c33ef

投稿或尋求報道:[email protected]


乾貨分享 | 用安卓APP作為邊緣設備來設置基本的聯邦學習環境


分享到:


相關文章: