Градиенты наносят ответный удар: атакуем распознавание паспорта

В данной статье мы продолжим говорить про атаки на нейронные сети (первая часть тут). Сегодня мы возьмем нейронную сеть, решающую реальную задачу, и покажем, какие изображения генерируют разные методы атак и как это влияет на качество распознавания с количественной точки зрения. Делать это мы будем с помощью фреймворка Adversarial Robustness Toolbox (ART).

Adversarial Robustness Toolbox 

Чтобы провести атаку на нейронную сеть, можно зайти на Google Scholar, найти подходящую статью, понять её и реализовать в своей системе. А можно пойти более простым путём и воспользоваться фреймворком ART ([1807.01069] Adversarial Robustness Toolbox v1.0.0), который уже «из коробки» поддерживает большинство давно известных способов атак на нейронные сети (и защит, кстати, тоже). Мы применили 6 атак различных типов к свёрточной нейронной сети, решающей задачу классификации символов паспорта РФ.

Чтобы провести атаку на любую сеть с использованием ART, достаточно всего нескольких строк, например:

from art.attacks.evasion import FastGradientMethod

attack = FastGradientMethod(
  estimator=classifier, 
  eps=10/255, 
  batch_size=128)

x_test_adv = attack.generate(x=x_test)

Остаётся только задать нужные параметры и правильно сконфигурировать классификатор вместе с сетью model в PyTorch:  

classifier = PyTorchClassifier(
  model=model,
  clip_values=(0, 1),
  loss=nn.CrossEntropyLoss(),
  optimizer=optim.Adam(model.parameters(), lr=0.01),
  input_shape=(1, 32, 32),
  nb_classes=36,
  device_type='gpu')

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

Нейросетевая модель

Для этого эксперимента мы обучили нейронную сеть архитектуры ResNet-18 для распознавания ФИО в российском паспорте. Она была обучена с нуля; для этого использовались синтетические данные с разными фонами и шрифтами. Наши реальные сети мы обучаем именно на таких данных. Для тестирования мы сгенерировали аналогичный набор данных, чтобы быть уверенными, что тестовые данные обладают ровно тем же распределением и не содержат неожиданных для сети признаков. В этом наборе мы использовали 20 различных шрифтов и около 100 различных фонов (см. пример на Рис. 1).

Рис. 1. Синтетически сгенерированное изображение паспорта РФ.

Рис. 1. Синтетически сгенерированное изображение паспорта РФ.

Эта сеть решает задачу классификации символов. Ее рецептивным полем являются участки 32 на 32 пикселей, на которых распознается центральный символ. Сверточная архитектура сети позволяет вычислить карты признаков для всего изображения без необходимости несколько раз обрабатывать перекрывающиеся участки. В рамках данного эксперимента нам важно оценивать только качество классификации модели, поэтому мы вырезали из сгенерированных данных кусочки текста размером 32 на 32 (см. пример на Рис. 2). Исходная точность распознавания сети составляла 99%. Размер выборки составил 28057 изображений.

Рис. 2 Пример входных изображений для нашей классифицирующей сети.

Рис. 2 Пример входных изображений для нашей классифицирующей сети.

Рис. 3 Распределение примеров по классам.

Рис. 3 Распределение примеров по классам.

В дальнейшем для сравнения будет удобно использовать распределение по классам распознанных картинок. Распределение сгенерированной выборки по классам от А до Я вместе с символом пробела, дефисом и некорректно нарезанным окном (invalid) показано на Рис 3.

Fast Gradient Sign Method

Начнём с базовых методов атак. Один из самых первых и одновременно самых простых методов это Fast Gradient Sign Method или FGSM ([1412.6572] Explaining and Harnessing Adversarial Examples). Он относится к атакам белого ящика, когда у злоумышленника есть доступ к нейросетевой модели и ее коэффициентам. 

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

