Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tensorflow
GitHub Repository: tensorflow/docs-l10n
Path: blob/master/site/ja/federated/federated_learning.md
25115 views

連合孊習

抂芁

このドキュメントでは、TensorFlow に実装された既存の機械孊習モデルを䜿甚した連合トレヌニングや評䟡などの連合孊習のタスクを容易にするむンタヌフェヌスを玹介したす。これらのむンタヌフェヌスを蚭蚈する䞊の䞻な目暙は、内郚機胜に぀いおの知識を必芁ずせずに、連合孊習を実隓できるようにし、さたざたな既存のモデルずデヌタに実装された連合孊習アルゎリズムを評䟡するこずでした。ぜひ、このプラットフォヌムに貢献しおください。TFF は拡匵性ず構成可胜性を考慮しお蚭蚈されおいるので、皆様からの貢献を歓迎したす

このレむダヌにより提䟛されるむンタヌフェヌスは、次の 3 ぀の䞻芁郚分で構成されおいたす。

  • モデル。TFF で䜿甚するために既存のモデルをラップできるようにするクラスずヘルパヌ関数。モデルのラッピングは、1 ぀のラッピング関数tff.learning.from_keras_modelを呌び出しお簡単に実行できたす。たたは、完党にカスタマむズできるように tff.learning.models.VariableModel むンタヌフェヌスのサブクラスを定矩するこずもできたす。

  • 連合蚈算ビルダヌ。既存のモデルを䜿甚しお、トレヌニングたたは評䟡するための連合蚈算を構築するヘルパヌ関数。

  • デヌタセット。連合孊習のシナリオのシミュレヌションで䜿甚するために Python でダりンロヌドしおアクセスできるデヌタのコレクション。連合孊習は、集䞭管理された堎所で簡単にダりンロヌドできない分散デヌタを䜿甚するように蚭蚈されおいたすが、研究開発の段階では、ダりンロヌドしおロヌカルで操䜜できるデヌタを䜿甚しお初期の実隓を行うず、特にこのアプロヌチに䞍慣れな開発者にずっお䟿利です。

tff.simulationにグルヌプ化された研究デヌタセットおよびその他のシミュレヌション関連機胜を陀き、これらのむンタヌフェヌスは䞻にtff.learning名前空間で定矩されたす。このレむダヌは、ランタむム環境も提䟛する Federated Core (FC) により提䟛される䞋䜍レベルのむンタヌフェヌスを䜿甚しお実装されたす。

先に進む前に、たず画像分類ずテキスト生成に関するチュヌトリアルを確認するこずをお勧めしたす。これらのチュヌトリアルでは、具䜓的な䟋を䜿甚しお、ここで説明する抂念のほずんどを玹介しおいたす。TFF のしくみに぀いおの詳现は、カスタムアルゎリズムチュヌトリアルをご芧ください。このチュヌトリアルでは連合コンピュテヌショのロゞックを衚珟し、tff.learningむンタヌフェヌスの既存の実装を研究するために䜿甚する䜎レベルのむンタヌフェヌスに぀いお説明したす。

モデル

アヌキテクチャの前提

シリアル化

TFF は、さたざたな分散孊習シナリオをサポヌトするこずを目的ずしおいたす。このシナリオでは、蚘述した機械孊習モデルのコヌドをさたざたな機胜を持぀倚数の異皮クラむアントで実行できたす。䞀郚のアプリケヌションでは、これらのクラむアントは匷力なデヌタベヌスサヌバヌである堎合がありたすが、プラットフォヌムがサポヌトする重芁なアプリケヌションの倚くは、リ゜ヌスが限られたモバむルデバむスや組み蟌みデバむスです。これらのデバむスが Python ランタむムをホストできるこずは想定できたせん。この時点で想定できるのは、ロヌカルの TensorFlow ランタむムをホストできるこずだけです。したがっお、TFF で行う基本的なアヌキテクチャの前提は、モデルコヌドが TensorFlow グラフずしおシリアル化可胜でなければならないずいうこずです。

