TensorFlow Federated : 概要 (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 03/01/2019
* 本ページは、TensorFlow の本家サイトの TensorFlow Federated – Overview と Get Started を翻訳した上で
適宜、補足説明したものです:
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
TensorFlow Federated 概要
TensorFlow Federated (TFF) は分散された (= decentralized) データ上の機械学習と他の計算のためのオープンソース・フレームワークです。TFF は、共有されたグローバルモデルが多くの参加するクライアント (それらの訓練データはローカルに保持します) に渡り訓練されるアプローチである、Federated ラーニング (FL) によるオープンな研究と実験を促進するために開発されました。例えば、FL は機密なタイピング・データをサーバにアップロードすることなしに モバイル・キーボードのための予測モデル を訓練するために使用されてきています。
TFF は開発者に彼らのモデルとデータ上で含まれる federated ラーニング・アルゴリズムをシミュレートし、そして新しいアルゴリズムによる実験を可能にします。TFF により提供されるビルディングブロックはまた分散されたデータに渡る集約分析 (= aggregated analytics) のような非ラーニング計算を実装するためにも使用できます。
TFF のインターフェイスは 2 つの層に体系化されます :
- Federated ラーニング (FL) API
この層は既存の TensorFlow モデルへの federated 訓練と評価の含まれる実装を適用することを可能にする高位インターフェイスのセットを提供します。 - Federated コア (FC) API
システムのコアでは強く型付けられた関数型プログラミング環境内で TensorFlow と分散通信演算子を結合することにより新しい federated アルゴリズムを簡潔に表現するための低位インターフェイスのセットがあります。この層はまた私達がその上で構築した Federated ラーニングの基礎としてもサーブします。
TFF は federated 計算を宣言的に表現することを開発者に可能にしますので、それらは様々なランタイム環境に配備可能です。実験のためのシングルマシン・シミュレーション・ランタイムが TFF に含まれています。チュートリアル を訪ねて貴方自身で試してください!
主要な TFF 概念と実践的なサンプルを使用する API を貴方にウォークスルーさせる次のチュートリアルを読むことから開始します。
- 画像分類のための federated ラーニング (Federated Learning for image classification) は Federated ラーニング (FL) API の主要パートを紹介して federated MNIST-ライクなデータ上で federated ラーニングをシミュレートするためにどのように TFF を使用するかを示します。
- テキスト生成のための federated ラーニング (Federated Learning for text generation) は更に言語モデリング・タスクのためのシリアライズ化された事前訓練されたモデルを洗練するためにどのように TFF の FL API を使用するかを示します。
- Custom Federated Algorithms, Part 1: Introduction to the Federated Core と Part 2: Implementing Federated Averaging は主要な概念と Federated Core API (FC API) により提供されるインターフェイスを紹介し、そして単純な federated averaging 訓練アルゴリズムをどのように実装して federated 評価をどのように遂行するかを示します。
from six.moves import range
import tensorflow as tf
import tensorflow_federated as tff
from tensorflow_federated.python.examples import mnist
tf.compat.v1.enable_v2_behavior()
# Load simulation data.
source, _ = tff.simulation.datasets.emnist.load_data()
def client_data(n):
dataset = source.create_tf_dataset_for_client(source.client_ids[n])
return mnist.keras_dataset_from_emnist(dataset).repeat(10).batch(20)
# Pick a subset of client devices to participate in training.
train_data = [client_data(n) for n in range(3)]
# Grab a single batch of data so that TFF knows what data looks like.
sample_batch = tf.contrib.framework.nest.map_structure(
lambda x: x.numpy(), iter(train_data[0]).next())
# Wrap a Keras model for use with TFF.
def model_fn():
return tff.learning.from_compiled_keras_model(
mnist.create_simple_keras_model(), sample_batch)
# Simulate a few rounds of training with the selected client devices.
trainer = tff.learning.build_federated_averaging_process(model_fn)
state = trainer.initialize()
for _ in range(5):
state, metrics = trainer.next(state, train_data)
print (metrics.loss)
以上