Google brain недавно опубликовал статью под названием Состязательное перепрограммирование нейронных сетей, которая привлекла мое внимание. Он представил новый тип состязательного примера для нейронных сетей, которые могли бы действительно выполнять полезную задачу для злоумышленника, а не просто обманывать атакуемую сеть. Атака перепрограммирует сеть, предназначенную для конкретной задачи, на выполнение совершенно другой. В документе показано, что популярные архитектуры ImageNet, такие как Inception и ResNets, могут быть успешно перепрограммированы для достаточно хорошей работы в различных задачах, таких как подсчет квадратов, MNIST и CIFAR-10.

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

Резюме статьи

В документе продемонстрировано состязательное перепрограммирование некоторых известных архитектур ImageNet, таких как Inceptions v2, v3 и v4, а также некоторых ResNet — 50, 101 и 152. Они перепрограммировали эти сети для выполнения классификации MNIST и CIFAR-10, а также задачи подсчета квадратов. в изображении.

Суть процесса перепрограммирования заключается в следующем:

  • Возьмите предварительно обученную модель в ImageNet, например Inception.
  • Повторно назначьте метки ImageNet меткам вашей целевой задачи. Так, например, пусть «большая белая акула» = 1 для MNIST и так далее. Вы также можете назначить несколько меток ImageNet одной и той же враждебной метке.
  • Добавьте образ «состязательной программы» в свой образ MNIST и передайте его через начальную модель. Сопоставьте результаты Inception, используя переназначение, которое вы выбрали выше, чтобы получить прогнозы MNIST.
  • Обучайте только образ враждебной программы на переназначенных метках, сохраняя при этом начальные веса замороженными.
  • Теперь у вас есть классификатор MNIST: возьмите изображение MNIST, добавьте свою обученную состязательную программу, запустите ее через Inception и переназначьте ее метки, чтобы получить прогнозы для MNIST.

Точный метод «добавления» враждебной программы следующий. Поскольку для моделей ImageNet требуется изображение размером 224 x 224, мы используем его в качестве размера весов нашей программы. Назовем веса imageW. Нелинейная активация применяется к весам после маскирования центральной секции 28x28, которая затем заменяется изображением MNIST. Это изображение, которое передается в нашу модель ImageNet. Давайте определим маску с нулями в центре 28x28 как M. Вражеский вход в модель ImageNet X_adv:

X_adv=tanh(W⊙M)+pad(X)

где представляет поэлементное умножение, а X — входное изображение MNIST. Иллюстрации в приведенной ниже статье хорошо подводят итог:

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

Результаты работы оказались весьма интересными. Вот несколько важных наблюдений:

  • Они заметили, что использование предварительно обученных моделей ImageNet обеспечивает гораздо более высокую точность, чем необученные или случайным образом инициализированные модели (некоторые модели показали расхождение в точности теста ~ 80% между обученными и необученными).
  • Враждебные программы для разных моделей показали разные качественные характеристики, а это означает, что они в некотором смысле специфичны для архитектуры.
  • Модели, обученные со стороны противника, практически не показали снижения точности. Это означает, что они так же уязвимы для перепрограммирования, как и обычно обученная модель.

Мои эксперименты

Регуляризация с помощью размытия

Одно очень важное различие между этими враждебными программами и традиционными враждебными примерами заключается в том, что традиционные примеры считались враждебными только потому, что добавленное к ним возмущение было небольшим по величине. Однако в этом случае, как заявляют авторы, величину этого возмущения [состязательной программы] не нужно ограничивать, поскольку состязательное возмущение не применяется ни к одному ранее истинному примеру. Этот факт используется при обучении программы, поскольку нет ограничений на размер W. Следует также отметить, что возмущение является нелинейной функцией обученных весов W. Это контрастирует с другими состязательными примерами, такими как Метод быстрого знака градиента, которые представляют собой линейные возмущения.

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

Я обучил состязательную программу для ResNet-18 классифицировать цифры MNIST, используя методы регуляризации, заимствованные из этого поста. Основная идея заключается в следующем:

  • Размывайте изображение состязательной программы $W$ после каждого шага градиента, используя размытие по Гауссу, с постепенно уменьшающейся сигмой.
  • Также размойте градиенты, снова используя размытие по Гауссу с постепенно уменьшающейся сигмой.

