Atrévete con Deep Learning: Principios básicos al alcance de todos

Paloma Recuero de los Santos    20 noviembre, 2018
¿Tienes una idea clara de lo que es el Deep Learning? Si no es así, no te preocupes, ya que, aunque está en boca de todos, es un concepto que genera mucha confusión. ¿Y por qué se habla tanto de algo de lo que se sabe tan poco? La respuesta es muy sencilla. El Deep Learning es una de las áreas de investigación más populares dentro del campo de la Inteligencia Artificial en los últimos años porque , gracias a estas técnicas, cosas como la visión artificial o el procesamiento del lenguaje natural han saltado del ámbito de la ciencia ficción a la realidad. Y porque es intrínseco a la naturaleza humana el querer comprender aquello que nos es significativo, que está en nuestro día a día. Y el Deep Learning lo está.
 
En esta nueva miniserie “Deep Learning para todos los públicos” vamos a intentar superar las barreras conceptuales, matemáticas o técnicas para lograr transmitir de forma intuitiva el significado de este concepto y el impacto tiene en nuestra vida presente y futura. En este primer post explicaremos:

  • La relación entre los conceptos de Inteligencia Artificial, Machine Learning y Deep Learning. 
  • Qué es un perceptrón y  veremos un ejemplo de cómo funciona
  • Qué son las redes neuronales y qué las caracteriza
  • Cómo funciona una red neuronal, comparándola con un Sistema Experto y otros algoritmos de Machine Learning
  • Por qué es tan potente el Deep Learning y el tipo de cosas que permite hacer
Por último, veremos un vídeo resumen de lo más interesante.
 

Deep Learning vs Machine Learning vs IA

En nuestro post Artificial Intelligence, Machine Learning y Deep Learning: ¿Conoces las diferencias? ya os contamos las principales diferencias entre los conceptos de IA, ML y DL, pero lo cierto es que pasamos un poco “de puntillas” por este último. Si recordamos, la idea principal que subyace al campo de la IA es conseguir que una computadora resuelva un problema complejo como lo haría un humano. A mediados de los años 60, la comunidad IA desarrolló los primeros sistemas expertos , en los que se creía que un potente ordenador y unas pocas reglas de razonamiento podrían emular expertos de rendimiento “superhumano” Sin embargo, claramente, los “recursos” no acompañaban.
 
Figura 1: De los Sistemas Expertos a las Redes Neuronales.
Figura 1: De los Sistemas Expertos a las Redes Neuronales.
 
Por este motivo, no fue hasta los años 80 que empezó a cobrar importancia el aprendizaje automático o Machine Learning. Se trata de una forma de IA que ya no necesita un programador que codifique reglas, sino que es capaz de establecer sus propias reglas y aprender por sí misma. Y fue en ese momento, casi 30 años después del los inicios de la Inteligencia Artificial, gracias al desarrollo de las tecnologías Big Data y de las mejoras en capacidad de procesamiento. 
 

Del Machine Learning al Deep Learning: redes neuronales

Cuando hablamos de Machine Learning, hablamos de algoritmos de aprendizaje. Hay muchos tipos de ellos. La elección del más adecuado, dependerá del tipo de tarea que se quiera resolver en cada caso. Por ejemplo, podemos hablar de algoritmos de clasificación como los árboles de decisión, o Naïve Bayes, algoritmos de regresión, de clustering, de análisis de componentes principales… Pero también podemos hablar de redes neuronales.
 
Las redes neuronales son un conjunto de algoritmos diseñados especialmente para reconocer patrones. Son muy potentes porque permiten que una computadora resuelva esos “problemas” que hasta entonces eran fáciles para un humano, pero muy complejos para una IA. Nos referimos a la percepción sensorial. Sí, el conocido ejemplo de “identificar un gato en una foto”, o “identificar un sonido”.
 

Origen de las redes neuronales: el perceptrón 

