2 мая

Конфиденциальное машинное обучение. Библиотека PySyft

Data MiningBig DataМашинное обучениеНаучно-популярное

Хабр, привет!


В этой статье расскажу о Privacy-Preserved Machine Learning. Обсудим зачем и как обеспечивать приватность пользователей при обучении, например, нейросетей.


Большая часть статьи есть пересказ выступлений и лекций Эндрю Траска (Andrew Trask). Он лидер сообщества OpenMined. Это люди, объединенные темой конфиденциальности в машинном обучении. В частности, OpenMined работает над библиотекой PySyft. Это обертка над PyTorch, Tensorflow или Keras для приватного машинного обучения. Мы познакомимся с PySyft по ходу статьи.


Мотивация


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


Уточню, почему анонимизации данных недостаточно. В 2007 Netflix опубликовал 10 миллионов рейтингов фильмов от 500.000 пользователей. Этот датасет был частью конкурса по созданию лучшей рекомендательной системы. В нём имена людей и названия фильмов были заменены на идентификаторы. Однако исследователи смогли установить личность отдельных людей, используя открытые данные с IMDb. Подробнее в оригинальной статье.


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


Remote Execution/Federated Learning


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


Раз данные не идут к модели, то модель идёт к данным. В этом заключается наша первая идея. Отправим нейросеть к пользователям, локально обучимся на их данных и получим модель с обновленными весами обратно. Ещё одной особенностью 'Remote Execution' является возможность параллельного обучения модели, т.е. одновременно на разных устройствах.


Во вступлении я упоминал PySyft — python-библиотеку для приватного машинного обучения. Посмотрим, как этот метод реализован в ней. Нам нужна возможность сказать удаленным устройствам выполнить операции необходимые для глубокого обучения. Таким образом, вместо использования Torch-тензоров, мы будем работать с указателями на тензоры.


# Импортируем PyTorch и PySyft
import torch as th
import syft as sy

# Небольшой хак для переопределения PyTorch-методов
hook = sy.TorchHook(th)

# Создадим "удаленноё" устройство, принадлежащее "удаленному пользователю" - будем называть его Бобом.
bob = sy.VirtualWorker(hook, id="bob")

# В реальности тензоры x и y должны быть у Боба изначально. Здесь только для примера.
x = th.tensor([1,2,3,4,5]).send(bob)
y = th.tensor([1,1,1,1,1]).send(bob)

# Просим Боба удаленно сложить два тензора. 
z = x + y

# Таким образом, у Боба три локальных тензора
bob._objects
# {5102423178: tensor([1, 2, 3, 4, 5]),
#  6031624222: tensor([1, 1, 1, 1, 1]),
#  4479039083: tensor([2, 3, 4, 5, 6])}

# Как только мы запросили тензор обратно, он перестал быть приватным
z = z.get()
z
# tensor([2, 3, 4, 5, 6])

bob._objects
# {5102423178: tensor([1, 2, 3, 4, 5]), 
#  6031624222: tensor([1, 1, 1, 1, 1])}

Обратите внимание на tensor.get(). Здесь мы получаем результат вычисления нейросети. Как понять, что вместе с этим мы не получаем какую-то приватную информацию?


Differential Privacy


Действительно, по измененным весам нейросети можно догадаться, какие данные были у пользователя. Например, если в кишках нашей нейросети был bag-of-words, то достаточно посмотреть, как изменился словарь {"слово": "сколько раз встретилось"}. Чтобы избежать подобного пользователи будут добавлять шум в данные. Differential Privacy — это область, изучающая сколько шуму и как надо добавить.
Рассмотрим пример.


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


Тогда, где-то половина людей даст честный ответ, а остальная половина даст ответ соответственно распределению 50/50. Заметим, что при этом мы не знаем истину про конкретного участника опроса. Однако по результатам данного опроса мы можем восстановить истинное распределение. Предположим, 60% людей ответило 'да'. Мы знаем, что половина ответов случайные. Тогда результаты опроса это: 35% истинных 'да', 25% случайных 'да', 15% истинных 'нет' и 25% случайных 'нет'. Отсюда мы получаем, что истинное распределение это 70% 'да' и 30% 'нет'. То есть мы смогли и сохранить приватность участников опроса и собрать статистические данные.


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


Описанный алгоритм с монеткой довольно базовая идея. В приложениях применяются более сложные алгоритмы, но они выходят за рамки ознакомительной статьи. Для заинтересованных в конце ссылка. Кроме того, на хабре уже упоминалась дифференциальная приватность (тут и тут).


Послесловие


Отсталась небольшая проблема. При наивном 'Remote Execution' мы раскрываем вычисления, которые хотим выполнить на чужой машине. Кроме того, мы раскрываем нашу нейросеть пользователю. Мы раскрываем интеллектуальную собственность.


Но ведь модели и датасеты это просто большие коллекции чисел. А числа можно зашифровать. Например, реализовать подобное можно с помощью Secure multi-party computation или Homomorphic Encryption. Стоит ли разобрать алгоритмы в отдельной статье?


Полезные ссылки:


  • Apple рассказывает, как агрегирует данные об используемых смайликах для улучшения автодополнения. Это ещё один способ аккуратно добавить шум.
  • Синтия Дворк — автор термина "Differential Privacy". У неё есть книга, посвященная этой теме. В ней она разбирает многие алгоритмы для обеспечения приватности.

Источники:


Теги:privacy preserving machine learningприватностьмашинное обучениенейросети
Хабы: Data Mining Big Data Машинное обучение Научно-популярное
+3
1,7k 21
Комментировать
Похожие публикации
Data Engineer
30 ноября 202080 000 ₽OTUS
Машинное обучение
11 декабря 202049 000 ₽Нетология
Комплексное обучение JavaScript
14 декабря 202027 000 ₽Loftschool
BIG DATA с нуля
22 декабря 202019 700 ₽Нетология
Комплексное обучение PHP
11 января 202120 000 ₽Loftschool
Лучшие публикации за сутки