Мы применили FGSM ко всем примерам тестовой выборки. Параметр eps, отвечающий за максимальную степень изменчивость отдельно взятого пикселя, был установлен в 10/255. Таким образом, eps задаёт диапазон вокруг исходных значений для каждого пикселя и из него выбирается одно случайное.

Получившиеся примеры вредоносных изображений, а также распределение по классам показано на Рисунках 4 и 5. Как видно из распределений, буквы Ф и Ы сильно просели, и в целом нарушилось практически равномерное распределение по буквам. Несмотря на свою простоту, даже такой метод весьма существенно понижает точность распознавания на нашей тестовой выборке: до 70,69%. Отметим, что такое вмешательство является заметным для зрительного восприятия.

Рис. 4 Исходные изображения и их вредоносные версии, созданные FGSM.

Рис. 4 Исходные изображения и их вредоносные версии, созданные FGSM.

Рис 5. Распределение классов на вредоносных примерах FGSM.

Рис 5. Распределение классов на вредоносных примерах FGSM.

Также с помощью FGSM можно провести целевую атаку на конкретный класс символов. Например, мы взяли букву «Ц» и модифицировали тестовые данные с целью ее получения. Частота буквы «Ц» по сравнению с нецелевой атакой повысилась в два раза (см. Рис. 6 и 7), поэтому целевую атаку можно считать успешной. Общая точность немного выросла — 83,25%.

Рис. 6. Исходные изображения и их вредоносные версии, созданные целевой атакой FGSM на букву

Рис. 6. Исходные изображения и их вредоносные версии, созданные целевой атакой FGSM на букву «Ц».

Рис. 7. Распределение классов на вредоносных примерах после целевой атаки FGSM для получения буквы

Рис. 7. Распределение классов на вредоносных примерах после целевой атаки FGSM для получения буквы «Ц».

Carlini & Wagner L2

Следующий на очереди метод Carlini & Wagner по L2 норме ([1608.04644] Towards Evaluating the Robustness of Neural Networks). Забегая вперёд, можно сказать что это наиболее эффективная атака по соотношению затраченное время на обучение/падение качества. Также как и предыдущая, это атака из категории белого ящика, однако она работает итеративно в отличие от FGSM. При этом визуальное изменение получается гораздо более точечным и не всегда различимо для человека (см. Рис. 8). Суть данного метода в следующем — минимизируется функционал, состоящий из штрафа за непохожесть с входным изображением и штрафа за удалённость вредоносной картинки от целевого класса на этой итерации работы метода. Первая часть оценивается как L2 норма между входной картинкой и вредоносной, а вторая — это гиперпараметр, масштабирующий разность фактического и желаемого значений в пространстве выходов сети (т.н. logits).

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

Результирующая точность оказалась равна 1.54%, но за это пришлось заплатить на порядки большим временем обучения. После Carlini & Wagner почти исчезли буквы «Ф» «Ж» и «Ы», по сравнению с начальным распределением (см. Рис. 9).

Рис. 8. Исходные изображения и их вредоносные версии, созданные Carlini & Wagner L2.

Рис. 8. Исходные изображения и их вредоносные версии, созданные Carlini & Wagner L2.

Рис. 9. Распределение классов на вредоносных примерах Carlini & Wagner L2.

Рис. 9. Распределение классов на вредоносных примерах Carlini & Wagner L2.

Simple Black-box Adversarial Attacks

Далее мы рассмотрели метод, который может использовать два различных базиса: полученный с помощью дискретного косинусного преобразования (DCT) и декартовы координаты (pixel). Называется он Simple Black-box Adversarial Attacks или SimBA ([1905.07121] Simple Black-box Adversarial Attacks) и в отличие от рассмотренных ранее алгоритмов относится к категории атак черного ящика. То есть, имеется обученная модель, и мы можем подавать ей на вход произвольные значения, наблюдая за тем какой при этом будет выход, а параметры модели остаются неизвестными. Поскольку теперь у нас нет доступа к градиентам, атаки черного ящика опираются на непрерывность предсказаний модели.