Para que la identificación de imágenes llegara a ser una realidad, hubo que recorrer un largo camino. El origen de la historia se remonta a 1943, cuando McCulloch y Pitts crearon el primer modelo de neurona artificial.  Casi 20 años después, en 1962,  Rosenblatt retomó la idea, creó una estructura llamada “Perceptrón” y el mecanismo de “Backpropagation”, que es el que permite a la neurona “aprender por sí misma” y descubrir la información oculta en los datos de entrada con los que la “entrenamos” .
 

¿Cómo funciona el perceptrón?

La idea es sencilla. Dados unos datos de entrada n1, n2 etc, existe una combinación de parámetros o coeficientes, que llamaremos función peso (w0, w1, etc), que combinados con ellos ofrecen un determinado resultado. El problema consiste en averiguar qué valores han de tener esos coeficientes wi para obtener el resultado que mejor se ajusta a la realidad. Para ello, lo que se hace es “entrenar” la red neuronal (en este caso, el perceptrón, una red de una única neurona). 
 
Figura 2; Representación de un perceptrón.
Figura 2; Representación de un perceptrón.
 
Por tanto, entrenar una red neuronal es averiguar qué combinación de valores wi, aplicados (=multiplicados) a los valores ni de los datos de entrada, dan como resultado los valores de salida que conocemos. Por ejemplo, si lo que queremos en entrenar una red neuronal para detectar imágenes de gatos, los datos de entrada son las imágenes, los datos de salida indican si hay o no un gato en esa imagen, y mediante el entrenamiento, la red neuronal ajustará los parámetros para detectar cuáles son los patrones ocultos en los datos de entrada que permiten identificar si, efectivamente, en esa imagen hay un gato. (tamaño, número de extremidades, aspecto peludo etc).
 
Para entenderlo mejor, tomamos prestado un ejemplo muy claro de este artículo de Xataka. En este ejemplo, los datos de entrada son las notas de dos exámenes n1 y n2. Si la suma de estos datos de entrada, multiplicadas por su peso correspondiente wi es mayor que un determinado umbral, la salida del perceptrón nf=1, que significa que el alumno ha aprobado. Si es menor que ese valor umbral, la salida del perceptrón tiene un valor nf=0 y significa que el alumno ha suspendido. Matemáticamente es tan sencillo como escribir: 
 
Figura 3: Fórmula simplificada de la entrada del perceptrón.
Figura 3: Fórmula simplificada de la entrada del perceptrón.
 
Para encontrar el valor de los pesos, wi, entrenamos la red neuronal y empezamos asignando a estos coeficientes wi un valor aleatorio. Por ejemplo, podemos elegir dar el mismo peso a cada examen y asignar un valor 0,5. Entonces vemos qué resultado da la red neuronal para cada alumno. Como tenemos un conjunto de datos de entrenamiento etiquetados, (lo datos de notas de exámenes, pareados con la nota final de curso correspondiente para cada alumno), sabemos qué resultado final es el que tiene que salir y esto nos permite ir ajustando los pesos en cada interacción. Con estos ajustes, la red neuronal va extrayendo información oculta en los datos de entrenamiento, aprende a detectar patrones. Por ejemplo, si un alumno ha sacado muy buena nota en el segundo examen, pero sin embargo ha suspendido, significa que ese examen influye poco en la nota final y por tanto hay que reducir su peso (w2).
 

Definición de red neuronal

Una red neuronal no es más que una superposición de perceptrones de distintos tipos conectados unos con otros en estructuras complejas. La estructura más sencilla se conforma de tres capas, una capa de entrada, una capa intermedia u oculta y una capa de salida.
 
Figura 4: Esquema de una red neuronal.
Figura 4: Esquema de una red neuronal.
 
 
¿Cómo funciona una red neuronal?

La idea es sencilla. Los datos de entrada viajan a través de las conexiones entre neuronas. La fortaleza de esos enlaces entre neuronas se representa por los pesos. Si la señal es lo suficientemente fuerte, se activará una determinada neurona. De esa manera el sistema “aprende” a distinguir las características de los datos de entrada que influyen más en el resultado, de las que no lo hacen, es decir, aprende a interpretar los patrones ocultos en los datos.