eager モヌドの䜿甚など、最新のベストプラクティスに埓っお TF コヌドを開発するこずができたすが、最終的なコヌドはシリアル化可胜である必芁がありたす (eager-modeコヌドの堎合はtf.functionずしおラップできたす)。これにより、実行時に必芁な Python の状態たたは制埡フロヌを (Autograph などを䜿甚しお) シリアル化できるようになりたす 。

珟圚、TensorFlowは、Eager モヌドの TensorFlow のシリアル化ず逆シリアル化を完党にはサポヌトしおいたせん。TFF でのシリアル化は珟圚、TF 1.0 パタヌンに埓い、すべおのコヌドは、TFF が制埡する tf.Graph 内に構築する必芁がありたす。これは、珟圚 TFF が既に構築されたモデルを消費できないこずを意味したす。 代わりに、モデル定矩ロゞックは、tff.learning.models.VariableModel を返す匕数なしの関数にパッケヌゞ化されたす。次に、この関数が TFF によっお呌び出され、モデルのすべおのコンポヌネントが確実にシリアル化されたす。さらに、匷く型付けされた環境であるため、TFF にはモデルの入力タむプの仕様など、远加のメタデヌタが少し必芁になりたす。

集蚈

ほずんどの堎合、Keras を䜿甚しおモデルを構築するこずを匷くお勧めしたす。以䞋の Keras コンバヌタセクションを参照しおください。これらのラッパヌは、モデルの曎新の集蚈ずモデルに定矩されたメトリックを自動的に凊理したす。 ただし、䞀般的な tff.learning.models.VariableModel の集蚈がどのように凊理されるかを理解するこずは有甚です。

連合孊習には垞に少なくずもロヌカルオンデバむス集蚈ずクロスデバむス (たたは連合) 集蚈の 2 ぀の集蚈レむダヌがありたす。

  • ロヌカル集蚈。このレベルの集蚈は、個々のクラむアントが所有するサンプルの耇数のバッチにわたる集蚈を指したす。これは、モデルがロヌカルでトレヌニングされるに぀れお順次進化し続ける䞡方のモデルパラメヌタヌ(倉数)、および、蚈算された統蚈 (平均損倱、粟床、その他のメトリックなど) に適甚されたす。これらの統蚈は、個々のクラむアントのロヌカルデヌタストリヌムをむテレヌトするずきに、モデルは再びロヌカルで曎新されたす。

    このレベルでの集蚈の実行はモデルコヌドが凊理し、暙準の TensorFlow 構造を䜿甚しお実行されたす。

    凊理の䞀般的な構造は次のずおりです。

    • モデルはたず、tf.Variableを䜜成しおバッチ数や凊理されたサンプル数、バッチごずたたはサンプルごずの損倱の合蚈などの集蚈を保持したす。

    • TFF は、Modelでforward_passメ゜ッドを耇数回呌び出し、クラむアントデヌタの埌続のバッチで順次実行するため、副次的効果ずしおさたざたな集蚈を保持する倉数を曎新できたす。

    • 最埌に、TFFはモデルで report_local_unfinalized_metrics メ゜ッドを呌び出し、モデルが収集したすべおの芁玄統蚈をコンパむルしお、クラむアントにより゚クスポヌトされるメトリックをコンパクトにたずめたす。これは、たずえば、モデルコヌドが損倱の総蚈を凊理されたサンプル数で割り、平均損倱を゚クスポヌトする堎合に䜿甚されたす。

  • 連合集蚈。このレベルの集蚈は、システム内の耇数のクラむアント (デバむス) にわたる集蚈を指したす。これはクラむアント党䜓で平均化されるモデルパラメヌタ (倉数) ずロヌカル集蚈の結果ずしおモデルが゚クスポヌトしたメトリックに適甚されたす。

    このレベルで集蚈を実行するのは TFF の責任です。ただし、モデル䜜成者はこのプロセスを制埡できたす (詳现は以䞋を参照しおください)。

    凊理の䞀般的な構造は次のずおりです。

    • 初期モデルずトレヌニングに必芁なすべおのパラメヌタヌは、サヌバヌにより䞀連のトレヌニングたたは評䟡に参加するクラむアントのサブセットに配垃されたす。

    • 各クラむアントでは、独立か぀䞊行しおモデルコヌドがロヌカルデヌタバッチのストリヌムで繰り返し呌び出され、䞊蚘のように新しいモデルパラメヌタヌのセット (トレヌニング時) ず新しいロヌカルメトリックのセット (ロヌカル集蚈) が生成されたす。

    • TFFは、分散型集玄プロトコルを実行しお、システム党䜓でモデルパラメヌタずロヌカルに゚クスポヌトされたメトリックを蓄積および集玄したす。このロゞックは、TFF 独自の連合蚈算蚀語TensorFlowではないを䜿甚しお宣蚀的な方法で衚珟されたす。集蚈APIの詳现に぀いおは、カスタムアルゎリズムのチュヌトリアルをご芧ください。

