Una guía de AdverTorch: caja de herramientas de Python para la solidez de los adversarios

Estás leyendo la publicación: Una guía de AdverTorch: caja de herramientas de Python para la solidez de los adversarios

AdverTorch es un conjunto de herramientas para estudiar la solidez de los adversarios. Incluye una variedad de implementaciones de asalto y defensa, así como sólidos mecanismos de entrenamiento. AdverTorch se basa en PyTorch y aprovecha los beneficios del gráfico computacional dinámico para crear implementaciones de referencia sucintas y eficientes. En este artículo, analizaremos este conjunto de herramientas, sus principios de diseño y cómo funciona. Los puntos importantes que se explorarán en este artículo se mencionan a continuación.

Tabla de contenido

  1. ¿Qué es un ataque adversario?
  2. ¿Cómo se puede utilizar AdverTorch?
  3. Implementando un ataque

Primero analicemos un ataque adversario.

¿Qué es un ataque adversario?

Los ataques adversarios son actos engañosos destinados a socavar el rendimiento del aprendizaje automático, provocar la desviación del modelo u obtener acceso a datos confidenciales. Sin embargo, en los últimos años, el auge del aprendizaje profundo y su incorporación a una amplia gama de aplicaciones ha despertado el interés por el aprendizaje automático antagónico.

En la industria de la seguridad, existe un temor creciente de que las fallas adversarias puedan usarse para atacar sistemas impulsados ​​​​por IA. A diferencia del software tradicional, que requiere que los ingenieros configuren manualmente las instrucciones y las reglas, los algoritmos de aprendizaje automático aprenden a través de la experiencia.

Para diseñar un sistema de detección de carriles, por ejemplo, el desarrollador crea un algoritmo de aprendizaje automático y lo entrena al alimentarlo con una gran cantidad de fotos etiquetadas de carriles de calles desde varios ángulos y condiciones de iluminación. Luego, el algoritmo de aprendizaje automático se ajusta para detectar patrones recurrentes en imágenes de calles. Si la estructura del algoritmo es adecuada y hay suficientes datos de entrenamiento, el modelo podrá detectar carriles en nuevas imágenes y videos con alta precisión.

Los algoritmos de aprendizaje automático, a pesar de su eficacia en áreas difíciles como la visión artificial y el reconocimiento de voz, son motores de inferencia estadística: funciones matemáticas complicadas que convierten entradas en salidas.

Cuando un sistema de aprendizaje automático identifica una imagen que contiene un objeto específico, descubre que los valores de píxeles en esa imagen son estadísticamente similares a otras fotografías del objeto examinado durante el entrenamiento.

🔥 Recomendado:  Ledger revela una colección de NFT Art durante Art Basel Miami

Los ataques adversarios aprovechan esta función para confundir los sistemas de aprendizaje automático al manipular sus datos de entrada. Un actor malicioso puede, por ejemplo, influir en un algoritmo de aprendizaje automático para identificar una imagen como algo que no es al agregarle pequeños y discretos parches de píxeles.

En los ataques adversarios, los tipos de perturbaciones utilizadas están determinadas por el tipo de datos del objetivo y el efecto deseado. Para ser razonablemente contradictorio, el modelo de amenaza debe adaptarse a diferentes modalidades de datos. La perturbación de datos pequeños, por ejemplo, tiene sentido considerarla como un modelo de amenaza para imágenes y audios porque un ser humano no la detectará claramente, pero puede causar que el modelo de destino se comporte mal, lo que resultará en una discrepancia entre el ser humano y la máquina.

Sin embargo, para algunos tipos de datos, como el texto, la perturbación puede alterar la semántica y ser fácilmente identificada por los humanos simplemente cambiando una palabra o una letra. Como resultado, el modelo de amenaza para texto debe ser distinto del de imagen o voz.

¿Cómo se puede utilizar AdverTorch?

AdverTorch es una herramienta desarrollada por el laboratorio de investigación de IA de Borealis que emplea una serie de tácticas de ataque y defensa. El objetivo de AdverTorch es brindar a los académicos las herramientas que necesitan para realizar investigaciones en todas las áreas de ataques y defensa adversarios.

Los ataques, las defensas y el entrenamiento completo están incluidos en la versión actual de AdverTorch. Advorch se esfuerza por obtener API claras y consistentes para ataques y defensas, implementaciones de referencia concisas que utilizan las redes computacionales dinámicas de PyTorch y ejecuciones rápidas con implementaciones de PyTorch impulsadas por GPU, que son vitales para técnicas de ataque en bucle como el entrenamiento de adversarios.

Las diversas estrategias de ataque y defensa que vienen con áreas como se indica a continuación.

🔥 Recomendado:  La guía de 9 pasos para construir un proceso de ventas rentable

Se encuentran disponibles métodos de gradiente rápido (signo), métodos de descenso de gradiente proyectado, Asalto Carlini-Wagner, ataques de transformación espacial y otros ataques basados ​​en gradiente. El ataque de un solo píxel, el ataque de búsqueda local y el ataque de mapa de prominencia jacobiano son algunos de los enfoques sin gradiente.

