Сегодня разберем статью из лаборатории проблем федеративного обучения ИСП РАН 👨💻
Just a Simple Transformation is Enough for Data Protection in Vertical Federated Learning (А. Семенов, Ф. Змушко, А. Пичугин, А. Безносиков)
[статья] [код]
Введение
Split Learning — стандартный подход к распределенному обучению больших моделей, при котором участники хранят лишь части модели из-за её значительного размера.
Нас интересует федеративная версия этого метода, а именно (Two-Party) Split Learning, где клиент владеет всеми признаками и объектами датасета, а сервер — только метками. Такая постановка возникает, если клиент обладает уникальными данными, но ограничен в вычислительных ресурсах.
На каждом шаге обучения клиент выполняет форвард своей части модели, отправляет активации последнего слоя (Cut Layer) и ждет, пока сервер завершит свой форвард, вычислит итоговый лосс и передаст клиенту градиент по активациям.
Даже в такой простой схеме возникают вопросы о приватности данных, модели и меток. Наша статья посвящена защите приватности данных, а именно методам противодействия атакам на восстановление исходных признаков (feature reconstruction attacks), когда злоумышленник пытается реконструировать входные данные клиента по передаваемым активациям.
Мы рассматриваем особенно сложный сценарий, где атакующая сторона (сервер) обладает следующими преимуществами:
(i) знает архитектуру модели клиента;
(ii) знает архитектуру и имеет имеет некий prior на данные (например, знает домен и/или рейндж пикселей изображений).
Наблюдение
Сделаем важное замечание: state-of-the-art атаки на восстановление признаков, такие как UnSplit и FSHA:
(i) применяются к задачам компьютерного зрения (условная классификация изображений);
(ii) ориентированы исключительно на CNN-подобные модели, не учитывая MLP и трансформерные бейзлайны.
Возникает вопрос: «Если изменить архитектуру модели, заменив сверточные слои на MLP или Transformer — перестанут ли атаки работать?»
Как оказалось, ни UnSplit, ни FSHA не справляются с моделями, где в начале стоят линейные (!!) слои. Почему?
Ортогональный поворот данных и весов не меняет выход линейного слоя на каждом шаге обучения при использовании SGD (с моментумом), а при Adam такие ортогональные преобразования не влияют на сходимость и оптимум лосса. Рассмотрим простой пример с SGD и однослойной линейной моделью W на стороне клиента.
Пусть батч данных представлен в виде матрицы X. Применим к данным и начальным весам W₁ (полу-)ортогональное преобразование:
X → XU, W₁ → UᵀW₁
Тогда активации на первом шаге:
H₁ = X₁W₁ = (X₁U)(UᵀW₁)
Видно, что это преобразование не меняет значение активаций H₁, передаваемых клиентом серверу. Это также верно для всех последующих шагов оптимизации.
Предположим, что на шаге k передаваемые серверу активации одинаковы для случаев с преобразованием и без него, и пусть сервер возвращает градиент лосса по этим активациям Gₖ. Тогда градиент по параметрам модели клиента вычисляется как Xₖᵀ Gₖ.
Подставляя этот градиент в апдейт SGD и учитывая, что мы одновременно повернули веса и активации, получаем:
Wₖ₊₁ = UᵀWₖ - step_size * Uᵀ Xₖᵀ Gₖ
Активации, которые клиент передаст серверу на шаге k + 1:
Hₖ₊₁ = (Xₖ₊₁ Uᵀ) Wₖ₊₁ = Xₖ₊₁ Wₖ - step_size Xₖ₊₁ Xₖᵀ Gₖ
Так как активации и градиенты не изменяются при введенных преобразованиях, процесс обучения в Split Learning остается неизменным.
Ортогональное преобразование весов и активаций можно интерпретировать как поворот данных, сопровождающийся изменением инициализации нейронной сети (что незначительно влияет на итоговую производительность модели). В итоге, даже если сервер может извлечь информацию о матрице "объект-признаки" клиента, восстановление исходных данных возможно лишь с точностью до некоторого ортогонального преобразования.
Конечно, восстановить нужную матрицу, зная её с точностью до поворота и имея некий prior, — задача известная. Однако если модель клиента достаточно глубокая и включает нелинейные функции активации, то такая атака становится нерешаемой на практике.
Смотри продолжение (эксперименты и выводы) в комментариях ⬇️
Post #8
1.09K

- 🔥 16
- ❤ 8
- 👀 3
- 👍 1
- 😱 1