АТАКА НА МОДЕЛИ МАШИННОГО ОБУЧЕНИЯ

Что изображено на картинке ниже?

Человек: Золотистый ретривер

Модель машинного обучения: Золотистый ретривер

Человек: Золотистый ретривер

Модель машинного обучения: Lion*

Ой! Модель машинного обучения обманули!

ПРЕДСТАВЬТЕ: Что могло произойти?

Представьте, что вы едете на работу на беспилотном автомобиле (вероятно). Внезапно вы понимаете, что ваша машина движется со скоростью 100 км/ч по оживленной дороге после пересечения поперечной полосы, и вы не знаете, почему.

Машину обманули. Точнее, нейронную сеть, которая увидела вывеску на перекрестке, обманули, заставив принять знак СТОП за знак скорости 100 км/ч, и это привело к ее мгновенному ускорению. сильный>.

Что такое состязательные примеры?

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

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

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

Хуже всего то, что модель теперь предсказывает неправильный класс с очень высокой достоверностью – 99,3%. Вместо того, чтобы просто обмануть модель, мы добились того, что модель еще и уверена в своей неисправности.

КАК СОЗДАТЬ ПРОТИВОРЕЧНЫЙ ПРИМЕР?

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

Мы вычисляем градиент так же, как и раньше, с помощью обратного распространения ошибки, а затем мы можем выполнить обновление изображения вместо обновления параметров, в результате чего мы увеличиваем оценку любого класса, который хотим. Например, мы можем взять изображение панды и настроить каждый пиксель в соответствии с градиентом этого изображения в классе кошки. Это немного изменило бы изображение, но теперь оценка кота увеличится. Оказывается, вам не нужно слишком сильно менять изображение, чтобы переключить изображение с правильной классификации как панды на классификацию как-либо еще (например, кошки).

МЕТОД БЫСТРОГО ГРАДИЕНТА.

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

Где,

Adv-x: Состязательное изображение.

x: Исходное входное изображение.

y: исходная метка входа.

ϵ: Множитель, обеспечивающий небольшие возмущения.

θ: Параметры модели.

Дж: Потеря.

ПРОТИВОРЕЧНЫЙ ПАТЧ.

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

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

Когда фотография столешницы с бананом и блокнотом (верхняя фотография) проходит через VGG16, сеть сообщает о классе «банан» с достоверностью 97 % (верхний график). Если мы физически разместим на столе наклейку, ориентированную на класс «тостер» (нижняя фотография), фотография будет классифицирована как тостер с уверенностью 99 % (нижний график)

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

ПРАКТИЧЕСКИЕ АТАКИ

Обман камер видеонаблюдения:

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

Обман системы распознавания лиц:

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

Обман беспилотных автомобилей:

Модель машинного обучения убеждена, что 76% это знак 45 миль в час.

Проблемы конфиденциальности:

Раскрытие обучающего набора

Подача человека 7 обратно в классификатор и вопрос, какое изображение максимизирует вероятность того, что человек 7 будет результатом.

Представление обучающего набора -II

При вводе случайного текста в Google Translate отображается какой-то странный текст. Модель дала лучший ответ, который только мог или который наиболее вероятен.

Когда эти предложения были найдены в Google, выяснилось, что эти слова взяты из Библии и только из Библии. Таким образом, выяснилось, что модель использовала Библию в качестве обучающего набора.

ЗАЩИТА ОТ СРАВНИТЕЛЬНЫХ ПРИМЕРОВ

  1. МОДИФИЦИРОВАННАЯ ФУНКЦИЯ ПОТЕРЬ

Недостаток: с этой функцией потерь становится сложно обучать модель.

2. ОБУЧЕНИЕ НА СРАВНИТЕЛЬНЫХ ПРИМЕРАХ:

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

ОГРАНИЧЕНИЯ:

-Требуются небольшие изображения

-Эффективен только при малейших возмущениях.

-Тренировка медленнее в 10–50 раз медленнее.

- Работает только половину времени

Есть ли у нас, людей, примеры враждебности?

Вы заметите, что линии сначала не выглядят параллельными. Но если внимательно присмотреться, эти линии параллельны друг другу.

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

ЗАКЛЮЧЕНИЕ

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

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

Что, если мы сможем решить эту задачу состязательного примера?

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

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

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

Мы можем разработать новые схемы, чтобы графический процессор работал намного быстрее.

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

ДЕМО на Python с использованием набора данных MNIST:

#import required libraries
from __future__ import print_function
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torchvision import datasets, transforms
import numpy as np
import matplotlib.pyplot as plt
from google.colab import drive
drive.mount('/content/drive')
# Download the pretrained model here 
<https://drive.google.com/drive/folders/1fn83DF14tWmit0RTKWRhPq5uVXt73e0h?usp=sharing>
epsilons = [0, .05, .1, .15, .2, .25, .3]
pretrained_model = "/content/drive/MyDrive/PPT & Python/lenet_mnist_model.pth"
use_cuda=True
# LeNet Model definition
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(1, 10, kernel_size=5)
        self.conv2 = nn.Conv2d(10, 20, kernel_size=5)
        self.conv2_drop = nn.Dropout2d()
        self.fc1 = nn.Linear(320, 50)
        self.fc2 = nn.Linear(50, 10)
    def forward(self, x):
        x = F.relu(F.max_pool2d(self.conv1(x), 2))
        x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))
        x = x.view(-1, 320)
        x = F.relu(self.fc1(x))
        x = F.dropout(x, training=self.training)
        x = self.fc2(x)
        return F.log_softmax(x, dim=1)
