3 de mayo de 2020

Entrenamiento de una red neuronal

Hola,
hoy voy a hablar sobre el entrenamiento de una red neuronal, que es el proceso por el que  presentamos a la red un conjunto de ejemplos de los que sabemos cuál debería ser la respuesta de la red. El ejemplo de la figura es una imagen de 28x28 píxeles en escala de grises que representa el número 3 y pertenece al conjunto MNIST de números manuscritos.
Figura 5.2 de Krohn J (2019) Deep Learning Illustrated

El proceso de entrenamiento consiste en presentar a la red el conjunto de entrenamiento varias veces seguidas (épocas en la jerga) con el fin de que vaya aprendiendo. Al final de cada época podemos calcular el error que comete la red al clasificar las instancias presentadas, que se calcula comparando las salidas obtenidas con las esperadas . El objetivo del entrenamiento es minimizar el error. Por tanto, deberemos definir una función de coste con el objeto de optimizarla frente a un conjunto de entrenamiento lo más grande y realista posible.

La función coste (loss function en la literatura) se calculaba inicialmente como el coste cuadrático promedio. El valor obtenido es siempre positivo y penaliza más las grandes diferencias que las pequeñas. Es el RMSD que se emplea por ejemplo para comparar estructuras de proteínas similares. Sin embargo, tiene el inconveniente de ser poco sensible a cambios en los pesos de las neuronas cerca de sus valores extremos, y por tanto, ralentiza el aprendizaje. Por esa razón se sustituye habitualmente por una función basada en logaritmos de coste entrópico, tomada de la teoría de información:



El último paso de una época de aprendizaje es la retro-propagación, es decir, la optimización de los pesos y umbrales de activación de las neuronas para minimizar el error. Para ello se emplea el algoritmo clásico del gradiente descendiente capa a capa, en sentido contrario a la propagación, empezando por la capa inmediatamente anterior a la capa de salida. El proceso completo se resume en el siguiente diagrama de flujo, donde se observa que los datos de entrenamiento se reparten en lotes (batches):

Figura 8.6 de Krohn J (2019) Deep Learning Illustrated
Dos de los parámetros más importantes durante el aprendizaje son:

1) la tasa de aprendizaje , que es la pendiente que aplica el algoritmo del gradiente descendiente para descender por el gradiente de coste. J Krohn recomienda valores de 0.01 u 0.001 para empezar.

2) El tamaño de los lotes, que nos permitirá entrenar con conjuntos de datos más grandes que la RAM de nuestro sistema de cálculo.

Al comparar los costes entre épocas es posible calcular la velocidad de aprendizaje. La siguiente figura muestra que la velocidad de aprendizaje es diferente para las diferentes capas de una red profunda. En concreto, las capas aprenden más lentamente cuánto más lejos de la capa de salida:

Figura 8.8 de Krohn J (2019) Deep Learning Illustrated

Esta es la razón más importante para restringir el número de capas ocultas de una red profunda. Hasta la próxima,
Bruno

2 comentarios:

  1. https://www.science.org/doi/10.1126/science.adi8474

    ResponderEliminar
  2. https://www.linkedin.com/posts/tom-yeh_deeplearning-machinelearning-artificialintelligence-activity-7150568796347363328-LWk0

    ResponderEliminar