Machine learning para inconscientes I

La Deriva

Entre las navidades y el inicio de Enero he tenido la suerte de sacar algo de tiempo para ponerme con el Machine Learning (aprendizaje automático). Voy a escribir una serie de tres post: Este primero La deriva, el segundo Los experimentos, y el tercero La cosecha.

La deriva es una recopilación, un proceso de dejarse llevar, donde sin mucho criterio recoger lo que más me ha gustado, al más puro estilo urraca buscando lo que brilla.

Como de costumbre, alguna aclaración:

  • Este post no es técnico (bueno no mucho), solo voy a contar artificios, lo que me ha llamado la atención.
  • Mi enfoque principal en este proceso de aprendizaje ha sido el uso del Machine Learning desde una perspectiva creativa o artística, lo práctico se lo dejo a Google.
  • He priorizado los resultados sobre el entendimiento profundo, osea rollo adolescente.
  • Mi base teórica es un lastre.
  • Mucho de lo que voy a decir es una simplificación.
  • Si te dedicas a esto del machine learning deja de leer este post, evita pasar un mal rato, hay muchas webs de gatos por ver.

Lo siguiente sería una definición, copiar lo que dice la wikipedia y arreando, pero la verdad es que a mí no me sirvió mucho. Está tan de moda el Machine Learning que hay una definición matizada cada día. Aparte hay diversos tipos de Machine Learning: que si el aprendizaje automático supervisado, no supervisado o semisupervisado; por refuerzo; aprendizaje profundo etc. Cada una de estas cosas tienen su definición y sus relaciones. Así que os doy la mía propia y ya recibiré lo que me corresponda.

El Machine learning es una disciplina científica dentro de la Inteligencia Artificial. Esta disciplina busca crear mecanismos que tengan la posibilidad de aprender.

Entonces tenemos un programa que, dado un conjunto de datos, tras lo aprendido devolverá un resultado. ¿Pero qué es aprender para este programa? Simplificando mucho, aprender en Machine Learning es buscar patrones. Pero lo tiene que hacer siempre, independientemente de los datos que se aporten, y lo tiene que hacer sin necesidada de volver a programar este programa.

La mayor parte de mis pruebas han sido dentro del Machine learning supervisado. Yo me lo he imaginado algo así:

— Eh máquina, aquí tienes estos datos. Estos primeros son de verdad y estos segundos de mentira, ahora con esto entrénate para mí, créate un modelo y luego cuando te pase datos reales dime qué encuentras.

Esto se ve muy claro en los sistemas de clasificación:

  • ¿En estas fotos hay perros?
  • ¿En estos correos hay spam?

Al Machine Learning se le ha dado un conjunto de datos: fotos de animales con perros y sin perros; o correos con spam o sin spam. La pieza es la misma, una máquina que va a clasificar un conjunto de datos. El código no se tiene que reprogramar para pasarle o perros o spam o precios de viviendas, el modelo es el que le da el aprendizaje con el que aporta las respuestas.

La deriva

Con estos mimbres tan débiles me puse en modo deriva, osea dejarse llevar por los caminos oscuros de internet, de Github, de Medium. Reconozco que en estas fases no tengo criterio, voy dando saltos buscando hilos que seguir, caminos o patrones, por supuesto todo muy errático.

Estas son algunas de la referencias, enlaces, repositorios o personas que rescato:

El señor Gene Kogan es ahora mismo una de las mejores referencias al respecto del arte y la inteligencia artificial, está haciendo un trabajo increíble. En esta web Machine Learning for Artists hay mucha información y código.

De Andreas Refsgaard también he sacado cosas curiosas. Varios trabajos los ha realizado con processing y eso simplifica.

Otro proyecto fundamental es Wekinator en su web lo describen de esta manera:

It allows anyone to use machine learning to build new musical instruments, gestural game controllers, computer vision or computer listening systems, and more.

Rebecca Fiebrink la creadora de Wekinator tiene este curso online Machine Learning for Musicians and Artists donde profundiza tanto en la herramienta como en los conceptos más básicos del Machine learning. Merece mucho la pena.

Darknet: Open Source Neural Networks in C es un compendio de redes neuronales que permite trabajar con distintos propósitos: reconocimiento de objetos en tiempo real, clasificación de imágenes, creación de pesadillas (Aquí empezó todo: Going Deeper into Neural Networks) y RNNs que lo veremos en el segundo post.

Otro proyecto muy interesante es Keras.js que es una implementación en javascript de los modelos Keras con TensorFlow en el backend. Traducido: poder probar parte del Machine Learning de Keras en el navegador. El proyecto está muy bien para entender cómo se relacionan las piezas entre sí para resolver un propósito concreto.

