Впервые представлена на amitnkhade.com
У них тоже есть слабое место — их можно взломать!
Враждебные атаки, когда входные данные настраиваются, чтобы ввести эти сети в заблуждение, стали проблемой. В этом посте мы рассмотрим основы взлома нейронных сетей ответственным и этичным образом.
Что это такое?
FGSM (Fast Gradient Sign Method) — это тип атаки, который подпадает под категорию состязательных атак. Атаки со стороны противника стали горячей темой в области глубокого обучения, так же, как информационная безопасность и криптография важны в компьютерных науках в целом. Враждебные примеры можно рассматривать как эквивалент вирусов и вредоносных программ для компьютеров, но в контексте моделей глубокого обучения.
Некоторые полезные термины
Состязательный пример. Состязательные примеры — это тщательно продуманные образцы, созданные с целью заставить модели машинного обучения совершать ошибки.
Возмущение.Возмущение относится к небольшим изменениям, добавляемым к входным данным, чтобы обмануть прогнозы модели и использовать уязвимости в процессе принятия решений моделью.
Эпсилон: Эпсилон — это небольшое число, определяющее силу атаки противника. Его нужно выбирать обдуманно, чтобы атака была эффективной, но не слишком заметной. Обозначается ϵ.
Предполагая, что вы знакомы с градиентом и функцией потерь, сначала просмотрите любой блог или видео, объясняющие работу ИНС.
Как это работает?
- Входные данные. Мы начинаем с предварительно обученной модели машинного обучения и определенного изображения, которое мы хотим изменить, чтобы обмануть модель.
- Вычисление градиента: мы вычисляем, насколько чувствителен прогноз модели к изменениям входного изображения. Это делается путем наблюдения за тем, как изменяется функция потерь модели, когда мы вносим небольшие корректировки в изображение.
- Определение возмущения: мы определяем направление, в котором мы должны изменить изображение, чтобы повысить вероятность того, что модель сделает неправильный прогноз. Для этого мы смотрим на знак (положительный или отрицательный) градиента, который мы вычислили ранее.
- Укажите величину возмущения: мы решаем, насколько мы хотим изменить изображение. Это контролируется параметром, называемым эпсилон (ε). Меньший эпсилон означает тонкое изменение, а больший эпсилон означает более заметное изменение.
- Создать состязательный пример. Используя знак градиента и выбранный эпсилон, мы создаем возмущение, которое добавим к исходному изображению. Это возмущение вычисляется путем умножения знака градиента на значение эпсилон.
где
adv_x : враждебное изображение.
x : Исходное входное изображение.
y : исходная метка ввода.
ϵ: множитель, обеспечивающий малые возмущения.
θ : параметры модели.
Джей :Потеря.
6. Оцените состязательный пример: мы вводим измененное изображение (состязательный пример) в модель и проверяем его прогноз. Цель состоит в том, чтобы создать изображение, очень похожее на оригинал, но обманом заставляющее модель делать неверный прогноз.
Где он используется?
Техника FGSM используется для создания хитрых примеров, которые могут обмануть модели машинного обучения и навредить им. Это помогает проверить, насколько надежна модель, найти способы сделать ее более безопасной, обучив ее против этих атак, изучить проблемы безопасности и лучше понять, как ведут себя модели. FGSM важен для повышения безопасности машинного обучения и расширения наших знаний в этой области.
Как это использовать практически?
Вот реализация Python FGSM.
Мы начнем с обучения классификатора изображений MNIST.
import numpy as np import tensorflow as tf from tensorflow.keras.datasets import mnist from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Flatten # Load MNIST dataset (x_train, y_train), (x_test, y_test) = mnist.load_data() # Normalize pixel values x_train = x_train / 255.0 x_test = x_test / 255.0 # Convert labels to one-hot encoding y_train = tf.keras.utils.to_categorical(y_train, 10) y_test = tf.keras.utils.to_categorical(y_test, 10) # Create a simple feed-forward neural network model model = Sequential([ Flatten(input_shape=(28, 28)), Dense(128, activation='relu'), Dense(10, activation='softmax') ]) # Compile the model model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # Train the model model.fit(x_train, y_train, epochs=5, batch_size=32, validation_data=(x_test, y_test))
Далее мы применим FGSM.
import matplotlib.pyplot as plt def fgsm_attack(model, x, y_true, epsilon=0.9): # Compute gradients of the loss w.r.t. the input with tf.GradientTape() as tape: tape.watch(x) predictions = model(x) loss = tf.keras.losses.categorical_crossentropy(y_true, predictions) gradients = tape.gradient(loss, x) # Get the sign of the gradients gradients_sign = tf.sign(gradients) # Generate adversarial examples x_adv = x + epsilon * gradients_sign return x_adv # Select a random test sample index = np.random.randint(0, len(x_test)) x_sample = x_test[index].reshape(1, 28, 28) y_true = y_test[index].reshape(1, 10) # Reshape y_true to (1, 10) # Convert x_sample to a TensorFlow tensor x_sample = tf.convert_to_tensor(x_sample, dtype=tf.float32) # Generate adversarial example using FGSM attack x_adv = fgsm_attack(model, x_sample, y_true, epsilon=0.1) # Predict the label for the original and adversarial example y_pred_original = np.argmax(model.predict(x_sample), axis=-1) y_pred_adv = np.argmax(model.predict(x_adv), axis=-1) # Plot the original and adversarial images plt.figure(figsize=(8, 4)) plt.subplot(1, 2, 1) plt.imshow(x_sample.numpy().reshape(28, 28), cmap='gray') plt.title(f'Original Image\nPredicted label: {y_pred_original[0]}, True label: {np.argmax(y_true)}') plt.axis('off') plt.subplot(1, 2, 2) plt.imshow(x_adv.numpy().reshape(28, 28), cmap='gray') plt.title(f'Adversarial Image\nPredicted label: {y_pred_adv[0]}, True label: {np.argmax(y_true)}') plt.axis('off') plt.tight_layout() plt.show()
Выходы из исходного изображения. Изображение было точно классифицировано.
Исходы с состязательным примером, модель TensorFlow была успешно обманута.
Вот ссылка для завершения кода.
Как правило, состязательное изображение и исходное изображение должны казаться похожими друг на друга, чтобы их не могли обнаружить люди, но при этом они могли вызвать ответ нейронной сети. В моей ситуации изображения можно отличить друг от друга, потому что корректировка значения эпсилон не была выполнена правильно. Однако во время атаки эффективность зависит от того, чтобы оставаться в пределах эпсилон-диапазона, при котором изображения выглядят одинаково.
Подводя итог, мы рассмотрели основы атаки FGSM, что помогает нам понять, как она работает. Настраивая изображение с помощью градиентов, мы можем создавать обманчивые версии, которые обманывают нейронные сети, но при этом выглядят почти идентичными оригиналу. Важно знать, что эта область постоянно развивается, разрабатываются новые методы и стратегии. Чтобы оставаться в курсе событий и справляться с проблемами, связанными с атаками злоумышленников, крайне важно продолжать учиться и исследовать. Поступая таким образом, мы можем внести свой вклад в создание более безопасных систем искусственного интеллекта, способных противостоять этим манипуляциям.
Спасибо.
Вот мой LinkedIn
Я проживаю на amitnkhade.com
Использованная литература:
https://engineering.purdue.edu/ChanGroup/ECE595/files/chapter3.pdf