Впервые представлена ​​на amitnkhade.com

У них тоже есть слабое место — их можно взломать!

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

Что это такое?

FGSM (Fast Gradient Sign Method) — это тип атаки, который подпадает под категорию состязательных атак. Атаки со стороны противника стали горячей темой в области глубокого обучения, так же, как информационная безопасность и криптография важны в компьютерных науках в целом. Враждебные примеры можно рассматривать как эквивалент вирусов и вредоносных программ для компьютеров, но в контексте моделей глубокого обучения.

Некоторые полезные термины

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

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

Эпсилон: Эпсилон — это небольшое число, определяющее силу атаки противника. Его нужно выбирать обдуманно, чтобы атака была эффективной, но не слишком заметной. Обозначается ϵ.

Предполагая, что вы знакомы с градиентом и функцией потерь, сначала просмотрите любой блог или видео, объясняющие работу ИНС.

Как это работает?

  1. Входные данные. Мы начинаем с предварительно обученной модели машинного обучения и определенного изображения, которое мы хотим изменить, чтобы обмануть модель.
  2. Вычисление градиента: мы вычисляем, насколько чувствителен прогноз модели к изменениям входного изображения. Это делается путем наблюдения за тем, как изменяется функция потерь модели, когда мы вносим небольшие корректировки в изображение.
  3. Определение возмущения: мы определяем направление, в котором мы должны изменить изображение, чтобы повысить вероятность того, что модель сделает неправильный прогноз. Для этого мы смотрим на знак (положительный или отрицательный) градиента, который мы вычислили ранее.
  4. Укажите величину возмущения: мы решаем, насколько мы хотим изменить изображение. Это контролируется параметром, называемым эпсилон (ε). Меньший эпсилон означает тонкое изменение, а больший эпсилон означает более заметное изменение.
  5. Создать состязательный пример. Используя знак градиента и выбранный эпсилон, мы создаем возмущение, которое добавим к исходному изображению. Это возмущение вычисляется путем умножения знака градиента на значение эпсилон.

где

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

https://adversarial-ml-tutorial.org/adversarial_examples/