Идея данного метода основана на том, что если граница принятия решения недалеко, то не обязательно двигаться точно в ее направлении, чтобы ее достичь. Поэтому в основном алгоритм определяется базисом, который будет выбран. То есть, на каждой итерации выбирается случайный вектор из заранее определенного ортонормированного базиса и затем прибавляется, либо вычитается в зависимости от влияния на качество на предыдущей итерации (по умолчанию прибавляется). Pixel — это обычные декартовы координаты; в этом варианте на каждой итерации изменяется только один пиксель. В варианте DCT с помощью дискретного косинусного преобразования выбираются низкочастотные признаки и ортонормируются для формирования базиса.

По сравнению с Carlini & Wagner L2 SimBA ещё на порядок медленнее работает. При этом оба варианта уступают по «вредоносности»: точность распознавания составила 26.03% и 27.52%, для DCT и декартового базиса соответственно.

Как и FGSM, искажения более грубые и изменяют значения не точечно, а по достаточно большой области, что становится заметным для глаза, если фон и добавленный шум не совпадают по структуре (см. Рис. 10 и 11).

Рис. 10. Исходные изображения и их вредоносные версии, созданные SimBA DCT.

Рис. 10. Исходные изображения и их вредоносные версии, созданные SimBA DCT.

Рис. 11. Исходные изображения и их вредоносные версии, созданные SimBA Pixel.

Рис. 11. Исходные изображения и их вредоносные версии, созданные SimBA Pixel.

Boundary Attack

Последней атакой, которую мы рассмотрели, была Decision-based/Boundary Attack ([1712.04248] Decision-Based Adversarial Attacks: Reliable Attacks Against Black-Box Machine Learning Models). Она также как и предыдущая является атакой черного ящика. Основная идея заключается в следующем: берётся точка в пространстве признаков, которая изначально классифицируется как вредоносная, и затем итеративно мы идём вдоль границы принятия решений так, чтобы пример оставался вредоносным и мы бы приближались к исходной картинке по метрике L2. Это приводит к практически 100% падению точности, т.к. мы изначально находим любой вредоносный пример (например, просто шум, который классифицируется не как текущий пример), но при этом с каждым уточнением не даём свалится этому примеру в корректную область. За такую мощную и гарантированную атаку приходится платить вторым важнейшим ресурсом — временем генерации атаки. При этом если использовать достаточное количество итераций, картинка становится практически неотличимой от оригинала (см. Рис. 12). Распределение искаженных изображений тестовой выборки показано на Рис. 13. Можно заметить, что число распознанных букв «Й» стало сравнимым с символом пробела, а также почти полностью исчезли буквы «Ф», «О», «Д», «Ы», «Ъ», «А».

Рис. 12. Исходные изображения и их вредоносные версии, созданные Boundary.

Рис. 12. Исходные изображения и их вредоносные версии, созданные Boundary.

Рис. 13. Распределение классов на вредоносных примерах Boundary.

Рис. 13. Распределение классов на вредоносных примерах Boundary.

Численное сравнение рассмотренных методов

Результаты экспериментов представлены в Таблице 1, где их можно наглядно сравнить. Параметр batch size во всех методах, кроме SimBA (где он должен иметь фиксированное значение 1), был установлен 128. Параметр eps был равен 10/255.

Таблица 1. Сравнение методов между собой при исходной точности сети 99%.

Название метода

Максимальное кол-во итераций

Время обработки тестовой выборки, сек.

Точность после атаки

FGSM

-

2

70,69%

FGSM целевая

-

2

83,25%

Carlini & Wagner L_2

10

4566

1,54%

SimBA DCT

3000

196520

26,03%

SimBA pixel

3000

181960

27,52%

Boundary / Decision-Based

1000

785775

6,95%

Заключение

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

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

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

P.S. При обучении реальных сетей для наших продуктов мы в Smart Engines, конечно же, применяем методы повышения устойчивости к атакам на нейронные сети, а вы?

© Habrahabr.ru