В рамках предыдущей статьи мы говорили о такой проблеме машинного обучения, как Adversarial example и некоторых видах атак, позволяющих их генерировать.
В этой статье будут рассмотрены алгоритмы защиты от такого типа воздействия и рекомендации по тестированию моделей.
Защита
Прежде всего, сразу уточним один момент – полностью защититься от такого воздействия невозможно, и это вполне естественно.Ведь если бы мы решили проблему Состязательных примеров полностью, то мы одновременно решили бы и задачу построения идеальной гиперплоскости, что, естественно, невозможно сделать, не имея общего набора данных.
Вы можете защитить свою модель машинного обучения в два этапа: Обучение — мы обучаем наш алгоритм правильно реагировать на состязательные примеры.
? операция — пытаемся обнаружить пример Adversarial на этапе эксплуатации модели.
Сразу стоит сказать, что работать с представленными в этой статье методами защиты можно с помощью библиотеки Набор инструментов состязательной устойчивости от IBM.
Состязательное обучение
Если задать человеку, только что познакомившемуся с проблемой Состязательных примеров, вопрос: «Как защититься от этого эффектаЭ», то 9 человек из 10 наверняка скажут: «Давайте добавим сгенерированные объекты в обучающую выборку».
».
Такой подход был сразу же предложен в статье Интригующие свойства нейронных сетей еще в 2013 году.
Именно в этой статье впервые была описана эта проблема и атака L-BFGS, позволяющая получать примеры Adversarial. Этот метод очень прост. Мы генерируем примеры Adversarial с использованием различных типов атак и добавляем их в обучающую выборку на каждой итерации, тем самым увеличивая «устойчивость» модели Adversarial к примерам.
Недостаток этого метода вполне очевиден: на каждой итерации обучения для каждого примера мы можем сгенерировать очень большое количество примеров, и соответственно время обучения модели увеличивается во много раз.
Вы можете применить этот метод с помощью библиотеки ART-IBM следующим образом.
from art.defences.adversarial_trainer import AdversarialTrainer trainer = AdversarialTrainer(model, attacks) trainer.fit(x_train, y_train)
Гауссово увеличение данных
Следующий метод описан в статье Эффективная защита от атак противника , использует аналогичную логику: также предлагает добавить в обучающую выборку дополнительные объекты, но в отличие от Adversarial Training эти объекты являются не Adversarial примерами, а слегка зашумленными объектами обучающей выборки (в качестве шума используется гауссов шум, отсюда и название метода ).
И действительно, это кажется очень логичным, ведь основная проблема моделей заключается именно в плохой устойчивости к шуму.
Этот метод показывает результаты, аналогичные состязательному обучению, при этом тратя гораздо меньше времени на создание объектов для обучения.
Вы можете применить этот метод, используя класс GaussianAugmentation в ART-IBM. from art.defences.gaussian_augmentation import GaussianAugmentation
GDA = GaussianAugmentation()
new_x = GDA(x_train)
Сглаживание меток
Метод Label Smoothing очень прост в реализации, но тем не менее несет в себе большой вероятностный смысл.Мы не будем вдаваться в подробности вероятностной интерпретации этого метода; вы можете найти это в оригинальной статье Переосмысление начальной архитектуры компьютерного зрения .
Но, если коротко, Label Smoothing — это дополнительный тип регуляризации модели в задаче классификации, который делает ее более устойчивой к шуму.
Фактически этот метод сглаживает метки классов.
Делаем их, скажем, не 1, а 0,9. Таким образом, при обучении модели наказываются за гораздо большую «уверенность» в метке для конкретного объекта.
Применение этого метода в Python можно увидеть ниже.
from art.defences.label_smoothing import LabelSmoothing
LS = LabelSmoothing()
new_x, new_y = LS(train_x, train_y)
Ограниченный ReLU
Когда мы говорили об атаках, многие могли заметить, что некоторые атаки (JSMA, OnePixel) зависят от того, насколько силен градиент в той или иной точке входного изображения.
Простой и «дешевый» (с точки зрения вычислительных и временных затрат) метод Bounded ReLU пытается решить эту проблему.
Суть метода заключается в следующем.
Заменим функцию активации ReLU в нейросети на такую же, но ограниченную не только снизу, но и сверху, тем самым мы сгладим карты градиентов, и не получится получить всплеск в определенных точках, что не позволит нам обмануть алгоритм, изменив один пиксель изображения.
\begin{equation*}f(x)=
\begin{случаи}
0, х<0
\\
x, 0 \leq x \leq t
\\
т, х> т
\end{случаи}
\end{уравнение*}
Этот метод также описан в статье Эффективная защита от атак противника
Построение модельных ансамблей
Обмануть одну обученную модель несложно.
Еще сложнее обмануть две модели одновременно одним объектом.
А что, если таких моделей N? На этом основан метод модельного ансамбля.
Мы просто строим N различных моделей и объединяем их результаты в один ответ. Если модели еще и представлены разными алгоритмами, то обмануть такую систему хотя и возможно, но крайне сложно! Вполне естественно, что реализация ансамблей моделей — это чисто архитектурный подход, вызывающий множество вопросов (Какие базовые модели взять? Как агрегировать результаты базовых моделей? Есть ли зависимости между моделями? и т. д.).
Именно по этой причине данный подход не реализован в ART-IBM.
Сжатие функций
Этот метод описан в статье Сжатие функций: обнаружение состязательных примеров в глубоких нейронных сетях , работает на этапе эксплуатации модели.
Это позволяет вам обнаруживать состязательные примеры.
Идея этого метода заключается в следующем: если вы обучаете n моделей на одних и тех же данных, но с разной степенью сжатия, их результаты все равно будут схожими.
В то же время пример Adversarial, работающий в исходной сети, скорее всего, потерпит неудачу в дополнительных сетях.
Таким образом, вычислив попарную разницу между выходами исходной нейронной сети и дополнительных, выбрав из них максимум и сравнив его с заранее выбранным порогом, мы можем констатировать, что объект, подаваемый на вход, является либо Состязательным, либо абсолютно валидным.
Ниже приведен метод получения сжатых объектов с помощью ART-IBM. from art.defences.feature_squeezing import FeatureSqueezing
FS = FeatureSqueezing()
new_x = FS(train_x)
На этом мы заканчиваем с методами защиты.
Но было бы неправильно не понять один важный момент. Если злоумышленник не имеет доступа к входным и выходным данным модели, он не поймет, как необработанные данные обрабатываются в вашей системе перед входом в модель.
Тогда и только тогда все его атаки сведутся к случайному перебору входных значений, который, естественно, вряд ли приведет к желаемому результату.
Тестирование
Теперь поговорим об алгоритмах тестирования для противодействия состязательным примерам.Здесь в первую очередь нам нужно понять, как мы будем тестировать нашу модель.
Если предположить, что злоумышленник каким-то образом может получить полный доступ ко всей модели, то нам необходимо протестировать нашу модель с помощью методов атаки WhiteBox.
В другом случае мы предполагаем, что злоумышленник никогда не получит доступа к «внутренностям» нашей модели, но сможет, пусть и косвенно, повлиять на входные данные и увидеть результат работы модели.
Тогда вам следует использовать методы атаки BlackBox.
Общий алгоритм тестирования можно описать на следующем примере:
Пусть имеется обученная нейронная сеть, написанная на TensorFlow (TF NN).
Мы экспертно утверждаем, что наша сеть может попасть в руки злоумышленника, проникшего в систему, где находится модель.
В этом случае нам необходимо провести атаки WhiteBox. Для этого мы определяем пул атак и фреймворки (FoolBox — FB, CleverHans — CH, Adversarial Robustness Toolbox — ART), которые позволяют реализовать эти атаки.
Затем, подсчитав, сколько атак было успешным, мы рассчитываем показатель успеха (SR).
Если нас устраивает ЗР, заканчиваем тестирование, в противном случае используем один из методов защиты, например, реализованный в ART-IBM. После чего снова проводим атаки и считаем СР.
Эту операцию проделываем циклически, пока СР нас не устроит.
выводы
На этом я хотел бы закончить общей информацией об атаках, защите и тестировании моделей машинного обучения.Подводя итог двум статьям, можно сделать следующие выводы:
- Не верьте в машинное обучение как в какое-то чудо, способное решить все ваши проблемы.
- При использовании алгоритмов машинного обучения в своих задачах подумайте, насколько устойчив алгоритм к таким угрозам, как состязательные примеры.
- Алгоритм может быть защищен как со стороны машинного обучения, так и со стороны системы, в которой эта модель эксплуатируется.
- Тестируйте свои модели, особенно в тех случаях, когда выходные данные модели напрямую влияют на принимаемое вами решение.
- Такие библиотеки, как FoolBox, CleverHans, ART-IBM, предоставляют удобный интерфейс для применения методов для атаки и защиты моделей машинного обучения.
CleverHans — библиотека, позволяющая проводить атаки путем изменения многих параметров проводимой атаки, она немного сложнее FoolBox и поддерживает меньшее количество фреймворков.
ART-IBM — единственная описанная выше библиотека, позволяющая работать с методами безопасности; в настоящее время он поддерживает только TensorFlow и Keras, но развивается быстрее остальных.
Здесь стоит сказать, что есть еще один библиотека для работы с примерами Adversarial от Baidu, но, к сожалению, он подходит только для людей, говорящих по-китайски.
В следующей статье на эту тему мы разберем часть задачи, которую предлагалось решить в ходе ZeroNights HackQuest 2018 путем обмана типовой нейросети с помощью библиотеки FoolBox. Теги: #Машинное обучение #информационная безопасность #python #безопасность #цифровая безопасность #цифровая безопасность
-
Гормоны И Психика: Профилактика Деменции
19 Oct, 24 -
W3C Вернул Элемент
19 Oct, 24 -
Настройка Wi-Fi В Ubuntu
19 Oct, 24