Iniciándonos en el Deep Learning

Un blog de Bryan García

Iniciándonos en el Deep Learning

En estos últimos años, las grandes empresas tecnológicas están apostando por el desarrollo y la mejora de algoritmos de reconocimiento de voces, imágenes y textos en sectores como internet, las finanzas, el transporte, el diagnóstico médico o las telecomunicaciones.

Buena parte de estas mejoras se deben al denominado como Machine Learning, o aprendizaje automático, una rama de la Inteligencia Artificial donde el objetivo principal es que un sistema o máquina sea capaz de aprender y analizar información suministrada de ejemplo con el objetivo de predecir o generalizar ejemplos futuros, sin ningún tipo de intervención humana en el proceso. O dicho de otra forma, un conjunto de algoritmos destinados a buscar los patrones por los cuales una información de origen se transforma en una información de destino.

Más allá de este Machine Learning está lo que se conoce como Deep Learning, o aprendizaje profundo, que no es más que un conjunto de técnicas y procedimientos algorítmicos basados en Machine Learning para lograr que una máquina aprenda de la misma forma que lo hace un ser humano. Siendo más precisos, hablamos de una familia de algoritmos cuyo propósito es simular el comportamiento que lleva a cabo nuestro cerebro para reconocer imágenes, palabras o sonidos.

 

Redes neuronales artificiales

Para llevar a cabo esta «simulación» es común –pero no la única forma– la construcción de las llamadas redes neuronales artificiales, herramientas matemáticas que modelan de forma muy simplificada el funcionamiento de las neuronas en el cerebro.

Así, un ejemplo concreto podría ser una red neuronal que detecte rostros en imágenes. Es muy fácil codificar una imagen como una lista de números. Por tanto, esta red recibiría tantos números a su entrada como píxeles tienen nuestras imágenes –o tres por cada píxel si utilizamos imágenes en color. Y si la información que esperamos a la salida es que nos diga si hay un rostro o no, basta con una sola neurona en la capa de salida que nos lo indique. De este modo, podemos concluir que si el número que sale de la red en su capa de salida toma un valor cercano a 1 significa que efectivamente la imagen que se proyecta en las neuronas de la capa de entrada es una cara, y si toma un valor cercano a 0 significa que no lo hay.

A nivel más básico, la arquitectura de una neurona artificial sigue el modelo MLP (Multi-Layer Perceptron), o perceptrón multicapa, y se caracteriza porque tiene sus neuronas agrupadas en tres capas de diferentes niveles: la capa de entrada (reciben las señales de entrada de la red y las propagan a las neuronas de la siguiente capa), las capas ocultas (procesan la información de las capas anteriores) y la capa de salida (proporciona la información saliente de la red ya procesada).

MLP

No son los únicos factores que influyen en este modelo. Cada una de las neuronas de la red lleva asociado un peso (w) determinado, y es la definición de estos pesos lo que es necesario ajustar de manera iterativa para lograr que una red neuronal artificial se «entrene» en pos de encontrar una predicción adecuada en función de los valores de entrada.

En este proceso predictivo entran en juego también dos funciones: la llamada función de propagación, que suele ser el sumatorio de cada entrada multiplicada por el peso asignado, y la función de activación, que combina el valor obtenido por la función de propagación con el estado actual de la neurona para conseguir el estado final de la siguiente neurona.

 

Aprendizaje de la red

Una vez elegida la estructura neuronal llegamos a la parte crucial de este Deep Learning. ¿Cómo hacer que nuestra red neuronal sea capaz de «aprender» nueva información para llegar a resolver un problema? Esto se lleva a cabo mediante un proceso –también algorítmico– denominado entrenamiento. Realmente, este entrenamiento de la red no consiste más que en hacer ajustar los pesos de cada neurona hasta que nos proporcione la salida que esperamos en la red.

