Главная » Хабрахабр » Безопасность алгоритмов машинного обучения. Атаки с использованием Python

Безопасность алгоритмов машинного обучения. Атаки с использованием Python

image

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

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

Сначала приведем термины, использующиеся в тематике безопасности алгоритмов машинного обучения:
Adversarial пример — вектор, подающийся на вход алгоритму, на котором алгоритм выдает некорректный выход.
Adversarial атака — алгоритм действий, целью которого является получение Adversarial примера.

В данной задаче у нас есть пары «объект-метка», и мы должны научиться предсказывать значение для новых объектов. Чтобы понять проблему Adversarial примеров, давайте вспомним одну из задач машинного обучения — обучение с учителем при классификации.

Более того, если бы мы имели генеральную совокупность данных (например, для набора рукописных цифр MNIST иметь всевозможные изображения всех цифр), то данную гиперплоскость можно было бы провести идеально при условии разделимости классов. Если рассмотреть эту задачу с геометрической точки зрения, то необходимо разделить пространство таким образом, чтобы на новом объекте предсказать «правильный» класс. Но так как генеральной совокупности чаще всего не бывает, то для решения данной задачи мы и используем алгоритмы машинного обучения — чтобы максимально точно приблизить «идеальную» гиперплоскость с помощью тех данных, что у нас есть.

Именно поэтому и появляются такие примеры, как панда, классифицированная как гиббон. Любое отклонение гиперплоскости от идеальной, порождает некоторый «зазор», попадая в который, объекты классифицируются некорректно. А задача атакующего сводится к изменению вектора параметров объекта таким образом, чтобы он попал в этот «зазор».

Примеры Adversarial атак

Она успешно справляется с поставленной задачей (изображение слева). Имеется нейронная сеть, детектирующая лицо на фотографии. Но после добавления к этой фотографии незначительного шума (изображение справа), алгоритм на полученном adversarial примере (изображение по центру) больше не детектирует лицо на изображении.

Человек же не заметит разницы при взгляде на оба изображения. Данный пример, продемонстрированный в статье «Adversarial Attacks on Face Detectors using Neural Net based Constrained Optimization», интересен тем, что множество реальных систем распознавания лиц используют для детектирования лиц именно нейросетевые подходы.

Этот пример интересен тем, что adversarial example не обязательно должен быть объектом хоть сколько-то близким к объектам, на которых обучалась сеть. Следующий пример был взят из automotive, а именно, распознавание дорожных знаков. Например, в работе «Rogue Signs: Deceiving Traffic Sign Recognition with Malicious Ads and Logos» было показано, что полученный adversarial пример знака KFC будет «распознан» исходной нейронной сетью как знак СТОП с вероятностью 100%.

image

Но это не так. Многие могли усомниться в использовании adversarial examples в реальном мире, так как предыдущие примеры были протестированы на компьютере, тогда как в реальной жизни такой объект вряд ли возможно получить. В работе «Synthesizing Robust Adversarial Examples» было показано, что сделанный на компьютере adversarial пример может быть успешно распечатан на 3D принтере, и алгоритм будет допускать такие же ошибки, как и при компьютерной симуляции.

image

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

А именно перепрограммировать исходную сеть для использования своей собственной полезной нагрузки. Следующий же пример показывает, что можно сделать, если пойти дальше обычного понимания adversarial атаки. Например, в работе «Adversrial Reprogramming of Neural Network» было продемонстрировано, как сеть, обученная на ImageNet, отлично посчитала количество квадратов на изображении и распознало цифры из набора MNIST. Иначе говоря, мы обучаемся использовать чужую нейронную сеть для решения задачи, поставленной атакующим.

image

На картинке продемонстрирован алгоритм работы Adversarial Reprogramming, познакомиться с которым поближе рекомендуется в исходной статье.

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

Классификация атак

В случае с WB нам известна вся информация об обученной модели алгоритма, тогда как в случае с BB у нас есть доступ только к входу и выходу модели. Все атаки можно разделить на 2 класса: WhiteBox (WB) и BlackBox (BB). Но данный тип не выделяется в отдельный класс, так как дополнительной информации недостаточно для перехода к WB, а значит это лишь дополнительный набор сведений для проведения BB атаки. На самом деле, еще возможен GrayBox вариант, когда нам неизвестна информация об обученной модели, но имеется информация о типе алгоритма и его гиперпараметрах.

