¿Qué demonios es el 'Deep Learning' y por qué debería aprenderlo en este artículo?

ilustracion_cerebro_humano.jpg

Deep Learning, ese término de moda, que quizá hayas oído en alguna ocasión, y que está asociado a la Inteligencia Artificial. ¿Pero qué es realmente el 'Deep Learning', para qué sirve? Para ser precisos, el 'Deep Learning' no es algo nuevo, pues lleva existiendo desde los años 80. Se trata de un campo de investigación que surge en los laboratorios de universidades y varias empresas tecnológicas, y cuya misión fundamental es el reconocimiento de patrones.

Si nos remontamos unas pocas décadas atrás, los años 70 y 80 marcan una verdadera revolución en cuanto al desarrollo de las tecnologías computacionales. En esos años pasamos de grandes terminales que costaban una fortuna y ocupaban una habitación entera, a modelos más pequeños y a precios mucho más asequibles. Dicha democratización del 'hardware' trajo también consigo un fuerte desarrollo en el 'software' que servía como motor director de los ordenadores, los sistemas operativos, y estos dieron luz verde a la popularización (y monetización) de las aplicaciones informáticas. Gracias a ellas, las empresas e individuos comenzaron a apoyarse en la capacidad de estas máquinas para realizar cálculos de forma automática y rápida, de cara a facilitar sus tareas habituales.

Y es en esta misma dirección en la que el 'Deep Learning' goza de sentido, visto como un pilar más en la aplicación de las Ciencias de la Computación a la productividad humana. Se trata de usar conocimientos y modelos estadísticos para encontrar patrones dentro de objetos donde reina una cierta aleatoriedad, y ser así capaces de diferenciarlos automáticamente. El ejemplo clásico es el reconocimiento de dígitos escritos a mano: desde pequeños, los humanos somos capaces de diferenciar un 1 de un 8 (a pesar de que nadie los escribe sobre el papel de la misma forma). Es decir, existen determinados patrones en los que estos dos dígitos son fundamentalmente diferentes; de hecho, ésta es la forma en que tradicionalmente se enseña a los niños: el 1 es una línea vertical, y el 8 dos círculos uno sobre el otro.

Lo que el 'Deep Learning' (y el Aprendizaje Automático o 'Machine Learning', como disciplina que lo engloba) busca es ser capaz de formalizar dichas ideas, y crear un marco sobre el que poder crear estructuras y modelos que permitan automatizar esas tareas. Es decir, pasar de un enfoque informático tradicional, de tipo determinista, que te dice que un 8 está formado por dos círculos de igual radio, uno situado simétricamente sobre el de abajo, a un enfoque estocástico, donde lo importante no es si los dos círculos tienen exactamente el mismo radio, o están perfectamente uno encima del otro, si no el hecho de que estamos mirando un dígito, donde efectivamente hay dos círculos uno más o menos encima del otro, y eso representa un 8.

Y aunque a nosotros como humanos esa nos resulta una tarea bastante sencilla, que hacemos desde pequeños, lo cierto es que para una máquina se trata de un problema complejo. Tan complejo que la inspiración para resolverlo se basa precisamente en replicar el cerebro humano. O, para ser más precisos, replicar tanto la estructura neuronal del cerebro (la red de neuronas que Santiago Ramón y Cajal describía de forma pionera), como los mecanismos de aprendizaje que se usan sobre esa red neuronal. En otras palabras, buscamos poder enseñar a una máquina a aprender (de ahí el nombre 'Machine Learning'), o lo que es lo mismo, crear redes neuronales artificiales.

¿Cómo enseñar a una máquina?

Como decíamos arriba, cuando hablamos de enseñar a aprender a las máquinas, se juntan dos ámbitos o planos distintos.

Por un lado el plano material, lo que en un ser humano sería la estructura física del cerebro, que en el caso de una máquina podríamos implementarlo bien con neuronas de silicio (es decir, un 'hardware' específicamente diseñado para replicar la naturaleza y comportamiento de las neuronas humanas, por ejemplo, Qualcomm Zeroth), o bien con neuronas virtuales (el método más habitual) donde la arquitectura del 'hardware' es la de los ordenadores comunes y se usa 'software' para crear estructuras de datos que modelan las neuronas. Neuronas virtuales que, frente a la opción anterior, podemos crear y destruir al instante tantas como queramos, según dispongamos de memoria en el ordenador.

En éste último caso, la modelización que se hace de una neurona es como una estructura o entidad (tradicionalmente dibujada como un círculo) que contiene un número real. Esta neurona está conectada a través de pesos, por un lado a una señal entrante (que puede ser la salida de otra neurona, o la entrada al sistema, fondo blanco en la siguiente imagen), y por el lado opuesto o bien a la entrada de otra neurona o a la salida del sistema (fondo verde en la siguiente imagen). En nuestro ejemplo la entrada al sistema son los dígitos escritos a mano (o más concretamente, los píxeles de dichos dígitos) y la salida del sistema es el dígito que la máquina asocia a dichos píxeles.