El proyecto Magenta de Google Brain Team, que busca hacer máquinas inteligentes para mejorar la vidas de las personas (WTF). Imaginaros, John está cenando el día de acción de gracias y le dice a sus padres que está en el grupo “CEREBRO” de Google. Muy loco. Magenta quiere desarrollar una I.A (inteligencia artificial) que haga música.

Elon Musk también está en el sarao, se han sacado el proyecto OpenIa para construir I.A seguras (otra WTF) y que los beneficios de ellas sean ampliamente distribuidos. Dentro de los proyecto de OpenIA uno que me ha impresionado ha sido Universe. Es un sistema para medir y entrenar I.A. Arrancas un juego y que tu I.A. se flipe.

En la transferencia de estilos entre imágenes está teniendo bastante impacto este proyecto Fast neural style transfer . En este post explican y enseñan su potencial.

Hay varios proyectos sobre Recurrent neural network (RNN) que hablaré específicamente en un post con los experimentos que he realizado.

Una buena referencia para arrancar es la serie de artículos de Adam Geitgey Machine Learning is Fun! Son fundamentales y merece mucho la pena.

http://www.creativeai.net/ es una web que recoge todo tipo de experimentos crativos entorno a la I.A y al Machine Learning. Suele haber referencias a código o el paper del estudio con el que se ha trabajado.

Luego esta https://arxiv.org ,que entiendo que es la web de la peña que sabe cómo hacer trap de malotes con matrices. Tanto es así que hasta la actriz de Crepúsculo (Kristen Stewart) ha firmado un paper sobre transferencia de estilos.

Google ha publicado https://aiexperiments.withgoogle.com/ donde algunas de las ideas de la web son muy chulas, como por ejemplo la clasificación de sonidos de pájaros que he usado como foto de este post.

Y por último esta pedazo de joya del New York Times The Great A.I. Awakening

Herramientas

Están muy, muy nerviosos. ¿Quiénes? Pues quienes ven en esto el futuro directo y saben que pueden sacarle partido, las grandes tecnológicas. Microsoft, Google, Amazon, Facebook, etc. Todos quieren jugar, bueno mejor dicho, que juguemos. Lo veremos en el post de La cosecha.

También son referencias, nada profundo, me resultaría imposible entrar en detalles. Esta la cosa muy movida.

Tenemos http://torch.ch/ que facebook y twitter le ponen ojitos. Está en “lua” un lenguaje de scripting que yo ya usé para hacer mod del World of Warcraft, pero que lo está petando. Torch tiene una serie de herramientas internas como luarocks, que simplifica el arranque de estos proyectos.

https://www.tensorflow.org/ es el entorno de Google. Estos de Alphabet Inc.t tienen claro que el futuro de la movida pasa por el Machine Learning. Están trabajando mucho y profundamente, tanto para dentro como para fuera. Y TensorFlow es la prueba.

Luego tenemos reductos anteriores que se mezclan con todo lo anterior o incluso funcionan de forma autónoma, pero que conforme pasas por repositorios de github los irás viendo. https://keras.io/ http://deeplearning.net/software/theano/ http://caffe.berkeleyvision.org/

También hay alguno loco haciendo cosas en java. Uno de los más potentes es https://deeplearning4j.org Todos sabemos que java es más bien promiscuo, así que este proyecto se relaciona bien con Spark y Hadoop, pero eso ahora no es “in”.

Microsoft tiene su Microsoft Cognitive Toolkit (CNTK) http://cntk.ai No lo he probado, pero lo están metiendo en Azure.

Los de Amazon, que son muy listos, han preferido tirar a lo seguro. Se han montado: Deep Scalable Sparse Tensor Network Engine. Osea pillo el TensorFlow de Google lo monto en mi chatarra y, como vas a pagar, pues “palante”.

El señor genekogan tiene un conunto de Addons para Openframework de lo mejorico para un uso creativo https://github.com/genekogan/ofxLearn

Como os podéis imaginar todo esto es un caos y si lo haces con mentalidad de adolescente acabas llenando tu ordenador de movidas que justamente sabes para qué valen.

Un poco más en serio, esto de las herramientas me ha resultado un tanto arduo. Las herramientas se cruzan y la documentación es pobre. Aparte, según qué pruebas quieras realizar necesitas máquina, incluso una buena GPU (sobre todo nvidia) ya que muchos procesos tiran de programación paralela. Así que paciencia.

Conclusión

Imaginaros un garito de moda en New york en el que hasta Lady Gaga tiene que hacer cola. Eso es ahora el Machine learning, se ve y se intuye que esto da resultados, hay humo y mucha duda, pero nadie niega que esto es pura potencia.

Desde la perspectiva creativa es un campo apasionante ya que el cruce y la búsqueda de patrones siempre ha sido una premisa importante en el arte de nuevos medios. Así que ahora las puertas que se abren son impredecibles.