Обучите свою первую модель машинного обучения на частных данных

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

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

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

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

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

Начиная с FELToken

Это руководство совместимо с версией 0.1.0. Мы рекомендуем использовать уже развернутое приложение здесь:



Или вы можете разместить его локально, развернув код:



Метамаск

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

После того, как вы установили MetaMask и наполнили его монетами, вы можете подключить свой кошелек к приложению с помощью кнопки CONNECT. Вы можете найти его в правом верхнем углу приложения FELToken. Убедитесь, что выбрано Polygon Mumbai, и нажмите «Подключиться». Затем вам просто нужно одобрить подключение вашего кошелька.

Создание проекта

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

Чтобы создать проект, начните с нажатия кнопки СОЗДАТЬ ПРОЕКТ в правом верхнем углу, ведущей на страницу создания проекта. На этой странице необходимо заполнить форму, указав основную информацию о проекте:

  • Имя:название проекта (максимум 63 символа).
  • Тип: сейчас существует только один тип проекта.
  • Описание: должно описывать проект и ожидаемый тип и формат данных.

После заполнения этой информации нажмите РАЗВЕРНУТЬ и следуйте инструкциям. Убедитесь, что вы не закрываете вкладку браузера на протяжении всего процесса. Развертывание состоит из трех шагов:

  1. Предоставьте свой открытый ключ. Это необходимо для обеспечения безопасного обмена моделями между поставщиками данных и строителями. Только вы можете расшифровать вещи, зашифрованные вашим открытым ключом.
  2. Разверните проектный контракт. Вам будет предложено подтвердить транзакцию, которая включает оплату комиссии за транзакцию. Развертывание может занять некоторое время (‹1 минуты) в зависимости от того, насколько занята сеть в данный момент.
  3. Зарегистрируйте развернутый контракт проекта у менеджера проекта. Это позволяет отобразить ваш проект в списке проектов. Опять же, вы должны подтвердить транзакцию и дождаться ее обработки.

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

  • Строитель: эта роль позволяет вам определять модели и обучать их работе над проектом.
  • Поставщик данных (неактивный): вы также можете предоставить данные проекту.

Добавление поставщиков данных

Чтобы добавить поставщиков данных в проект, они сначала должны запросить доступ к проекту (пользователь ссылается на адрес кошелька). Это делается через панель управления проекта.

Сначала в панель управления проекта заходит пользователь без роли поставщика данных. Здесь на левой боковой панели в разделе поставщика данных есть кнопка ЗАПРОСИТЬ ДОСТУП. После ее нажатия начинается процесс запроса. Пользователю будет предложено предоставить открытый ключ (используемый для обмена зашифрованными моделями) и отправить транзакцию запроса.

Затем запрос должен быть принят другим поставщиком данных (например, создателем проекта). Это также делается через панель управления проектом. Любой поставщик данных, просматривающий информационную панель, увидит список запросов с кнопками принятия или отклонения рядом с ними. Отклонение запросов довольно просто: вы просто нажимаете кнопку и подтверждаете транзакцию в MetaMask. Для принятия запроса требуется еще один шаг. Вам необходимо получить общий секрет поставщиков данных и поделиться им с новым поставщиком данных. После нажатия кнопки вам нужно нажать Расшифровать во всплывающем окне MetaMask, и все остальное будет сделано за вас.

Запуск кода поставщика данных

Наконец, когда вы добавлены в проект в качестве поставщика данных, вам нужно запустить локальный клиентский код, который будет следить за смарт-контрактом и обучать модели на локальных данных. Для этого вам сначала потребуется установить Python 3.9+. Затем вы можете установить клиентский код, используя pip как:

pip install git+https://github.com/FELToken/federated-learning-token

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

felt-node-worker --chain 80001 --contract 0x2249f88C04B09e15B08E722f205d679C6AFC0f4E --account main --data example_data.csv

Вы должны изменить example_data.csv на путь, ведущий к вашим данным в формате CSV. Прямо сейчас код ожидает простой CSV-файл, использующий , в качестве разделителя без каких-либо заголовков. Последний столбец файла будет использоваться как Y (целевые значения).

Если вы хотите просто протестировать код, вы можете заменить example_data.csv на test. Это загрузит демонстрационный набор данных.

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

Далее вас попросят предоставить токен API web3.storage. Этот токен можно получить бесплатно, вам просто нужно зарегистрироваться. Затем этот токен используется для хранения зашифрованных моделей в IPFS с использованием Filecoin. Создайте учетную запись и следуйте инструкциям по получению токена API.

Переменные среды (необязательно)

Если вы планируете чаще запускать клиентский код, вы можете сохранить закрытый ключ и токен API в качестве переменной среды. После этого клиентский код будет использовать их автоматически. Вы можете установить эти переменные как:

export PRIVATE_KEY='0xc...'
export WEB3_STORAGE_TOKEN='ab...'

Обучение моделей машинного обучения

Наконец то, чего мы так долго ждали — определение моделей машинного обучения. В настоящее время приложение поддерживает только библиотеку scikit-learn.

Если вы хотите создать план обучения для обучения модели, у вас должна быть роль строителя. Роль строителя можно получить так же, как и роль поставщика данных, запросив доступ на панели управления проекта. Роль строителя автоматически дается создателю проекта. Получив соответствующую роль, вы можете нажать кнопку СОЗДАТЬ МОДЕЛЬ, после чего откроется страница определения плана обучения.

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

При определении плана обучения необходимо указать несколько полей:

  • Модель — модели хранятся в IPFS, а в плане обучения хранится только их эталон (CID). У вас есть два варианта выбора модели обучения.
  • Предопределенная модель  – вариант номер один — выбрать одну из предопределенных моделей (рекомендуется).
  • Пользовательская модель — вы можете определить свою собственную модель. Затем вам просто нужно предоставить CID вашей модели.
  • Количество раундов: один раунд состоит из обучения модели каждым поставщиком данных и усреднения всех моделей. Этот процесс можно повторять несколько раз для достижения наилучших результатов.
  • Награда узла — награда узла дается каждому узлу после завершения одного раунда (на данный момент просто оставьте его 0, так как для отправки этих вознаграждений вам потребуются токены FELToken)

После заполнения этой информации вы можете нажать кнопку РАЗВЕРНУТЬ. Затем вам нужно будет одобрить транзакцию в MetaMask, и все. Вы создали план обучения, который теперь будет выполняться поставщиками данных. Вы можете следить за ходом выполнения плана обучения в панели управления проекта.

Определение пользовательской модели

Определить пользовательскую модель относительно просто. Во-первых, вам нужно установить пакет felt pip, как показано выше (эта статья была протестирована для версии 0.1.0):

pip install git+https://github.com/FELToken/federated-learning-token

Тогда вам просто нужно выбрать модель из scikit-learn. Например, здесь мы будем использовать линейную регрессию с регуляризацией L2, установив пользовательское значение альфа. После определения модели вам просто нужно передать ее в функцию upload_model(model). Просто убедитесь, что переменная окружения WEB3_STORAGE_TOKEN определена, как показано в главе о поставщике данных.

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

Использование окончательной модели

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

Нажав кнопку СКАЧАТЬ, вы получите модель. Модель зашифрована. Перед началом загрузки вы увидите всплывающее окно MetaMask с просьбой расшифровать данные (модель). После одобрения расшифровки вы должны получить файл model.joblib. В вашем коде Python вы можете использовать этот файл следующим образом:

Важно! Для запуска этого кода вам потребуется правильная версия библиотек joblib и scikit-learn. Вы можете найти их в Требованиях к пакету FELT.

joblib==1.1.0
numpy==1.21.0
scikit-learn==1.0.1

Заключение

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

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Присоединяйтесь к нашему сообществу Discord.