Ataques Adversarios: ¿una debilidad de las Redes Neuronales?

En este post hablaremos en detalle de los ataques adversarios, una técnica que permitiría engañar a una Red Neuronal haciendo que funcione incorrectamente. Veremos en qué consisten estos ataques adversarios, cómo generarlos y cuáles son las estrategias existentes para combatir este problema.

¡Así que listo, comencemos!

Video

Como siempre, en el canal de YouTube se encuentra el video de este post:

Introducción

Observa detalladamente esta imagen:

Una ilusión óptica
Una ilusión óptica

¿Notas algo extraño? ¿se está moviendo la figura central? O ¿son las figuras externas las que se mueven? Pues no, ¡ninguna de las dos! Ambos objetos son estáticos, esto es simplemente una ilusión óptica, una imagen capaz de engañar a nuestros ojos y a nuestro cerebro, haciéndonos creer que los objetos se están moviendo.

Ahora prepara tus audífonos y escucha el siguiente audio:

¿No es extraño? Pareciera que el sonido proviniese de diferentes lugares del espacio. Pero realmente no, el sonido ha sido modificado para que llegue a nuestro oído izquierdo y derecho en diferentes instantes de tiempo, creando la ilusión de espacialidad.

Así que no sólo las imágenes, sino también los sonidos, pueden engañar a nuestro cerebro.

Pues bien, para el caso del Machine Learning también es posible crear “ilusiones” similares, capaces de engañar a cualquiera de estos modelos haciendolos “ver” cosas que realmente no existen.

En este post hablaremos en detalle de estas “ilusiones”, que se conocen como Ataques Adversarios.

Ataques Adversarios: una idea general

Por ejemplo, esta imagen de un perro es presentada a una Red Convolucional y la red la clasifica correctamente como un perro:

Una imagen de un perro clasificada correctamente por la Red Convolucional
Una imagen de un perro clasificada correctamente por la Red Convolucional

Pero si se modifica ligeramente, para nosotros los humanos sigue pareciendo un perro, ¡pero para la red resulta ser una avestruz!

Con una ligera modificación, imperceptible al ojo humano, el perro puede ser clasificado incorrectamente como una avestruz
Con una ligera modificación, imperceptible al ojo humano, el perro puede ser clasificado incorrectamente como una avestruz

Pero no solo eso, también es posible engañar a un clasificador de texto con sólo cambiar una letra. En este ejemplo en el texto original el clasificador clasifica la temática del texto como perteneciente a “Mundo”. Sin embargo, si se modifica tan sólo una letra de una palabra, el clasificador la etiqueta con el tema “Ciencia y Tecnología”:

Con una ligera modificación en una sola letra ('mooP' en lugar de 'mood') un clasificador de texto genera una etiqueta incorrecta
Con una ligera modificación en una palabra ('mooP' en lugar de 'mood') un clasificador de texto genera una etiqueta incorrecta

Los anteriores son ejemplos reales de Ataques Adversarios, y los resultados que acabamos de ver son un poco contradictorios, pues en los últimos años hemos visto cómo diferentes modelos de Deep Learning progresivamente han alcanzado un desempeño que en muchos casos iguala o supera la capacidad del ser humano.

¿Entonces qué sucede? ¿No resulta extraño que lo que para nosotros parece un perro sea clasificado como una avestruz? ¿O que por simplemente cambiar una letra una red recurrente le dé una interpretación totalmente diferente al texto? ¿Son realmente tan prometedores estos sistemas si fácilmente pueden ser engañados?

Comencemos viendo en detalle qué es un Ataque Adversario.

Los Ataques Adversarios: explicación detallada

Un Ataque Adversario corresponde a una entrada al modelo que, de manera intencional, ha sido ligeramente modificada y que es capaz hacer que este modelo genere una salida incorrecta. ¡En últimas, un ataque adversario es como una ilusión óptica para un modelo de Machine o Deep Learning!

Definición de un ataque adversario: al modificar ligeramente el dato de entrada (por ejemplo añadiendo ruido) se logra hacer que el modelo genere una salida incorrecta
Definición de un ataque adversario: al modificar ligeramente el dato de entrada (por ejemplo añadiendo ruido) se logra hacer que el modelo genere una salida incorrecta

