Хотите интеллектуальное машинное обучение? Это круто, но насколько на самом деле защищены ваши данные? А что, если бы вы могли получить преимущества, не допуская утечки ваших данных? Мы взглянем на федеративное обучение и поймем, как оно работает. Мы также рассмотрим несколько статей и их мнения по этому поводу, а также изучим библиотеку Syft.

Почему это проблема?

Подумайте об этом с точки зрения приложения, которое связывает вас с вашим врачом. Это отличное приложение, которое даже может прогнозировать будущие встречи, а иногда даже предлагать общие лекарства. И вот в один прекрасный день компания продается, и все ваши данные находятся в чужих руках. И не только медицинская информация, но и то, что алгоритм глубокого обучения узнал о вас и вашем поведении. Просто конфиденциальность данных отлично подходит для стандартных данных, таких как медицинские отчеты и т. Д. Но как насчет алгоритма DL? А как насчет модели, которая узнает, как вы говорите, как вы пишете друзьям, какая еда вам нравится?

Страшно, правда? Теперь давайте посмотрим, как мы можем не допустить, чтобы Компания X располагала о вас больше информации, чем вы о себе.

Присоединяйтесь к федеративному обучению

Барабан ... Давайте сначала поймем, что мы хотим делать. Рассмотрим приложение для клавиатуры. Допустим, у нас 200 пользователей нашего приложения для клавиатуры. (К сожалению, не очень популярный). Теперь это интеллектуальная клавиатура, и со временем она узнает, как набирает пользователь, какие слова он использует, и даже может предсказать, что они могут сказать в конкретном предложении. Мы хотим убедиться, что в случае утечки никто не сможет идентифицировать уникальную модель для пользователя.

Вы можете подумать, эй, это легко. Давай просто обучим сеть на их телефонах! Ты прав. Почти. Проблема только в том, что наши телефоны не могут позволить себе обучить всю модель. А если использовать предварительно обученный? Ну .. прогнозы просто недостаточно персонализированы.

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

Ну вот ... назовем это федеративным обучением :)

P.S (Пример клавиатуры взят из Клавиатуры Google)

Что это за магия?

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

  1. Получить данные (надеюсь, много)
  2. Предварительная обработка (или очистка) данных
  3. Найти / создать архитектуру
  4. Обучите модель, используя данные (1) и архитектуру (3). Этот шаг выполняется один раз. А затем периодически обновляется по мере изменения данных с течением времени. Имейте это в виду.
  5. Распространите модель среди n пользователей
  6. Соберите данные о том, насколько хороша модель. (Пока, конфиденциальность)
  7. Отправьте эти данные обратно в основную модель. 7 (# новый). Найдите разницу между исходной моделью и параметрами индивидуальной. Сделайте это для нескольких пользователей. Удалите идентифицирующую информацию. 7.1 (# новое). Агрегировать (например, усреднить) информацию, а затем отправить ее в основную модель.
  8. Переобучить модель на новых данных


Ура! Что это значит?

  • Вся ваша информация хранится локально и никуда не отправляется
  • Сохраняет ваши персональные данные от утечки
  • Удаляет все связи с вами
  • Позволяет обновлять и улучшать модель без ущерба для конфиденциальности
  • Никто не владеет вашими данными, кроме вас.

Могу я добавить это к моей модели?

Да! Есть много способов, но самый простой - использовать библиотеку Syft в Pytorch. Это так же просто, как добавить в код несколько строк.

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

  1. Взгляните на эту статью Open Mined
  2. Давайте возьмем простую архитектуру с 2 слоями Conv и 2 линейными (полностью связанными) слоями.
  3. Импортируйте библиотеку (вместе с другими библиотеками pytorch) и добавьте 2 пользователей
import syft as sy
hook = sy.TorchHook(torch)
bob = sy.VirtualWorker(hook, id="bob")  # person1
alice = sy.VirtualWorker(hook, id="alice")  # person2
  1. Измените таким образом загрузчик данных поезда pytorch. Тест не меняется, потому что он локальный.
train_loader = sy.FederatedDataLoader( # this is now a FederatedDataLoader
    datasets.MNIST('/home/eragon/Documents/datasets', train=True, download=True,
            transform=transforms.Compose([
                       transforms.ToTensor(),
                       transforms.Normalize((0.1307,), (0.3081,))
                   
            ]))
    .federate((bob, alice)), # This will simulate a federated learning system
    shuffle=True, **kwargs )
  1. Измените основной цикл обучения следующим образом
def train(args, model, device, train_loader, optimizer, epoch):
    model.train()  # Setting model to train
    device = torch.device("cuda")  # Sending to GPU
    for batch_idx, (data, target) in tqdm(enumerate(train_loader)):
        model.send(data.location)  # Send to location (worker)
        data, target = data.to(device), target.to(device)
        optimizer.zero_grad()  # Reset grads
        output = model(data)  # Passing batch through model

        loss = F.nll_loss(output, target )

        loss.backward()  # Backprop
        optimizer.step()  # Pass through optimizer
        model.get()  # Get it back

        if batch_idx % args.log_interval == 0:
            loss = loss.get()
            if args.dry_run:
                break
  1. Тестовый цикл остается прежним
  2. Обучите модель !!
  3. Напишите об этом сообщение в блоге и плачьте, когда его никто не читает

Отлично, так где это используется?

Его можно использовать во многих местах, но пока он все еще находится на стадии тестирования. Хотя было несколько первых последователей. Вот некоторые из них:

  • Клавиатура Google (Gboard): они использовали ее для обновления своих прогнозов и изучения слов, которых не было в исходном наборе данных (например, lmao).
  • Цифровое здоровье Компании Бумага; Огромное обещание здесь
  • Военные (очевидно, не уверен в каких-либо вариантах использования, но я читал, что он использовался)
  • Такие компании, как OpenMined (создавшая библиотеку), Nvidia, Google, Apple и т. Д.

Используй это!

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

Спасибо! Обращайтесь, если у вас есть какие-либо вопросы.

Ресурсы

  • Блог OpenMined
  • Nvidia
  • Unite.ai
  • Блог Google
  • Вики
  • Цифровое здоровье: Rieke, N., Hancox, J., Li, W. et al. Будущее цифрового здравоохранения с федеративным обучением. npj Digit. Med. 3, 119 (2020). Https://doi.org/10.1038/s41746-020-00323-1
  • Gboard: Чен, М., Мэтьюз, Р., Оуян, Т., и Бофайс, Ф. (2019). Федеративное изучение слов вне словарного запаса. Препринт arXiv arXiv: 1903.10635. "Бумага"
  • Чен, М., Мэтьюз, Р., Оуян, Т., и Бофайс, Ф. (2019). Федеративное изучение слов вне словарного запаса. Препринт arXiv arXiv: 1903.10635.

Получите доступ к экспертному обзору - Подпишитесь на DDI Intel