Безопасность Алгоритмов Машинного Обучения. Защита И Тестирование Моделей С Использованием Python



Безопасность алгоритмов машинного обучения.
</p><p>
 Защита и тестирование моделей с использованием Python

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

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



Защита

Прежде всего, сразу уточним один момент – полностью защититься от такого воздействия невозможно, и это вполне естественно.

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

Вы можете защитить свою модель машинного обучения в два этапа: Обучение — мы обучаем наш алгоритм правильно реагировать на состязательные примеры.

? операция — пытаемся обнаружить пример Adversarial на этапе эксплуатации модели.

Сразу стоит сказать, что работать с представленными в этой статье методами защиты можно с помощью библиотеки Набор инструментов состязательной устойчивости от IBM.

Состязательное обучение



Безопасность алгоритмов машинного обучения.
</p><p>
 Защита и тестирование моделей с использованием Python

Если задать человеку, только что познакомившемуся с проблемой Состязательных примеров, вопрос: «Как защититься от этого эффектаЭ», то 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)



Гауссово увеличение данных



Безопасность алгоритмов машинного обучения.
</p><p>
 Защита и тестирование моделей с использованием Python

Следующий метод описан в статье Эффективная защита от атак противника , использует аналогичную логику: также предлагает добавить в обучающую выборку дополнительные объекты, но в отличие от 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



Безопасность алгоритмов машинного обучения.
</p><p>
 Защита и тестирование моделей с использованием Python

Когда мы говорили об атаках, многие могли заметить, что некоторые атаки (JSMA, OnePixel) зависят от того, насколько силен градиент в той или иной точке входного изображения.

Простой и «дешевый» (с точки зрения вычислительных и временных затрат) метод Bounded ReLU пытается решить эту проблему.

Суть метода заключается в следующем.

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



Безопасность алгоритмов машинного обучения.
</p><p>
 Защита и тестирование моделей с использованием Python

\begin{equation*}f(x)= \begin{случаи} 0, х<0 \\ x, 0 \leq x \leq t \\ т, х> т \end{случаи} \end{уравнение*}

Безопасность алгоритмов машинного обучения.
</p><p>
 Защита и тестирование моделей с использованием Python

Этот метод также описан в статье Эффективная защита от атак противника

Построение модельных ансамблей



Безопасность алгоритмов машинного обучения.
</p><p>
 Защита и тестирование моделей с использованием Python

Обмануть одну обученную модель несложно.

Еще сложнее обмануть две модели одновременно одним объектом.

А что, если таких моделей N? На этом основан метод модельного ансамбля.

Мы просто строим N различных моделей и объединяем их результаты в один ответ. Если модели еще и представлены разными алгоритмами, то обмануть такую систему хотя и возможно, но крайне сложно! Вполне естественно, что реализация ансамблей моделей — это чисто архитектурный подход, вызывающий множество вопросов (Какие базовые модели взять? Как агрегировать результаты базовых моделей? Есть ли зависимости между моделями? и т. д.).

Именно по этой причине данный подход не реализован в ART-IBM.

Сжатие функций



Безопасность алгоритмов машинного обучения.
</p><p>
 Защита и тестирование моделей с использованием Python

Этот метод описан в статье Сжатие функций: обнаружение состязательных примеров в глубоких нейронных сетях , работает на этапе эксплуатации модели.

Это позволяет вам обнаруживать состязательные примеры.

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

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

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

Ниже приведен метод получения сжатых объектов с помощью ART-IBM.

from art.defences.feature_squeezing import FeatureSqueezing FS = FeatureSqueezing() new_x = FS(train_x)

На этом мы заканчиваем с методами защиты.

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

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



Тестирование

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

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

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

Безопасность алгоритмов машинного обучения.
</p><p>
 Защита и тестирование моделей с использованием Python

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

Тогда вам следует использовать методы атаки BlackBox.

Безопасность алгоритмов машинного обучения.
</p><p>
 Защита и тестирование моделей с использованием Python

Общий алгоритм тестирования можно описать на следующем примере:

Безопасность алгоритмов машинного обучения.
</p><p>
 Защита и тестирование моделей с использованием Python

Пусть имеется обученная нейронная сеть, написанная на TensorFlow (TF NN).

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

В этом случае нам необходимо провести атаки WhiteBox. Для этого мы определяем пул атак и фреймворки (FoolBox — FB, CleverHans — CH, Adversarial Robustness Toolbox — ART), которые позволяют реализовать эти атаки.

Затем, подсчитав, сколько атак было успешным, мы рассчитываем показатель успеха (SR).

Если нас устраивает ЗР, заканчиваем тестирование, в противном случае используем один из методов защиты, например, реализованный в ART-IBM. После чего снова проводим атаки и считаем СР.

Эту операцию проделываем циклически, пока СР нас не устроит.

выводы

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

Подводя итог двум статьям, можно сделать следующие выводы:

  1. Не верьте в машинное обучение как в какое-то чудо, способное решить все ваши проблемы.

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

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

  4. Тестируйте свои модели, особенно в тех случаях, когда выходные данные модели напрямую влияют на принимаемое вами решение.

  5. Такие библиотеки, как FoolBox, CleverHans, ART-IBM, предоставляют удобный интерфейс для применения методов для атаки и защиты моделей машинного обучения.

Также в этой статье хотелось бы подвести итоги работы с библиотеками FoolBox, CleverHans и ART-IBM: FoolBox — простая и понятная библиотека для использования атак на нейронные сети, поддерживающая множество различных фреймворков.

CleverHans — библиотека, позволяющая проводить атаки путем изменения многих параметров проводимой атаки, она немного сложнее FoolBox и поддерживает меньшее количество фреймворков.

ART-IBM — единственная описанная выше библиотека, позволяющая работать с методами безопасности; в настоящее время он поддерживает только TensorFlow и Keras, но развивается быстрее остальных.

Здесь стоит сказать, что есть еще один библиотека для работы с примерами Adversarial от Baidu, но, к сожалению, он подходит только для людей, говорящих по-китайски.

В следующей статье на эту тему мы разберем часть задачи, которую предлагалось решить в ходе ZeroNights HackQuest 2018 путем обмана типовой нейросети с помощью библиотеки FoolBox. Теги: #Машинное обучение #информационная безопасность #python #безопасность #цифровая безопасность #цифровая безопасность

Вместе с данным постом часто просматривают: