Нейросети используются уже довольно широко. Чат-боты, распознавание изображений, преобразование речи в текст и автоматические переводы с одного языка на другой — вот лишь некоторые сферы применения глубокого обучения, которое активно вытесняет другие подходы. И причина в основном в более широких возможностях обобщения при обработке больших объёмов данных.
А что насчёт целенаправленных атак? Можно ли использовать особенности работы нейросетей и создать такие данные, которые будут классифицироваться ошибочно? В этой статье мы рассмотрим несколько способов дополнения данных, которые сводят с ума нейросети глубокого обучения. И что ещё интереснее, эти данные для человека выглядят неизменёнными.
Структура статьи
В статье использован ряд исследовательских работ, посвящённых состязательному обучению (adversarial training).
Вам пригодятся базовые знания о нейросетях вроде градиентного спуска (Gradient Descent).
Объяснение и примеры использования состязательного обучения
Вероятно, это одна из первых работ, где продемонстрировано, как исказить пиксели изображения, чтобы классификатор принял ошибочное решение. В основе метода лежит факт, что изображения обычно представлены в виде 8-битных значений (каждый пиксель может иметь только одно целочисленное значение в диапазоне от 0 до 255, то есть в сумме 2? значений). Следовательно, если искажения не превышают минимального значения, которое может быть представлено в изображении, то классификатор должен полностью их игнорировать и считать искажённое изображение неизменённым. Но авторы показывают, что это не так.
Они определяют ошибочную классификацию входных данных уравнением
Здесь
— входные данные, предназначенные для введения нейросети в заблуждение.
— выходные данные классификатора по неизменённому изображению (которое классифицируется корректно).
— этот компонент уравнения интереснее. Это специальный вектор, добавленный к исходным входным данным таким образом, чтобы вся сеть приняла ошибочное решение о классификации. То есть уравнение читается так: «Сеть может ошибиться в классификации, если к оригинальным входным данным добавлены такие данные, что получившийся результат заставляет нейросеть отнести его к другому классу». Это совершенно очевидное определение. Куда интереснее, как находить значение .
определяется так:
— это знаковая функция (sign function). Она отвечает лишь за знак значения. Если значение положительное, функция равна 1, если отрицательное, то –1.
— это градиенты (относящиеся к входным данным).
— функция стоимости (cost function), используемая для обучения нейросети.
— параметры модели.
— входные данные.
— целевые выходные данные, то есть «ошибочный» класс.
Поскольку вся сеть является дифференцируемой, значения градиента можно легко найти с помощью метода обратного распространения ошибки (backprop).
С помощью градиентных значений панда классифицируется ошибочно
Следовательно, изменив входные данные и выяснив с помощью анализа, какое направление нужно изменить (применив информацию о градиентах), можно легко заставить сеть неправильно классифицировать изображение. На картинке выше — величина градиентов, которые применяются к изображению (в данном случае равна 0,007).
Однопиксельная атака, призванная обмануть нейросети глубокого обучения
В предыдущей работе для обмана нейросети искались небольшие изменения для целого изображения. А здесь авторы пошли ещё дальше. Они утверждают, что не требуется изменять всё изображение. Вместо этого достаточно изменить небольшую часть, чтобы получившаяся картинка была ошибочно отнесена к другому классу.
Для заданных входных данных вероятность принадлежности к классу равна . Задача описывается уравнением
— оптимизируемый вредоносный класс (adversarial class).
— вредоносные данные (adversarial data) (такие же, как в предыдущей работе), которые добавляются ко входным данным. Однако в данном случае у есть ограничение:
Эта формула означает, что количество элементов в векторе должно быть меньше настраиваемого параметра . означает нулевую норму (0th norm) — количество ненулевых элементов в векторе. Максимальное значение элементов, генерируемых , ограничено, как и в предыдущей работе.
Как найти правильный вектор нападения
В предыдущей работе для оптимизации ради получения правильных значений вредоносных данных использовался метод обратного распространения ошибки (backprop). Я считаю, что нечестно давать доступ к градиентам модели, поскольку становится возможным понять, как именно «думает» модель. Следовательно, облегчается оптимизация для вредоносных входных данных.
В данной работе авторы решили их не использовать. Вместо этого они прибегли к дифференциальной эволюции (Differential Evolution). При таком методе берутся образцы, на основе которых генерируются «дочерние» образцы, а из них потом оставляют лишь те, что получились лучше «родительских». Затем выполняется новая итерация генерирования «дочерних» образцов.
Это не позволяет получить информацию о градиентах, и находить правильные значения для вредоносных входных данных можно, не зная, как работает модель (это возможно, даже если модель не будет дифференцируемой, в отличие от предыдущего метода).
Вот что получилось у авторов:
Результат однопиксельной атаки. В картинках изменено всего по одному пикселю, и в результате нейросеть классифицировала их неправильно. В скобках указана ошибочная категория после атаки
Для CIFAR 10 значение оставалось равным , то есть изменять можно было только один пиксель. А конкурент смог обмануть классификатор, и тот относил изображения к совершенно другим классам.
Вредоносная заплатка
Вредоносная заплатка (adversarial patch) — совсем свежая (и очень популярная) методика генерирования вредоносных изображений. В предыдущих двух методиках вредоносные данные добавлялись к исходным входным данным. Это означает, что вредоносные данные зависят от самих входных данных.
Авторы вредоносной заплатки подбирают некие данные, которые подходят для всех изображений. Термин «заплатка» в данном случае нужно понимать буквально: это изображение меньшего размера (относительно входных изображений), которое накладывается поверх входных, чтобы обмануть классификатор.
Оптимизация работает в соответствии с этим уравнением:
— подобранная заплатка.
— целевой (т. е. ошибочный) класс.
Здесь интересно вот что:
Это функция применения заплатки. По сути, она просто решает (случайным образом), куда и как накладывать заплату на входное изображение. — сам патч. — входное изображение. — место наложения заплаты. — преобразование заплаты (например, масштабирование и вращение).
Важно отметить, что применительно к вышеприведённому уравнению система обучалась на всех изображениях в датасете (ImageNet), на всех возможных преобразованиях. И заплата обманывала классификатор на ВСЕХ изображениях датасета. Это главное отличие данного метода от двух предыдущих. Там нейросеть обучалась на одном изображении, а этот метод позволяет подобрать заплату, которая работает на большой выборке картинок.
Заплатку можно легко оптимизировать с помощью метода обратного распространения ошибки.
Попробуйте сами
В авторской работе приведено изображение заплатки, которую можно накладывать на ваши изображения для обмана классификатора. Заплатка сработает, даже если распечатать и положить её рядом с физическим объектом.
«Вы это слышали»? Атака на системы распознавания речи
Обдурить можно не только модели, классифицирующие изображения. Авторы этой работы демонстрируют, как ввести в заблуждение модели автоматического распознавания речи.
Особенность звуковых данных в том, что входные данные нельзя легко изменить с помощью метода обратного распространения ошибки. Причина в том, что входные данные для звукового классификатора проходят через преобразование, для которого требуется вычислить коэффициенты косинусного преобразования Фурье (Mel Frequency Cepstral Coefficients, MFCC), они затем используются в качестве входных данных для модели. К сожалению, вычисление MFCC не является дифференцируемой функцией, поэтому оптимизировать входные данные с помощью метода обратного распространения ошибки не получится.
Вместо этого авторы использовали генетический алгоритм, аналогичный рассмотренному выше. Входные родительские данные модифицируются, в результате получаем дочерние данные. Сохраняются те «потомки», которые лучше обманывают классификатор; они, в свою очередь, тоже модифицируются, и так раз за разом.
Заключение
Глубокое обучение — превосходный инструмент, и он будет использоваться всё шире. И очень важно знать, каким образом можно обмануть нейросети, заставив их неверно классифицировать. Это позволяет оценить границы предположительного обмана подобных систем и найти способы защиты.
Ещё один метод обмана разработан в MIT, но работа пока не опубликована. Утверждается, что этот метод позволяет добиться 1000-кратного ускорения генерирования вредоносных входных данных. Анонс исследования можно посмотреть здесь.
Комментарии (20)
cjbars
02.02.2018 21:24Очень интересен вектор применения этих атак
inoyakaigor
02.02.2018 21:44Загружать в Фейсбук свои фоточки, чтобы он на них не находил людей или, если угодно, порно на ютуб.
LynXzp
03.02.2018 01:17+1Для троллинга просто необъятные просторы.
А если еще постараться то можно будет загрузить много фотографий где Вы с Цукербергом )
А еще… это классно.
А вдруг людей так тоже можно обмануть?KvanTTT
03.02.2018 01:44А вдруг людей так тоже можно обмануть?
Можно, но по-другому. Во-первых, есть слепое пятно. Во-вторых — оптические иллюзии.
BubaVV
02.02.2018 23:54Частично уже было: habrahabr.ru/post/335026
Хотя это претензия больше к первоисточнику
Fil
03.02.2018 12:41+2Экспериментировал с предобученной VGG-16. Тоже получилось обманывать, правда не так круто как в статье. На первой картинке оригинал (надо было брать без однородного фона), на второй кот (95%), на последней 99.99% кот, но функция потерь не учитывала разницу между генерируемой и исходной картинкой, а подгоняла только выход.
TheIncognito
03.02.2018 17:27Интересно, какого качества и какого фрагмента заплатки хватит для обмана. Ведь может же она не попасть в кадр целиком или попасть под сглаживание.
WinPooh73
03.02.2018 20:50Интересно было бы применить эту атаку к АльфаГо. Ставим камень куда-нибудь в совершенно абсурдное место доски, после чего программа начинает считать свою позицию безнадёжно проигранной, и отдавать группу за группой :)
khim
03.02.2018 21:21Не получится. Там же не только нейросеть, но и метод Монте-Карло. Вот как раз метод Монте-Карло — очень эффективно игнорирует всякий «мусор».
Просто нейросеть выиграть не то, что у чемпиона, но и у обычного профи не сможет…
alexandershelupinin
03.02.2018 23:48как то не верится в возможность существования «универсальной заплатки», которая будет работать одинаково, независимо от типа нейросети, независимо от кол-ва слоев и настроек сети, независимо от обучающей выборки.
Я верю что можно подобрать «заплатку» под фиксированные весовые коэффициенты статичной сети, но если обучающую выборку продолжать тренировать на все новых и новых данных, то очевидно что никакая универсальная заплатка работать не будет.brickerino
05.02.2018 14:41Ну до некоторой степени существование возможно.
В нейросетях есть направление «security» в смысле взлома нейросети и соответственно защиты от взлома.
В некоторых работах показано, что можно генерировать adversarial примеры для сети, которой у тебя нет — обучить свою похожую, генерировать примеры для неё и они с высокой степень подойдут для целевой сети. Если нет исходного датасета — можно разметить какой-нибудь датасет с помощью целевой нейросети и обучаться на этом. В общем, есть подходы.
Перенос таких примеров можно грубо рассматривать как то, что какая-нибудь визуальная иллюзия\картинка обманывает мозг большинства людей, несмотря на то, что все люди в некоторой степени разные, видели в жизни разные примеры.
Также есть статья, которая показывает, что при добавлении adversarial примеров в обучающую выборку генерация новых не сильно затрудняется.
snipsnap
05.02.2018 15:00Как работает эта заплатка? Добавил её на фото зимородка. Гугл опознал картинку с заплаткой даже лучше чем оригинальную. Или заплатка должна закрывать изображение полностью? :)
Исходная картинкаbrickerino
05.02.2018 17:40Ну примерно так и должна работать, только должна работать.
Вот тут почитать можно.
magisterbes
Прекрасно. Просто прекрасно. Кое-что я из этого читал еще пару лет назад, когда в картинках заменялся один пиксель на белый и она переставала распознаваться. Но тогда CNN еще не были так модны, впрочем, они бы как раз его усилили на этапе pooling.
brickerino
Белый пиксель бы усилился на этапе пулинга, если есть фильтр, который на него реагирует. Если фильтра нет — множество для пулинга не особо изменится.
magisterbes
Поэтому, собственно, не любой битый пиксель срабатывает, вроде как.