Aprendizaje profundo con Keras - Aprendizaje profundo
Como se dijo en la introducción, el aprendizaje profundo es un proceso de entrenamiento de una red neuronal artificial con una gran cantidad de datos. Una vez entrenada, la red podrá darnos predicciones sobre datos invisibles. Antes de continuar explicando qué es el aprendizaje profundo, repasemos rápidamente algunos términos utilizados en el entrenamiento de una red neuronal.
Redes neuronales
La idea de una red neuronal artificial se derivó de las redes neuronales de nuestro cerebro. Una red neuronal típica consta de tres capas: entrada, salida y capa oculta, como se muestra en la imagen siguiente.
Esto también se llama shallowred neuronal, ya que contiene solo una capa oculta. Agrega más capas ocultas en la arquitectura anterior para crear una arquitectura más compleja.
Redes profundas
El siguiente diagrama muestra una red profunda que consta de cuatro capas ocultas, una capa de entrada y una capa de salida.
A medida que se agrega la cantidad de capas ocultas a la red, su entrenamiento se vuelve más complejo en términos de recursos requeridos y el tiempo que lleva entrenar completamente la red.
Capacitación en red
Después de definir la arquitectura de la red, la entrena para realizar ciertos tipos de predicciones. Entrenar una red es un proceso para encontrar los pesos adecuados para cada enlace de la red. Durante el entrenamiento, los datos fluyen desde las capas de entrada a las de salida a través de varias capas ocultas. Como los datos siempre se mueven en una dirección desde la entrada a la salida, llamamos a esta red como Red de avance y llamamos a la propagación de datos como Propagación hacia adelante.
Función de activación
En cada capa, calculamos la suma ponderada de entradas y la alimentamos a una función de activación. La función de activación aporta no linealidad a la red. Es simplemente una función matemática que discretiza la salida. Algunas de las funciones de activación más utilizadas son sigmoide, hiperbólica, tangente (tanh), ReLU y Softmax.
Retropropagación
La retropropagación es un algoritmo de aprendizaje supervisado. En Backpropagation, los errores se propagan hacia atrás desde la capa de salida a la de entrada. Dada una función de error, calculamos el gradiente de la función de error con respecto a los pesos asignados en cada conexión. El cálculo del gradiente avanza hacia atrás a través de la red. El gradiente de la capa final de pesos se calcula primero y el gradiente de la primera capa de pesos se calcula en último lugar.
En cada capa, los cálculos parciales del gradiente se reutilizan en el cálculo del gradiente para la capa anterior. Esto se llama Gradient Descent.
En este tutorial basado en proyectos, definirá una red neuronal profunda de retroalimentación y la entrenará con técnicas de retropropagación y descenso de gradientes. Afortunadamente, Keras nos proporciona todas las API de alto nivel para definir la arquitectura de red y entrenarla mediante el descenso de gradientes. A continuación, aprenderá cómo hacer esto en Keras.
Sistema de reconocimiento de dígitos escritos a mano
En este mini proyecto, aplicará las técnicas descritas anteriormente. Creará una red neuronal de aprendizaje profundo que se entrenará para reconocer dígitos escritos a mano. En cualquier proyecto de aprendizaje automático, el primer desafío es recopilar los datos. Especialmente, para las redes de aprendizaje profundo, necesita datos enormes. Afortunadamente, para el problema que estamos tratando de resolver, alguien ya ha creado un conjunto de datos para el entrenamiento. Esto se llama mnist, que está disponible como parte de las bibliotecas de Keras. El conjunto de datos consta de varias imágenes de 28x28 píxeles de dígitos escritos a mano. Entrenarás tu modelo en la mayor parte de este conjunto de datos y el resto de los datos se usarán para validar tu modelo entrenado.
Descripción del Proyecto
los mnistEl conjunto de datos consta de 70000 imágenes de dígitos escritos a mano. Aquí se reproducen algunas imágenes de muestra para su referencia
Cada imagen tiene un tamaño de 28 x 28 píxeles, lo que hace un total de 768 píxeles de varios niveles de escala de grises. La mayoría de los píxeles tienden hacia el tono negro, mientras que solo unos pocos están hacia el blanco. Pondremos la distribución de estos píxeles en una matriz o un vector. Por ejemplo, la distribución de píxeles para una imagen típica de dígitos 4 y 5 se muestra en la siguiente figura.
Cada imagen tiene un tamaño de 28 x 28 píxeles, lo que hace un total de 768 píxeles de varios niveles de escala de grises. La mayoría de los píxeles tienden hacia el tono negro, mientras que solo unos pocos están hacia el blanco. Pondremos la distribución de estos píxeles en una matriz o un vector. Por ejemplo, la distribución de píxeles para una imagen típica de dígitos 4 y 5 se muestra en la siguiente figura.
Claramente, se puede ver que la distribución de los píxeles (especialmente los que tienden al tono blanco) difieren, esto distingue los dígitos que representan. Alimentaremos esta distribución de 784 píxeles a nuestra red como entrada. La salida de la red constará de 10 categorías que representan un dígito entre 0 y 9.
Nuestra red constará de 4 capas: una capa de entrada, una capa de salida y dos capas ocultas. Cada capa oculta contendrá 512 nodos. Cada capa está completamente conectada a la siguiente. Cuando entrenemos la red, calcularemos los pesos para cada conexión. Entrenamos la red aplicando retropropagación y descenso de gradiente que discutimos anteriormente.