Автор: Александр Гончаренко Редактура: Александр Наздрюхин
Довольно часто можно услышать о том, что нейросеть обошла человека при решении той или иной задачи. Например, модели для CV. Считается, что они стали лучше нас уже в 2015 году.
Рисунок 1. Процентное сопоставление Traditional CV и Deep learning CV
Это не совсем так. Замеры для сопоставления человека и нейросети проводятся на подвыборках: они лишь похожи на тренировочную систему, а в реальной могут работать хуже, особенно при желании намеренного обмана нейросети человеком 🙂
Давайте посмотрим на следующие два рисунка и подумаем, что на каждом из них изображено.
Рисунок 2. Молоток vs топор
Рисунок 3. Молоток vs топор
По мнению resnet152, на первой картинке представлен молоток, а на второй — топор!
Почему так? Вторая картинка была получена при помощи первой за счет добавления специального вектора возмущения (perturbation). Для человеческого глаза разница между изображениями незаметна, однако нейросеть предсказывает ошибочный класс. В случае с молотком и топором это не критично, но если злоумышленник решит попробовать обмануть нейросеть автопилота, это может привести к плачевным последствиям.
Изменение входного вектора с целью “обмана” нейросети называется состязательной (adversarial) атакой.
Самая простая состязательная атака — поиск вектора возмущения $\epsilon$, при котором нейросеть будет уверенно предсказывать отличный от исходного класс. Вектор $\epsilon$ можно найти с помощью градиентного спуска.
Давайте рассмотрим градиент:
где $L$ — лосс функция;
$x$ — исходное изображение;
$N$ — нейросеть c весами $w$.
Напомним, что градиент — это направление самого быстрого увеличения функции. Значит, при движении $\epsilon$ в сторону градиента мы максимизируем лосс функцию, что нам и нужно. Следовательно, мы можем вывести шаг градиентного спуска для оптимизации $\epsilon$ (на самом деле это градиентный “подъем”, ****так как мы максимизируем функцию):