This graph shows how many times the word ______ has been mentioned throughout the history of the program.
Hola chicos y chicas, bienvenidos a DOTS CSV, tu canal sobre Inteligencia Artificial que
vuelve para el 2018. Ya estamos aquí, ya estamos de vuelta, nuevo año, nuevos vídeos y nuevo
contenido para el canal y bueno, estas dos últimas semanas no he estado subiendo contenido porque
como avicé en Twitter, pues... como avicé en Twitter, esta es mi cuenta de Twitter, como avicé
en Twitter pues me iba a tomar dos semanas de descanso, un poco coincidía con el periodo en
el que yo iba de vuelta a España para ver a mi familia y a mis amigos y bueno pues quería aprovechar
ese tiempo para estar íntegramente de vacaciones y por tanto pues no estaría ni produciendo vídeos
ni subiendo contenido a redes sociales, pero ya estamos de vuelta, ya se ha acabado este periodo
vacacional de dos semanas y ya estamos aquí y hoy vengo con un nuevo tema, con un nuevo Data Coffee
donde tú y yo nos sentamos aquí a explicar algo que va a ser muy interesante y siempre relacionado
con el tema de la Inteligencia Artificial. El tema que traigo hoy, como digo, es muy interesante y
además es un campo de estudio que está muy vigente ahora mismo en el mundo de la Inteligencia
Artificial, porque trata un tema súper súper importante, ¿vale? Este vídeo va a ser un poco
similar al que hicimos en el pasado de las Capsnet, que lo tienen por aquí arriba o por aquí, no me acuerdo
que lado era, creo que era aquí, y que si recuerdan bien, en ese vídeo comenzamos viendo cuáles eran
algunos de los defectos de los puntos débiles de las redes neuronales, porque es cierto que es uno
de los algoritmos más potentes que se encuentran ahora dentro de la Inteligencia Artificial, bueno,
una familia de algoritmos, hay de diferentes sabores, de diferentes tipos y es cierto que
funcionan muy bien, pero en determinadas circunstancias se puede conseguir que las
redes neuronales no funcionan bien y empezamos a encontrar puntos débiles de estos algoritmos que
nos indican que todavía queda trabajo por desarrollar y, por ejemplo, en el vídeo de las Capsnet se
presentaba una arquitectura diferente, un nuevo ejemplo de red neuronal que intentaba solventar
algunos de estos fallos, y hoy vamos a ver otro de los fallos que además es muy interesante y
conocer incluso cómo se produce ese fallo te va a permitir acercarte un poco más a entender cómo
funcionan las redes neuronales, por lo cual, pues, es por lo que quería traeros este vídeo. ¿De qué
vamos a hablar? Bueno, se trata de los ataques adversarios, en inglés, adversarial attacks.
Imagínate que tienes una red neuronal que tú la has entrenado para hacer alguna labor de visión
por ordenador, ¿vale? Es decir, que tú tienes la red neuronal, le suministras alguna imagen o algún
vídeo por su canal de entrada y a lo mejor te escupe pues qué tipo de clase, qué objeto es el
que está entrando por la imagen, ¿vale? Puede ser un detector de caras, puede ser un coche autónomo,
puede ser cualquier tipo de red que te puedas imaginar. Con los algoritmos que se han desarrollado
estos años, las redes neuronales, pues tenemos una familia de arquitectura de algoritmos que nos
van a permitir conseguir que esto ocurra de manera muy óptima. Vamos a conseguir buenos resultados
haciendo labores de clasificación, labores de posicionamiento de objetos, todo este tipo de
cosas. Las redes neuronales las van a saber tratar de manera muy óptima, de tal manera que nosotros
pues nos encontramos con este tipo de algoritmos y vamos a querer utilizarlos para crear nuestras
aplicaciones, para crear nuestros productos y lanzarlos al mercado y que la gente compre
nuestros productos y que se puedan utilizar pues de manera en producción, que se dice, ¿no?
Pero de repente sucede una cosa y es que nos encontramos con que las redes neuronales funcionan
muy bien, pero en determinadas circunstancias se le pueden engañar. Estos son los adversarios
al ATACS, los ataques adversarios. ¿De qué se trata? Bueno, se trata de un tipo de imágenes que
tú le puedes suministrar, en este caso estamos tratando con computer vision, es decir, imágenes
y vídeos, pues en este caso se trataría de un tipo de imágenes que a nosotros como humanos
aparentemente pues podríamos tener una imagen en la que estamos viendo un tipo de objeto determinado,
por ejemplo, un oso panda y efectivamente pues la foto es un oso panda y normalmente la red podría
clasificarla correctamente. Le metemos la imagen y obtenemos el resultado, esto es un oso panda.
Pero de repente nos proporcionan otra imagen que a ojos humanos parece exactamente igual,
hay un oso panda y no encuentras ninguna diferencia con la anterior, pero cuando se
la suministras a la red neuronal esta te responde que no, que no es un oso panda, que es, no sé,
una ardilla. ¿Qué ha pasado? Es decir, las imágenes aparentemente son iguales y si ha podido
clasificar que un oso panda es un oso panda, ¿por qué esta foto del mismo oso panda? Es decir,
estamos hablando de la misma imagen, la detecta de forma errónea. ¿Qué ha pasado aquí? Bueno,
un ataque adversario se define como una pequeña manipulación que tú puedes producir en una imagen,
en un vídeo o en cualquier tipo de datos que le esté dando entrada a la red neuronal que es
imperceptible a los humanos, es decir, que no seríamos capaces de detectarlo como que se está
produciendo una manipulación obvia de la información que estamos dando de entrada y que sin embargo a
la red neuronal le va a saber como si fuera una imagen completamente diferente y va a confundirla
hasta el punto de que te va a dar un resultado completamente incorrecto, ¿vale? Si quisiéramos
encontrar una metáfora de exactamente qué podría significar esto en el ojo humano, esto sería como
si a nosotros nos mostraran ilusiones ópticas, serían ilusiones ópticas para nuestro cerebro,
es decir, nuestro cerebro es una máquina que también es capaz de percibir la información y
para que pueda tratar con toda la información que le llega a través de nuestros sentidos,
pues tiene que usar diferentes trucos, diferentes aproximaciones, diferentes técnicas que están
codificadas en nuestro cerebro y que todavía no hemos llegado a decodificar completamente,
pero eso hace que esos trucos pueda explotarlos y eso son las ilusiones ópticas. Tú puedes tener,
por ejemplo, esta ilusión óptica y ver que aunque la imagen es completamente estática,
los elementos que tienes en pantalla se están moviendo. ¿Por qué? Porque de alguna manera estos
elementos que muestra la imagen están haciendo que tu sistema perceptivo se vea forzado a ver
lo que realmente no hay. Pues algo similar es lo que ocurre con los ataques adversarios en
las redes neuronales, es decir, pequeñas perturbaciones en la información de entrada que hace que la
red neuronal se confunda completamente. Para que puedan tener una idea clara de cómo estos
ataques adversarios son capaces de confundir a la red neuronal, he seleccionado algunos ejemplos que
se han ido publicando en los últimos años de diferentes investigaciones en este campo,
para que puedan ver exactamente cómo estas imágenes son capaces de manipular la percepción
de la red neuronal. Por ejemplo, tenemos este caso de aquí. Por un lado tenemos al famoso modelo
Inception V3 de Google que está entrenado sobre ImageNet, que es este dataset enorme con un montón
de clases de imágenes y que Google demostró que con su modelo podían conseguir unos resultados
súper buenos. Es una red neuronal súper compleja con un montón de capas, ya la hemos visto en alguno
de los vídeos, y que funciona muy bien, tiene un bastante buen rendimiento. Y en este caso pues
tenemos también una foto de un coche que normalmente, si se la enseñáramos, pues nos diría que
efectivamente es un coche. Pero si se fijan, por otro lado también tenemos esta imagen de aquí.
Aparentemente parece que es ruido aleatorio y que no hay ninguna información dentro de esta imagen
que estamos viendo, pero sin embargo está manipulada perfectamente para que sea capaz de engañar a la
red neuronal. Y lo que vamos a hacer es coger la foto del coche y esta de aquí la vamos a
combinar de manera que ese ruido sea detectable un poco por la red neuronal, pero casi imperceptible
a la vista humana. De hecho, esta imagen que tenemos aquí ahora es el resultado de combinar
ambas imágenes en una. Cuando metemos esta imagen en la red neuronal ya no nos dice que es un coche,
sino que ahora nos está diciendo que es una tostadora. Es decir, hemos conseguido completamente
confundir a la red neuronal para que el resultado que tenga que dar no sea el correcto, sino que
sea el que nosotros hemos querido. Este ejemplo también lo podemos ver con un detector de cara.
Tú, por ejemplo, podrías tener un sistema de seguridad en tu empresa donde utilizas redes
neuronales para clasificar a las diferentes personas y saber identificar que tal cara
pertenece a tal persona. Pero si esa persona sabe un poco de inteligencia artificial y sabe
cómo manipular estas redes neuronales, podría ser capaz de inventar algún tipo de gafa,
como por ejemplo el que estamos viendo en esta imagen, que automáticamente podría engañar a
la red neuronal para que cuando detectara su cara, en vez de detectar que él es fulanito,
detectara que es otra persona. Es decir, podría haber una suplantación de identidad. Y claro,
pensando que actualmente ya empezamos a encontrarnos con dispositivos móviles que
basan todo su sistema de seguridad en detección facial, pues empieza a ser un tema preocupante.
No solo eso, también tenemos casos en los que, por ejemplo, se ha manipulado vídeo donde tenemos
una señal de tráfico, como por ejemplo un stop, para que no sea detectado o para que sea detectado
como otra señal diferente. Es decir, imagínate que en un cruce tu cambias una señal de stop
por una señal de acelera a 80. Eso significaría que todos los sistemas de conducción autónoma se
verían comprometidos por la falta de robustez de esta red neuronal. Tenemos por ejemplo este
caso de aquí que se ha publicado recientemente en el que unos investigadores han cogido y han
creado un ataque adversario generando un patrón que podía confundir a la red neuronal y lo han
impreso y lo han utilizado para crear una especie de chapita que tú te puedes colocar en la ropa,
e incluso han camuflado ese patrón para que no sea tan perceptible al ojo humano detrás del
símbolo de la paz. Con lo cual en apariencia tú ves esa chapita y dices, bueno, es una chapa con
un patrón psicodélico y con el símbolo de la paz, no tiene nada extraño. Pero lo que pasa es que
cuando tú le muestras esta chapita junto a un plátano a una red neuronal que debería clasificar
la imagen como, bueno, estoy viendo un plátano y a lo mejor una chapita, pero principalmente el
foco debería ser el plátano, lo que consigue en este caso este ataque adversario es decir,
no, no, esta chapita de aquí representa una tostadora y para la red neuronal es como si
estuviera percibiendo exactamente una tostadora. De hecho, dado el funcionamiento interno de las
redes neuronales, que como algunos sabrán, pues nosotros generamos una serie de procesamientos que
al final se deriva en una serie de probabilidades. Tú lo asignas a cada una de las clases que puede
predecir tu red neuronal una probabilidad y normalmente seleccionamos aquella que es más
probable para decir este objeto es esta de aquí. Por lo que consigue en este caso este ataque
adversario es excitar tanto a la red neuronal que piensa que lo que está viendo es una tostadora,
que se olvida por completo que el plátano está ahí, es decir, internamente cuando aumentas tanto
la probabilidad de que estás detectando un objeto, haces que el resto de probabilidades se disminuyan
casi a ser imperceptibles, con lo cual consigues que el foco de atención de la red neuronal se
centre en el objeto que tú has generado. Llegados a este punto a lo mejor estás diciendo, bueno,
vale, las redes neuronales son muy vulnerables a este tipo de ataques, pero a lo mejor es complicado
realizar esas manipulaciones, no? Es decir, esa imagen que tú estás utilizando para confundir a
la red neuronal, ¿cómo la generas? ¿Sencillo? ¿Difícil? Pues es muy sencillo y de hecho la
técnica es bastante interesante de entender porque se asemeja bastante al proceso que se utiliza para
entrenar a la propia red neuronal. Como muchos sabrán, cuando nosotros tratamos con una red
neuronal, la forma en la que aprenden es a partir de la manipulación de sus parámetros, ¿vale?
Nosotros tenemos una cantidad de datos de entrada y unas cantidades de datos de salida que queremos
que encuentre una relación y esa relación viene definida por cómo están ajustados estos parámetros.
Para ajustar estos parámetros utilizamos dos técnicas que se llama Gradient Descent, que lo
veremos en un próximo vídeo, y Back Propagation. Con estas dos técnicas lo que hace es pedirle a la
red neuronal que si tú tienes los datos de entrada y los datos de salida, reajuste sus parámetros
internos para que el error que la red incurre cuando intenta predecir cuál es el resultado que tú
quieres, ese error se vea minimizado. Con lo cual, si minimizas el error de predecir el resultado
correcto, al final acabarás prediciendo el resultado correcto. Pues fíjate que con la misma técnica,
es decir, con Gradient Descent y con Back Propagation, es decir, con técnicas de optimización,
podemos conseguir realizar un ataque adversario. ¿Cómo? Simplemente cambiando la pregunta. En
este caso a nosotros lo que nos están dando es un modelo ya entrenado, es decir, tenemos una red
neuronal cuyos parámetros ya están ajustados para que funcione bien, por ejemplo un clasificador
de imágenes, y en este caso tú no vas a manipular los parámetros porque si cambias un poco los
parámetros a lo mejor te cargas todo el sistema y no funcionaría. En este caso lo que tú vas a
permitir en esta técnica es que se manipule la imagen de entrada, es decir, los píxeles de la
imagen de entrada es lo que vamos a manipular. Esos van a ser los parámetros de nuestro sistema
de optimización. Y la pregunta que tú vas a formular con tu problema de optimización ya no es
cuál es el mínimo error que puedes conseguirme a partir de manipular los parámetros, sino cuál
es el máximo error que tú puedes conseguir al manipular los píxeles de la imagen. ¿Lo entiendes?
Ya no estamos reajustando el modelo para encontrar el mínimo error, sino que ahora estamos reajustando
los datos de entrada para maximizar el error de la red. Básicamente es eso, y utilizando gradient
descent y back propagation podemos conseguir esa manipulación de los datos de entrada, y por tanto
esos datos de entrada serán nuestro ataque adversario. De todos modos fíjate una cosa,
tal y como lo hemos formulado hemos permitido que esta operación de optimización maximice el error
de la red neuronal manipulando la imagen de entrada en este caso. Pero claro, si manipulas mucho la
imagen podrías acabar teniendo un resultado que sí podría ser detectado por el ojo humano,
es decir, si de repente la imagen original que tú quieres manipular se te convierte en algo como
esto, pues tú como a lo mejor ingeniero de seguridad de inteligencia artificial, que es un rol que
todavía no existe pero existirá, a lo mejor tú podrías decir esta imagen está manipulada,
esta imagen intenta trucar a la red neuronal. Por lo tanto tenemos que meter algo más en nuestra
pregunta de optimización. ¿Qué es eso? Bueno, pues básicamente le vamos a decir queremos ahora que
maximice el error de la red neuronal manipulando los píxeles de la imagen de entrada, pero que la
diferencia entre la imagen original y la imagen perturbada sea mínimo, es decir, maximízame el
error pero minimízame la diferencia entre las imágenes. Con lo cual, con esta pregunta,
si operas utilizando gradient descent y back propagation, pues vas a conseguir una imagen
que maximiza el error y minimiza la diferencia entre imágenes, es decir, va a ser imperceptible para
los humanos. Y esto señoras y señores funciona y es a rasgos generales como se realiza en este
tipo de ataques. Una cosa interesante que me he encontrado haciendo este vídeo, empollándome
un poco la teoría, es que yo tenía la idea de que este tipo de ataques adversarios, pues sí,
son efectivamente muy potentes, pero requerían de alguna manera de que tú tuvieras acceso al
propio modelo, ¿vale? Es decir, yo por ejemplo si quiero trucar Inception v3, que es el modelo que
mencioné antes, pues yo me tendría que descargar ese modelo, es decir, Google que ha diseñado esa
red neuronal tiene que ofrecerla open source, yo me tendría que descargar ese modelo y a partir
de ese modelo, pues yo podría intentar trucar mis imágenes para poder encontrar este ataque
adversario, es decir, que por mucho que estos ataques adversarios sean tan potentes, necesitas
que el modelo esté disponible para poder generar esos ataques. Pero al parecer no, tú simplemente
teniendo acceso a la propia red neuronal como una caja negra, es decir, como si fueras un usuario,
por ejemplo, si yo tuviera en un servicio online una red neuronal que sirviera para clasificar
imágenes y yo pudiera dedicarme a hacer ensayos y errores, es decir, tengo una imagen, la manipulo
un poco, la subo, veo si consigo engañar a la red y así, muy fácilmente puedes encontrar una
imagen que sea un ataque adversario para esa red, sin tener que haber tenido que entrar a ver
internamente cómo funciona ese modelo, con lo cual eso hace que estos ataques sean incluso más
potentes de lo que yo me pensaba originalmente. Y no para ahí la cosa, porque esto es muy interesante,
al parecer este tipo de ataques incluso son transferibles entre modelos, eso quiere decir
que si yo diseño por ejemplo un ataque adversario que funciona para un tipo de modelo, por ejemplo
Inception V3, podría conseguir pues un ataque adversario que hace que esta red neuronal falle,
pero a lo mejor esa imagen que yo he diseñado para este modelo luego me lo puedo llevar a un
modelo diferente y también va a hacer que ese modelo falle, es decir, hay una transferencia de
conocimiento entre diferentes modelos, con lo cual pues yo podría intentar generar diferentes
ataques en un modelo propio y luego intentar atacar a otros sistemas, es alucinante. Y básicamente
solo lo que quería contaros hoy, no sé, me parece un tema súper interesante, porque quizás con el
entusiasmo de ver que las redes neuronales son unos algoritmos tan potentes, nos hemos lanzado a
colocarlos en sistemas de producción, como ya digo, sistemas que ya se utilizan de cara a un
usuario final, y a lo mejor todavía nos encontramos con que estos sistemas son muy óptimos para
ciertas tareas, pero también muy frágiles para otras tantas. Por ejemplo, en un vídeo reciente
Crespo del canal QuantumFracture mencionó como YouTube utiliza diferentes redes neuronales para
clasificar el contenido de su vídeo, y esto es cierto, esto es así. Tú cuando subes un vídeo a
YouTube, pues se analizan diferentes factores, pues la duración del vídeo, no sé si seguirá
utilizándose, pero se utilizaba como factor, el contenido del vídeo, la transcripción de
audio a texto y se analiza cuál es el contenido de ese texto, que hayan palabras claves, diferentes
tags, la imagen del subnail, todos estos parámetros se analizan para ver qué posicionamiento se le da
a ese vídeo a la hora de hacer la búsqueda. Con eso tú puedes conseguir una mayor visibilidad o
menor visibilidad en YouTube. ¿Qué pasaría si la gente de repente se pusiera a probar con este
modo de ensayo y error y encontraran un tipo de ataque adversario que hicieran confundir a estas
redes neuronales, y a lo mejor tú pones en la propia imagen de tu vídeo que acabas de subir,
un ataque adversario, una pequeña manipulación que no es percibida al ojo humano, es decir,
sería una portada normal, pero sin embargo hace que tu vídeo pues resalte y se ponga en el top
uno del país en el que te encuentras. Estas son circunstancias que yo no sé si YouTube ha tenido
en cuenta la hora de introducir sus redes neuronales en su sistema de deseo, de posicionamiento de
vídeos, pero veremos con el tiempo si esto ocurre, porque posiblemente si esta posibilidad existe,
ahí está. Y si lo vemos de una manera optimista, esto hace que todavía haya un largo camino que
recorrer en la investigación de la inteligencia artificial y eso hace este campo súper súper
interesante para unirse en esta época. Así que bueno, pues era un tema que quería que conocieran
todos y espero que les haya quedado más o menos claro. Si tenéis dudas sobre este tema lo podéis
dejar abajo y me pondré a responder porque ahora mismo estoy bastante puesto en el tema debido a
este vídeo y me gustaría que lo tuvieran bastante claro porque en el siguiente vídeo que suba al
canal, que va a ser un IA Notebook, es decir estos vídeos en los que nos sentamos y nos ponemos a
programar cosas, pues vamos a intentar programar un ataque adversario, vamos a coger algún modelo
que ya exista en internet y vamos a intentar programar eso, un tipo de perturbación en esta
red neuronal que haga que se confunda y que no dé el resultado correcto. No va a ser tan sencillo
como el notebook anterior que subí al canal, vamos a estar utilizando TensorFlow posiblemente,
pero bueno yo creo que va a ser algo que junto a este vídeo yo creo que le va a dar el conocimiento
necesario sobre este tema y que así ya luego pueden seguir ustedes probando vuestras cosas y
manipular los sistemas que vean, aunque en ningún caso este canal sea responsable del uso que le
den a ese conocimiento. Por mi parte nada más, me alegro mucho de estar de vuelta con todos ustedes,
me podéis encontrar en redes sociales, Twitter, Facebook, aunque bueno ya hablaremos de Facebook
en el futuro y también Patreon si quieres apoyar al canal, podéis dejar vuestras preguntas aquí
abajo, darle un like si les ha gustado, vamos a intentar llegar a 300 likes en este vídeo y nada,
nos vemos próximamente.