Медичний консорціум із п'яти лікарень хоче навчити модель детекції раку на рентгенограмах. Передача знімків заборонена GDPR та внутрішніми політиками — штрафи за витік сягають 4% річного обороту. Ми впроваджуємо Federated Learning (FL) для таких сценаріїв: кожна лікарня навчає модель локально, а центральний сервер агрегує лише оновлення ваг. Економія на передачі даних сягає 50–80%, і приватність зберігається.
Federated Learning — не просто технологія, а архітектурний підхід до розподіленого навчання. Дані залишаються на пристроях (серверах лікарень, смартфонах, промислових контролерах), а центральний вузол отримує лише дельти градієнтів. Це забезпечує відповідність регуляторам (GDPR, CCPA) та відкриває сценарії, де дані фізично неможливо передати.
Як Federated Learning вирішує проблему приватності даних?
У класичному ML дані стікаються в одне сховище — це ризик. FL перевертає процес: модель відправляється до даних, а не навпаки. Кожен клієнт отримує поточну глобальну модель, донавчає на своїх зразках і повертає оновлені ваги. Сервер усереднює ваги за формулою FedAvg: \( w_{t+1} = \sum_i \frac{n_i}{n} w_i^t \), де \( n_i \) — розмір датасету клієнта. Жоден сирий приклад не покидає периметр.
Коли FL дає максимальний ефект?
Сценарії з жорсткими вимогами до приватності: медицина (діагностика, геноміка), фінанси (антифрод, скоринг), мобільні пристрої (персоналізація). Особливо ефективний FL при великому розкиді даних — наприклад, для рідкісних захворювань кожна лікарня має лише кілька випадків, а спільна модель бачить всю вибірку. FL-модель на 10 лікарнях перевершує локальні на 8% за AUC (0.94 проти 0.87) — це порівняння на користь підходу.
FedAvg — базовий алгоритм
Алгоритм Federated Averaging ( McMahan et al., 2017 ) — стандарт FL:
- Сервер ініціалізує глобальну модель \( w_0 \)
- На кожному раунді вибирається підмножина клієнтів (зазвичай 20–50%)
- Кожен клієнт навчає модель локально (3–10 епох) і повертає дельту ваг
- Сервер агрегує з вагами за розміром датасету: \( w_{t+1} = \sum_i \frac{n_i}{n} w_i^t \)
Реалізація на Python з фреймворком Flower
import flwr as fl import torch from typing import List, Tuple, Dict import numpy as np class MedicalModelClient(fl.client.NumPyClient): def __init__(self, model, train_loader, val_loader): self.model = model self.train_loader = train_loader self.val_loader = val_loader def get_parameters(self, config) -> List[np.ndarray]: return [param.data.numpy() for param in self.model.parameters()] def set_parameters(self, parameters: List[np.ndarray]): for param, new_param in zip(self.model.parameters(), parameters): param.data = torch.tensor(new_param) def fit(self, parameters, config) -> Tuple[List[np.ndarray], int, Dict]: self.set_parameters(parameters) optimizer = torch.optim.SGD(self.model.parameters(), lr=config.get("lr", 0.01)) local_epochs = config.get("local_epochs", 3) self.model.train() for epoch in range(local_epochs): for batch in self.train_loader: optimizer.zero_grad() loss = self.model(batch) loss.backward() optimizer.step() return self.get_parameters(config), len(self.train_loader.dataset), {} def evaluate(self, parameters, config) -> Tuple[float, int, Dict]: self.set_parameters(parameters) loss, accuracy = test(self.model, self.val_loader) return float(loss), len(self.val_loader.dataset), {"accuracy": float(accuracy)} class FedAvgWithDP(fl.server.strategy.FedAvg): """FedAvg with Differential Privacy""" def aggregate_fit(self, server_round, results, failures): aggregated_params, aggregated_metrics = super().aggregate_fit(server_round, results, failures) if aggregated_params is not None: noise_multiplier = 0.1 for param in fl.common.parameters_to_ndarrays(aggregated_params): noise = np.random.normal(0, noise_multiplier, param.shape) param += noise return aggregated_params, aggregated_metrics strategy = FedAvgWithDP( min_fit_clients=5, min_evaluate_clients=3, min_available_clients=10, fraction_fit=0.5, ) fl.server.start_server( server_address="0.0.0.0:8080", strategy=strategy, config=fl.server.ServerConfig(num_rounds=50) ) Differential Privacy у FL
DP гарантує, що за глобальною моделлю не можна визначити, чи брав участь конкретний клієнт. Додаємо Gaussian noise до агрегованих ваг з параметром ε (чим менший ε, тим сильніший захист). Реалізація через Opacus:
from opacus import PrivacyEngine privacy_engine = PrivacyEngine() model, optimizer, train_loader = privacy_engine.make_private_with_epsilon( module=model, optimizer=optimizer, data_loader=train_loader, epochs=local_epochs, target_epsilon=5.0, target_delta=1e-5, max_grad_norm=1.0, ) Що входить у реалізацію FL-системи під ключ?
| Компонент | Опис | Терміни |
|---|---|---|
| Аналіз даних та моделювання | Оцінка розподілу даних, вибір архітектури (CNN/Transformer) | 3–5 днів |
| Розгортання FL-інфраструктури | Встановлення Flower/PySyft, налаштування комунікації (gRPC, TLS) | 2–4 дні |
| Інтеграція з джерелами даних | Підключення до лікарняних PACS, банківських API, IoT-шлюзів | 5–7 днів |
| Налаштування приватності | DP з ε=5, Secure Aggregation, аудит моделі | 3–5 днів |
| Тестування та оптимізація | A/B-тест проти централізованого навчання, налаштування hyperparams | 5–8 днів |
| Документація та навчання | Model card, інструкції для операторів, навчання команди | 2–3 дні |
| Підтримка після запуску | Моніторинг, ретрейнінг, оновлення версій | 1 місяць включено |
Типові метрики FL-системи
| Метрика | Типове значення | Ціль |
|---|---|---|
| Communication efficiency (раунди до target accuracy) | 50–200 раундів | <100 раундів |
| Accuracy gap (різниця з централізованим) | 1–5% | <3% |
| Privacy budget (ε, δ)-DP | (5, 1e-5) | ε <5 |
| Participation rate | >95% | >98% |
Чому FL може бути повільнішим за централізоване навчання?
Основні затримки: комунікація між клієнтами та сервером (особливо при тисячах пристроїв), stragglers (повільні клієнти), неоднорідність даних. Рішення:
- Gradient compression (Top-k sparsification, 8-bit quantization) — знижує трафік у 10 разів
- Асинхронне оновлення (FedAsync) — сервер не чекає всіх клієнтів
- Клієнтська вибірка — достатньо 20–50% клієнтів на раунд для збіжності
Приклад з практики
Медичний консорціум із 10 лікарень навчив модель детекції раку на рентгенограмах. Без FL найкраща окрема лікарня показала AUC 0.87. З FL AUC зросла до 0.94 — приріст 8% без жодної передачі даних пацієнтів. Проєкт потребував 4 тижні на інтеграцію та 50 раундів навчання.
Наша команда впроваджує FL з 2018 року, реалізувала понад 20 проєктів у медицині, фінансах та промисловості. Зв'яжіться з нами для безкоштовної оцінки вашого проєкту — обговоримо архітектуру та терміни. Замовте консультацію вже сьогодні.







