Привет, Хабр! Это моя первая статья здесь, и для начала я хотел бы познакомиться.

Я возглавляю Data Science подразделение компании Platforma. Моя команда занимается разработкой моделей машинного обучения и глубокой аналитикой. Мы создаем продукты на основе продвинутых методов машинного обучения и искусственного интеллекта, являющиеся внутренним «движком» цифровых сервисов. На выходе в Platforma мы создаем инструменты для бизнеса на основе больших данных: от сервисов персонализации и геопространственного анализа до дистанционной оценки имущества. Но сегодня поговорим о задаче, которую бизнесу еще только предстоит решить.


В цифровом мире не получится конкурировать с крупными компаниями, опираясь только на собственные данные. Даже если вы Сбер или Яндекс. Это приведет и потере доли рынка. Чтобы видеть максимально полную картину, нужно комбинировать разные источники, в том числе и базы данных партнеров. Но прямо обменяться данными не получится — российские и международные законы жестко регулируют этот процесс. Раскрытие данных пользователей, все дела. Именно здесь на сцену выходят алгоритмы конфиденциальных вычислений и MPC — технология, которая позволяет делать сводную аналитику легально, без риска раскрытия и «слива» данных.

Проблема миллионеров: обмен данными, не раскрывая их


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

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



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

Что эти две компании хотят от системы вычислений:

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

В криптографии эта задача получила название «проблема миллионеров». Американский исследователь теории информатики Эндрю Яо еще в 1982 году пытался определить, как нескольким миллионерам сравнить свои состояния, не раскрывая реальные цифры. В математику вдаваться не будем, но если интересно, вот оригинал статьи.

Я же постараюсь простыми словами объяснить, как работает протокол конфиденциального вычисления или MPC (multi-party computation). Вместо обмена реальной информацией между серверами ведется обмен «секретами» — исходные данные в них обработаны математическими функциями.

На основе «секретов» на каждом сервере строится две аналитических модели. А в процессе обучения моделей их веса корректируются, при этом градиенты передаются между серверами.



Самый простой вариант: представить число как разность двух целых чисел. На нем и построим пример.
Продолжим с нашими знакомыми компаниями А и Б. Допустим, они хотят построить модель аналитики, основанную на возрасте клиентов. Есть пользователь, ему 20 лет. Это можно представить как разность двух «секретов» 42-22. Число 42 отправляют на сервер компании Б, а на сервере А остается число 22. Зная оба секрета, можно без проблем восстановить исходные данные. Если известен один — то никак не получится.
На сервере Б, допустим, хранится ответ, который также делится на два «секрета». Один присылается на сервер А, второй остается на машине Б. Затем на каждом сервере проводится обучение модели.

Сами по себе модели бесполезны, потому что они обучались на «секретах». Но если взять две модели и просуммировать их веса, то в результате получается рабочая модель, которая учитывает данные обоих серверов. При этом информация осталась конфиденциальной. Профит!

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

При желании можно дополнительно хешировать данные для передачи или разбивать секреты между тремя или четырьмя машинами. Но зачем? Уже базовая механика MPC гарантирует абсолютную защиту данных при передаче и работе с ними.

Зачем секреты: плюсы и минусы подхода


Главный плюс — пользы от совместной работы двух команд гораздо больше, чем при работе отдельно. Синергия, все дела. Это классическая схема win-win, где все участники получают только плюшки:
  • Во-первых, никакого риска утечки данных. Ведь передаются они уже в обработанном и измененном виде. Даже если вдруг уйдут на сторону, с ними ничего не смогут сделать, без второй части секрета это бесполезный набор чисел и знаков.
  • Во-вторых, можно заранее договориться, какой инфой обмениваться и что анализировать. Никаких доступов к базам данных чужим людям открывать не нужно.
  • В-третьих, гарантия, что готовая модель будет истинной. Ведь если коллега по ту сторону решит схитрить и предоставить некорректные данные, то он сам получит неработающую готовую модель. А это бессмысленно.

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

Минусы тоже есть. Сейчас у MPC ограниченный стек технологий, которые можно использовать для построения моделей на «секретах». Чтобы обеспечить нормальную скорость построения модели, нужно использовать полносвязные или сверточные нейронные сети. Сами понимаете, насколько они требовательны к мощности «железа». Можно использовать логистическую регрессию, но для обработки big data также нужны очень мощные серверы и много времени.



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

Самая большая проблема — именно скорость. Даже однослойные-двухслойные нейронные сети обучаются в 100-1000 раз медленнее, чем их аналоги на CPU. Это уже критично. Сложность в том, что построение моделей — интерактивный процесс. Часто приходится менять данные или исходные параметры анализа. А если модель обучается неделю, то даже простейший анализ может растянуться на месяцы.