La red neuronal se compone de varias capas de neuronas artificiales. De hecho, el origen del término de 'Deep' (profundo) sale precisamente de juntar varias capas ocultas, una detrás de otra. Las neuronas de esas capas contiguas estarán conectadas entre sí, o bien todas-con-todas (algo que se conoce como 'fully-connected'), o sólo parcialmente (como las neuronas con fondo amarillo, justo debajo, que sólo están conectadas por un lado).

Resumiendo, una parte importante del campo del 'Deep Learning' es el diseño de la arquitectura de la red neuronal (cuántos capas de neuronas tiene, y cómo están conectadas entre sí), así como cuál es la función de activación para cada neurona.

El otro ámbito es precisamente el del aprendizaje, que tradicionalmente ha pertenecido a las disciplinas académicas de la Psicología y la Filosofía, y cuyos mecanismos copia la Ingeniería Informática para dotar a la capa neuronal de utilidad. Y los emula fundamentalmente en dos grandes líneas de aprendizaje: el supervisado, y el no-supervisado.

El aprendizaje supervisado consiste en dotar a la red neuronal de ejemplos prácticos junto con sus etiquetas, para que ésta pueda aprender lo que caracteriza a cada uno. Así, en el reconocimiento de dígitos, el sistema recibe los diferentes números escritos a mano junto con el dígito que representa. Después de una cantidad suficiente de ejemplos, la red aprende a diferenciarlos, de tal manera que cuando le pasemos un dígito nuevo escrito a mano (el de prueba) la red tiene una alta probabilidad de inferir correctamente su etiqueta.

Y esto lo hace en base a algún algoritmo de aprendizaje. En la actualidad hay muchos, que suelen ser variaciones del algoritmo clásico de retropropagación del error ('error backpropagation', propuesto en 1986 por David Rumelhart, Geoffrey Hinton y Ronald Williams). La idea básica es que, si empezamos con unos pesos aleatorios para las conexiones entre las neuronas, las neuronas de salida nos darán un resultado que no se ajusta para nada a las etiquetas de las que disponemos para cada ejemplo. Esta falta de ajuste se puede codificar como un error, que es el que eventualmente queremos minimizar. En otras palabras, buscamos ajustar los valores de los pesos de forma que el error que obtengamos en las neuronas de salida sea el mínimo posible. En términos matemáticos estaríamos hablando de optimizar la función de error.

Y precisamente lo que se usa en el método de la retropropagación es un algoritmo de optimización, más concretamente el llamado descenso de gradientes. Así, tras un cálculo de derivadas sencillo, podemos entender cómo se propaga ese error por cada una de las capas de la red neuronal, y tras un número de iteraciones (que pueden ser pocas o muchas, en función de los datos en cuestión) el algoritmo tiende a encontrar los valores de los pesos que dan un error mínimo.

Aquí es importante hacer notar que el sistema en ningún caso está guardando los dígitos con que se ha entrenado, y buscando a cuál se parece más el nuevo que estamos probando, sino que 'aprende' a través de los ejemplos qué diferencia a un 1 de un 2, de un 3, de un 4, etcétera. Esto implica que cuantos más ejemplos le pasemos, aprenderá mejor, pero el tamaño de la red no aumenta porque el diseño físico de la misma no ha cambiado, solamente lo han hecho sus pesos. Se trata de un esquema muy parecido a como un niño aprende a distinguir dígitos, en base a ver muchos, y de ahí que a menudo a este tipo de aplicaciones se las denomine cognitivas.

En lingo técnico, la misión fundamental de los modelos de aprendizaje supervisado es la de clasificación y regresión, es decir, obtener el parámetro o etiqueta de salida en base a unos parámetros de entrada. Durante el entrenamiento de la red se le suministra el parámetro de salida para que aprenda, pero luego ésta tiene que hacerlo sola, dando una predicción. En nuestro ejemplo concreto los parámetros de entrada son los dígitos escritos a mano, y el de salida es el número que representan, y por lo tanto hablamos de una tarea de clasificación. Cuando en lugar de dígitos discretos lo que buscamos es un parámetro continuo, se le denomina regresión.

Por otro lado, el aprendizaje no-supervisado funciona sin tener acceso a las etiquetas de cada ejemplo suministrado. La idea no es tanto lograr una tarea predictiva, si no descriptiva, de forma que seamos capaces de extraer conocimiento intrínseco de los datos en base a unos algoritmos que calculan cómo se parecen entre sí los ejemplos, o qué tipo de asociaciones existen en los diferentes elementos que componen los ejemplos. El caso típico es la separación en varios grupos de los puntos sobre un gráfico de dispersión, conocido como agrupamiento o 'clustering'.

Para este tipo de tareas no se necesitan etiquetas, ya que el propio algoritmo clasifica cada ejemplo en función del resto de ejemplos. Por ello, en estos casos es común que se necesite guardar en memoria todos los ejemplos y evaluarlos una vez entre el ejemplo de prueba, lo que se conoce como 'lazy-learning'.

