Хорошо, прежде чем мы продолжим, давайте настроим наш поток, в котором мы будем двигаться -

  • Краткое введение в модульную арифметику
  • Техника обмена секретами
  • Зашифрованное глубокое обучение с помощью pysyft

Модульная арифметика - почему она здесь важна?

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

Но спросите человека, который не умеет читать на часах, и он может ответить 17:00, но эй, у нас нет 17 часов!

Итак, заметили ли вы, что когда вы добавляете 15 + 2, вы получаете 17, но дело в том, что часы работают с арифметикой mod 12, также представленной как «%».

Помните, что классическая арифметика учит нас, что если мы сложим любое число «a + b»
, то получим результат, который будет больше, чем сами числа, но это не относится к модульной арифметике. .

Давайте посмотрим на это в контексте приведенного выше примера: когда мы берем 17% 12 или 17 mod 12, мы получаем 5, что также находится в диапазоне менее 12.

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

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

Техника передачи секретов

Давайте посмотрим на это более питоническим способом (вы узнаете увлекательные вещи о том, как модульная арифметика помогает в шифровании чисел, позволяя нам тайно выполнять вычисления над ними 🤐):

Мы видим, что на самом деле мы складываем 5 и 3 вместо 15 и 13, тем самым шифруя фактические числа и аналогично для вычитания.

Итак, допустим, мы хотим выполнить вычисления над некоторыми числами, но сохранить их в секрете.
Итак, мы берем число, скажем 5, а затем разделяем это число, используя простую формулу, показанную ниже:

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

Теперь мы зашифровали здесь «x».

Но подождите, как это расшифровать?

Есть простой элегантный способ сделать это в модульной арифметике -

суммируем все акции и берем поле мода, чтобы вернуть наш номер.

Зашифрованное глубокое обучение с Pysyft

Какое отношение это имеет к глубокому изучению моделей?

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

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

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

Итак, сначала нам нужно импортировать все наши пакеты, чтобы мы могли начать.

(при условии, что у вас установлен pysyft, если пока не зайдите в colab)

Теперь нам нужно создать хук для pytorch, чтобы связать его с Pysyft, чтобы расширить функциональные возможности pytorch, чтобы мы могли использовать его для методов pysyft.
Также мы создаем несколько воркеров (с именами client, bob и alice).
Мы определяем crypto_provider, который предоставляет все криптопримитивы, которые могут нам понадобиться.

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

Хорошо, теперь основная настройка завершена.

Нам нужно сначала загрузить данные, чтобы мы могли обучить нашу модель и получить вывод позже.

Здесь для простоты мы выбрали набор данных MNIST.

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

В этот момент давайте оглянемся и поймем, что происходит.

Совместное использование секрета, которое мы обсуждали ранее, используется здесь для частного обмена набором данных между рабочими процессами, которые мы создали с помощью встроенной функции pysyft «fix_prec ()».

Выдержка из блога openmined:

«SMPC использует криптографические протоколы, которые требуют работы с целыми числами. Мы используем абстракцию тензора PySyft для преобразования тензоров PyTorch Float в тензоры с фиксированной точностью, используя .fix_prec(). Например, 0,123 с точностью 2 округляет до 2-го десятичного знака, поэтому сохраненное число является целым числом 12. "

Хорошо, мы определим нашу модель и обучим ее на наборе данных MNIST.

Начнем тренировку с 10 эпох.

Теперь наша модель обучена 🎉

Теперь нам нужно использовать его для вывода.

Итак, перед этим нам нужно защитить нашу полную модель.
Вы можете подумать, что все вещи зашифрованы.

Веса модели, входные данные, прогноз и цель, используемые для скоринга, зашифрованы!

Давайте проведем безопасную оценку тестовых данных:

Время результатов -

(Я использовал colab для запуска всего вышеперечисленного кода :)

Вывод достаточно длинный, поэтому, прикрепив только несколько частей, вы можете проверить весь код с выводом по ссылке на записную книжку в разделе ссылок ниже:

Мы достигли хорошей точности тестовых данных при шифровании нашей модели, данных и прогнозов 🎉

Таким образом, мы увидели, как модульная арифметика помогает в совместном использовании секретов, метод, который pysyft применяет под капотом для выполнения сквозного шифрования и дает нам простые удобные функции, чтобы мы могли напрямую использовать эти методы, не понимая, что происходит под капотом. (хотя до сих пор вы могли хорошо понимать, что происходит!) 👏

Ссылки:

👉 Код: https://colab.research.google.com/drive/16cf5yFsYDn8dCCwVbCIilB-Ha8e9Fspt

👉 Блог Openmined:



— — — — — — — — — — — — — — — — — — — — — — — -

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

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

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

Хлопайте! Поделиться этим! Следуй за мной!

— — — — — — — — — — — — — — — — — — — — — — — —

— — — — — — — — — — — — — — — — — — — — — — — —