После обучения в течение примерно 20 эпох в результате получилась такая состязательная программа:

Он показал довольно высокую точность тестирования 96,81%, превзойдя некоторые сети, описанные в документе, на несколько баллов (это может быть особенностью Resnet 18 по сравнению с другими сетями, которые они использовали). Обратите внимание, что я выбрал сопоставление выходных меток с некоторыми произвольными десятью метками ImageNet (в статье использовались первые 10 меток), которые не имели никакого отношения к самим цифрам MNIST. Мы видим, что в программном изображении есть интересные низкочастотные артефакты, которые появились из-за регуляризации размытия. Мы также можем видеть эффект уменьшения размытия по мере того, как программа прорабатывает более мелкие детали в более поздней части gif.

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

Преобразование путем изменения размера

Авторы статьи отмечают, что преобразование ввода и переназначение вывода «может быть любым согласованным преобразованием, которое преобразует форматы ввода (вывода) для двух задач и заставляет модель выполнять состязательную задачу». В случае состязательного перепрограммирования MNIST входное преобразование маскировало веса и добавляло входные данные MNIST в центр. Авторы заявляют, что использовали эту маскировку «исключительно для улучшения визуализации действия враждебной программы», поскольку на враждебном изображении четко видна цифра MNIST. Маскировка не требуется для работы этого процесса. Однако кажется, что этого немного не хватает, поскольку сеть теперь вынуждена различать 10 классов MNIST, используя только информацию в центральных 28x28 пикселях ввода, в то время как оставшаяся часть ввода, состязательная программа, остается неизменной для всех 10 классов. Еще одно преобразование, сохраняющее возможность визуализации, заключается в простом масштабировании ввода MNIST (линейная интерполяция) и добавлении его к весам состязательной программы без какой-либо маскировки перед применением нелинейности. В этом случае доля состязательного ввода, который различает классы, такая же, как и для любого другого классификатора MNIST. Пример показан ниже:

Опять же, я обучил состязательную программу, используя это новое преобразование ввода для Resnet 18. Я использовал те же два метода регуляризации постепенного уменьшения веса и градиентного размытия, что и раньше, с теми же параметрами.

Точность теста модели составила 97,87 %, что примерно на 1 % лучше, чем у маскированного преобразования. Он также получил эту точность после 15 эпох обучения, показав более быструю сходимость, чем маскированное преобразование. Он также не сильно жертвует с точки зрения способности визуализации.

Для сравнения я также обучил программу для случайно инициализированной сети ResNet 18, используя регуляризацию градиента и размытия веса, а также преобразование ввода масштабирования. Как и ожидалось, модель показала себя намного хуже: точность теста составила всего 44,15% после 20 эпох. Программа также показала отсутствие низкочастотных текстур и особенностей, несмотря на использование регуляризации размытия:

Множественные сопоставления выходных меток

Вышеупомянутые эксперименты были сосредоточены на изменении входных методов преобразования и регуляризации. Я также экспериментировал с использованием сопоставлений выходных меток, которые не были произвольными. Я экспериментировал с этим с CIFAR-10, потому что задача перепрограммирования классификатора ImageNet, чтобы он стал классификатором CIFAR-10, очень связана. Обе задачи имеют входные данные — фотографии реальных объектов, а выходные — метки этих объектов. Легко найти этикетки ImageNet, которые тесно связаны с этикетками CIFAR-10. Например, метка ImageNet «авиалайнер» сопоставляется непосредственно с меткой CIFAR-10 «самолет». Чтобы использовать более структурированный подход, я пропустил обучающие изображения CIFAR-10 (не считая проверочного набора) через ResNet 18, изменив масштаб до 224x224. Это эквивалентно использованию состязательной программы, которая инициализирована до 0. Затем я просмотрел выходные данные ResNet и сравнил их с истинными метками CIFAR-10. Для этого конкретного случая я выполнил сопоставление нескольких меток из меток ImageNet в метки CIFAR. В частности, я жадно сопоставлял каждую метку ImageNet с той меткой CIFAR, которая была наиболее классифицирована ResNet. Короче:

  • Запустите набор поездов CIFAR через ResNet.
  • Получите гистограмму меток ImageNet для каждой метки CIFAR.
  • Сопоставьте каждую метку ImageNet с меткой CIFAR с наибольшим значением.
  • Например, давайте посмотрим на метку ImageNet goldfish. После прохождения обучающего набора CIFAR через модель, допустим, 10 грузовиков были классифицированы как золотые рыбки, 200 птиц, 80 самолетов и т. д. (эти цифры являются лишь примерами). Предположим, что 200 птиц – это наибольшее количество особей одного класса CIFAR, который был классифицирован как золотая рыбка. Затем я сопоставляю вывод goldfish с меткой CIFAR bird. Это жадная часть — я сопоставляю метку ImageNet y с меткой CIFAR, которая была классифицирована как y чаще всего (в обучающей выборке). Я повторяю этот процесс для всех 1000 этикеток ImageNet.

