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)
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