Ningún modelo de Machine o Deep Learning está exento de este tipo de ataques, y esto resulta preocupante si tenemos en cuenta que cada vez muchas tareas llevadas a cabo por humanos están siendo ejecutadas por Inteligencias Artificiales.

Imaginen por ejemplo un ataque a un vehículo autónomo: ¿qué pasa si logramos diseñar un ejemplo adversario que en lugar de una señal de PARE haga creer al sistema que no hay límite de velocidad?

Un ejemplo real de un ataque adversario: el vehículo autónomo no detecta la señal de PARE y no se detiene
Un ejemplo real de un ataque adversario: el vehículo autónomo no detecta la señal de PARE y no se detiene

O por ejemplo, ¿qué pasa si en una operación militar no tripulada (un dron) en lugar de una zona urbana se usa un ejemplo adversario que engañe al sistema y lo haga creer que se trata de una fábrica de armas?

Realmente no son problemas triviales, y resulta preocupante que este tipo de ataques aprovechen las posibles falencias de los sistemas de Inteligencia Artificial desarrollados en la actualidad.

Para analizar posibles alternativas de solución a este problema, debemos primero entender cómo es que se pueden crear estos tipos de ataques.

¿Cómo se puede crear un Ataque Adversario?

Para entender más en detalle el problema veamos cómo se pueden crear este tipo de ataques. Esencialmente existen dos formas: la manipulación de imágenes digitales y la manipulación de imágenes en el mundo real.

Manipulación de imágenes digitales

Existen muchas formas de manipular las imágenes digitales, pero tal vez la más conocida consiste en tomar la imagen y añadir una ligera perturbación, que a la vista parece ruido aleatorio pero que en realidad está diseñada para modificar la imagen de manera imperceptible, logrando a la vez generar una clasificación totalmente incorrecta por parte de la red.

Ejemplos de manipulación de imágenes digitales
Ejemplos de manipulación de imágenes digitales

Así, lo que para nosotros parece ser un bus escolar, un ave o un templo, para la red termina siendo en todos los casos un avestruz.

Manipulación de imágenes en el mundo real

Sin embargo otros autores han encontrado que no es necesario ni siquiera manipular la imagen digital, pues desde el mismo momento de la captura es posible crear un ejemplo adversario.

Por ejemplo, es posible tomar la foto de un objeto, imprimirla y fotografiarla de nuevo, y presentar este resultado a una Red Convolucional, que resulta incapaz de clasificarla correctamente.

A pesar de ser la misma imagen, en la segunda toma la Red Convolucional no es capaz de clasificar correctamente el objeto
A pesar de ser la misma imagen, en la segunda toma la Red Convolucional no es capaz de clasificar correctamente el objeto

También es posible engañar por completo a un sistema de reconocimiento facial simplemente usando un par de gafas impresas en 3D!

El clasificador es engañado cuando se agrega un simple par de gafas al sujeto de la izquierda
El clasificador es engañado cuando se agrega un simple par de gafas al sujeto de la izquierda

Incluso, si a una señal de pare se le hacen ligeras modificaciones (añadiendo cintas de diferentes colores) el vehículo autónomo es incapaz de reconocerla y de detenerse

Es posible engañar al clasificador simplemente añadiendo cintas a las señales de 'PARE'
Es posible engañar al clasificador simplemente añadiendo cintas a las señales de 'PARE'

De hecho existe una propiedad aún más intrigante en estos ejemplos adversarios: la transferibilidad.

Esto quiere decir que si se diseña un ejemplo adversario para atacar una arquitectura en particular, muy probablemente este ejemplo será capaz de engañar de engañar otras redes de mayor o menor complejidad:

El concepto de transferibilidad
El concepto de transferibilidad

Así que hay algo en común en el proceso de entrenamiento y aprendizaje de las Redes Neuronales, independientemente del número de neuronas o capas que estas tengan.

¿Pero qué es lo que hace que las Redes Neuronales terminen confundidas ante cambios tan ligeros que para nosotros, los seres humanos, no resultan tan problemáticos?

Pues en los últimos 5 años se ha venido investigando este tema y hasta el momento no hay una respuesta concluyente… O tal vez sí, pero esto lo veremos al final del post.

Por ahora hablemos de algunas estrategias, no muy efectivas, que se han ideado para combatir estos ataques adversarios.

Posibles estrategias para combatir los ataques adversarios

Estas estrategias en principio se pueden dividir en dos grupos: las proactivas y las reactivas.

