원클릭으로
scientific-federated-learning
連合学習スキル。Flower フレームワークによる FL パイプライン・ FedAvg/FedProx/FedOpt 集約戦略・差分プライバシー (DP-SGD)・ 非 IID データ分割・通信効率化。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
連合学習スキル。Flower フレームワークによる FL パイプライン・ FedAvg/FedProx/FedOpt 集約戦略・差分プライバシー (DP-SGD)・ 非 IID データ分割・通信効率化。
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
実験の監査レポート・データ来歴(プロベナンス)生成スキル。 データ変換履歴・使用ツールのバージョン・データ整合性チェックを 含むトレーサビリティレポートを自動生成する。 「監査レポート作成」「データ来歴を記録」「トレーサビリティ」で発火。
派生実験設計スキル。既存の実験をベースに条件を変更した派生実験を 設計する。実験計画法(DOE)に基づくパラメータ探索を支援。 「派生実験を設計して」「条件を変えて実験」「パラメータ探索」で発火。
実験テンプレート生成スキル。研究目的・仮説・手法・実験条件・評価基準・ スケジュールを構造化した実験計画書を自動作成する。 「実験テンプレート作成して」「実験計画を立てて」「実験プロトコルを作成」で発火。
実験結果を論文形式(LaTeX / IMRaD)にエクスポートするスキル。 Introduction・Materials & Methods・Results・Discussion の構造で 出版準備用の原稿を自動生成する。 「論文にして」「LaTeX出力」「出版準備」で発火。
実験結果の査読・レビュースキル。再現性・統計的妥当性・方法論の 健全性を体系的に評価し、構造化されたレビューレポートを生成する。 「レビューして」「査読して」「実験結果を評価して」で発火。
科学技術・学術論文の執筆スキル。IMRaD 標準、Nature/Science 系、ACS 系、IEEE 系、 Elsevier 系のジャーナル形式に対応した論文構成・セクション設計・文章パターンを提供。 「論文を書いて」「Abstract を作成して」「Methods セクションを書いて」で発火。 assets/ に主要ジャーナル形式の Markdown テンプレートを同梱。
| name | scientific-federated-learning |
| description | 連合学習スキル。Flower フレームワークによる FL パイプライン・ FedAvg/FedProx/FedOpt 集約戦略・差分プライバシー (DP-SGD)・ 非 IID データ分割・通信効率化。 |
| tu_tools | [{"key":"papers_with_code","name":"Papers with Code","description":"連合学習フレームワーク・ベンチマーク"}] |
プライバシー保護型分散機械学習を実現する連合学習パイプラインを提供する。
import flwr as fl
import numpy as np
from typing import Dict, List, Tuple, Optional
def create_fl_client(model, train_loader, val_loader,
device="cpu"):
"""
Flower クライアント生成。
Parameters:
model: nn.Module — PyTorch モデル
train_loader: DataLoader — 訓練データ
val_loader: DataLoader — 検証データ
device: str — "cpu" / "cuda"
"""
import torch
class SatoriFlClient(fl.client.NumPyClient):
def get_parameters(self, config):
return [val.cpu().numpy()
for val in model.parameters()]
def set_parameters(self, parameters):
for param, new_val in zip(model.parameters(), parameters):
param.data = torch.tensor(new_val).to(device)
def fit(self, parameters, config):
self.set_parameters(parameters)
model.train()
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)
criterion = torch.nn.CrossEntropyLoss()
epochs = config.get("local_epochs", 1)
for _ in range(epochs):
for X, y in train_loader:
X, y = X.to(device), y.to(device)
optimizer.zero_grad()
loss = criterion(model(X), y)
loss.backward()
optimizer.step()
return self.get_parameters(config), len(train_loader.dataset), {}
def evaluate(self, parameters, config):
self.set_parameters(parameters)
model.eval()
criterion = torch.nn.CrossEntropyLoss()
total_loss, correct, total = 0.0, 0, 0
with torch.no_grad():
for X, y in val_loader:
X, y = X.to(device), y.to(device)
preds = model(X)
total_loss += criterion(preds, y).item() * len(y)
correct += (preds.argmax(1) == y).sum().item()
total += len(y)
return total_loss / total, total, {"accuracy": correct / total}
return SatoriFlClient()
def create_fl_strategy(algorithm="fedavg", min_clients=2,
fraction_fit=1.0, fraction_evaluate=1.0,
proximal_mu=0.1):
"""
連合学習集約戦略の選択。
Parameters:
algorithm: str — "fedavg" / "fedprox" / "fedopt" / "fedadam"
min_clients: int — 最小クライアント数
fraction_fit: float — 学習参加率
fraction_evaluate: float — 評価参加率
proximal_mu: float — FedProx 近接項の強度
"""
common = dict(
min_fit_clients=min_clients,
min_evaluate_clients=min_clients,
min_available_clients=min_clients,
fraction_fit=fraction_fit,
fraction_evaluate=fraction_evaluate,
)
strategies = {
"fedavg": fl.server.strategy.FedAvg(**common),
"fedprox": fl.server.strategy.FedProx(
proximal_mu=proximal_mu, **common),
"fedadam": fl.server.strategy.FedAdam(
eta=1e-1, eta_l=1e-1, tau=1e-9, **common),
}
strategy = strategies.get(algorithm, strategies["fedavg"])
print(f"FL Strategy: {algorithm} | min_clients={min_clients}")
return strategy
def apply_differential_privacy(model, train_loader,
target_epsilon=1.0,
target_delta=1e-5,
max_grad_norm=1.0,
noise_multiplier=1.1,
epochs=10, lr=1e-3):
"""
Opacus DP-SGD による差分プライバシー学習。
Parameters:
model: nn.Module — PyTorch モデル
train_loader: DataLoader — 訓練データ
target_epsilon: float — プライバシーバジェット ε
target_delta: float — プライバシーパラメータ δ
max_grad_norm: float — 勾配クリッピングノルム
noise_multiplier: float — ノイズ乗数 σ
epochs: int — 学習エポック数
lr: float — 学習率
"""
import torch
from opacus import PrivacyEngine
optimizer = torch.optim.SGD(model.parameters(), lr=lr)
privacy_engine = PrivacyEngine()
model, optimizer, train_loader = privacy_engine.make_private_with_epsilon(
module=model,
optimizer=optimizer,
data_loader=train_loader,
epochs=epochs,
target_epsilon=target_epsilon,
target_delta=target_delta,
max_grad_norm=max_grad_norm,
)
criterion = torch.nn.CrossEntropyLoss()
history = []
for epoch in range(epochs):
model.train()
total_loss = 0
for X, y in train_loader:
optimizer.zero_grad()
loss = criterion(model(X), y)
loss.backward()
optimizer.step()
total_loss += loss.item()
epsilon = privacy_engine.get_epsilon(delta=target_delta)
history.append({"epoch": epoch + 1,
"loss": total_loss / len(train_loader),
"epsilon": epsilon})
print(f"Epoch {epoch+1}: loss={total_loss/len(train_loader):.4f}, "
f"ε={epsilon:.2f}")
import pandas as pd
return pd.DataFrame(history)
def create_non_iid_splits(dataset_labels, n_clients=5,
alpha=0.5, seed=42):
"""
Dirichlet 分布ベースの非 IID データ分割。
Parameters:
dataset_labels: np.ndarray — 全データのラベル配列
n_clients: int — クライアント数
alpha: float — Dirichlet α (小さいほど偏りが大きい)
seed: int — 乱数シード
"""
rng = np.random.default_rng(seed)
n_classes = len(np.unique(dataset_labels))
client_indices = [[] for _ in range(n_clients)]
for c in range(n_classes):
class_idx = np.where(dataset_labels == c)[0]
proportions = rng.dirichlet(np.repeat(alpha, n_clients))
split_points = (np.cumsum(proportions) * len(class_idx)).astype(int)
splits = np.split(class_idx, split_points[:-1])
for i, split in enumerate(splits):
client_indices[i].extend(split.tolist())
# 分布サマリー
for i, indices in enumerate(client_indices):
labels = dataset_labels[indices]
unique, counts = np.unique(labels, return_counts=True)
dist = dict(zip(unique.tolist(), counts.tolist()))
print(f"Client {i}: {len(indices)} samples, dist={dist}")
return client_indices
[プライバシー要件] → federated-learning → model-monitoring
(連合学習) (モデル監視)
│
deep-learning ← transfer-learning
(基盤 NN) (転移学習)
| ファイル | 説明 | 次スキル |
|---|---|---|
fl_strategy_config.json | FL 集約設定 | → サーバー起動 |
dp_training_history.csv | DP 学習履歴 | → model-monitoring |
client_splits.json | 非 IID 分割情報 | → FL クライアント |
| TU Key | ツール名 | 連携内容 |
|---|---|---|
papers_with_code | Papers with Code | 連合学習フレームワーク・ベンチマーク |