總覽
TFF 是一個可擴充且功能強大的架構,透過在逼真的 Proxy 資料集上模擬聯邦式運算,以進行聯邦學習 (FL) 研究。本頁面說明與研究模擬相關的主要概念和組件,以及在 TFF 中進行不同類型研究的詳細指南。
TFF 研究程式碼的典型結構
在 TFF 中實作的研究聯邦學習模擬通常包含三種主要邏輯。
TensorFlow 程式碼的個別片段,通常是
tf.function
,可封裝在單一位置 (例如,在用戶端或伺服器上) 執行的邏輯。此程式碼通常在沒有任何tff.*
參考的情況下編寫和測試,並且可以在 TFF 之外重複使用。例如,「聯邦平均」中的 用戶端訓練迴圈 就是在此層級實作。TensorFlow Federated 編排邏輯,將 1. 中的個別
tf.function
繫結在一起,方法是將它們包裝為tff.tensorflow.computation
,然後在tff.federated_computation
內使用tff.federated_broadcast
和tff.federated_mean
等抽象概念來編排它們。例如,請參閱此「聯邦平均」的編排。一個外部驅動程式指令碼,可模擬生產聯邦學習系統的控制邏輯,從資料集中選取模擬用戶端,然後在這些用戶端上執行 2. 中定義的聯邦式運算。例如,「聯邦 EMNIST」實驗驅動程式。
聯邦學習資料集
TensorFlow Federated 託管多個資料集,這些資料集代表真實世界問題的特性,而這些問題可以透過聯邦學習解決。
資料集包括
StackOverflow。 一個逼真的文字資料集,適用於語言模型化或監督式學習任務,在訓練集中有 342,477 位不重複使用者,以及 135,818,730 個範例 (句子)。
聯邦 EMNIST。 EMNIST 字元和數字資料集的聯邦式預先處理,其中每個用戶端都對應到不同的書寫者。完整訓練集包含 3400 位使用者,以及來自 62 個標籤的 671,585 個範例。
莎士比亞。 一個較小的字元級文字資料集,以威廉·莎士比亞的全集為基礎。資料集包含 715 位使用者 (莎士比亞戲劇的角色),其中每個範例都對應到特定戲劇中角色說出的一組連續台詞。
CIFAR-100。 CIFAR-100 資料集的聯邦式分割,跨越 500 個訓練用戶端和 100 個測試用戶端。每個用戶端都有 100 個不重複的範例。分割的目的是在用戶端之間建立更真實的異質性。如需更多詳細資訊,請參閱 API。
Google Landmark v2 資料集 此資料集包含各種世界地標的照片,影像依攝影師分組,以達成資料的聯邦式分割。有兩種資料集版本可供使用:較小的資料集有 233 個用戶端和 23080 張影像,而較大的資料集有 1262 個用戶端和 164172 張影像。
CelebA 一個包含名人臉部範例 (影像和臉部特徵) 的資料集。聯邦式資料集將每位名人的範例分組在一起,以形成一個用戶端。共有 9343 個用戶端,每個用戶端至少有 5 個範例。資料集可以依用戶端或依範例分成訓練和測試群組。
iNaturalist 一個包含各種物種照片的資料集。此資料集包含 120,300 張影像,涵蓋 1,203 種物種。共有七種資料集版本可供使用。其中一個版本依攝影師分組,包含 9257 個用戶端。其餘資料集依照片拍攝地點的地理位置分組。這六種資料集版本包含 11 到 3,606 個用戶端。
高效能模擬
雖然聯邦學習模擬的實際耗時並非評估演算法的相關指標 (因為模擬硬體無法代表真實聯邦學習部署環境),但能夠快速執行聯邦學習模擬對於研究生產力至關重要。因此,TFF 已大力投資提供高效能的單機和多機執行階段環境。文件仍在開發中,但目前請參閱關於使用加速器的 TFF 模擬,以及關於在 GCP 上設定 TFF 模擬的說明。高效能 TFF 執行階段環境預設為啟用。
適用於不同研究領域的 TFF
聯邦最佳化演算法
在 TFF 中,可以使用不同的方式研究聯邦最佳化演算法,具體取決於所需的自訂程度。
「聯邦平均」演算法的最小獨立實作範例在此提供。程式碼包含用於本機運算的 TF 函式、用於編排的 TFF 運算,以及 EMNIST 資料集上的 驅動程式指令碼範例。這些檔案可以輕鬆地針對自訂應用程式和演算法變更進行調整,請依照 README 中的詳細說明進行。
更通用的「聯邦平均」實作範例可以在此處找到。此實作允許更精密的最佳化技術,包括在伺服器和用戶端上使用不同的最佳化工具。其他聯邦學習演算法 (包括聯邦 k-means 分群) 可以在此處找到。
模型更新壓縮
模型更新的失真壓縮可以降低通訊成本,進而縮短整體訓練時間。
若要重現最近的論文,請參閱此研究專案。若要實作自訂壓縮演算法,請參閱專案中的 comparison_methods,以取得基準範例,如果您還不熟悉,請參閱 TFF Aggregators 教學課程。
差分隱私
TFF 可與 TensorFlow Privacy 程式庫互通操作,以針對使用差分隱私的模型聯邦式訓練進行新演算法研究。如需使用 基本 DP-FedAvg 演算法和 擴充功能進行 DP 訓練的範例,請參閱此實驗驅動程式。
如果您想要實作自訂 DP 演算法並將其套用至聯邦平均的匯總更新,您可以將新的 DP 平均演算法實作為 tensorflow_privacy.DPQuery
的子類別,並使用查詢的執行個體建立 tff.aggregators.DifferentiallyPrivateFactory
。實作 DP-FTRL 演算法的範例可以在此處找到
聯邦 GAN (如下方 說明) 是另一個 TFF 專案實作使用者層級差分隱私的範例 (例如,此處程式碼)。
穩健性和攻擊
TFF 也可用於模擬針對聯邦學習系統的目標攻擊,以及 Can You Really Back door Federated Learning? 中考量的以差分隱私為基礎的防禦措施。這可以透過建構一個包含潛在惡意用戶端的反覆運算程序來完成 (請參閱 build_federated_averaging_process_attacked
)。targeted_attack 目錄包含更多詳細資訊。
- 新的攻擊演算法可以透過編寫用戶端更新函式 (也就是 Tensorflow 函式) 來實作,如需範例,請參閱
ClientProjectBoost
。 - 新的防禦措施可以透過自訂 'tff.utils.StatefulAggregateFn' 來實作,此函式會匯總用戶端輸出以取得全域更新。
如需模擬的範例指令碼,請參閱 emnist_with_targeted_attack.py
。
生成對抗網路
GAN 構成一個有趣的 聯邦式編排模式,它看起來與標準「聯邦平均」略有不同。它們涉及兩個不同的網路 (生成器和鑑別器),每個網路都使用自己的最佳化步驟進行訓練。
TFF 可用於研究 GAN 的聯邦式訓練。例如,近期研究中提出的 DP-FedAvg-GAN 演算法已在 TFF 中實作。這項研究證明了結合聯邦學習、生成模型和差分隱私的有效性。
個人化
聯邦學習環境中的個人化是一個活躍的研究領域。個人化的目標是為不同的使用者提供不同的推論模型。解決此問題可能有多種不同的方法。
一種方法是讓每個用戶端使用其本機資料微調單一全域模型 (使用聯邦學習訓練)。此方法與元學習相關,例如,請參閱本論文。此方法的範例在 emnist_p13n_main.py
中給出。若要探索和比較不同的個人化策略,您可以
定義個人化策略,方法是實作一個
tf.function
,其從初始模型開始,使用每個用戶端的本機資料集訓練和評估個人化模型。範例由build_personalize_fn
給出。定義一個
OrderedDict
,將策略名稱對應到對應的個人化策略,並在tff.learning.build_personalization_eval_computation
中將其用作personalize_fn_dict
引數。
另一種方法是避免訓練完全全域模型,方法是完全在本機訓練模型的一部分。此方法的實例化在這篇部落格文章中說明。此方法也與元學習相關,請參閱 本論文。若要探索部分本機聯邦學習,您可以
使用
tff.learning.reconstruction.build_training_process
建立部分本機訓練程序,並修改dataset_split_fn
以自訂程序行為。