【導(dǎo)語】據(jù)了解,全球有 30 億臺智能手機(jī)和 70 億臺邊緣設(shè)備。每天,這些電話與設(shè)備之間的交互不斷產(chǎn)生新的數(shù)據(jù)。傳統(tǒng)的數(shù)據(jù)分析和機(jī)器學(xué)習(xí)模式,都需要在處理數(shù)據(jù)之前集中收集數(shù)據(jù)至服務(wù)器,然后進(jìn)行機(jī)器學(xué)習(xí)訓(xùn)練并得到模型參數(shù),最終獲得更好的產(chǎn)品。
但如果這些需要聚合的數(shù)據(jù)敏感且昂貴的話,那么這種中心化的數(shù)據(jù)收集手段可能就不太適用了。
去掉這一步驟,直接在生成數(shù)據(jù)的邊緣設(shè)備上進(jìn)行數(shù)據(jù)分析和機(jī)器學(xué)習(xí)訓(xùn)練呢?
近日,Google 開源了一款名為 TensorFlow Federated (TFF)的框架,可用于去中心化(decentralized)數(shù)據(jù)的機(jī)器學(xué)習(xí)及運(yùn)算實驗。它實現(xiàn)了一種稱為聯(lián)邦學(xué)習(xí)(Federated Learning,F(xiàn)L)的方法,將為開發(fā)者提供分布式機(jī)器學(xué)習(xí),以便在沒有數(shù)據(jù)離開設(shè)備的情況下,便可在多種設(shè)備上訓(xùn)練共享的 ML 模型。其中,通過加密方式提供多一層的隱私保護(hù),并且設(shè)備上模型訓(xùn)練的權(quán)重與用于連續(xù)學(xué)習(xí)的中心模型共享。
傳送門:https://www.tensorflow.org/federated/
實際上,早在 2017 年 4 月,Google AI 團(tuán)隊就推出了聯(lián)邦學(xué)習(xí)的概念。這種被稱為聯(lián)邦學(xué)習(xí)的框架目前已應(yīng)用在 Google 內(nèi)部用于訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型,例如智能手機(jī)中虛擬鍵盤的下一詞預(yù)測和音樂識別搜索功能。
圖注:每臺手機(jī)都在本地訓(xùn)練模型(A);將用戶更新信息聚合(B);然后形成改進(jìn)的共享模型(C)。
DeepMind 研究員Andrew Trask 隨后發(fā)推稱贊:“Google 已經(jīng)開源了Federated Learning……可在數(shù)以百萬計的智能手機(jī)上共享模型訓(xùn)練!”
讓我們一起來看看使用教程:
從一個著名的圖像數(shù)據(jù)集 MNIST 開始。MNIST 的原始數(shù)據(jù)集為 NIST,其中包含 81 萬張手寫的數(shù)字,由 3600 個志愿者提供,目標(biāo)是建立一個識別數(shù)字的 ML 模型。
傳統(tǒng)手段是立即將 ML 算法應(yīng)用于整個數(shù)據(jù)集。但實際上,如果數(shù)據(jù)提供者不愿意將原始數(shù)據(jù)上傳到中央服務(wù)器,就無法將所有數(shù)據(jù)聚合在一起。
TFF 的優(yōu)勢就在于,可以先選擇一個 ML 模型架構(gòu),然后輸入數(shù)據(jù)進(jìn)行訓(xùn)練,同時保持每個數(shù)據(jù)提供者的數(shù)據(jù)是獨立且保存在本地。
下面顯示的是通過調(diào)用 TFF 的 FL API,使用已由 GitHub 上的“Leaf”項目處理的 NIST 數(shù)據(jù)集版本來分隔每個數(shù)據(jù)提供者所寫的數(shù)字:
GitHub 傳送鏈接:https://github.com/TalwalkarLab/leaf
#Loadsimulationdata.source,_=tff.simulation.datasets.emnist.load_data()defclient_data(n):dataset=source.create_tf_dataset_for_client(source.client_ids[n])returnmnist.keras_dataset_from_emnist(dataset).repeat(10).batch(20)#WrapaKerasmodelforusewithTFF.defmodel_fn():returntff.learning.from_compiled_keras_model(mnist.create_simple_keras_model(),sample_batch)#Simulateafewroundsoftrainingwiththeselectedclientdevices.trainer=tff.learning.build_federated_averaging_process(model_fn)state=trainer.initialize()for_inrange(5):state,metrics=trainer.next(state,train_data)print(metrics.loss)
除了可調(diào)用 FL API 外,TFF 還帶有一組較低級的原語(primitive),稱之為 Federated Core (FC) API。這個 API 支持在去中心化的數(shù)據(jù)集上表達(dá)各種計算。
使用 FL 進(jìn)行機(jī)器學(xué)習(xí)模型訓(xùn)練僅是第一步;其次,我們還需要對這些數(shù)據(jù)進(jìn)行評估,這時就需要 FC API 了。
假設(shè)我們有一系列傳感器可用于捕獲溫度讀數(shù),并希望無需上傳數(shù)據(jù)便可計算除這些傳感器上的平均溫度。調(diào)用 FC 的 API,就可以表達(dá)一種新的數(shù)據(jù)類型,例如指出 tf.float32,該數(shù)據(jù)位于分布式的客戶端上。
READINGS_TYPE=tff.FederatedType(tf.float32,tff.CLIENTS)
然后在該類型的數(shù)據(jù)上定義聯(lián)邦平均數(shù)。
@tff.federated_computation(READINGS_TYPE)defget_average_temperature(sensor_readings):returntff.federated_average(sensor_readings)
之后,TFF 就可以在去中心化的數(shù)據(jù)環(huán)境中運(yùn)行。從開發(fā)者的角度來講,F(xiàn)L 算法可以看做是一個普通的函數(shù),它恰好具有駐留在不同位置(分別在各個客戶端和協(xié)調(diào)服務(wù)中的)輸入和輸出。
例如,使用了 TFF 之后,聯(lián)邦平均算法的一種變體:
參考鏈接:https://arxiv.org/abs/1602.05629
@tff.federated_computation(tff.FederatedType(DATASET_TYPE,tff.CLIENTS),tff.FederatedType(MODEL_TYPE,tff.SERVER,all_equal=True),tff.FederatedType(tf.float32,tff.SERVER,all_equal=True))deffederated_train(client_data,server_model,learning_rate):returntff.federated_average(tff.federated_map(local_train,[client_data,tff.federated_broadcast(server_model),tff.federated_broadcast(learning_rate)]))
目前已開放教程,可以先在模型上試驗現(xiàn)有的 FL 算法,也可以為 TFF 庫提供新的聯(lián)邦數(shù)據(jù)集和模型,還可以添加新的 FL 算法實現(xiàn),或者擴(kuò)展現(xiàn)有 FL 算法的新功能。
據(jù)了解,在 FL 推出之前,Google 還推出了 TensorFlow Privacy,一個機(jī)器學(xué)習(xí)框架庫,旨在讓開發(fā)者更容易訓(xùn)練具有強(qiáng)大隱私保障的 AI 模型。目前二者可以集成,在差異性保護(hù)用戶隱私的基礎(chǔ)上,還能通過聯(lián)邦學(xué)習(xí)(FL)技術(shù)快速訓(xùn)練模型。
-
Google
+關(guān)注
關(guān)注
5文章
1766瀏覽量
57612 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8424瀏覽量
132764 -
數(shù)據(jù)集
+關(guān)注
關(guān)注
4文章
1208瀏覽量
24736
原文標(biāo)題:讓數(shù)百萬臺手機(jī)訓(xùn)練同一個模型?Google把這套框架開源了
文章出處:【微信號:rgznai100,微信公眾號:rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論