Si bien también ha habido líneas de investigación para aplicar estos métodos no-supervisados a problemas de clasificación, lo cierto es que estos no han logrado el mismo nivel de éxito que los supervisados. A día de hoy, en el campo de la identificación de patrones, el aprendizaje no-supervisado se suele usar como un paso previo al desarrollo de una red neuronal, que casi siempre es ya de tipo deep, para facilitar el aprendizaje de la misma.

Deep Learning 2012: tecnología, modelos y datos

Una pregunta muy natural que el lector puede tener llegado a este punto es: si esta tecnología funciona, y sus fundamentos matemáticos existen desde los años 80, ¿por qué se ha convertido en una moda sólo ahora? La razón está anclada a consideraciones tecnológicas y empresariales. A nivel comercial el desarrollo de aplicaciones ha sido lento, ya que no existían demasiados casos de éxito técnicos que pudieran ser trasladados a ambientes prácticos. El más famoso fue el del hoy director del laboratorio de IA de Facebook, Yann LeCun, conocido como la red LeNet-5, una red neuronal convolucional (un tipo de red que simula cómo el cerebro distingue patrones en las imágenes) con 5 capas desarrollada entre 1989 y 1998, y de cuyas demos he sacado el pantallazo de arriba. La misión era, precisamente, el reconocimiento de dígitos escritos a mano, y se implementó eficazmente tanto en la oficina postal de EEUU como en bancos, que llegaron a leer entre el 10-20% de sus cheques mediante este sistema.

Desde esa época hasta el 2012 siguió habiendo avances en la investigación de las arquitecturas neuronales y los métodos de aprendizaje, pero no salieron de un contexto académico. De hecho, el campo de las redes neuronales (como disciplina informática) vivió uno de sus peores inviernos precisamente entre 2000 y 2008, cuando su dificultad para encontrarles aplicaciones, y la explosión del universo digital, hizo que sus activistas quedaran relegados a despachos en universidades. Pero fue precisamente ese universo digital, y en concreto las redes sociales, las que irónicamente jugaron un papel determinante en su revitalización.

Como hemos explicado antes, el principal paradigma del aprendizaje automático es que, frente a otros paradigmas de Inteligencia Artificial, los algoritmos de 'Machine Learning' aprenden en base a ejemplos. Es decir, necesitan de datos para poder desarrollar su 'inteligencia' y ser de utilidad. Y justo los datos de tipo cognitivo (imágenes, texto, audios...) comenzaron a crecer exponencialmente con la llegada de la digitalización. Por un lado la gente estaba generando ingentes cantidades de datos (fundamentalmente en redes sociales y en plataformas web), y además la tecnología necesaria para almacenarlos y procesarlos en un tiempo razonable estaba avanzando a grandes pasos.

Así, la cuestión entonces era aplicar todos esos modelos matemáticos, que se llevaban décadas preparando y creando en las universidades, precisamente sobre esos nuevos datos. En este sentido, se encontraron con que la primera dificultad era la mala escalabilidad en el tiempo que tenían estos algoritmos, al nutrirles de una cantidad de información tan grande. Efectivamente teníamos muchos más datos con que alimentar a la redes neuronales para que éstas aprendieran, pero tardaban demasiado en entrenarse, o simplemente eran incapaces de hacerlo eficazmente.

Sin embargo, afortunadamente, contábamos también con otro agente tecnológico externo que acudió en ayuda: la computación paralela, y más concretamente las GPU (acrónimo del inglés 'graphical processing units') o tarjetas gráficas. Éstas, que originariamente habían sido concebidas para hacer cálculos masivos de operaciones matriciales (las que se usan para el renderizado de píxeles en imágenes) resultaron perfectamente idóneas para ayudar a los investigadores a paralelizar sus tareas de entrenamiento de las redes neuronales.

Tanto, que en 2012 un grupo de investigación de la Universidad de Toronto liderado por Geoff Hinton (el mismo de la retropropagación) usó dos de estas tarjetas para entrenar una red convolucional con 650.000 neuronas, en base a 1.200.000 imágenes de alta definición. Esta red, conocida como AlexNet, entró en la Competición ImageNet de 2012, y ganó el premio en la prueba de reconocimiento Error de Test Top-5, alcanzando un error del 15.3% en la clasificación de 150.000 fotografías (de mil tipos distintos) de Flickr. Sus competidores, que eran equipos expertos en el campo de la Visión Computacional, y cuyos avances de año en año eran de escasos puntos porcentuales, quedaron por encima de 26%. Es decir, que AlexNet resultó rompedora en el campo. ¡Tanto que en la ILSVRC-2013 todos los participantes presentaron una red neuronal del mismo estilo!

Desde entonces, (casi) todas las aplicaciones de visión computacional tienen su base en las redes convolucionales, y últimamente las más mediáticas vienen en forma de conducción automática, promulgadas por empresas como Tesla, Uber o Google, empresa a la que fueron a trabajar en 2013 los tres autores de AlexNet. Y el 'Deep Learning' no sólo ha impactado el tratamiento de imágenes, sino también el reconocimiento de voz, donde asistentes personales como Siri (propiedad de Apple), Alexa (de Amazon) u OK Google se basan en redes neuronales recurrentes.