Targeted атаки подразумевают, что атака совершается в определенном направлении. Далее стоит классифицировать атаки на Targeted и Non Targeted. Обученная нейронная сеть выдает вероятность класса 0 в этом объекте равную 1. Например, на наборе данных MNIST мы обучим нейронную сеть и возьмем изображение 0 из тестового набора. Если мы хотим, чтобы после применения adversarial атаки, adversarial пример был распознан как класс 1, тогда мы применим Targeted атаку. 00. Иначе, если нам не особо важно к какому классу отнесет нейронная сеть полученное изображение (главное, что это больше не класс 0), тогда такая атака будет Non Targeted.

$l_0$ норма — количество измененных параметров. Кроме того, атаки делятся на метрику, по которой 2 объекта считаются схожими — $l_0, l_2, l_\infty$ нормы. $l_\infty$ максимальная поэлементная разница между двумя векторами. $l_2 $ евклидово расстояние между двумя векторами.

Библиотеки на Python

Это FoolBox,CleverHans и ART-IBM. Данные Python библиотеки позволяют работать с Adversarial примерами.

Foolbox

CleverHans

ART-IBM

Поддерживаемые фреймворки

TensorFlow, Keras, Theano, PyTorch, Lasagne, MXNet

TensorFlow, Keras

TensorFlow, Keras, общеают MXNet, PyTorch

Теперь давайте немного подробнее разберем атаки, и начнем с WhiteBox атак.

L-BFGS атака

При этом решать такую задачу в исходной статье предлагалось именно с помощью L-BFGS метода, отсюда и название данной атаки. Постановку метода L-BFGS можно записать следующей формулой.
$minimize \space c|r| + loss_f(x+r,l)$
Из нее следует, что мы хотим минимизировать функцию потерь в направлении target класса с ограничением, что вносимые изменения были минимальными.

Исходная статья — Intriguing properties of neural networks

Данная атака представлена в 2 из 3 ранее озвученных библиотек — FoolBox и CleverHans.

А применение данной атаки на FoolBox занимает 3 строчки кода на Python:

from foolbox.attacks import LBFGSAttack
attack = LBFGSAttack(fmodel)
adversarial = attack(image, label)

Использование L-BFGS поможет вам найти оптимальные adversarial-примеры, исходя из ваших ограничений, но, во-первых, поиск такого примера может занять длительное время, а, во-вторых, вполне возможно, что метод просто не сойдется.

FGSM атака

Следующим этапом развития стал метод FGSM (Fast Sign Gradient Method), который можно показать с помощью формулы:

$X' = X + \epsilon*sign(\nabla_x J(X,ytrue))$

Здесь мы просто берем знаки от функции градиента исходной функции потерь, умножая знак на некоторый $\epsilon$, прибавляем к исходному изображению. Данный метод работает намного быстрее L-BFGS.

image

К фотографии панды добавляется шумовая карта с $\epsilon$ равной 0. Вот пример работы данного метода. 3% 007, и получается, что фотография панды теперь распознается как Гиббон с вероятностью 99.

Данный метод отличается простотой имплементации, но при этом, результат работы данного метода является сильно зашумленным.

Исходная статья — Explaining and Harnessing Adversarial Examples

Найти реализацию этого метода можно в библиотеках, а применение на foolbox так же не займет много времени

from foolbox.attacks import FGSM
attack = FGSM(fmodel)
adversarial = attack(image, label)

DeepFool атака

Его основное отличие от предыдущих методов в том, что он старается сделать минимальную шумовую карту, которая обманет алгоритм. DeepFool является Non Targeted методом. Метод не позволяет сделать из одного класса какой-то конкретный, а делает любой другой, который ближе всего к исходному изображению.

image

Видно, что шумовая карта сильно меньше, чем при FGSM. На примере видна исходная картинка, на нижней строке — FGSM метод, а по середине — как раз DeepFool атака.

Исходная статья — DeepFool: a simple and accurate method to fool deep neural networks

Такую атаку можно провести с использованием любой из перечисленных библиотек, а реализация на ART-IBM занимает всего 3 строчки кода:

from art.attacks import DeepFool
attack = DeepFool(model)
img_adv = attack.generate(img)

Jacobian saliency map атака

На карте каждому параметру объекта по факту соответствует вклад данного параметра в изменение конечного результата работы алгоритма. В JSMA методе считается прямая производная, на основании чего строится карта градиентов. И, соответственно, работает по $l_0$ норме.
image Тем самым, метод позволяет изменить как можно меньше параметров в атакуемом объекте.

Исходная статья — The Limitations of Deep Learning in Adversarial Settings

И на CleverHans это выглядит следующим образом: Данную атаку можно провести, используя CleverHans или ART-IBM.