El Deep Learning o aprendizaje profundo es, por tanto, un subcampo dentro del Machine Learning que utiliza redes neuronales para obtener representaciones cada vez más significativas de los datos mediante el aprendizaje por capas. Cada una de estas capas va extrayendo características de un nivel cada vez más alto hasta llegar a su respuesta final.

Por ejemplo, una red neuronal diseñada para identificar rostros humanos empieza buscando relaciones simples entre los datos, como identificar bordes. Según vamos profundizando en la red, estas funciones más simples se van combinado para buscar relaciones más complejas,  como puedan ser partes concretas de la cara (ojos, boca, nariz). En un siguiente paso se identificaría la cara completa y por último se identificaría a la persona a la que corresponde esa cara. Así las sucesivas capas de abstracción serían:

Imagen– Bordes–Partes de la cara — Cara–Identificar a la persona por su rostro.

Las redes neuronales van "aprendiendo" características de los datos de forma progresiva de menor a mayor nivel, evitando el costoso trabajo previo de selección de características necesario en el Machine Learning tradicional.
Figura 6: Las redes neuronales van “aprendiendo” características de los datos de forma progresiva de menor a mayor nivel, evitando el costoso trabajo previo de selección de características necesario en el Machine Learning tradicional.

Para entenderlo mejor, vamos a comparar cómo realizar una tarea de clasificación típica usando un sistema experto, un algoritmo de Machine Learning clásico, y una red neuronal.

Figura 5: ejemplo de tarea de clasificación.
Figura 6: ejemplo de tarea de clasificación.
  • Sistema Experto: Usando sentencias tipo “IF- THEN”. Si es redonda y de color naranja, entonces es una naranja
  • Algoritmo ML. El algoritmo ML no usa reglas, sino que “aprende” a identificar una nueva fruta mediante el entrenamiento con un amplio conjunto de datos “etiquetados”. Son datos etiquetados, porque sabemos de antemano cuál el resultado correcto de la clasificación. El objetivo del entrenamiento es que algoritmo “aprenda” a identificar el conjunto de características que corresponden a una respuesta correcta determinada, para que cuando se le pida clasificar una fruta desconocida con características forma=redonda, color=naranja, la clasifique correctamente como “naranja”
  • Red Neuronal: Cada entrada de la red neuronal representa una característica del objeto. Se diseña la red para que, por ejemplo, la entrada uno se active cuando el color sea naranja, y la entrada dos cuando la forma sea alargada. Entrenamos el algoritmo con ejemplos para los cuales, cuando se activa la entrada uno, la respuesta correcta sea naranja, y cuando se active la dos, pera. Así el algoritmo aprende a distinguir una fruta de otra. Esta activación se realiza por medio de una operación que realizan todas las capas salvo la capa de entrada, antes de continuar multiplicando sus valores por las conexiones salientes. La función de activación recibe como entrada la suma de todos los números que llegan por las conexiones entrantes, transforma el valor mediante una fórmula, y produce un nuevo número. Existen varias opciones, (funciónes lineales, logísticas, hiperbólicas) lo cual le otorga una gran flexibilidad a las redes neuronales, pero una de las funciones más habituales es la función sigmoide. Esta función transforma los datos de entrada en valores de salida consistentes “0” o “1”, ya que estamos hablando de probabilidad. Después, el proceso se automatiza por medido de algoritmos de propagación del error. Compara el valor de salida ofrecido por la red neuronal con el valor real (los datos de entrenamiento están etiquetados), calcula la diferencia entre ambos resultados y la toma como error. A continuación, varía los pesos de las neuronas de forma que en la siguiente interacción se minimice este error. De esta forma, mediante múltiples interacciones, encuentra los valores de wi que ofrecen  el mejor resultado.

¿Por qué es tan potente el Deep Learning?

El Deep Learning es tan importante porque está permitiendo resolver de forma más fácil y eficiente un gran número de problemas. Por una parte, realiza de forma automática una de las tareas más complejas del proceso de trabajo de Machine Learning: la ingeniería de atributos. Las redes neuronales seleccionan de forma automática qué atributos son los relevantes y cuáles se pueden desechar. 
 