Partiendo de un conjunto de pesos aleatorios, se busca un conjunto de pesos que permitan a la red desarrollar correctamente una determinada tarea. De este modo, se va refinando iterativamente la solución hasta alcanzar un nivel de operación suficientemente bueno. Podemos encontrar hasta 3 tipos de entrenamiento:

  • Aprendizaje supervisado: Se presenta a la red un conjunto de patrones de entrada junto con la salida esperada. Los pesos se van modificando de manera proporcional al error que se produce entre la salida real de la red y la salida esperada. El algoritmo más común que se suele utilizar para este tipo de aprendizaje es el backpropagation.
  • Aprendizaje no supervisado. Se presenta a la red un conjunto de patrones de entrada, y no hay información disponible sobre la salida esperada. En otras palabras, la red por sí sola descubre características o correlaciones en base a la información de entrada a medida que itera. Los auto-codificadores son un ejemplo de red neuronal que funcionan mediante aprendizaje no supervisado, unas redes capaces de comprimir y descomprimir información.
  • Aprendizaje por refuerzo. Este tipo de aprendizaje se ubica entre medio de los dos anteriores. Se le presenta a la red un conjunto de patrones de entrada y se le indica a la red si la salida obtenida es o no correcta; sin embargo, no se le proporciona el valor de la salida esperada. Este tipo de aprendizaje es muy útil en aquellos casos en que se desconoce cual es la salida exacta que debe proporcionar la red. Para ello se suele utilizar el algoritmo Q-Learning, usado como un Proceso Decisivo de Markov.

En definitiva, la mayoría de métodos de entrenamiento utilizados en las redes neuronales consiste en proponer una función de error que mida el rendimiento de la red en función de los pesos. El objetivo del entrenamiento es encontrar el conjunto de pesos que minimicen –o maximicen– la función de error. El método de optimización proporciona una regla de actualización de los pesos que, en función de los patrones de entrada, modifica iterativamente los pesos hasta alcanzar el punto óptimo de la red neuronal.

 

Deep Learning en la práctica

Ante tanto batiburrillo técnico cuesta visualizar cuál puede ser el alcance real de este Deep Learning y su importancia futura. En lo que a diseño de software se refiere, existe una fuerte comunidad de Deep Learning dentro del mundo del software libre para potenciar e implementar soluciones y proyectos a estos niveles. Lenguajes de desarrollo se nutren cada vez más de librerías fabricadas por la comunidad para lograr avances significativos en Machine Learning, lo que se traduce en grandes soluciones que abarcan el procesamiento del lenguaje, el reconocimiento de voz, la visión por computador, la minería de datos o el internet de las cosas.

Así, podemos encontrar librerías para desarrollar Deep Learning usando C++ (Cuda, OpenNN), Python (Theano, Pylearn2, CXXNET, DeepPy), Matlab (ConvNet, Cuda), Java (Deeplearning4j), R (darch) y más recientemente TensorFlow.

Un ejemplo común cuando se empieza a diseñar redes neuronales artificiales es hacer uso de la conocida base de datos MNIST, conformada por alrededor de 60.000 imágenes de dígitos del 0 al 9 escritos a mano –y otras 10.000 imágenes para su testeo– en escala de grises. De este modo, se podría crear una red neuronal que detecte si una imagen introducida como entrada en la red corresponde a uno de los 10 dígitos o no.

En este ejemplo se presenta una red que clasifica los dígitos usando regresión logística, usando la librería Theano (Python). Se usa una red neuronal de 784 entradas (una por píxel de cada imagen: de 28×28), 110 capas ocultas y un total de 10 salidas. Cada una de estas salidas corresponden a un dígito del 0 al 9, el cual una sola de estas entradas se activará a 1 indicando cual es el número escrito a mano que se ha pasado por la entrada de la red.

 

¿Y dónde se usa este Deep Learning?

Si bien estos procedimientos de «hacer que una máquina sea capaz de pensar como un humano» puedan parecer futuristas, es una idea que ya se concibió desde principios-mediados del pasado siglo XX, pero no fue hasta los años 80 cuando de verdad empezó a adquirir protagonismo con los avances en Machine Learning.

Hoy en día, con el espectacular avance tecnológico vivido desde entonces, podemos encontrar este Deep Learning en cientos de aplicaciones y startups. Algunos ejemplos:

  • Detección de correos electrónicos como spam en la mayoría de gestores de correo.
  • Google o Bing usan redes neuronales para mejorar la precisión de sus búsquedas.
  • Uber optimiza los viajes de sus conductores en función de diferentes variables.
  • Facebook o Google usan algoritmos de Deep Learning para ofrecer anuncios personalizados a sus usuarios.
  • Siri o Cortana utilizan patrones de aprendizaje basados en reconocimiento de voz con Deep Learning.
  • Sistemas de reconocimiento facial presente en numerosas aplicaciones móviles.

 

Tags: , ,

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *