
Насколько просто привести к тому, что глубокая нейронная сеть неправильно классифицировала изображение, если злоумышленнику разрешено изменять цвет одного пикселя и видеть только вероятность прогноза? Оказывается, это очень просто. Во многих случаях злоумышленник может даже заставить сеть вернуть любой ответ, который они хотят.
Следующий проект представляет собой перегруппирование и учебное пособие «Один пиксельный атака за дурачение глубоких нейронных сетей». Официальный код для статьи можно найти здесь.
Для этой атаки мы будем использовать набор данных CIFAR10. Задача набора данных состоит в том, чтобы правильно классифицировать изображение 32x32 пикселей в 1 из 10 категорий (например, птица, олень, грузовик). Атака черного ящика требует только метковки вероятности (значение вероятности для каждой категории), которые выводятся нейронной сетью. Мы генерируем состязательные изображения, выбрав пиксель и изменяя его на определенный цвет.
Используя эволюционный алгоритм, называемый дифференциальной эволюцией (DE), мы можем итеративно генерировать состязательные изображения, чтобы попытаться минимизировать доверие (вероятность) классификации нейронной сети.

Кредит: блог Пабло Р. Мьера
Во -первых, генерируйте несколько состязательных образцов, которые изменяют случайный пиксель и запускайте изображения через нейронную сеть. Затем объедините позиции и цвета предыдущих пикселей вместе, создайте еще несколько состязательных образцов от них и запустите новые изображения через нейронную сеть. Если были пиксели, которые понизили уверенность сети с последнего шага, замените их как самые известные решения. Повторите эти шаги для нескольких итераций; Затем на последнем шаге верните состязательный образ, который больше всего снижал уверенность сети. В случае успеха уверенность будет уменьшена настолько, что новая (неверная) категория теперь имеет самую высокую уверенность в классификации.
См. Ниже примеры успешных атак:

Нужен графический процессор или просто хотите прочитать? Посмотреть первую учебную записную книжку с Google Colab.
Для запуска кода в учебном пособии рекомендуется выделенный графический процессор, подходящий для работы с керами ( tensorflow-gpu ). Python 3.5+ требуется.
git clone https://github.com/Hyperparticle/one-pixel-attack-keras
cd ./one-pixel-attack-keraspip install -r ./requirements.txtjupyter notebook ./one-pixel-attack.ipynb Чтобы тренировать модель, запустите train.py . Модель будет контролироваться (сохранена) после каждой эпохи в каталог networks/models .
Например, для обучения Resnet с 200 эпохами и размером партии 128:
python train.py --model resnet --epochs 200 --batch_size 128 Чтобы выполнить атаку, запустить attack.py . По умолчанию это будет запускать все модели с параметрами по умолчанию. Чтобы указать типы моделей для тестирования, использовать --model .
python attack.py --model densenet capsnetДоступные модели в настоящее время:
lenet - Lenet, первая модель CNNpure_cnn - nn с просто сверточными слоямиnet_in_net - сеть в сетиresnet - глубокое остаточное обучение для распознавания изображенийdensenet - плотно связанные сверточные сетиwide_resnet - широкие остаточные сетиcapsnet - динамическая маршрутизация между капсулами Предварительные результаты после проведения нескольких экспериментов по различным моделям. Каждый эксперимент генерирует 100 состязательных изображений и вычисляет скорость успеха атаки, то есть соотношение изображений, которые успешно заставили модель неправильно классифицировать изображение по общему количеству изображений. Для данной модели несколько экспериментов выполняются на основе количества пикселей, которые могут быть изменены на изображении (1,3 или 5). Дифференциальный алгоритм проводился с численностью 400 и максимальным количеством итерации 75.
Атака на 1,3,5 пиксельных возмущений (100 образцов)
| модель | параметры | Точность теста | пиксели | Успех атаки (не подлежит воздействию) | Успех атаки (целевой) |
|---|---|---|---|---|---|
| Ленет | 62к | 74,9% | 1 | 63,0% | 34,4% |
| 3 | 92,0% | 64,4% | |||
| 5 | 93,0% | 64,4% | |||
| Чистый CNN | 1,4 м | 88,8% | 1 | 13,0% | 6,67% |
| 3 | 58,0% | 13,3% | |||
| 5 | 63,0% | 18,9% | |||
| Сеть в сети | 970K | 90,8% | 1 | 34,0% | 10,0% |
| 3 | 73,0% | 24,4% | |||
| 5 | 73,0% | 31,1% | |||
| Resnet | 470K | 92,3% | 1 | 34,0% | 14,4% |
| 3 | 79,0% | 21,1% | |||
| 5 | 79,0% | 22,2% | |||
| Денсенет | 850K | 94,7% | 1 | 31,0% | 4,44% |
| 3 | 71,0% | 23,3% | |||
| 5 | 69,0% | 28,9% | |||
| Широкий Резин | 11m | 95,3% | 1 | 19,0% | 1,11% |
| 3 | 58,0% | 18,9% | |||
| 5 | 65,0% | 22,2% | |||
| Capsnet | 12 м | 79,8% | 1 | 19,0% | 0,00% |
| 3 | 39,0% | 4,44% | |||
| 5 | 36,0% | 4,44% |
Похоже, что Capsule Network Capsnet, хотя и более устойчивая к одной атаке пикселя, чем все другие CNN, все еще уязвим.