Estrategias proactivas

Las estrategias proactivas consisten en entrenar el modelo con ejemplos adversarios. Es decir, durante el entrenamiento se introducen imágenes “limpias” (sin modificación alguna) y de manera intencional se introducen imágenes “contaminadas” (es decir ejemplos adversarios), para de esta manera enseñar al modelo a identificarlas como imágenes falsas:

Principio de funcionamiento de la estrategia proactiva
Principio de funcionamiento de la estrategia proactiva

Sin embargo esta estrategia no resulta exitosa, pues ¿recuerdas que hace un momento hablé de la transferibilidad? Un atacante podría tener su propio modelo “local” y diseñar múltiples ejemplos adversarios. Luego podría usar estos ejemplos en el modelo “remoto”, el que desea atacar, y tarde o temprano, por ser ejemplos transferibles, estos terminarían engañándolo.

Estrategias reactivas

Las estrategias reactivas consisten en ocultar los detalles del modelo al posible atacante. Por ejemplo, en un sistema de clasificación de imágenes (como los usados por Google o Microsoft), en lugar de mostrar la distribución de probabilidades para cada categoría, bastaría con ocultar esta información y simplemente mostrar la categoría más probable. Con esto el atacante no tendría información de la distribución de probabilidades y resultaría difícil estimar si el ejemplo adversario introducido logra cambiar o no esta distribución:

Principio de funcionamiento de la estrategia reactiva
Principio de funcionamiento de la estrategia reactiva

El problema en este caso es que el atacante podría usar un esquema de fuerza bruta: crear múltiples ejemplos adversarios en su propio modelo local y luego ponerlos a prueba en el modelo remoto. Tarde o temprano algunos de estos ejemplos lograrían engañar al segundo modelo.

Así que con esta estrategia no tendremos un modelo más robusto, simplemente le haremos la tarea un poco más difícil al atacante.

¿Existe algún mecanismo de defensa exitoso frente a los ataques adversarios?

Pero entonces, ¿será que resulta posible crear un mecanismo de defensa frente a estos ataques adversarios? ¿O definitivamente se trata de una debilidad innata de cualquier modelo de machine o Deep learning?

Aunque hasta el momento no existe una estrategia definitiva, los autores del artículo Adversarial Examples Are Not Bugs, They Are Features plantean una idea muy interesante: atribuyen la existencia de ejemplos adversarios al hecho de que la red aprende durante el entrenamiento a identificar dos tipos de características: las robustas y las no-robustas:

Principio de funcionamiento de la estrategia reactiva
Principio de funcionamiento de la estrategia reactiva
Una imagen se puede componer en dos tipos de características: las robustas y las no robustas
Una imagen se puede componer en dos tipos de características: las robustas y las no robustas

Los autores plantean la siguiente hipótesis: las características no-robustas son aquellas que probablemente para el ser humano no tienen significado alguno, o aparentemente no contienen información relevante, pero para los modelos de Deep Learning contienen información altamente predictiva que es esencial al momento de realizar la clasificación.

Entendamos primero qué es esto de las características robustas y no robustas.

Las características robustas y no robustas en detalle

Supongamos que deseamos usar una Red Convolucional para clasificar imágenes en dos categorías: perros o gatos. Una característica robusta sería aquella que es compartida por ambos animales. Por ejemplo: ambos tienen orejas, ojos, cabeza, patas. Estas características permiten a la red determinar que se trata de un animal, pero no son suficientes para diferenciar un gato de un perro:

Ejemplos de características robustas
Ejemplos de características robustas

Una característica no robusta sería por ejemplo un detalle más susceptible, un detalle al que por ejemplo los seres humanos no le prestamos mucha atención o que incluso ni siquiera logramos percibir. Este detalle podría ser la orientación del pelo: en los gatos podría ir hacia los lados, en los perros hacia abajo, o los bigotes: en los gatos son más gruesos, más pronunciados, en los perros se podría confundir con con el pelaje de la cabeza. Incluso el mismo patrón de las manchas: en los perros usualmente tienen formas más circulares y ocupan mayores zonas del cuerpo, en los gatos muchas veces son simplemente franjas:

Ejemplos de características no robustas
Ejemplos de características no robustas

Y la idea central es esta precisamente: las características no robustas, los detalles más finos, muchas veces imperceptibles por nosotros los humanos, son las más relevantes para los modelos de Deep Learning y son las que en definitiva permitirían discriminar un ejemplo real de un ejemplo adversario.

