Para 2014, las redes neuronales de vanguardia tenían un fallo conocido pero inexplicado: modificar una imagen con una perturbación mínima y deliberadamente de peor caso —a menudo demasiado pequeña para que el ojo humano la vea— y la red la clasifica mal con alta confianza. La misma imagen alterada tendía a engañar a muchas arquitecturas distintas entrenadas con datos diferentes, lo que sugería que el defecto residía en la propia receta de entrenamiento y no en una red concreta.

Las primeras explicaciones culpaban a la supuesta no linealidad extrema de las redes profundas, además del sobreajuste, pero las soluciones estándar como dropout, el preentrenamiento y el promediado de modelos no eliminaban la vulnerabilidad. Goodfellow, Shlens y Szegedy probaron la hipótesis contraria: las arquitecturas que entrenan bien (ReLU, maxout, LSTM) son deliberadamente casi lineales, y en un espacio de entrada de alta dimensión basta con la linealidad. Con cientos de miles de píxeles, cada uno ajustado en menos de un bit de precisión de imagen, los pequeños términos de un producto escalar se suman hasta producir un gran cambio en la activación de la red.

Esa visión produjo un ataque rápido: linealizar el coste en torno a la entrada y perturbarla según el signo del gradiente, lo que cuesta una sola pasada de retropropagación. En MNIST, el método llevó a un modelo softmax superficial a un 99,9% de error y a una red maxout a un 89,4% de clasificación errónea, ambos con alta confianza; en ImageNet, una perturbación de solo 0,007 por píxel convirtió un panda en un gibón. La generación barata también cambió la defensa: el entrenamiento adversario con tales ejemplos proporcionó una regularización más allá del dropout por sí solo y redujo el error en el conjunto de prueba.

El trabajo también desmitificó el fallo para los ingenieros en activo. A finales de diciembre de 2015, Codewords del Recurse Center publicó el recorrido ilustrado de Julia Evans que reproducía el ataque sobre GoogLeNet desde un cuaderno dockerizado —una imagen negra se convirtió en una toalla de papel y un panda en un buitre— y el hilo de Hacker News reunió 268 puntos y 66 comentarios, con lectores que señalaban que el artículo seguía siendo aplicable a oleadas posteriores de redes neuronales.

Suponer linealidad: perturbar según el signo del gradiente y luego entrenar con esos ataques

Los intentos anteriores culpaban a la no linealidad y al sobreajuste; suponer lo contrario hizo que los ejemplos adversarios fueran predecibles en lugar de misteriosos

El mecanismo escala con la dimensión: las perturbaciones por debajo de la precisión de un sensor aún se suman a lo largo de cientos de miles de píxeles hasta producir un cambio decisivo en la salida

Una pasada de retropropagación por ataque hizo práctico el entrenamiento adversario, convirtiendo un modo de fallo en un regularizador que superaba al dropout por sí solo

Explicó la transferencia: cualquier modelo que se comporte linealmente en alta dimensión comparte el punto ciego, por lo que un ejemplo engaña a muchas arquitecturas y conjuntos de entrenamiento

Cuando un modelo falla de una manera que parece misteriosa, prueba primero la explicación más barata: si puedes generar el fallo de forma barata, también puedes entrenar contra él de forma barata.

La primera versión apareció en arXiv el 20 de diciembre de 2014 y se revisó en marzo de 2015; su imagen de panda a gibón con una perturbación de 0,007 se convirtió en la imagen canónica de un ejemplo adversario. Un año después, el recorrido de Julia Evans en Codewords permitió a los lectores reproducir el truco en un portátil sin GPU —un panda se convirtió en un buitre, una pantalla negra en una toalla de papel— y reunió 268 puntos y 66 comentarios en Hacker News, donde un lector calificó el artículo como aún en gran medida aplicable a oleadas posteriores de redes neuronales.

CONSULTA LAS PRUEBAS

Las fuentes

  1. Explaining and Harnessing Adversarial Examples (arXiv:1412.6572) arXiv · arxiv.org ·
  2. How to trick a neural network into thinking a panda is a vulture Codewords (Recurse Center) · codewords.recurse.com
  3. How to trick a neural network into thinking a panda is a vulture — Hacker News discussion Hacker News · news.ycombinator.com ·