Además de ataques específicos, también incluye un envoltorio para la aproximación diferenciable de paso hacia atrás (BPDA), un enfoque de ataque que mejora los ataques basados ​​en gradiente contra modelos defendidos con componentes no diferenciables o que ofuscan el gradiente.

La biblioteca incluye dos estrategias de defensa: defensas basadas en preprocesamiento y ii) entrenamiento sólido. Implementa el filtro JPEG, la compresión de bits y varios tipos de filtros de suavizado espacial para la protección basada en el preprocesamiento. Hay un ejemplo de un enfoque de capacitación sólido implementado en su repositorio oficial. Hay un script para el entrenamiento de confrontación en el conjunto de datos MNIST que puede consultar aquí.

Implementando un ataque

Aquí, en esta sección, implementaremos un ataque L2PDGA, que es un ataque basado en gradientes. Para implementar este ataque necesitamos instalar e importar las respectivas dependencias. La biblioteca no está optimizada para la última versión de Pytorch, por lo que debe instalar la versión respectiva para llevar a cabo este ataque.

# instalar antorcha! pip install torch==1.3.0 torchvision==0.4.1 # ¡instalar biblioteca! pip install advertorch import torch import torch.nn as nn from torchvision.models import vgg16 # dependencias de preprocesamiento de advertorch.utils import predict_from_logits from advertorch_examples.utils import ImageNetClassNameLookup from advertorch_examples.utils import get_panda_image from advertorch_examples.utils import bhwc2bchw from advertorch_examples.utils import bchw2bh wc # carga la clase de ataque desde advertorch.attacks import L2PGDAttack device = “cuda” if torch.cuda.is_available() else “cpu”

Aquí vamos a realizar un ataque a un modelo de aprendizaje de transferencia preentrenado llamado VGG16 con sus pesos preentrenados para la competencia ImageNet.

# cargar el modelo model = vgg16(pretrained=True) model.eval() model = nn.Sequential(model) model = model.to(device)

Ahora cargaremos la imagen y la etiqueta asociada que luego se usará para verificar la gravedad del ataque.

# carga la imagen y el índice para la etiqueta verdadera np_img = get_panda_image() img = torch.tensor(bhwc2bchw(np_img))[None, :, :, :].float().to(dispositivo) etiqueta = antorcha.tensor([388, ]).long().to(dispositivo) # etiqueta verdadera imagenet_label2classname = ImageNetClassNameLookup()

🔥 Recomendado:  Los avances en IA podrían llegar a través del cerebro de las abejas, dicen los científicos

A continuación se muestra una función de utilidad definida por el usuario que se utiliza para visualizar el resultado y el procedimiento de conversión.

def tensor2npimg(tensor): return bchw2bhwc(tensor[0].cpu().numpy()) def _show_images(enhance=127): np_advimg = tensor2npimg(advimg) np_perturb = tensor2npimg(advimg – img) pred = imagenet_label2classname(predict_from_logits(model(img))) advpred = imagenet_label2classname(predict_from_logits(model (advimg))) plt.figure(figsize=(10, 5)) plt.subplot(1, 3, 1) plt.imshow(np_img) plt.axis(“off”) plt.title(“imagen original\n predicción: {}”.format(pred)) plt.subplot(1, 3, 2) plt.imshow(np_perturb * Enhance + 0.5) plt.axis(“off”) plt.title(“La perturbación”) plt. subplot(1, 3, 3) plt.imshow(np_advimg) plt.axis(“off”) plt.title(“Imagen perturbada\n predicción: {}”.format(advpred)) plt.show()

Ahora realicemos el ataque, los hiperparámetros que definimos al usar L2PGDAttack son los siguientes:

  • nb_iter es el número de iteraciones en un bucle.
  • eps_iter especifica el tamaño del paso de ataque.
  • rand_init es una función que inicia un generador de números aleatorios (bool opcional) Inicialización al azar.
  • objetivo es especificar si el ataque es dirigido o no.

adversario = L2PGDAttack( modelo, eps=1., eps_iter=1.*2/40, nb_iter=40, rand_init=False, targeted=False) advimg = adversario.perturb(img, etiqueta) _show_images()

Y aqui esta el resultado,

Ultimas palabras

A lo largo de este artículo, hemos discutido los ataques adversarios y cómo estos ataques pueden ser casos incluso en arquitecturas SOTA ML basadas en visión por computadora y datos de audio. Para garantizar la solidez del modelo, hemos discutido una herramienta basada en Python llamada AdverTorch. Esto se basa en PyTorch, que combina ciertas estrategias de ataque y defensa donde otras bibliotecas se enfocan solo en estrategias de ataque como FoolBox. Al final, prácticamente, hemos visto cómo podemos atacar un modelo de aprendizaje de transferencia pre-entrenado como VGG16.

Referencias

Tabla de Contenido