Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
В данной статье мы продолжим говорить про атаки на нейронные сети (первая часть тут). Сегодня мы возьмем нейронную сеть, решающую реальную задачу, и покажем, какие изображения генерируют разные методы атак и как это влияет на качество распознавания с количественной точки зрения. Делать это мы будем с помощью фреймворка 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).
Эта сеть решает задачу классификации символов. Ее рецептивным полем являются участки 32 на 32 пикселей, на которых распознается центральный символ. Сверточная архитектура сети позволяет вычислить карты признаков для всего изображения без необходимости несколько раз обрабатывать перекрывающиеся участки. В рамках данного эксперимента нам важно оценивать только качество классификации модели, поэтому мы вырезали из сгенерированных данных кусочки текста размером 32 на 32 (см. пример на Рис. 2). Исходная точность распознавания сети составляла 99%. Размер выборки составил 28057 изображений.
В дальнейшем для сравнения будет удобно использовать распределение по классам распознанных картинок. Распределение сгенерированной выборки по классам от А до Я вместе с символом пробела, дефисом и некорректно нарезанным окном (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%. Отметим, что такое вмешательство является заметным для зрительного восприятия.
Также с помощью FGSM можно провести целевую атаку на конкретный класс символов. Например, мы взяли букву “Ц” и модифицировали тестовые данные с целью ее получения. Частота буквы “Ц” по сравнению с нецелевой атакой повысилась в два раза (см. Рис. 6 и 7), поэтому целевую атаку можно считать успешной. Общая точность немного выросла – 83,25%.
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).
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).
Boundary Attack
Последней атакой, которую мы рассмотрели, была Decision-based/Boundary Attack ([1712.04248] Decision-Based Adversarial Attacks: Reliable Attacks Against Black-Box Machine Learning Models). Она также как и предыдущая является атакой черного ящика. Основная идея заключается в следующем: берётся точка в пространстве признаков, которая изначально классифицируется как вредоносная, и затем итеративно мы идём вдоль границы принятия решений так, чтобы пример оставался вредоносным и мы бы приближались к исходной картинке по метрике L2. Это приводит к практически 100% падению точности, т.к. мы изначально находим любой вредоносный пример (например, просто шум, который классифицируется не как текущий пример), но при этом с каждым уточнением не даём свалится этому примеру в корректную область. За такую мощную и гарантированную атаку приходится платить вторым важнейшим ресурсом – временем генерации атаки. При этом если использовать достаточное количество итераций, картинка становится практически неотличимой от оригинала (см. Рис. 12). Распределение искаженных изображений тестовой выборки показано на Рис. 13. Можно заметить, что число распознанных букв “Й” стало сравнимым с символом пробела, а также почти полностью исчезли буквы “Ф”, “О”, “Д”, “Ы”, “Ъ”, “А”.
Численное сравнение рассмотренных методов
Результаты экспериментов представлены в Таблице 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, конечно же, применяем методы повышения устойчивости к атакам на нейронные сети, а вы?