WOT

Thursday, March 2, 2017

Aprendizaje profundo para principiantes

Nota: Este artículo es una traducción del original que aparece en HACKERNOON: https://hackernoon.com/supervised-deep-learning-in-image-classification-for-noobs-part-1-9f831b6d430d#.rbtjt4bkd

Muchas gracias al autor Debarko De por permitir su publicación en español. 

Aprendizaje profundo para principiantes (Parte I)
Hace tiempo que el software de aprendizaje profundo va ganando terreno, y su aplicación se ha extendido a múltiples campos.
En estas entradas aprenderá a resolver el problema elemental de detectar un objeto (como puede ser un gato o un perro) en una imagen. A medida que avance en la solución, podrá aprender sobre un tipo concreto de aprendizaje profundo. También podrá codificar en Keras y Tensorflow, dos de las famosas bibliotecas de esta tecnología. 
No nos vamos a ocupar de las matemáticas que hay detrás del aprendizaje profundo.
La serie tiene dos partes. La primera parte trata de los fundamentos y trucos del aprendizaje profundo. En la segunda parte, vamos a investigar la forma de crear sus propios modelos en Keras.
Pero antes de entrar en materia me gustaría presentarme. Soy ingeniero informático y actualmente trabajo en @ Practo. Con anterioridad he trabajado en el desarrollo de juegos en la plataforma de Facebook (cuando se trataba de una sola tarea) y más tarde en juegos para móviles.
Para empezar, ¿qué es aprendizaje profundo? ¿Por qué se le llama profundo? ¿Es un sistema que realmente aprende?
Comencemos con un poco de historia. El aprendizaje profundo es el último grito en el campo de las redes neuronales, aunque en realidad éstas surgieron en los años 60 del pasado siglo. Si no sabe lo que es una red neural, no se preocupe porque lo explicaré al final de esta entrada. En 2006 un genio llamado Geoffrey Hinton y sus colaboradores publicaron un artículo. El artículo contenía una interesante descripción de un tipo de red neuronal. En 2012, dos de los estudiantes colaboradores de Hinton ganaron una competición (ILSVRC) por un margen que duplicaba al de sus competidores más cercanos. Esto demostró a todo el mundo que el trabajo de Hinton puede llegar a solucionar problemas muy interesantes.
Vamos a tratar de resolver el problema de Clasificación de imágenes. Con la operación de clasificación lo que estamos tratando de hacer es intentar entender cuál es el contenido de una imagen. Las posibilidades actuales limitan la solución, ya que tratan imágenes que sólo tienen un tipo de objeto. La imagen será la de un gato o un perro. Para hacerlo más sencillo, no vamos a clasificar por ejemplo las imágenes que tienen un perro sentado en un coche.
En una red neuronal, hay un número n de neuronas que se interconectan entre ellas de una manera lineal. Se presenta una imagen  en la entrada de la red y ésta decide a qué clase de salida pertenece. Entrenar una red significa presentar en la entrada una gran cantidad de imágenes de varias clases. Cada una de estas imágenes ya tiene la etiqueta de pertenencia a una de las clases.


Figura básica que representa la sección transversal de una red neuronal convolucional

La red neuronal es una sencilla fórmula matemática que se parece a algo así:
x * w = y
Supongamos que la x es la imagen de entrada y  la y es una salida, que es la clase que define la red. x es constante porque sólo hay un conjunto fijo de imágenes. La red proporciona la y como salida. Sólo podemos cambiar la w. Llamamos w al peso de una capa neuronal. El proceso de entrenamiento consta de dos partes: el paso hacia adelante y la propagación hacia atrás. En el paso hacia adelante proporcionamos imágenes a la entrada de la red (x) y la red genera algún tipo de salida y'. La proximidad de y' a y es el error de la red.
En la propagación hacia atrás, la red intenta disminuir el error ajustando el peso w. En la jerga se conoce a w como hiper parámetro, kernel, o filtro. El problema con las redes neuronales es que  todos los datos pasan de una capa a la otra. Para resolver esto vamos a utilizar las redes neuronales convolucionales. ¿Y qué es la convolución? Lo veremos a continuación.
Capa de convolución


