logo

Dot CSV

Inteligencia Artificial, Tecnología, Ciencia y Futuro! Bienvenidos a la 4ª Revolución Industrial 🚀 Inteligencia Artificial, Tecnología, Ciencia y Futuro! Bienvenidos a la 4ª Revolución Industrial 🚀

Transcribed podcasts: 213
Time transcribed: 5d 22h 50m 3s

This graph shows how many times the word ______ has been mentioned throughout the history of the program.

Hola chicos y chicas, bienvenidos a DOTCSV, tu canal sobre inteligencia artificial que
te trae los algoritmos más interesantes de este campo.
Y hoy no va a ser menos porque hoy traigo un tema super super interesante, pero antes
de empezar a hablar de ello, quiero que veas estas dos fotos de aquí ¿vale?
Muy bien, ¿ha visto estas dos personas?
Aparentemente son fotos normales, de hecho parecen dos fotos típicas de dos famosos.
A lo mejor conoces a uno de ellos, al otro no, y es que una de las dos fotos no es real,
es decir, no es una persona que existe en el mundo, sino que es una foto generada íntegramente
con inteligencia artificial.
Este resultado es impresionante y es de lo que vamos a hablar hoy.
Esto se ha conseguido con un tipo de técnica que se denominan Redes Generativas Adversarias,
o en inglés Generative Adversarial Networks.
Esta técnica es una técnica que ha llegado recientemente al campo de la inteligencia
artificial de 2014 y ha sido una completa revolución porque ya verán que los resultados
que se obtienen son muy impresionantes y abren una serie de posibilidades muy interesantes
para el desarrollo de la inteligencia artificial.
Grandes investigadores como Jean LeCun han manifestado que este algoritmo es la mejor
idea que le ha sucedido al campo de la inteligencia artificial, e importante, no es idea suya.
El autor de esta idea se llama Ian Goodfellow, que la desarrolló o la consiguió extraer
de su cabeza en 2014 durante su proyecto de doctorado.
Como se podrán imaginar, desde ese momento Ian Goodfellow se ha convertido en uno de
los grandes dentro del campo de la inteligencia artificial también y creo que actualmente
se encuentra trabajando en Google en el proyecto Google Brain y eso, otra gran menta a la que
tener en cuenta y a la que seguir en redes sociales porque siempre está muy activo
publicando cosas muy interesantes.
Entonces, antes de pasar a ver por qué estamos hablando justamente de este tema hoy, vamos
a ver un poco qué son exactamente estas redes generativas adversarias y para qué sirven.
Bueno, por su nombre podemos empezar a intuir que son redes que se van a encargar de generar
algo.
¿Qué es lo que van a generar?
Pues si nosotros las entrenamos sobre un tipo determinado de datos, estas redes van a ser
capaces de aprender la estructura de estos datos para poder generar nuevos data points
que no hayan visto antes.
Esto a lo mejor puede sonar muy genérico pero es muy interesante.
Por ejemplo, como es el caso que vamos a ver hoy, si tú entrenas estas redes con imágenes
de caras podrás generar caras nuevas que no hayan existido previamente.
Esto es una cosa que siempre se ha perseguido dentro del campo de la inteligencia artificial
y de la estadística, que es que a partir de los datos que tenemos entradas, cómo podemos
ampliar este dataset para poder generar más datos falsos que nos pueden servir para seguir
entrenando a nuestros sistemas y que puedan aprender más eficientemente.
La idea que encontró Ian Goodfellow es muy brillante porque lo que hace es plantear una
arquitectura en la que no tenemos un solo modelo, sino que tenemos dos inteligencias
artificiales y estas dos inteligencias artificiales se van a encargar cada una de aprender una
cosa diferente y a competir entre ellas, de ahí el nombre de redes generativas adversarias.
Una de estas redes se va a encargar de aprender a generar imágenes, es decir, nosotros tenemos
este sistema en el que le damos una dato de entrada y obtenemos algo de salida y en este
caso lo que le vamos a dar de entrada es un vector de números, es decir, una ristra de
números completamente aleatorios.
Esto va a ser el identificador del objeto que vamos a generar, que en este caso puede
ser cualquier cosa.
Lo más normal y lo que vamos a ver en el ejemplo de hoy es utilizarlo para generar
imágenes, es decir, de entrada metemos un vector aleatorio de números y de salida obtenemos
una imagen.
Esta red es similar a una red convolucional pero funcionando al revés, es decir, una
red convolucional tú le enseñas una imagen y obtienes un resultado, normalmente mostrado
como un vector de números, pues esto sería una red de convolucional que lo que hace es
eso, pues obtiene el vector y genera la imagen.
Esta será una de las redes que tenemos dentro de nuestra arquitectura.
Lo interesante es que luego vamos a tener otra red neuronal que se va a encargar de
observar los datos generados por la red generadora y aprender a discernir si esa imagen creada
por la red generadora es real o es mentira, es decir, esto es super interesante porque
ahora tenemos una arquitectura en la que tenemos una red que genera imágenes falsas y otra
red neuronal que se va a encargar de aprender a detectar estas imágenes falsas.
Para que puedan entender bien este ejemplo, imagínense una situación en la que tenemos
un ladrón que quiere falsificar billetes y un policía que quiere detectar si esos
billetes son falsos o no.
El ladrón inicialmente no tiene ni idea de cómo falsificar billetes, nunca lo ha hecho
antes, con lo cual lo primero que hará será generar un billete cualquiera.
Este billete le llegará al policía y el policía dirá, este billete está un poco
mal hecho, es decir, esto está pintado en una serbilleta con un rotulador y obviamente
es un billete falso.
En ese momento la situación real sería que el policía iría por el ladrón, le metería
en la cárcel y se acababa el juego, pero en estas redes neuronales tenemos la virtud
de que el ladrón puede leerle la mente al policía antes de entregarle el billete y
puede aprender cuáles son aquellas cosas que ha visualizado el policía que ha hecho
que detectara que su billete sea falso, ¿lo entiendes más o menos?
Entonces el ladrón dice, mmm, ha detectado que mi billete es falso porque lo he hecho
en una serbilleta y con muy mala calidad, por lo que he podido ver en su mente, por
lo que he podido ver en su mente, un billete tendría más o menos esta forma, bueno, lo
vuelvo a intentar, y lo vuelvo a intentar, en este caso lo hará mejor que antes, porque
ha aprendido a partir de lo que el policía ha detectado de su imagen.
Por tanto, vuelve a generar otro billete un poco mejor que antes y le vuelve a llegar
al policía.
El policía nuevamente observará el billete y dirá, mmm, creo que este billete también
es falso porque el código de seguridad falla aquí, la calidad no es muy buena, etcétera,
y detectará aquellos factores que hacen que el billete no sea cierto, nuevamente el ladrón
podrá leer la mente del policía para saber qué factores han hecho que el billete vuelva
a ser considerado como falso, y así se repetirá el proceso iterativamente hasta que el ladrón
aprenda perfectamente a engañar al policía.
Una cosa importante aquí es que el policía no tiene que saber qué hace que un billete
sea cierto o no, por tanto, a la red discriminadora, la del policía, también hay que entrenarla
para que poco a poco vaya aprendiendo cada vez más a detectar cuáles son los billetes
falsos, y para eso se le muestran billetes falsos, los que recibe de la red generadora,
y también muestras reales de lo que es un billete, imágenes reales.
Poco a poco, con su entrenamiento, aprenderá cada vez mejor a detectar cuáles son los
billetes falsos y los verdaderos, y eso hará que la red generadora también pueda mejorar
a la hora de generar billetes más reales a los originales.
Este concepto es súper potente porque es un juego en el que las dos redes se van entrenando
y al final la red generadora consigue alcanzar una fidelidad muy similar a la de los datos,
y fíjate que en ningún momento la red generadora ve los datos, el único contacto que tiene
la red generadora con los datos es a través de lo que ha aprendido la red discriminadora.
Este ejemplo que acabo de contar con el billete se traduce en el esquema de una red neuronal
en que tenemos una red neuronal discriminadora cuya función de valor será la de maximizar
la detección de imágenes, en este caso, entre reales o falsas.
En cada iteración, esta red neuronal entrenará mediante un proceso de backpropagation que
le permitirá ajustar sus parámetros internos para cada vez ser capaz de detectar mejor
entre imágenes reales o falsas.
Y lo que va a hacer la función generadora será entrenarse a partir de la inversa de
la función objetivo de la red neuronal discriminadora, es decir, si esta se está entrenando para
minimizar el error entre detectar una imagen falsa y una verdadera, la otra red neuronal,
la generadora, se va a reajustar para maximizar esa diferencia.
Esta arquitectura es súper interesante y como ya he dicho, sus aplicaciones son absolutamente
de explotarte la cabeza.
Tenemos ejemplos donde se generan imágenes no vistas previamente, por ejemplo, con caras,
con habitaciones, con pájaros, es decir, ninguna de estas imágenes que están viendo
son imágenes que hayan existido previamente, sino que están aprendidas a partir de los
datos.
También, si puedes generar imágenes, puedes generar secuencias de imágenes y hay ejemplos
de utilizar este tipo de redes para generar futuros fotogramas de una secuencia de vídeo.
Yo le muestro la red de una serie de fotogramas y quiero que siga aprendiendo qué es lo que
viene a continuación.
Completamente impresionante.
O tenemos el ejemplo de Adobe, que han creado una herramienta para poder generar nuevos
tipos de ropa o de complementos de moda a partir de un simple boceto que dibuje el usuario.
Son todos ejemplos impresionantes y que realmente demuestran el potencial de esta técnica.
Sin embargo, no todo es bueno con esta red degenerativa.
Hay una serie de problemas que hacen que no sean tan atractivas de momento y que todavía
se estén desarrollando para conseguir un mayor rendimiento.
Y de eso es de lo que vamos a hablar hoy.
Si se han fijado en las imágenes que les acabo de enseñar, son imágenes de muy baja
resolución, a lo mejor 256 x 256 píxeles, y además son imágenes que cuestan mucho de
generar.
Este tipo de redes son bastante lentas y también a veces suelen ser bastante inestables.
Es decir, cuando las estás entrenando durante mucho tiempo, de repente llegan a un punto
en el que no generan imágenes nuevas, sino que simplemente se quedan en un estado completamente
corrupto y las imágenes que muestras son simplemente basura.
Por tanto, esta arquitectura, aunque tiene un potencial brutal, de momento no puede ser
aplicada porque todavía no se consiguen resultados que sean realmente buenos y que puedan servir
para una aplicación real.
O al menos eso creíamos hasta hace un par de semanas.
Y es que hace 2-3 semanas salió una nueva publicación por parte de NVIDIA, que ha sido
un completo boom dentro del campo de la inteligencia artificial.
Se han puesto a trabajar sobre estos problemas que tienen las redes generativas y han encontrado
unas mejoras en la arquitectura que hacen que podamos obtener actualmente resultados
de alta calidad.
Un ejemplo de ello son las imágenes que he enseñado al principio del vídeo, de esa
cara que realmente no se puede diferenciar si es una cara real o una cara creada por
una inteligencia artificial.
Esto ha sido un completo boom y se ha viralizado dentro del campo y obviamente pone el optimismo
por las nubes porque ahora estamos ante la posibilidad de poder generar imágenes de
alta resolución y a un menor tiempo de entrenamiento.
Vamos a hablar un poco de estas mejoras que han introducido, pero antes quiero contar
una curiosidad que a mi me llamó mucho la atención y es que hace 2-3 semanas cuando
salió esta noticia, pues yo empecé a informarme como todo el mundo porque me llamó mucho
la atención y fue la semana pasada que de repente un día, pues por la mañana, publiqué
un ejemplo de los que les voy a mostrar ahora de estas redes porque son una pasada.
Y lo publiqué en Twitter, que por cierto, si no me siguen en Twitter, muy mal porque
ahí publico cosas que también les puede interesar, y bueno, pues justamente el mismo
día que publico eso, por la tarde iba una serie de conferencias aquí en Helsinki donde
yo vivo que están relacionadas un poco con informática, con generación de gráficos
por ordenador.
¿Y cuál es mi sorpresa?
Que de repente una de las charlas va exactamente sobre esto y era presentada por Tero Querras
que firma el artículo de NVIDIA del que estamos hablando hoy.
De hecho, me he dado cuenta de que es NVIDIA Finlandia quien ha desarrollado toda esta
técnica y también muchos trabajos anteriores que yo había estado viendo y la verdad que
no lo sabía, me ha llamado mucho la atención.
De hecho en mi cuenta de Twitter publiqué un link al streaming de esta charla y además
otras más que hubo que eran muy interesantes, recomiendo verlas.
Aquí pueden ver a Tero Querras dando la charla y yo aquí en primera fila tomando notas para
poder contaros ahora de qué tratan estas novedades y qué ejemplos trae.
Entre todas las mejoras que han presentado en su paper, yo creo que la más importante
y la que más aporta a este paper es la introducción de un aprendizaje adaptativo, es decir, actualmente
las redes generativas, pues tiene que aprender a partir de lo que le enseña la otra red
a generar imágenes completamente a partir de un vector de números aleatorios, es decir,
la estructura interna de esta red tiene que hacer un gran esfuerzo de entrenamiento para
acabar generando una imagen que pueda ser pues a lo mejor de una resolución cómoda,
unas 512, 512.
Sin embargo lo que plantea NVIDIA es una estructura en la que la red generativa vaya adaptando
su estructura interna y la resolución de las imágenes que genera según va aprendiendo.
Es decir, inicialmente cuando la red apenas conoce nada de cómo se tienen que crear las
imágenes, tiene sentido que el tipo de imágenes que tenga que generar sean imágenes a muy
baja resolución.
Es decir, no necesitamos generar una imagen completa de una cara a máxima calidad si
realmente inicialmente no sabe qué elementos tiene que poner ahí.
Por lo tanto lo que vamos a hacer es utilizar una resolución muy pequeña que nos va a
permitir que ese entrenamiento sea mucho más acelerado y que utilice menos información.
Una vez la red ha llegado a un cierto aprendizaje de cómo generar ese tipo de imágenes a muy
baja resolución, lo que vamos a hacer es incrementar un poco la resolución y continuar
entrenando esta red y así lo vamos a hacer progresivamente hasta llegar al tipo de resolución
resultado que queremos.
Esto lo pueden ver más visualmente en este ejemplo que están viendo ahora en pantalla
y si se fijan inicialmente partimos de una configuración en la que la resolución es
muy baja, podemos comprobar cómo se ven los píxeles y finalmente acabamos con una resolución
muy elevada donde se aprenden hasta los detalles más elementales de la foto.
Con esta técnica no sólo conseguimos generar imágenes de mayor resolución, sino que también
reducimos el tiempo de entrenamiento, ya que el esfuerzo va a ser menor al tener que generar
imágenes con menos información.
Esta es una de las innovaciones, además de otras que han incorporado, como por ejemplo
una nueva medida de similitud entre diferentes datasets, pero bueno, no quiero centrarme
exactamente en esto, sino quiero que vean algunos resultados porque realmente es impresionante
y también porque estos ejemplos nos van a servir para entender mejor un concepto que
vimos en un vídeo anterior que es el espacio latente.
Lo pueden ver en la parte final de este vídeo de aquí arriba.
Fíjate en una cosa, una vez tenemos entrenado nuestro sistema, cuando queremos generar imágenes
lo que hacemos uso es de esta red generativa de imágenes que hemos entrenado.
Acuérdate que esta red, nosotros le suministramos como dato de entrada un vector de valores
aleatorios y de salida obteníamos una imagen determinada.
Pues es muy interesante ver que si esta red se entrena correctamente, internamente este
sistema consigue aprender una representación multidimensional de cómo se organizan diferentes
caras y cada uno de estos vectores aleatorios que nosotros introducimos va a representar
un punto dentro de ese espacio ordenado de cara, este espacio latente.
¿Qué quiero decir con esto?
Pues por ejemplo, si tú tienes un vector de números, tú lo introduces por la red
y obtienes como salida una foto, por ejemplo puede ser esta foto de aquí, y si tienes
otro punto, otro vector, pues lo vuelves a introducir y obtienes una foto diferente.
Hasta ahí bien.
¿Qué pasa?
Que si este espacio realmente está correctamente ordenado, nosotros podemos interpolar los
valores numéricos de los dos vectores que tenemos y podemos observar que cada una de
las imágenes asociadas a las diferentes interpolaciones de estos dos vectores se corresponden con una
transición también en las caras que nos permite ver cómo se transforma del objetivo
A al objetivo B.
Esto es bestial, pero vamos más allá, imagínate que en vez de interpolar de un punto A a un
punto B, cogemos simplemente un punto en este espacio latente y empezamos a moverlo variando
los diferentes valores del vector.
Inmediatamente podemos observar cómo podemos ver esta fantástica animación de cómo vamos
moviéndonos a través de diferentes caras y siempre de manera interpolada, es decir,
se puede transformar de tener pelo facial a no tener pelo facial, de pelo más largo
o pelo más corto, el color de la cara, diferencias en la iluminación o incluso la rotación tridimensional
de la cara.
El hecho de que un movimiento lineal de este vector representa una transición lógica
en lo que para nosotros sería una cara, significa que internamente la red neuronal ha conseguido
aprender por ejemplo cuáles son las rotaciones tridimensionales de una cara.
Y eso la verdad es que es bastante bastante potente.
O por ejemplo también podemos hacer aritmética con estos vectores de entrada y esto se verá
reflejado también en las imágenes que generamos de salida, es decir, si tú coges la cara
de un hombre sonriendo y la cara de un hombre serio y restas esos dos vectores, eso lo puede
sumar a la cara de una mujer seria para obtener la cara de una mujer sonriendo.
Es decir, la red neuronal sabe extraer qué representa una sonrisa en este espacio latente
y lo puede aplicar a otra serie de imágenes.
Completamente impresionante.
Hay otros ejemplos que nos mostraron en esta charla que eran muy interesantes como este
ejemplo de aquí en el que se ha utilizado la red generativa fijando la mitad de una
cara para que siempre sea la misma y la otra mitad para que sea generada por la red.
Puedes fijarte que si ponemos en marcha la animación de esta cara podemos ver como siempre
el lado izquierdo se mantiene fijo y el lado derecho consigue adaptarse para que aun siendo
diferentes caras el resultado que muestre pueda ser coherente con lo que nosotros conocemos
como una cara.
Es decir, tú podrías parar en cualquier momento este vídeo y posiblemente el resultado
que obtengas sea el de una cara que tú podrías decir es un resultado que podría dar por
bueno.
Y esto no se queda simplemente en el ejemplo de las caras.
También se puede entrenar estas redes generativas para otro tipo de objetos como ya vimos antes.
Ellos también nos mostraron una serie de ejemplos de los que utilizaban otro dataset
que no eran simplemente caras sino que eran diferentes categorías de imágenes.
Las imágenes no son tan reales pero aun así es como hipnotizante ver cómo se van desarrollando
estas animaciones según te vas moviendo por el espacio latente.
Sin duda impresionante y es un trabajo al cual vamos a seguirle el rastro en este canal
porque no cabe la duda de que este sistema se mejorará con el tiempo.
Se conseguirá reducir los tiempos de entrenamiento que actualmente siguen siendo muy elevados
en torno a unos tres o cuatro días para obtener este tipo de resultados.
Pero sin duda es un tipo de técnica que abre la posibilidad a muchas aplicaciones interesantes
en el futuro.
Yo por ejemplo me imagino un entorno de realidad virtual en el que tú dentro de un mundo puedes
pedirle al entorno virtual que te genere geometría tridimensional en función de tus preferencias,
por ejemplo, génerame un edificio, génerame una casa, génerame una montaña e ir generando
tu propios mundos y no sé, me parece algo bastante estimulante, algo por lo cual me
alegro de estar estudiando dentro de este campo y no sé, la verdad que es algo interesante
y que si sucede contaremos aquí en este canal.
Como ya es de costumbre, vídeo largo pero interesante, que no se diga.
Voy a utilizar de nuevo la parte final del vídeo de hoy para haceros una pregunta yo
a ustedes y es que he estado dándole vueltas a algo que me han pedido por muchos comentarios
y es utilizar también estos tatacofis para hacer una sección de noticias donde pues
a lo mejor sin entrar en tanta profundidad les cuente cuáles son las noticias más relevantes
del campo de la inteligencia artificial pues a lo mejor de los últimos 10 días, de los
últimos 15 días y hacerlo algo periódico y que podemos intercalar con este tipo de
vídeos.
Quiero saber vuestra opinión si les parece una idea que les gusta háganmelo saber abajo
en los comentarios y me voy a saltar la sección de preguntas porque si no se nos alarga mucho
el vídeo.
Ya llevo tiempo sin responder preguntas, pónganlas abajo en la sección de comentarios cualquier
duda que tengan sobre mí, sobre la inteligencia artificial, sobre el canal, déjenlo aquí
abajo y me comprometo a responderlo lo más rápido posible y nada más, si les ha gustado
el vídeo yo creo que esto es uno de los tatacofis, al menos a mí, que más me ha gustado, de
los más interesantes y hay más por venir, suscríbanse, denle like, comentarios, todo
lo que les digo siempre, ayuden a difundir este canal que entre todos podemos hacer crecer
esta comunidad, compartan por redes sociales, háganselo saber a vuestros amigos de la facultad,
a cualquiera que le pueda interesar, sería un favor enorme para este canal y contribuye
a hacer cada vez más grande esta comunidad, así que está en vuestras manos.
Por mi parte nada más, nos vemos en el próximo vídeo, ¡hasta pronto!