Это краткий обзор Учебника Duet от Эндрю Траска, который был представлен на OpenMined Privacy Conference 2020.

Краткое введение в федеративное обучение и его ограничения

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

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

Duet и его новый подход к удаленной науке о данных

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

Пошаговое руководство по коду

Давайте рассмотрим несколько основных примеров кода, чтобы понять, как Duet можно использовать для удаленной обработки данных.

Примечание. Все фрагменты кода, которые должны выполняться владельцами данных, будут помечены как «Владелец», а фрагменты, которые должны выполнять специалисты по данным, будут помечены как «Ученый».

Часть 1 — Настройка соединения Duet

(Владелец) — запустите сервер Duet на компьютере владельца.

Вы можете увидеть смену контроля с самого начала. В отличие от традиционных федеративных подходов к обучению, в Duet соединение инициирует владелец. Ученый не может получить доступ ни к чему, если владелец не пригласит его на совместную тренировку.

При запуске сеанса Duet будет сгенерирован идентификатор сеанса, которым необходимо поделиться с ученым, чтобы присоединиться к сеансу.

Предположим, что идентификатор сеанса равен xyxyxyxyxyxyxyxyxyxyxyxyxyxyxyxy.

(Ученый) – используйте идентификатор сеанса, чтобы присоединиться к сеансу Duet

При выполнении будет возвращен идентификатор клиента, который владелец должен ввести в приглашении в конце. Это, наконец, соединит две стороны.

Часть 2 — Настройка модели для дистанционного обучения

Большую часть работы здесь должен выполнить ученый.

(Ученый)- Создайте простую сеть свертки. Обратите внимание, что мы делаем это так же, как PyTorch с двумя важными отличиями.

  • Мы наследуем от sy.Module вместо nn.Module
  • Нам нужно передать переменную с именем torch_ref, которую мы будем использовать внутри для любых вызовов, которые обычно относятся к torch.

(Ученый) — создание локальной модели с использованием локальных копий torch и torchvision.

Часть 3 — Отправка локальной модели партнеру Duet

После того как ученыйинициализирует модель, он может отправить ее своему партнеру по Duet для обучения. Они также могут запросить у партнера Duet дополнительные сведения, такие как доступность графического процессора, через Duet API.

(Ученый) – запросить у владельца сведения о наличии графического процессора.

(Владелец) — в конце концов владелец может видеть все доступные запросы, используя duet.requests.pandas. Они могут вручную одобрять или отклонять запросы, используя accept() или deny().
Например, первый запрос в очереди можно утвердить следующим образом: duet.requests[0].accept()

Кроме того, владелец может заранее определить обработчики, которые будут автоматически утверждать или отклонять запросы.

Обратите внимание, что владелец добавил обработчик для loss, который будет отклонять запрос. Имейте это в виду, так как мы вернемся к этому позже.

Примечание. Аргумент name для запросов, отправленных ученым, и обработчиков, добавленных владельцами, должен совпадать, иначе обработчики не будут работать. Таким образом, обе стороны должны участвовать в открытом и честном общении, иначе тренировка провалится.

Часть 4 — Настройка тренировочного процесса

(Scientist) – определите функцию train() для удаленной модели на устройстве владельца.

Что ж, код здесь определенно выглядит громоздким. Итак, давайте разберем его по частям.

  1. Сначала проверяется атрибут is_local модели, чтобы убедиться, что модель, переданная функции, является удаленной, а не локальной моделью.
  2. Как и при стандартной операции обучения, мы извлекаем данные, пропускаем их через модель и вычисляем потери. Однако обратите внимание на различие здесь. Мы используем библиотеку удаленного факела, как указано torch_ref в приведенном выше фрагменте.
  3. Поскольку операции выполняются на удаленной машине, у нас нет доступа к какой-либо обучающей информации, если мы явно не запросим на это разрешение. Допустим, мы хотим отслеживать потери на тренировках, запрашиваем разрешение владельца с помощью Duet API.

Мы почти закончили. Теперь, если вы вернетесь к части 3 этой статьи, вы заметите, что владелец уже добавил обработчик, чтобы отклонить запрос ученого на просмотр потерь обучения.

Разве это не прекрасно? Владелец имеет полный контроль над тем, какие данные доступны другой стороне Duet.

Примечание. Я пропустил часть кода и части процесса обучения модели, чтобы статья была краткой. Тем не менее, я рассмотрел все концепции, которые вам нужно знать, чтобы начать работу с Duet.

Полный код обучения и логического вывода см. в примерах записных книжек Duet.

Отказ от ответственности. Duet все еще находится в разработке, и API может измениться в будущих версиях. Пожалуйста, следите за официальным репозиторием PySyft.

Первоначально опубликовано на https://blog.openmined.org 28 января 2021 г.