from cleverhans.attacks import SaliencyMapMethod
jsma = SaliencyMapMethod(model, sees=sees)
jsma_params =
adv_x = jsma.generate_np(img, **jsma_params)

One pixel атака

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

image

9% Например, изображение лошади всего лишь с одним измененным пикселем становится лягушкой с вероятностью 99.

Исходная статья — One pixel attack for fooling deep neural networks

Данная атака поддерживается только в FoolBox, и ее проведение выглядит следующим образом:

from foolbox.attacks import SinglePixelAttack
attack = SinglePixelAttack(fmodel)
adversarial = attack(image,max_pixel=1)

Здесь стоит оговориться и сказать, что реализация алгоритма в Foolbox, по сравнению с исходной статьей, хоть и имеет общую цель (изменить конкретное кол-во пикселей в изображении), но отличается методом получения изображения.

Методы основанные на обобщении BlackBox модели

И именно поэтому появляется отдельное направление атак — BlacBox/GrayBox атаки. Для большинства методов требуется понимание того, как устроена архитектура модели, знание точных значений ее параметров, но на практике такое возможно достаточно редко. Для таких атак достаточно иметь доступ к входу и выходу модели.

Один из методов, позволяющих реализовать атаку на BlackBox модель — это обобщение данной модели в Student (на картинке Substitute) модели.

image

После этого можно применить WhiteBox атаку на Student модель, и с большой долей вероятности данная атака пройдет и на Teacher модели. Имея доступ к отправке данных в BlackBox модели (Teacher) и доступ к выходу данной модели, мы можем сформировать датасет, на котором возможно обучить собственную модель (Student), тем самым обобщив Teacher модель. Например, мы знаем, что Teacher модель обрабатывает изображения, чаще всего для обработки изображений используются пред-обученные архитектуры (ResNet, Inception) с весами ImageNet. Вероятность такой атаки тем выше, чем больше знаний о Teacher модели мы имеем. Взяв за основу Student модель с той же архитектурой, вероятность успешной атаки будет максимальна.

Исходная статья — Practical Black-Box Attacks against Machine Learning

Данный метод не представлен ни в одной из библиотек и требует самостоятельной имплементации Student модели, а атаки на нее можно проводить, руководствуясь описанными выше методами.

GAN-based методы

Следующим этапом развития BlackBox атак стали атаки, основанные на встраивание BlackBox модели в архитектуру генеративно-состязательной сети (GAN), сети позволяющей генерировать новые объекты, которые впоследствии будут переданы Black-Box модели.

image

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

Почитать подробнее об этом методе можно в исходной статье — UPSET and ANGRI: Breaking High Performance Image Classifiers

Как вы могли догадаться, данные методы не представлены ни в одной из библиотек.

Заключение

В этой статье рассмотрены только некоторые из них. На самом деле, существует большое количество атак. Для более подробного ознакомления рекомендуем ознакомиться с оригинальными статьями и материалами из списка литературы. Мы надеемся, что данный материал помог вам понять базовые концепции adversarial примеров и алгоритмов их генерации.

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

Список литературы

  1. Threat of Adversarial Attacks on Deep Learning in Computer Vision: A Survey — большой обзор методов нападения на алгоритмы глубокого обучения в задаче Computer Vision
  2. Attacking Machine Learning with Adversarial Examples — блог компании OpenAI посвященный adversarial examples
  3. Awesome Adversarial Machine Learning — гитхаб с ссылками на множество полезных материалов по Adversarial тематике
  4. Презентация на тему Adversarial Machine Learning — Презентация с конференции MoscowPythonConf2018 по тематике Adversarial Machine Learning

Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

[Из песочницы] ВИЧ – методы лечения от первых лекарств до сегодняшнего дня

Прежде, чем приступить к изложению материала, хотелось бы сказать несколько слов о себе: участник сообществ по борьбе с отрицанием ВИЧ („ВИЧ/СПИД диссидентством“): в 2016-2018 годах „ВИЧ/СПИД диссиденты и их дети“, с 2018 года – „ВИЧ/СПИД отрицание и альтернативная медицина“. Это ...

Изюминки прошедшей Moscow Python Conf++ 2019: трансформация в площадку для общения

Самыми горячими темами Moscow Python Conf++ оказались асинхронная разработка, а также сопоставление Python, его лучших практик и инструментария с аналогами из других языков, и его место в ландшафте современной разработки. Плюс мы пригласили выступить Бенджамина Петерсона, одного из разработчиков CPython, ...