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 (números), 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í).
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.
Te esperamos en los siguientes artículos en donde hablaremos mas acerca de estos temas, los cuales hoy en día son de vital importancia en el mundo de la tecnología.