Автор: Александр Гончаренко Редактура: Александр Наздрюхин

Введение

Довольно часто можно услышать о том, что нейросеть обошла человека при решении той или иной задачи. Например, модели для CV. Считается, что они стали лучше нас уже в 2015 году.

Рисунок 1. Процентное сопоставление Traditional CV и Deep learning CV

Рисунок 1. Процентное сопоставление Traditional CV и Deep learning CV

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

Давайте посмотрим на следующие два рисунка и подумаем, что на каждом из них изображено.

Рисунок 2. Молоток vs топор

Рисунок 2. Молоток vs топор

Рисунок 3. Молоток vs топор

Рисунок 3. Молоток vs топор

По мнению resnet152, на первой картинке представлен молоток, а на второй — топор!

Почему так? Вторая картинка была получена при помощи первой за счет добавления специального вектора возмущения (perturbation). Для человеческого глаза разница между изображениями незаметна, однако нейросеть предсказывает ошибочный класс. В случае с молотком и топором это не критично, но если злоумышленник решит попробовать обмануть нейросеть автопилота, это может привести к плачевным последствиям.

Изменение входного вектора с целью “обмана” нейросети называется состязательной (adversarial) атакой.

Adversarial атаки

Самая простая состязательная атака — поиск вектора возмущения $\epsilon$, при котором нейросеть будет уверенно предсказывать отличный от исходного класс. Вектор $\epsilon$ можно найти с помощью градиентного спуска.

Давайте рассмотрим градиент:

$\nabla_{\epsilon}(L)= \frac{dL(N_w(x+\epsilon), y)}{d\epsilon}$

где $L$ — лосс функция;

$x$ — исходное изображение;

$N$ — нейросеть c весами $w$.

Напомним, что градиент — это направление самого быстрого увеличения функции. Значит, при движении $\epsilon$ в сторону градиента мы максимизируем лосс функцию, что нам и нужно. Следовательно, мы можем вывести шаг градиентного спуска для оптимизации $\epsilon$ (на самом деле это градиентный “подъем”, ****так как мы максимизируем функцию):