Навчання ML-моделей без передачі даних: впровадження Federated Learning

Медичний консорціум із п'яти лікарень хоче навчити модель детекції раку на рентгенограмах. Передача знімків заборонена GDPR та внутрішніми політиками — штрафи за витік сягають 4% річного обороту. Ми впроваджуємо Federated Learning (FL) для таких сценаріїв: кожна лікарня навчає модель локально, а цен

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    998
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1267
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1003

Медичний консорціум із п'яти лікарень хоче навчити модель детекції раку на рентгенограмах. Передача знімків заборонена 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:

  1. Сервер ініціалізує глобальну модель \( w_0 \)
  2. На кожному раунді вибирається підмножина клієнтів (зазвичай 20–50%)
  3. Кожен клієнт навчає модель локально (3–10 епох) і повертає дельту ваг
  4. Сервер агрегує з вагами за розміром датасету: \( 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 проєктів у медицині, фінансах та промисловості. Зв'яжіться з нами для безкоштовної оцінки вашого проєкту — обговоримо архітектуру та терміни. Замовте консультацію вже сьогодні.