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

Ожидается, что читатель имеет базовое представление о машинном обучении и особенно о глубоком обучении, но даже если нет, это все равно может быть немного интересно ☺️

Вы можете найти ссылку Github на пример кода в этой статье здесь.

Федеративное обучение

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

Почему федеративное обучение?

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

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

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

К преимуществам федеративного обучения относятся:

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

Что такое федеративное обучение?

Федеративное обучение – это стратегия, при которой вместо отправки данных в центральное место для обучения мы обучаем модели локально у владельцев данных, а затем вместо этого передаем обученные модели.

На Рисунке 1 выше вы можете увидеть простую иллюстрацию того, как данные обычно собираются от владельцев данных, данные централизованно объединяются в набор данных и, наконец, модель машинного обучения обучается на наборе данных.

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

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

В следующем разделе мы поиграем с набором данных MNIST[1] с помощью серии экспериментов, которые, как мы надеемся, смогут подчеркнуть сильные стороны федеративного обучения.

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

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

Шаг 1. Создание глобальной модели
Сначала мы создаем глобальную модель в центральном расположении.

Шаг 2. Передача модели владельцам данных
Затем копия глобальной модели передается всем владельцам данных.

Шаг 3. Обучение моделей у владельцев данных
На этапе 3 каждый владелец данных обучает полученную локально модель машинного обучения на своих собственных данных.

Шаг 4. Передача обученных моделей от владельцев данных
Когда владельцы данных завершат обучение, обученные модели отправляются обратно в центральное расположение.

Шаг 5. Построение глобальной модели на основе моделей владельцев данных
И, наконец, на последнем этапе модели всех владельцев объединяются в новую глобальную модель, которая заменяет модель, созданную в шаг 1. Комбинацию можно выполнить по-разному, но в нашем случае мы создаем новую глобальную модель, агрегируя взвешенные параметры от всех владельцев данных.

PS: параметры здесь относятся к весам в нейронной сети, и они взвешиваются на основе доли глобальных данных, которыми владеет каждый владелец данных.

После завершения шага 5 цикл начинает новый раунд с шага 2, где новая глобальная модель отправляется всем владельцам данных, и цикл продолжается до тех пор, пока не будет достигнута желаемая производительность модели.

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

Данные

В нашем эксперименте мы будем использовать набор данных MNIST. Это предварительно размеченный набор данных, состоящий из 70 000 изображений рукописных чисел размером 28x28 пикселей. Набор данных содержит изображения всех 10 чисел от 0 до 9, что дает нам 10 классов.

Для имитации федеративного обучения мы создадим 8 владельцев данных и центральный сервер. 8 владельцев данных владеют частями набора данных MNIST, в то время как центральный сервер не владеет никакими данными.

В реальном проекте данные, которыми владеют разные владельцы, будут различаться как по количеству данных, которыми владеет каждый владелец, так и по типу данных, которыми владеют разные владельцы. Чтобы проиллюстрировать это, мы рассмотрим 3 сценария, в которых мы распределили набор данных MNIST 3 различными способами.

Сценарии федеративного обучения

В сценарии 1 каждый владелец данных владеет одинаковым объемом данных, и данные распределяются между владельцами поровну.

На рисунке выше мы видим иллюстрацию того, как данные распределяются в сценарии 2. В отличие от сценария 1, количество данных, которым владеет каждый владелец, различается. Например, у владельца 1 гораздо больше данных, чем у владельцев 6, 7 и 8.

В последнем сценарии, показанном на рис. 7, каждому владельцу принадлежит одинаковое количество изображений, но теперь разное количество различных изображений. Например, у владельца 1 почти нет изображений числа ноль, в отличие от владельца 8, у которого их много.

В следующих разделах мы проведем эксперимент по объединенному обучению для всех этих сценариев и обсудим различные последствия, связанные с ними.

Пример кода

Во-первых, давайте посмотрим, как выглядит код для нашей симуляции.

Мы начинаем с извлечения набора данных MNIST, распределяя метки и образцы по их собственным массивам и нормализуя изображения до значения от 0 до 1. Затем мы разделяем данные на наборы для обучения и проверки с распределением 70/30 соответственно.

В приведенном выше фрагменте кода мы видим, как мы создаем 8 владельцев данных. Во-первых, мы создаем класс, который позаботится о данных, метках и модели для каждого отдельного владельца данных. Затем мы делим все наши тренировочные данные на 8 фрагментов одинакового размера, используя функцию «chunk_data» (вы можете увидеть, как это работает здесь).

