Cursos: Deep Learning

Modificado el 12 de Noviembre de 2018

Introducción

El desarrollo e impacto de la Inteligencia Artificial en los útimos años es indudable. En muy poco tiempo hemos pasado de ver la IA como una disciplina accesoria (y casi anecdótica) dentro de las Ciencias de la Computación a ser el centro de atención del mayor número de publicaciones científicas que se ha vivido en muchos años, ocupar la posición central de las estrategias de grandes empresas (tecnológicas o no) y el impulso de un sin fín de startups que buscan ocupar el centro de un nicho de mercado que parece prometedor y que ya mueve millones de euros a lo largo y ancho del mundo.

Y sin duda, de entre todas las áreas de la IA, el Machine Learning, y específicamente el Deep Learning, es el responsable del porcentaje más alto de novedades y el que más miradas atrae. Y no es casualidad que sea ahora precisamente el ML el que sea el centro de innovación, ya que la disponibilidad de grandes masas de datos (propiciada por la presencia hegemónica de los medios digitales para la gran mayoría de sistemas de comunicación humanos) ha generado un caldo de cultivo en el que la necesidad de algoritmos que les saquen rendimiento ha ido a la par de la aparición de dispositivos de hardware que pueden ejecitarlos de forma no soñada hace unos pocos años.

Este curso se centra en los fundamentos de Deep Learning, en las metodologías actuales más habituales para su aplicación a casos de uso paradigmáticos, y en un intento de idslumbrar las futuras líneas de acción que el DL tomará en los próximos años. LA aproximación que se hace es fundamentalmente conceptual, pero debido al carcácter eminentemente práctico que tienen los métodos desarrollados, irán soportados sobre un conjunto de implementaciones reales que pongann de manifiesto sus puntos fuerte (y también sus puntos débiles).

El curso no pretende ser innovador ni duradero, ya que el área es demasiado joven y puede sufrir grandes cambios en sus próximas líneas principales, así que se ha pensado como una recopilación de recursos fundamentales que se consideran necesarios para entender su estado actual y estar preparado para los que puedan venir en el futuro.

En todo caso, el curso no se planifica como un curso para alcanzar un nivel avanzado de programación en ninguna plataforma específica ni con un lenguaje determinado, sino que su objetivo primordial es el de mejorar la comprensión conceptual de porqué y cómo funcionan los modelos de Deep Learning. A pesar de ello, haremos uso de un entorno de trabajo concreto que ha sido seleccionado por la documentación que presenta, la eficiencia de las soluciones que aporta, y la simplicidad al desarrollar soluciones, manteniendo siempre un nivel de abstracción alto para mostrar ideas transversales al área.

Entorno de trabajo

Uno de los pasos fundamentales, y el primero que hay que cuidar en detalle, es la preparación de un sistema de desarrollo en el que podamos poner en práctica las ideas que vayamos estudiando.

Aunque el número de herramientas para trabajar con modelos de Deep Learning se incrementa cada día que pasa, sin duda hay una de ellas que destaca sobre las demás por el nivel de abstracción que ofrece, su usabilidad, y su extenso grado de aceptación entre desarrolladores: Keras.

Keras es una API de alto nivel, programada en Python, y que sirve de cobertura a los motores más extendidos de Deep Learning (Tensorflow, CNTK o Theano). Su nivel de abstracción tiene como objetivo principal pasar del problema a unos primeros resultados sin tener que conocer los fundamentos técnicos de las implementaciones a bajo nivel que ofrecen esos motores.

Como Keras ha sido diseñada como una librería Python, lo más normal es trabajar con él como lenguaje base (y aprovechar así otras librerías de Python relacionadas, como Numpy, Pandas, SciKit-Learn, etc.), también existen librerías en otros lenguajes de programación que permiten usar Keras como intermediario entre nuestro lenguaje elegido y el motor de Deep Learning que corre por debajo. Entre estos lenguajes de programación para los que existen binding de Keras, podemos destacar R (que junto con el magnífico RStudio  supone un duro competidor para la pareja Python Jupyter, la que usaremos en este curso), Haskell o Java. Por las características de Keras, en todos los casos se debe tener en cuenta que es necesario tener instalado Python, que seguirá actuando como intermediario en una capa inferior.

El primer punto de nuestro contenido será, pues, instalar todo el entorno de trabajo: Python + Keras + Jupyter, siguiendo las instrucciones de Neil Zang (que podremos seguir al pie de la letra pero teniendo en cuenta las versiones actuales de cada uno de los paquetes a instalar).

El curso se va construyendo con nuevos casos de uso y algunos resultados interesantes de la activa producción científica de los últimos meses, pero el núcleo del mismo se basa en el libro "Deep Learning with Python", de François Chollet, el creado de Keras. La mayoría de los notebooks que conforman este curso están basados en los que el autor proporciona en el repositorio Github asociado al libro.

Contenido

Tema Adjuntos
Instalación
Hojas de Ayuda
Repaso de Machine Learning (P1, P2)
Repaso de Redes Neuronales (P1, P2)

Optimización
Back Propagation
Entrenamiento 1
Entrenamiento 2
Entrenamiento 3

Introducción a Keras

Documentación Keras

Regularización
Redes Convolucionales
Análisis de Secuencias
Redes Recurrentes
DL Generativo

Referencias

Deep Learning (Libro de I. Goodfellow, Y. Bengio y A. Courville)

Deep Learning 501 (Intel)

Introduction to Deep Learning (MIT)

Designing, Visualizing and Understanding Deep Neural Networks