# MNIST Test dataset and dataloader declaration
test_loader = torch.utils.data.DataLoader(
    datasets.MNIST('../data', train=False, download=True, transform=transforms.Compose([
            transforms.ToTensor(),
            ])), 
        batch_size=1, shuffle=True)
# Define what device we are using
print("CUDA Available: ",torch.cuda.is_available())
device = torch.device("cuda" if (use_cuda and torch.cuda.is_available()) else "cpu")
# Initialize the network
model = Net().to(device)
# Load the pretrained model
model.load_state_dict(torch.load(pretrained_model, map_location='cpu'))
# Set the model in evaluation mode. In this case this is for the Dropout layers
model.eval()
# FGSM attack code
def fgsm_attack(image, epsilon, data_grad):
    # Collect the element-wise sign of the data gradient
    sign_data_grad = data_grad.sign()
    # Create the perturbed image by adjusting each pixel of the input image
    perturbed_image = image + epsilon*sign_data_grad
    # Adding clipping to maintain [0,1] range
    perturbed_image = torch.clamp(perturbed_image, 0, 1)
    # Return the perturbed image
def test( model, device, test_loader, epsilon ):
    # Accuracy counter
    correct = 0
    adv_examples = []
    # Loop over all examples in test set
    for data, target in test_loader:
        # Send the data and label to the device
        data, target = data.to(device), target.to(device)
        # Set requires_grad attribute of tensor. Important for Attack
        data.requires_grad = True
        # Forward pass the data through the model
        output = model(data)
        init_pred = output.max(1, keepdim=True)[1] # get the index of the max log-probability
        # If the initial prediction is wrong, dont bother attacking, just move on
        if init_pred.item() != target.item():
            continue
        # Calculate the loss
        loss = F.nll_loss(output, target)
        # Zero all existing gradients
        model.zero_grad()
        # Calculate gradients of model in backward pass
        loss.backward()
        # Collect datagrad
        data_grad = data.grad.data
        # Call FGSM Attack
        perturbed_data = fgsm_attack(data, epsilon, data_grad)
        # Re-classify the perturbed image
        output = model(perturbed_data)
        # Check for success
        final_pred = output.max(1, keepdim=True)[1] # get the index of the max log-probability
        if final_pred.item() == target.item():
            correct += 1
            # Special case for saving 0 epsilon examples
            if (epsilon == 0) and (len(adv_examples) < 5):
                adv_ex = perturbed_data.squeeze().detach().cpu().numpy()
                adv_examples.append( (init_pred.item(), final_pred.item(), adv_ex) )
        else:
            # Save some adv examples for visualization later
            if len(adv_examples) < 5:
                adv_ex = perturbed_data.squeeze().detach().cpu().numpy()
                adv_examples.append( (init_pred.item(), final_pred.item(), adv_ex) )
    # Calculate final accuracy for this epsilon
    final_acc = correct/float(len(test_loader))
    print("Epsilon: {}\tTest Accuracy = {} / {} = {}".format(epsilon, correct, len(test_loader), final_acc))
    # Return the accuracy and an adversarial example
    return final_acc, adv_examples
accuracies = []
examples = []
# Run test for each epsilon
for eps in epsilons:
    acc, ex = test(model, device, test_loader, eps)
    accuracies.append(acc)
    examples.append(ex)

plt.figure(figsize=(5,5))
plt.plot(epsilons, accuracies, "*-")
plt.yticks(np.arange(0, 1.1, step=0.1))
plt.xticks(np.arange(0, .35, step=0.05))
plt.title("Accuracy vs Epsilon")
plt.xlabel("Epsilon")
plt.ylabel("Accuracy")
plt.show()

# Plot several examples of adversarial samples at each epsilon
cnt = 0
plt.figure(figsize=(8,10))
for i in range(len(epsilons)):
    for j in range(len(examples[i])):
        cnt += 1
        plt.subplot(len(epsilons),len(examples[0]),cnt)
        plt.xticks([], [])
        plt.yticks([], [])
        if j == 0:
            plt.ylabel("Eps: {}".format(epsilons[i]), fontsize=14)
        orig,adv,ex = examples[i][j]
        plt.title("{} -> {}".format(orig, adv))
        plt.imshow(ex, cmap="gray")
plt.tight_layout()
plt.show()

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

ССЫЛКА

1. Объяснение и использование состязательных примеров Ян Дж. Гудфеллоу, Джонатон Шленс и Кристиан Сегеди Google Inc., Маунтин-Вью, Калифорния

2. Состязательный патч Том Б. Браун, Одуванчик Мане*, Аурко Рой, Мартин Абади, Джастин Гилмер

3. Спасибо, Симен; ван Ранст, Вибе; Годеме, Тун (2019): Обман автоматизированных камер наблюдения: состязательные патчи для обнаружения атак на людей

4. Соучастие в преступлении: реальные и скрытые атаки на современную систему распознавания лиц Шариф и др.

5. Другие истории Vidya на основе средств и аналитики

#Спасибо