Capa de convolución
Las redes neuronales están totalmente conectadas, lo que significa que una capa de neuronas pasaría todo el conjunto de datos a la siguiente capa. La siguiente capa procesaría todos los datos  y así sucesivamente. Esto funciona para imágenes simples como son las de 8x8 o incluso de 36x36. Pero las imágenes prácticas son de un tamaño de 1024x768, lo que supone una enorme tarea de cálculo. Las imágenes son fijas por naturaleza. Esto significa que los datos estadísticos de una parte de la imagen son los mismos que los de cualquier otra parte. Por lo tanto, una característica aprendida en una zona puede presentar coincidencias de patrones similares en otra zona. En una imagen grande, tomamos una sección pequeña y la pasamos a través de todos los puntos de la imagen grande. Al pasar por cualquier punto realizamos la convolución de los mismos en una única posición. Trate de imaginar que una gran caja de datos se convierte en una pequeña caja de datos para la siguiente capa de neurona. Ese es el resultado de la convolución. Esto ayuda a realizar un cálculo más rápido sin perder precisión en los datos. Cada pequeña sección de la imagen que pasa sobre la imagen grande realiza las funciones de filtro. Los filtros se configuran más tarde basándose en los datos de la propagación hacia atrás (llegaremos a eso en un bit).
Capa de agrupación
El paso siguiente es la agrupación. La agrupación no es otra cosa que el muestreo de una imagen con una frecuencia inferior a la normal. De nuevo ayuda al procesador a procesar los datos más rápido. Hay muchas técnicas de agrupación. Una de ellas es la agrupación máxima en la que tomamos el mayor de los valores de los píxeles de un segmento. También existe la llamada agrupación media. En lugar de elegir el píxel con mayor valor, calculamos la media. La agrupación hace que la red sea invariante a las traducciones de la forma, tamaño y escala. El agrupamiento máximo es generalmente el predominante.

Un sencillo ejemplo de agrupación máxima, en la que elegimos el pixel de mayor valor en cada cuadrado de color.
Capa de activación
Una neurona se comporta como un clasificador lineal. Una neurona tiene la capacidad de encenderse o apagarse dependiendo de ciertas secciones consecutivas de datos de entrada. A esta propiedad de la neurona la llamamos activación. Las funciones de activación son funciones matemáticas que se comportan como válvulas. Suponga que hay una válvula que se abre cuando hay una buena cantidad de presión como en el caso de una olla a presión. Los datos que hacen que una función de activación se vuelva verdadera marca la neurona como activa. Clasificamos una imagen basándonos en las neuronas que se activaron de entre todas ellas. Hay muchas funciones de activación, pero ReLu es las más famosa. El porqué de elegir ReLu es una cuestión que está fuera del alcance de este documento. Pronto escribiré otro artículo que habla sobre diferentes funciones de Activación.
Propagación hacia atrás
La propagación hacia atrás es el proceso en el que intentamos reducir el error. Por error, me refiero a la diferencia entre y e y'. Esto ayudará a ajustar el conjunto de datos que le dimos a la red. Realizamos la propagación hacia atrás utilizando el proceso de descenso de gradiente. Este proceso intenta aproximar el valor de error a cero.
¿Que sigue?
Ya hemos tenido suficiente literatura para empezar a trabajar en las aplicaciones de redes neuronales convolucionales ó # CNNs. Para cómo y cuándo usted se quede atrapado en la fase de implementación, puede leer más sobre ese tema en particular. Si formula preguntas en la sección de comentarios, trataré de contestarlas personalmente. Esto nos lleva al final de esta parte de la serie. Actualmente estoy trabajando en la segunda parte. Hablaré de la implementación de redes neuronales convolucionales mediante código. La publicaré la próxima semana.
En este espacio se insertará el enlace al siguiente artículo. Sígame en twitter y también puede registrarse en una pequeña lista de correo mailing list. Si le ha gustado este artículo, pulse el botón ❤ para recomendarlo. Esto ayudará a otros usuarios de Medium a encontrarlo.


No comments:

Post a Comment