Usando las características robustas y no robustas para combatir los ataques adversarios

Para probar la hipótesis anterior los autores crean primero tres sets de datos:

Los sets de entrenamiento usados para crear un modelo capaz de combatir los ataques adversarios
Los sets de entrenamiento usados para crear un modelo capaz de combatir los ataques adversarios

En último set las imágenes parecen corresponder a una categoría diferente. Sin embargo contienen características no robustas, imperceptibles para el ser humano, pero relevantes para la Red.

Después de esto entrenan tres modelos: el modelo A, con el set de entrenamiento original, el modelo B con el set de entrenamiento robusto y el modelo C con el set de entrenamiento no robusto. Es importante observar que los tres modelos son idénticos, lo único que cambia es el set de datos con el cual se entrenan:

Los tres modelos entrenados
Los tres modelos entrenados

Y finalmente validan estos modelos usando el set de prueba original y agregando ejemplos adversarios:

El resultado de la validación de los tres modelos
El resultado de la validación de los tres modelos

¿Qué se esperaría obtener? Lo ideal en cualquier modelo es que clasifique correctamente tanto el ejemplo original como el adversario, pues finalmente el ejemplo adversario ha sido diseñado para tratar de engañar al modelo, pero la idea es que el modelo aprenda a clasificarlo correctamente.

Así que, durante la validación lo ideal sería obtener una buena precisión con ambos sets de prueba: el original y el que contiene ejemplos adversarios.

Pues bien, al validar el modelo A se obtiene el resultado esperado: la precisión es alta con el set original y muy baja con los ejemplos adversarios. Esto quiere decir que el modelo no es inmune a estos ataques.

Pero con los otros dos modelos ocurre algo interesante: el modelo B (entrenado con el set robusto) tiene una precisión alta con el set original y también con los ejemplos adversarios. Sin embargo, el modelo C (entrenado con el set no robusto) tiene una precisión alta con el set original pero muy baja con los ejemplos adversarios.

¿Y todo esto qué significa? Pues significa que en últimas un ataque adversario tiende a afectar las características no robustas en la imagen y por tanto, un modelo que dependa de estas características no robustas (como el modelo A y el modelo C) no logrará responder adecuadamente a estos ataques. Sin embargo, si durante el entrenamiento se logra eliminar la dependencia del modelo de estas características no robustas (como en el caso del modelo B, entrenado únicamente con características robustas) entonces es posible lograr que el modelo responda mejor ante estos ataques adversarios.

Este es un resultado interesante, pues indica que probablemente el problema de los ataques adversarios no necesariamente se debe al modelo como tal, sino al set de datos que se use para entrenarlo.

Esto también explica la transferibilidad de los ataques adversarios entre un modelo y otro, pues si no cambiamos nada en el set de entrenamiento, cualquiera que sea la red entrenada esta dependencia de características no robustas seguirá estando presente, independientemente de la complejidad del modelo.

Conclusión

En últimas podemos decir que los ataques adversarios son un fenómeno asociado fundamentalmente a nuestra percepción humana.

El hecho de que una imagen de un panda, ligeramente modificada, sea clasificada como un avestruz, resulta para nosotros incoherente, pues a la vista sigue siendo un panda. Sin embargo, en el fondo, este fenómeno lo que nos muestra es que muy probablemente las Redes Neuronales interpretan la información de una forma muy diferente a como los humanos lo hacemos, pues durante el entrenamiento crean una dependencia de características sutiles del dato (imperceptibles a nuestros ojos) pero que en últimas pueden terminar siendo explotadas por un ataque adversario que en últimas logra confundir a la red.

Sin embargo, todo esto lo que muestra es que a pesar de los grandes avances que ha tenido la Inteligencia Artificial en los últimos años, aún desconocemos en detalle muchos de los elementos que permiten explicar la forma como estos modelos aprenden a extraer información. En este sentido aún falta mucho camino por recorrer.

Si tienes alguna duda de este artículo o tienes alguna sugerencia no dudes en contactarme diligenciando el siguiente formulario:

Debes introducir tu nombre.
Debes introducir tu apellido.
Debes introducir un email válido.
Debes introducir un mensaje.
Debes aceptar la política de privacidad.

Otros artículos que te pueden interesar