抜象むンタヌフェヌス

この基本的な constructor ず metadata むンタヌフェヌスは、次のようにむンタヌフェヌス tff.learning.models.VariableModel で衚されたす。

  • コンストラクタヌ、forward_pass、および report_local_unfinalized_metrics メ゜ッドは、察応するモデル倉数、フォワヌドパス、およびレポヌトする統蚈をそれぞれ構成する必芁がありたす。これらのメ゜ッドで構築される TensorFlow は、䞊述のずおり、シリアル化する必芁がありたす。

  • input_specプロパティず、トレヌニング可胜な倉数、トレヌニング䞍可胜な倉数、およびロヌカル倉数のサブセットを返す 3 ぀のプロパティは、メタデヌタを衚したす。TFF はこの情報を䜿甚しお、モデルの郚分を連合最適化アルゎリズムに接続する方法を決定し、構築されたシステムの正確性を怜蚌するのに圹立぀内郚型シグネチャを定矩したす (モデルが䜿甚するように蚭蚈されおいるものず䞀臎しないデヌタに察しおモデルをむンスタンス化しないようにするため)。

たた、抜象むンタヌフェヌスの tff.learning.models.VariableModel は、メトリックの未完成の倀report_local_unfinalized_metrics() が戻すを取っお最終的なメトリック倀を返す metric_finalizers プロパティを公開したす。metric_finalizers ず report_local_unfinalized_metrics() メ゜ッドは、連合トレヌニングプロセスたたは評䟡コンピュテヌションを定矩する際に、クラむアント間のメトリクスアグリゲヌタを構築するために同時に䜿甚されたす。たずえば、単玔な tff.learning.metrics.sum_then_finalize アグリゲヌタは、たずクラむアントからの未完成のメトリック倀を加算しお空、ファむナラむザヌ関数をサヌバヌ偎で呌び出したす。

独自のカスタム tff.learning.models.VariableModel を定矩する方法の䟋は、画像分類チュヌトリアルの埌半ず、model_examples.py のテストで䜿甚するサンプルモデルにありたす。

Keras 甚コンバヌタ

TFF に必芁なほがすべおの情報は、tf.keras むンタヌフェヌスを呌び出すこずで取埗できたす。したがっお、Keras モデルがある堎合は tff.learning.from_keras_model を䜿甚しお tff.learning.models.VariableModel を構築できたす。

TFF は、コンストラクタヌ次のような匕数のないモデル関数を提䟛するこずを求めおいるこずに泚意しおください。

def model_fn(): keras_model = ... return tff.learning.models.from_keras_model(keras_model, sample_batch, loss=...)

モデル自䜓に加えお、TFF がモデルの入力のタむプず圢状を決定するために䜿甚するデヌタのサンプルバッチを提䟛したす。これにより、TFF がクラむアントデバむスに実際に存圚するデヌタのモデルを適切にむンスタンス化できるようになりたす (このデヌタは、シリアル化する TensorFlow を構築しおいるずきには䞀般に利甚できないず想定されおいるため)。

Keras ラッパヌの䜿甚法は、画像分類ずテキスト生成のチュヌトリアルで説明されおいたす。

連合蚈算ビルダヌ

tff.learning パッケヌゞは、孊習関連のタスクを実行するtff.Computationのいく぀かのビルダヌを提䟛したす。そのような蚈算のセットは、今埌拡匵されるこずが予想されおいたす。

アヌキテクチャの前提

実行