Наконец, мы используем эти «фрагменты данных» для создания экземпляров класса DataOwner и даем каждому владельцу данных временную модель с помощью функции create_simple_model (см. фрагмент кода ниже). Эта модель позже будет заменена моделью, сделанной в центральной локации.

В приведенном выше фрагменте кода у нас есть фактический цикл федеративного обучения.

Мы начинаем с создания глобальной модели, затем внутри фактического цикла мы получаем веса глобальной модели и «передаем» их всем владельцам данных, шаг 2 на рисунке 3. После этого мы обучаем модели владельцев данных индивидуально самостоятельно. данные с помощью функции fit_model_to_data.

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

Наконец, мы создаем новые веса для глобальной модели, суммируя веса каждого владельца, умноженные на их коэффициент масштабирования.

Полученные результаты

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

Сценарий 1

В сценарии 1 все владельцы данных имеют одинаковый объем данных и четное количество изображений различных рукописных чисел.

На рисунке выше мы видим 9 графиков. Пунктирная линия показывает точность глобальной модели, обученной посредством федеративного обучения. 8 сплошных линий показывают точность, которой достиг бы каждый отдельный владелец данных, если бы он обучал одну и ту же модель индивидуально на своих собственных данных без федеративного обучения. Мы видим, что точность глобальной модели составляет около 98%, в то время как точность моделей владельцев данных составляет около 95%.

Сценарий 2

В сценарии 2 мы неравномерно распределили объем данных между владельцами данных, но внутри данных каждого владельца данных распределение изображений примерно равное.

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

Сценарий 3

В сценарии 3 каждый владелец данных имеет одинаковое количество изображений, но, в отличие от других сценариев, у них разное количество изображений.

На рисунке выше мы видим, что теперь существует большая вариация в том, насколько хорошо работают модели владельцев данных. Особенно нижний график (серая линия) показывает, что владелец данных 8 достиг точности только около 35%. Но даже при большом разбросе данных владельцев данных мы видим, что глобальная модель работает так же, как и глобальные модели в сценариях 1 и 2, с точностью около 98%.

Это означает, что даже если владельцы данных работают плохо по отдельности, общая глобальная модель будет работать очень хорошо во всех сценариях!

Сценарий матрицы путаницы 3

Поскольку сценарий 3 особенно интересен из-за его применимости в реальных условиях, в этом разделе мы более подробно рассмотрим результаты.

Мы видим, что владелец данных 8 имеет очень низкую точность модели (около 35%), потому что владелец в основном имеет данные только от 3 из 10 классов. Далее мы хотим исследовать, может ли даже этот владелец данных предложить что-то положительное другим владельцам данных.

Чтобы изучить этот аспект, мы будем использовать матрицу путаницы. Это метод визуализации результатов прогнозов моделей на проверочном наборе. В матрице мы видим, сколько раз модель предсказывала класс в столбцах, и какому классу фактически принадлежат предсказанные значения в строках. Идеальная модель будет иметь значения только по диагонали.

В матрице путаницы на рисунке выше мы видим результат модели владельца данных 8 в наборе проверки. Мы видим, что модель хорошо распознает числа, которые есть в ее наборе данных, но когда дело доходит до чисел 6–9, она ужасна. Однако это понятно, учитывая, что владелец данных не имеет изображений этих чисел в своем наборе данных, как показано на рисунке 12.

На рисунке выше мы видим матрицу путаницы для владельца данных 1. У этого владельца данных есть модель с точностью 95%, но, как мы видим, она не соответствует предсказанию нулей (см. строку 1, столбец 1). Из 2107 изображений правильно классифицировано только 1501.

Наконец, мы видим матрицу путаницы для глобальной модели. Здесь мы видим, что модель в целом хорошо предсказывает все числа в проверочном наборе.

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

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

Возможные улучшения и дальнейшая работа

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

Мы также решили создать DNN (Dense Neural Network) в качестве модели для классификации изображений. Это не самая подходящая форма модели машинного обучения для этой проблемы, и другие результаты могли бы быть получены, если бы, например, использовалась CNN (сверточная нейронная сеть). Неясно, повлияло бы это на расход времени, возможно, модель могла бы достичь более высокой точности даже быстрее, чем та, что была создана в этом эксперименте?

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

Использованная литература:

[1]: https://www.openml.org/search?type=data&sort=runs&id=554&status=active