Чтобы обучить программу сопоставлению нескольких меток, я добавил выходные вероятности нескольких меток ImageNet, соответствующих каждой метке CIFAR-10, чтобы получить набор из 10 вероятностей, соответствующих каждой метке CIFAR. Затем я использовал отрицательную логарифмическую потерю правдоподобия для этих вероятностей. Прежде чем перейти к отображению нескольких меток, я также обучил произвольное сопоставление 10 меток для ResNet 18 на CIFAR. Он достиг точности теста около 61,84% после 35 эпох. Затем я обучил тот же ResNet, используя приведенное выше жадное сопоставление с несколькими метками с теми же параметрами обучения. Он достиг точности тестирования 67,63% всего за 16 эпох.

Я повторил описанный выше эксперимент на CIFAR-10, используя AlexNet вместо Resnet 18. Произвольное сопоставление с одним выходом дало точность теста 57,40% после 21 эпохи, в то время как использование жадного сопоставления с несколькими выходами увеличило это до 61,31% после 30 эпох.

Хотя мы можем продолжать гоняться за процентами, обратите внимание, что CIFAR-10 на самом деле является плохим примером для демонстрации состязательного перепрограммирования, поскольку так называемые «состязательные» входные данные X_adv не являются действительно состязательный в том смысле, что метки CIFAR тесно связаны с метками ImageNet, которые были жадно сопоставлены. Например, на приведенном выше рисунке показан «состязательный» ввод грузовика CIFAR-10, который классифицируется ResNet 18 как «грузовик с прицепом». На самом деле это не враждебный вход, поскольку изображение можно рассматривать как изображение грузовика с прицепом. Однако рассмотренные в статье примеры для CIFAR, в которых изображение CIFAR помещено в центр с замаскированной меткой, можно считать состязательными, поскольку большая часть этих изображений не может быть осмысленно интерпретирована.

Тестирование переносимости

Еще одна интересная вещь, на которую стоит обратить внимание, — успешно ли эти враждебные программы передаются между разными нейронными сетями. В моих экспериментах казалось, что это не так. Я попытался использовать состязательную программу MNIST, обученную с помощью ResNet 18 в AlexNet, и обнаружил, что почти все изображения были классифицированы как «головоломки» независимо от содержащейся в них цифры. То же самое было и с другими ResNet, такими как ResNet 34 и ResNet 50.

Я также пытался передавать враждебные программы между одними и теми же сетями, но через фотографию на моем телефоне. ResNet 18 классифицировал фотографию противника 5 как головоломку, а не египетского кота. Это говорит о том, что эти состязательные примеры не очень устойчивы к шуму, несмотря на наличие некоторых низкочастотных признаков. Одной из возможных причин этого может быть то, что эти примеры занимают нишу в пространстве ввода состязательных примеров, поскольку они были сгенерированы путем обучения для соответствия большому набору данных, однако это остается предположением.

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

Автор : Раджат В.Д.

Исходное сообщение можно найти здесь:https://iitmcvg.github.io/papers/Exploring-Adversarial-Reprogramming/