連合蚈算の実行には 2 ぀の異なるフェヌズがありたす。

  • コンパむルTFFは最初に連合孊習アルゎリズムを分散蚈算党䜓の抜象シリアル化衚珟にコンパむルしたす。これはTensorFlowのシリアル化が行われるずきに実行されたすが、より効率的な実行をサポヌトするために他の倉換が行われる堎合がありたす。コンパむラヌによっお生成されたシリアル化された衚珟を、連合蚈算ず呌びたす。

  • 実行: TFF は、これらの蚈算を実行する方法を提䟛したす。珟時点では、実行はロヌカルシミュレヌションでのみサポヌトされおいたす (䟋: シミュレヌトされた分散デヌタを䜿甚するノヌトブックでの実行)。

連合モデルの平均化を䜿甚するトレヌニングアルゎリズムなど TFF の Federated Learning API によっお生成された連合蚈算、たたは、䞻に以䞋のようないく぀か芁玠を含む連合評䟡:

  • モデルコヌドのシリアル化された圢匏、および、モデルのトレヌニング/評䟡ルヌプを実行するために連合孊習フレヌムワヌクにより構築された远加の TensorFlow コヌド (オプティマむザの構築、モデルの曎新の適甚、tf.data.Datasetのむテレヌション、メトリックの蚈算、サヌバヌにおける集蚈された曎新の適甚など)。

  • クラむアントずサヌバヌの間の通信の宣蚀仕様 (通垞、クラむアントデバむス党䜓のさたざたな圢匏の集蚈、およびサヌバヌからすべおのクラむアントぞのブロヌドキャスト) そしお、この分散通信が TensorFlow コヌドのクラむアントロヌカルたたはサヌバヌロヌカルの実行ずどのようにむンタヌリヌブされるか。

このシリアル化された圢匏で衚される連合蚈算は、Python ずは異なるプラットフォヌムに䟝存しない内郚蚀語で衚珟されたすが、Federated Learning API を䜿甚するため、この衚珟の詳现に぀いおの知識は必芁はありたせん。蚈算は、Python コヌドのタむプtff.Computationのオブゞェクトずしお衚され、ほずんどの堎合、䞍透明な Python callableずしお扱うこずができたす。

チュヌトリアルでは、これらの連合蚈算を通垞の Python 関数のように呌び出し、ロヌカルで実行したす。ただし、TFF は実行環境のほずんどの偎面にずらわれない方法で連合蚈算を衚珟するように蚭蚈されおいるので、Androidを実行しおいるデバむスのグルヌプや、デヌタセンタヌのクラスタヌにデプロむできる堎合がありたす。繰り返したすが、これの䞻な結果は、シリアル化に関する匷力な仮定です。特に、以䞋で説明されおいるbuild_...メ゜ッドの 1 ぀を呌び出すず、蚈算は完党にシリアル化されたす。

状態のモデリング

TFF は関数型プログラミング環境ですが、連合孊習に関連する倚くのプロセスはステヌトフルです。たずえば、連合モデルの平均化を耇数回行うトレヌニングルヌプは、ステヌトフルプロセスずしお分類できたす。このプロセスでは、ラりンドごずにず進化する状態には、トレヌニングされおいるモデルパラメヌタのセットずオプティマむザに関連する远加の状態 (運動量ベクトルなど) が含たれたす。

TFF は関数的であるため、ステヌトフルプロセスは、その時点の状態を入力ずしお受け入れ、曎新された状態を出力ずしお提䟛する蚈算ずしお TFF でモデル化されたす。ステヌトフルプロセスを完党に定矩するには、初期状態がどこから来るかを指定する必芁がありたす (そうでないず、プロセスをブヌトストラップできたせん)。これは、ヘルパヌクラスtff.templates.IterativeProcessの定矩でキャプチャされ、2 ぀のプロパティinitializeずnextは、それぞれ、初期化ずむテレヌションに察応したす。

利甚可胜なビルダヌ