Otra de las grandes ventajas de trabajar con redes neuronales es que permiten trabajar con cualquier tipo de input. Cualquiera: números, imágenes, sonidos, textos, series temporales. Teniendo en cuenta que los datos no estructurados, aquellos que no encajan en la estructura tradicional filas/columnas de las bases de datos relacionales, suponen más de un 90% de todos los datos generados, es fácil comprender la importancia de poder manejarlos de forma eficiente. Estamos hablando de datos como mensajes de correo, vídeos, ficheros de audio, páginas web, mensajes en redes sociales etc.
 
¿Y cómo lo consiguen? Convirtiéndolos en valores numéricos y expresándolos con un formato matemático en el que resulta mucho más fácil identificar patrones: en forma de tensor. De hecho, uno de los hitos más importantes en el desarrollo del Deep Learning fue la creación de la librería Tensorflow, de la que hablaremos en otro post.
 
Así, una red neuronal entrenada con datos etiquetados, también se puede aplicar a datos no estructurados, lo cual les da a los algoritmos de Deep Learning una gran ventaja respecto a otros algoritmos al poner a su disposición un volumen de datos de entrenamiento mucho mayor. Algoritmos no muy buenos entrenados con enormes conjuntos de datos pueden dar mejores resultados que buenos algoritmos entrenemos con conjuntos de datos reducidos. De hecho, mientras en el caso de los algoritmos tradicionales usados en Machine Learning llega un momento en el un mayor volumen de datos no implica un mejor rendimiento, en el caso del Deep Learning no ocurre así. El rendimiento no deja de crecer, según lo hacen el volumen de datos y el número de capas del modelo.

Figura 6: Evolución del rendimiento del algoritmo según el volumen de datos disponibles.
Figura 6: Evolución del rendimiento del algoritmo según el volumen de datos disponibles.
 
Así, gracias al desarrollo de la computación paralela masiva con GPUs (las redes neuronales son en realidad un enorme número de cálculos que se ejecutan en paralelo), la disponibilidad de volúmenes masivos de datos, las nuevas plataformas de software como TensorFlow, Theano, Keras, CNTK, PyTorch, Chainer, y mxnet, y los avances matemáticos (optimizadores más robustos, mejores funciones de activación etc), se ha conseguido que una IA pueda hacer cosas tan sorprendentes como (del libro de  François Chollet book sobre DL):
 
  • Clasificar imágenes de forma similar a como lo haría un humano
  • Reconocimiento de voz de forma similar a como lo haría un humano
  • Reconocimiento de texto escrito de forma similar a como lo haría un humano
  • Mejores sistemas de traducción automática
  • Mejoras en la conversión texto-audio-texto
  • Asistentes digitales
  • Conducción autónoma de forma similar a como lo haría un humano 
  • Mejores anuncios personalizados, como hacen Google, Baidu y Bing
  • Mejores resultados de búsquedas en la web
  • Procesamiento de lenguaje natural
  • Ganar al campeón mundial de Go etc
 
Para terminar, os proponemos ver este interesante vídeo de la red de divulgación scenio, perteneciente a la Cátedra de Cultura Científica de la Universidad del País Vasco, en el cual, en menos de 10 minutos, cuentan de forma muy amena cómo funciona una neurona.

No te pierdas los siguientes post de esta miniserie, donde hablaremos de los distintos tipos de redes neuronales que existen y para que se utilizan, de cómo se consiguen la redes neuronales trabajar con datos no estructurados y multidimensionales y haremos nuestros pinitos con código.

Otras miniseries de nuestro blog que pueden interesarte:

Los post más interesantes de LUCA Data Speaks 2018 organizados por series y temáticas

Para mantenerte al día con LUCA visita nuestra página web,  suscríbete a LUCA Data Speaks o síguenos en TwitterLinkedIn YouTube.

Deja un comentario

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