概要
TFFは、現実的なプロキシデータセットで連合計算をシミュレートすることにより、連合学習(FL)研究を行うための拡張可能な強力なフレームワークです。 このページでは、研究シミュレーションに関連する主な概念とコンポーネント、およびTFFでさまざまな種類の研究を実施するための詳細なガイダンスについて説明します。
TFF の研究コードの典型的な構造
TFFに実装された研究用の連合学習のシミュレーションは、通常、3つの主要なタイプのロジックで構成されます。
TensorFlow コードの個々の部分、通常は
tf.function
で、単一の場所(たとえば、クライアント上またはサーバー上)で実行されるロジックをカプセル化します。 このコードは通常、tff.*
参照なしで作成およびテストされており、TFF の外部で再利用できます。たとえば、連合平均化のクライアントトレーニングループは、このレベルで実装されます。TensorFlow Federated のオーケストレーションロジックは、1からの個々の
tf.function
をtff.tf_computation
としてラップし、バインドします。次に、tff.federated_computation
内のtff.federated_broadcast
やtff.federated_mean
などの抽象化を使用してそれらをオーケストレーションします。例として、この Federated Averaging のオーケストレーションをご覧ください。本番環境の連合学習システムの制御ロジックをシミュレートする外部ドライバースクリプトは、データセットからシミュレートされたクライアントを選択し、それらのクライアントで2.で定義された連合計算を実行します。(例:a Federated EMNIST experiment driver)
連合学習データセット
TensorFlow の連合学習データセットは、連合学習で解決できる実際の問題の特徴を表す複数のデータセットをホストします。
注意: これらのデータセットは、ClientData API に記載されているように、Numpy 配列として Python ベースの機械学習フレームワークでも使用できます。
データセットには以下が含まれています。
StackOverflow。言語モデリングや教師あり学習タスク用の現実的なテキストデータセット。342,477人のユニークユーザーがトレーニングセットで135,818,730例(センテンス)を使用します。
Federated EMNIST。各クライアントが異なるライターに対応する、EMNIST文字と数字のデータセットの連合前処理。完全なトレインセットには、62のラベルからの671,585の例を持つ3400人のユーザーが含まれています。
Shakespeare。ウィリアムシェイクスピアの全作品に基づいた、文字レベルの小さなテキストデータセット。 データセットは715人のユーザー(シェイクスピア劇のキャラクター)で構成されます。各例は、特定の劇のキャラクターが話す連続した一連の行に対応しています。
CIFAR-100。500のトレーニングクライアントと100のテストクライアントにわたるCIFAR-100データセットの連合パーティション。各クライアントには100のユニークな例があります。 パーティションは、クライアント間でより現実的な異質性を作成する方法で行われます。 詳細については、APIをご覧ください。
Google Landmark v2 データセット。 データセットにはさまざまな世界的名所の写真で構成されており、データの連合パーティションを得られるよう、画像は写真家ごとにグループ化されています。データベースには、233 件のクライアントと 23080 枚の画像が含まれる小さいデータセットと、1262 件のクライアントと 164172 枚の画像が含まれる大きなデータセットの 2 種類があります。
CelebA。 有名人の顔のサンプル(画像と顔の特徴)を集めたデータセットです。連合データセットには各有名人のサンプルがクライアントを形成するようにグループ化されています。クライアントは 9343 件あり、それぞれに少なくとも 5 個のサンプルがあります。データセットは、クライアント別またはサンプル別に、トレーニンググループとテストグループに分割できます。
iNaturalist。 さまざまな種の写真で構成されるデータセット。データセットには、1,203 種の 120,300 枚の画像が含まれます。データセットには 7 つの種類があります。1 つは写真家別にグループ化されており、9257 件のクライアントが含まれます。残りのデータセットは、写真が撮影された場所の位置情報でグループ化されています。これらの 6 つのデータセットは、11~3,606 件のクライアントで構成されています。
高性能シミュレーション
FL シミュレーションの実時間は、アルゴリズムを評価するための適切な指標ではありませんが(シミュレーションハードウェアは実際の連合学習デプロイメント環境を表していないため)、連合学習シミュレーションをすばやく実行できることは、研究の生産性にとって重要です。そのため、TFF は単一および複数のマシンで高性能なランタイムを提供するために多額の投資を行ってきました。現在、ドキュメントは開発中ですが、アクセラレータを使用した TFF シミュレーションチュートリアルと GCP で TFF を使用したシミュレーションを設定する手順を参照してください。高性能 TFF ランタイムはデフォルトで有効になっています。
さまざまな研究分野の TFF
連合最適化アルゴリズム
TFF を利用すると指定するカスタマイズレベルに応じて連合最適化アルゴリズムの研究をさまざまな方法で行うことができます。
Federated Averaging アルゴリズムの最小限のスタンドアロン実装は、こちらに提供されています。コードには、例として、ローカル計算用のTF関数、オーケストレーション用のTFF計算、およびEMNISTデータセットのドライバースクリプトが含まれています。これらのファイルは、 README の詳細な指示に従って、カスタマイズされたアプリケーションやアルゴリズムの変更に簡単に適合させることができます。
Federated Averaging のより一般的な実装は、こちらにあります。この実装により、サーバーとクライアントの両方でさまざまなオプティマイザを使用するなど、より高度な最適化手法を適用することができます。連合 k-平均クラスタリングなどの他の連合学習アルゴリズムはこちらをご覧ください。
モデル更新の圧縮
モデル更新の非可逆圧縮は、通信コストの削減につながり、全体的なトレーニング時間の短縮につながる可能性があります。
最近の論文を再現するには、この研究プロジェクトを参照してください。 カスタム圧縮アルゴリズムを実装するには、ベースラインの例としてプロジェクトの Comparison_methods を参照してください。まだ慣れていない場合は、TFF Aggregators チュートリアルを参照してください。
差別的なプライバシー
TFF は TensorFlow Privacy ライブラリと相互運用可能であり、差別化されたプライバシーを持つモデルの連合トレーニングの新しいアルゴリズムの研究を可能にします。基本的な DP-FedAvg アルゴリズムと拡張機能を使用して DP でトレーニングする例については、この実験ドライバーをご覧ください。
カスタム DP アルゴリズムを実装し、それを Federated Averaging の集計更新に適用する場合、新しい DP 平均アルゴリズムを tensorflow_privacy.DPQuery
のサブクラスとして実装し、クエリのインスタンスで tff.aggregators.DifferentiallyPrivateFactory
を作成することができます。DP-FTRL アルゴリズムの実装例はこちらにあります。
以下で説明されている Federated GAN は、ユーザーレベルの差分プライバシーを実装する TFF プロジェクトの別の例です(例としてこのコードを参照してください)。
堅牢性と攻撃
TFF は、「連合学習にバックドアを組み込むことは可能か?」で取り上げられているように、連合学習システムへの標的型攻撃とプライバシーに基づく差別化された防御のシミュレーションにも使用できます。これは、潜在的に悪意のあるクライアントとのイテレーションプロセスを構築することにより実行されます。(build_federated_averaging_process_attacked
を参照してください。) 詳細は targeted_attack ディレクトリをご覧ください。
シミュレーションのサンプルスクリプトについては、emnist_with_targeted_attack.py
をご覧ください。
生成的敵対的ネットワーク
GAN は、標準の Federated Averaging とは少し異なる興味深い連合オーケストレーションパターンを作り出します。これには、それぞれ独自の最適化ステップでトレーニングされた 2 つの異なるネットワーク(ジェネレーターとディスクリミネーター)が含まれます。
TFF は、GAN の連合学習の研究に使用できます。たとえば、最近の研究で示されている DP-FedAvg-GAN アルゴリズムは TFFで実装されています。この研究は、連合学習、生成モデル、差分プライバシーを組み合わせることの有効性を示しています。
パーソナライゼーション
連合学習の設定におけるパーソナライゼーションは、活発な研究分野です。パーソナライゼーションの目標は、さまざまな推論モデルをさまざまなユーザーに提供することです。この問題に対しては様々なアプローチがあります。
1つのアプローチは、各クライアントがローカルデータを使用して(フェデレーテッドラーニングを使用してトレーニングされた)単一のグローバルモデルを微調整できるようにすることです。このアプローチはメタ学習に関連しています(こちらの論文を参照してください)。このアプローチの例は、emnist_p13n_main.py
にあります。 さまざまなパーソナライズ戦略を探索して比較するには、次の方法があります。
初期モデルから開始し、各クライアントのローカルデータセットを使用してパーソナライズモデルをトレーニングおよび評価する
tf.function
を定義します。 例は、build_personalize_fn
をご覧ください。戦略名を対応するパーソナライズ戦略にマップする
OrderedDict
を定義し、それをtff.learning.build_personalization_eval_computation
のpersonalize_fn_dict
引数として使用します。
もう 1 つのアプローチは、モデルの一部を完全にローカルでトレーニングすることで、完全にグローバルなモデルをトレーニングしないようにすることです。こちらのブログ記事には、このアプローチの一種が説明されています。このアプローチはメタ学習にも関連しています。こちらの論文をご覧ください。部分的なローカルな連合学習を探索するには、次の方法があります。
Federated Reconstruction とフォローアップ演習を適用する完全なコード例については、チュートリアルをご覧ください。
部分的にローカルなトレーニングプロセスは、
tff.learning.reconstruction.build_training_process
を使用し、dataset_split_fn
を変更してプロセスの動作をカスタマイズして作成できます。