Есть варианты снизить степень защиты данных ради скорости. К примеру, при максимальной степени защиты секреты формируются числами 2^64. Если уменьшить до 2^32, то процесс обучения ускорится, но защищенность будет чуть ниже. В некоторых случаях есть возможность варьировать количество знаков в цифрах, влияя на скорость.

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

Развитие и перспективы технологии конфиденциальных вычислений


Больше всего над технологией MPC работает Facebook. Спецы соцсети создали платформу с открытым кодом CrypTen, которая сильно облегчает разработку и совершенствование ML-моделей. На GitHub решения от Facebook находятся в свободном доступе. А здесь они рассказывают, как работает технология, и как они используют ее в своей соцсети. Спойлер: чтобы лучше продавать товары и запускать точную рекламу для целевой аудитории.

Но если по-честному, то MPC сегодня — это дело стартапов. Узкие решения для eCommerce и IT разрабатывают небольшие команды. И один такой стартап — наш, российский. Компания UBIC уже больше трех лет развивает технологию конфиденциальных вычислений и добилась в этом серьезных успехов. UBIC уже смогли оптимизировать технологию до уровня, на котором сложные математические модели с большими БД обучаются теперь всего лишь один день. Это ж вообще другой разговор. (На этом месте должны быть аплодисменты).

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

Если суммировать, то MPC — это доступное и относительно простое решение для бизнеса. И как только адепты MPC ускорят построение модели хотя бы до нескольких часов, она станет просто «must have» для любой компании, которая работает с данными.

Скажите, а вам или вашей компании будет полезна технология MPC? Или вы хотите узнать о ней больше? У нас еще много полезной инфы и кейсов, которые мы хотим рассказать.

Комментарии (12)


  1. dkfrmmnt
    16.11.2021 15:59

    А можно подробнее обосновать, почему получится корректная модель у каждого из участников обмена?


    1. sergeygolytsin Автор
      17.11.2021 14:00

      Сама по себе часть модели, которая образуется на сервере одного из участников, не несет какого-либо смыла, поскольку она строится на секретах, и только после объединения весов моделей (сложения) она становится корректной. С нашей стороны тесты показали, что модели, обученные без  MPC и с применением MPC, имеют идентичное качество.


      1. RobertLis
        18.11.2021 16:17

        Верно ли я понимаю, что модели линейные? Трудно представить, что если модель нелинейная, то можно просто сложить веса. Выглядит как магия.


        1. bigdataplatform
          20.11.2021 14:27

          Модели могут быть не только линейные, т.е. поддерживается и LR, и MLP, и даже упрощенная версия RNN.


  1. kovserg
    16.11.2021 17:51

    А что мешает построить 'A' модель которая будет примерно восстанавливать (encoder) данные которые 'Б' не хочет раскрывать или их часть и наоборот?


    1. sergeygolytsin Автор
      17.11.2021 14:02

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


      1. kovserg
        17.11.2021 14:51

        В результате обучения модель по входным данным должна получить что-то на выходе.

        Например секретные данные (username,password). Что мешает обучить модель выдавать по входному username выходной password? И модель может быть избирательной в части обучения например не релевантные username не рассматривать для ускорения процесса.


        1. sergeygolytsin Автор
          20.11.2021 14:48

          Кажется, вы не совсем правильно понимание термин «секреты». Как указано в тексте, «секреты» это не секретные данные (как вы пишете user/pwd), а представление целых чисел (а по МPC все числа переводятся в такой формат) в виде разности двух целых чисел. При этом только одно из двух передается на другой сервер для вычислений. Поскольку каждое число может быть бесконечным количеством способов представлено в виде разности двух чисел (а нашем случае есть ограничение по типу числа), то передаваемые данные сам по себе бессмысленны без своей пары. А значит, и декодировать только одно из них не имеет смысла.


  1. iamwizard
    21.11.2021 20:52

    А что мешает компании "Б" обучить две модели - одну нормальную, и вторую искаженную. Нормальную оставить себе и в сумме с моделью, полученной от компании "А" получать валидный результат. А вот в ответ компании "А" отдать искаженную модель?


    1. quakin
      22.11.2021 10:00

      Присоединяюсь к вопросу.

      Описанный алгоритм опирается на веру в добросовестность партнёра?
      Или всё же есть рабочие способы проверить полученные исходные данные на корректность?


      1. sergeygolytsin Автор
        24.11.2021 16:07

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


    1. sergeygolytsin Автор
      24.11.2021 16:06

      Текущая реализация процесса обучения предполагает синхронное обучение моделей на стороне обоих партнеров. Причем после построения процесс пересылки обученных «половинок» итоговой модели происходит автоматически по алгоритму, прописанному в самой реализации библиотеки по MPC. Поэтому нельзя сделать какую- то свою «половинку» и использовать ее вместо той, что получилась в процесс обучения по MPC.