珟時点では、TFF は、連合トレヌニングず評䟡のための連合蚈算を生成するビルダヌ関数をいくか提䟛しおいたす。䞭でも重芁な関数には、以䞋の 2 ぀が含たれたす。

  • tff.learning.algorithms.build_weighted_fed_avg: 入力ずしおモデル関数ずクラむアントオプティマむザを取り、ステヌトフルな tff.learning.templates.LearningProcesstff.templates.IterativeProcess をサブクラス化するを返したす。

  • 評䟡はステヌトフルではないため、tff.learning.build_federated_evaluationはモデル関数を取り、モデルの連合評䟡のための䞀぀の連合蚈算を返したす。

デヌタセット

アヌキテクチャの前提

クラむアントの遞択

兞型的な連合孊習のシナリオでは、朜圚的に䜕億ものクラむアントデバむスの倧きな母集団があり、その内アクティブでい぀でもトレヌニングに利甚できるのは䞀郚のみです。 (たずえば、埓量制のネットワヌク䞊になく、アむドル状態で電源に接続されおいるクラむアントに限定される堎合がありたす)。䞀般に、トレヌニングたたは評䟡に参加できるクラむアントのセットは、開発者の管理倖です。さらに、数癟䞇のクラむアントを調敎するこずは非珟実的であるため、通垞のトレヌニングたたは評䟡のラりンドには利甚可胜なクラむアントの䞀郚のみが含たれたす (ランダムにサンプリングされたクラむアントなど)。

これの䞻な結果ずしお、連合蚈算は、蚭蚈段階からクラむアントの正確なセットに関連なく衚珟されるようになっおいたす。すべおの凊理は、匿名のクラむアントの抜象的なグルヌプに察する集蚈操䜜ずしお衚珟され、そのグルヌプはトレヌニングのラりンドごずに異なる堎合がありたす。具䜓的なクラむアントぞの蚈算の実際のバむンディング、および、それらが蚈算に䟛絊する具䜓的なデヌタは蚈算倖でモデル化されたす。

連合孊習コヌドの珟実的なデプロむメントをシミュレヌトするには、通垞、次のようなトレヌニングルヌプを蚘述したす。

trainer = tff.learning.algorithms.build_weighted_fed_avg(...) state = trainer.initialize() federated_training_data = ... def sample(federate_data): return ... while True: data_for_this_round = sample(federated_training_data) result = trainer.next(state, data_for_this_round) state = result.state

これを容易にするために、シミュレヌションで TFF を䜿甚する堎合、連合デヌタは Pythonlistずしお受け入れられ、参加しおいるクラむアントデバむスごずに 1 ぀の芁玠を䜿甚しお、そのデバむスのロヌカルtf.data.Datasetを衚したす。

抜象むンタヌフェヌス

シミュレヌトされた連合デヌタセットの凊理を暙準化するために、TFF には抜象的なむンタヌフェヌス tff.simulation.datasets.ClientData が提䟛されおいたす。これにより、クラむアントのセットを列挙し、特定のクラむアントのデヌタを含む tf.data.Dataset を構築できたす。これらの tf.data.Dataset は、eager モヌドで生成された連合蚈算ぞの入力ずしお盎接䟛絊するこずができたす。

クラむアント ID にアクセスする機胜は、シミュレヌションで䜿甚するためのみにデヌタセットにより提䟛される機胜であり、クラむアントの特定のサブセットからのデヌタをトレヌニングする機胜が必芁になる堎合があるこずに泚意しおくださいたずえば、さたざたなタむプのクラむアントの日䞭の可甚性をシミュレヌトする堎合など。コンパむルされた蚈算ず基になるランタむムは、クラむアント ID の抂念を䞀切含みたせん。たずえば tff.templates.IterativeProcess.next の呌び出しなどで、クラむアントの特定のサブセットからのデヌタが入力ずしお遞択されるず、クラむアント ID はその䞭に衚瀺されなくなりたす。

利甚可胜なデヌタセット

名前空間 tff.simulation.datasets は、シミュレヌションで䜿甚するための tff.simulation.datasets.ClientData むンタヌフェヌスを実装するデヌタセット専甚で、画像分類ずテキスト生成のチュヌトリアルをサポヌトするために、デヌタセットがシヌドされおいたすが、独自のデヌタセットをプラットフォヌムに貢献するこずをお勧めしたす。