Logo Craft Homelab Docs Контакты Telegram
Federated Learning — обучение без централизации
Thu Jan 29 2026

Federated Learning: обучение без централизации

Federated Learning (Федеративное обучение) — это распределенный подход к машинному обучению, позволяющий обучать модели на decentralized данных без их централизации. Вместо перемещения данных к модели, модель отправляется к данным, обновления вычисляются локально, а затем агрегируются на центральном сервере. Этот подход решает проблемы конфиденциальности, снижает затраты на передачу данных и позволяет обучать там, где данные по определению не могут быть собраны в одном месте.

Технический вызов: обучение без доступа к данным

Ключевая проблема современного ML — как обучать мощные модели на данных, которые не могут быть централизованы по этическим, юридическим или техническим причинам. Традиционный подход требует сбора всех данных в одном месте, что создает уязвимости для приватности, нарушает законодательные нормы (GDPR, HIPAA) и технически невозможно в сценариях, где данные существуют только на локальных устройствах — пользовательские фото на смартфонах, медицинские записи в клиниках, телеметрия с автомобилей.

Глубокий разбор механики работы

Federated Learning работает по циклическому процессу:

  1. Инициализация: Центральный сервер создает начальную модель и отправляет ее клиентским устройствам.

  2. Локальное обучение: Каждое устройство обучает модель на своих локальных данных, вычисляя градиенты или другие параметры обновления.

  3. Обратная связь: Клиенты отправляют обновления модели обратно на сервер (не сами данные), используя защищенные каналы.

  4. Агрегация: Сервер объединяет обновления от нескольких клиентов с помощью специальных алгоритмов (например, FedAvg — Federated Averaging), создавая улучшенную глобальную модель.

  5. Повторение: Процесс повторяется для нескольких раундов обучения.

Ключевые технические аспекты:

  • Дифференциальная приватность: Для защиты от атак восстановления данных клиентов в обновлениях добавляется контролируемый шум.

  • Селективное участие: Не все клиенты участвуют в каждом раунде, что снижает нагрузку на сеть и устройства.

  • Адаптивная скорость обучения: Разные устройства могут иметь разное количество данных и вычислительные мощности, что требует адаптации скорости обучения.

  • Сжатие градиентов: Для уменьшения сетевой нагрузки обновления модели могут быть сжаты с помощью квантования или спарсификации.

Реализация на практике

Базовая реализация Federated Learning с использованием TensorFlow и TensorFlow Federated:

import tensorflow as tf
import tensorflow_federated as tff

# Загрузка и предобработка данных
def preprocess_fn(x):
    return tf.reshape(x, [-1, 784]) / 255.0

# Создание модели
def create_keras_model():
    return tf.keras.models.Sequential([
        tf.keras.layers.Dense(10, activation='softmax', input_shape=(784,))
    ])

# Конвертация Keras модели в TFF модель
def model_fn():
    keras_model = create_keras_model()
    return tff.learning.from_keras_model(
        keras_model,
        input_spec=preprocess_fn(tf.zeros(shape=[1, 28, 28])).spec,
        loss=tf.keras.losses.SparseCategoricalCrossentropy(),
        metrics=[tf.keras.metrics.SparseCategoricalAccuracy()])
# Создание процесса федеративного обучения
training_process = tff.learning.build_federated_process(model_fn)

# Инициализация процесса
state, metrics = training_process.initialize()

# Симуляция клиентов с их данными
federated_data = [...]  # Список наборов данных от клиентов

# Обучение в течение нескольких раундов
for round_num in range(10):
    state, metrics = training_process.next(state, federated_data)
    print(f'Round {round_num}, metrics={metrics}')

Более продвинутая реализация с использованием FedAvg:

# Определение функции создания модели
def model_builder():
    model = tf.keras.Sequential([
        tf.keras.layers.InputLayer(input_shape=(784,)),
        tf.keras.layers.Dense(10, activation='softmax')
    ])
    return model

# Создание Federated Averaging процессора
federated_averaging = tff.learning.build_federated_averaging_process(
    model_fn=model_builder,
    loss_fn=tf.keras.losses.SparseCategoricalCrossentropy(),
    metrics_fn=lambda: [tf.keras.metrics.SparseCategoricalAccuracy()],
    client_weight_fn=lambda x: tf.constant(1.0)
)

# Запуск процесса обучения
state = federated_averaging.initialize()
for round_num in range(10):
    state, metrics = federated_averaging.next(state, federated_data)
    print(f'Раунд {round_num}: точность = {metrics["accuracy"]}')

Узкие места и компромиссы

Federated Learning, несмотря на преимущества, имеет серьезные ограничения:

  1. Проблема несбалансированных данных: Клиенты могут иметь сильно различающееся количество данных и распределение классов, что приводит к смещению модели в сторону клиентов с большим количеством данных.

  2. Вычислительные ограничения: Мобильные устройства имеют ограниченные ресурсы (батарея, CPU, память), что ограничивает сложность моделей и количество раундов обучения.

  3. Нестабильное сетевое соединение: Требуется надежное соединение между клиентами и сервером, что не всегда гарантировано.

  4. Риски для приватности: Несмотря на дифференциальную приватность, атакующий может попытаться восстановить частные данные через анализ градиентов (например, атака Gradient Inversion).

  5. Сложность развертывания: Нужно управлять версиями модели на множестве устройств, обрабатывать обновления от разных клиентов, решать проблему “зависших” клиентов.

  6. Снижение производительности: Federated Learning обычно требует больше раундов для достижения сопоставимой точности с централизованным обучением из-за шума и несбалансированности.

  7. Проблема “cold start”: Новые клиенты без исторических данных могут представлять проблему для модели.

Когда Federated Learning — правильный выбор

Federated Learning становится незаменимым инструментом в сценариях, где:

  • Данные конфиденциальны или защищены законодательством (медицинские данные, финансовая информация)
  • Данные распределены по множеству устройств, и их централизация экономически нецелесообразна
  • Требуется непрерывное обучение моделей на “живых” данных без нарушения приватности

Однако для задач, где данные могут быть централизованы, а приватность не является приоритетом, традиционные подходы к машинному обучению могут оказаться более эффективными и проще в реализации.

Federated Learning — это компромисс между приватностью, производительностью и сложностью реализации. Прежде чем внедрять его, тщательно оцените преимущества и недостатки в контексте конкретной задачи.