Federated Learning
連合学習は、生データをローカルに保持する複数のデバイスや組織にまたがって1つのモデルを学習させ、モデルの更新情報のみをサーバーと共有します。
連合学習は、複数のデバイスや組織が、収集した場所に学習データを保持したまま、1つの機械学習モデルを学習する方法です。調整サーバーが現在のモデルを参加者に送信し、各参加者が自分のデータで学習して、結果として得られたモデル更新だけを送り返し、より優れた共有モデルに統合します。Googleの研究者は、2016年の論文分散データからのディープネットワークの通信効率に優れた学習でこの手法を命名し、ユーザーのモバイルデバイス上にデータを保持したまま学習するためのFederated Averaging(FedAvg)アルゴリズムを紹介しました。モデルをデータのある場所に持ち込むことで、プライバシー規則、EUのGDPRなどの規制、または単にデータ量が膨大であることを理由に、1つのデータレイクに集約できない情報を、スマートフォン、病院、銀行が活用して学習できます。
連合学習の仕組み#
学習はラウンド単位で実行されます。サーバーは利用可能なクライアント群を選び、グローバルなモデルの重みを送信します。各クライアントはローカルデータで数エポック分の勾配降下法を実行し、更新した重みを返します。FedAvgは返された重みを平均します。この際、各クライアントの重み付けは学習サンプル数に比例し、その結果が次のラウンドのグローバルモデルになります。FedAvgの実験では、同期型の確率的勾配降下法と比べて、通信の間に複数のローカルステップを実行することで、通信ラウンド数を10分の1から100分の1に削減できました。次のコードは、データ量が異なる3つのクライアント上で線形モデルのFedAvgをシミュレートします。
import torch
torch.manual_seed(0)
true_w = torch.tensor([2.0, -3.0])
# Three clients with private datasets of different sizes; raw data never leaves a client
clients = []
for n in (50, 200, 500):
X = torch.randn(n, 2)
clients.append((X, X @ true_w + 0.1 * torch.randn(n)))
global_w = torch.zeros(2)
for r in range(1, 6):
weighted = []
for X, y in clients:
w = global_w.clone()
for _ in range(5): # local gradient descent steps on the client's own data
w -= 0.1 * 2 * X.T @ (X @ w - y) / len(y)
weighted.append(len(y) * w)
# FedAvg: average the client weights, weighted by each client's number of samples
global_w = sum(weighted) / sum(len(y) for _, y in clients)
print(f"round {r}: global weights {[round(v, 3) for v in global_w.tolist()]}")ラウンド1後の[1.354, -2.023]、ラウンド3後の[1.935, -2.898]、ラウンド5後の[1.995, -2.99]のグローバル重みを出力し、真の値[2, -3]に収束します。ただし、サーバーが受け取るのは各クライアントの重みだけです。
クロスデバイス連合学習とクロスサイロ連合学習#
連合学習は、制約の異なる2つの設定で実行されます。クロスデバイス学習では、少量のデータを保持する数百万台のスマートフォンやセンサーを対象とします。多くはオフラインであったり、バッテリー駆動であったりするため、各ラウンドで使用するのはそのごく一部に限られ、途中離脱も許容する必要があります。GoogleのGboardキーボードは、この方法で次単語予測モデルを学習します。クロスサイロ学習では、病院や銀行など、信頼性の高いサーバー上に大規模なデータセットをそれぞれ保持する少数の組織を接続します。連合腫瘍セグメンテーション研究では、6大陸の71の医療機関が、6,314人の患者から得た25,256件のMRIスキャンを共有せずに膠芽腫のセグメンテーションモデルを学習しました。その連合モデルは、公開データで学習したモデルよりも、手術で切除可能な腫瘍を33%高い精度で輪郭化しました。どちらの設定が適切かは、データの所在によって決まります。
同じループはビジョンモデルにも使えます。各病院、工場、店舗が最新のグローバルなYOLO26の重みを読み込み、標準的なUltralytics YOLOの学習モードで自施設の画像を使ってファインチューニングし、更新後の重みだけをサーバーに返して平均化できます。FlowerやNVIDIA FLAREなどのオープンソースフレームワークは、どちらの設定でもクライアントの選択、通信、集約を処理します。
プライバシーとセキュリティ#
データをローカルに保持するだけでは、学習のプライバシーは確保されません。モデル更新には、その生成元であるデータに関する情報が含まれるためです。勾配からの情報漏えいなどの勾配反転攻撃では、共有された勾配から学習画像やラベルが再構成され、メンバーシップ推論攻撃では、特定のレコードが使われたかどうかを検証します。本番システムでは、2つの防御策を追加します。セキュア集約は更新を暗号化し、サーバーが合計値だけを把握できるようにします。差分プライバシーは各更新をクリッピングして調整済みのノイズを加え、単一ユーザーの寄与を復元できないようにします。Googleは、連合学習で学習するGboardの次単語予測ニューラルネットワーク言語モデルすべてに、差分プライバシーの保証が適用されるようになったと報告しています。また、サーバーは座標ごとの中央値など、いずれか1つのクライアントの影響を制限するロバストな集約ルールを使い、汚染された更新を送信するクライアントにも対処する必要があります。ある病院のスキャナーと別の病院のスキャナーのように、参加者間でクライアントデータが大きく異なると、ローカルモデル間の乖離が進み、収束が遅くなります。
連合学習と関連用語#
- 分散学習: 1つのデータセンターに一元管理されたデータセットを複数のGPUに分散し、学習を高速化します。連合学習ではデータを移動できず、参加者の処理速度や信頼性が低く、保持するデータの分布もそれぞれ異なります。
- 分割学習: ネットワーク自体をクライアントとサーバーに分割し、中間活性化値をやり取りします。一方、連合学習では各クライアントがモデル全体を持ち、重みをやり取りします。
- データプライバシー: 個人情報を保護するという、より広い目標です。連合学習はそのための手法の1つであり、通常は差分プライバシーやセキュア集約と組み合わせて使われます。
- エッジAI: デバイス上でモデルを実行します。クロスデバイス連合学習は、それらのデバイス上で学習も行うことで、エッジAIを拡張します。










