7. Entrenamiento de redes neuronales d) Apéndices

Tipos de funciones de coste

Huber

La función de coste Huber es un compromiso entre MAE y MSE, ese compromiso se define con un parámetro llamado delta . La siguiente gráfica compara MAE, MSE y distintos valores de delta.

Si delta tiene en valor cercano a 1, tenderá a parecerse a MAE

Si delta tiene un valor elevado, tenderá a parecerse a MSE

Como decíamos con MAE y MSE. ¿queremos que los valores extremos se tengan en cuenta. Pues con el parámetro delta podemos hacer un ajuste mas fino

Su uso en Keras es:

Pensando en la gráfica de Huber he pensado si y , en vez de usar Huber, ¿No podríamos usar como función de coste algo también intermedio como Y he creado una gráfica similar para ver los resultados y no están mal He mirado un poco por internet para ver si alguien los usaba y no he encontrado nada, supongo que será porque hacer el cálculo de una potencia con decimales es bastante costoso en tiempo.

Mas información:

Huber class

Using Huber loss with TensorFlow 2 and Keras

Huber loss en Wikipedia

Backpropagation

El Backpropagation es el algoritmo que optimiza el entrenamiento de la red. Calcular el gradiente (o derivada) de toda la red es muy costoso. Se basa en la idea de que los parámetros de una capa no dependen de la capa anterior.

Si volvemos a ver nuestra red neuronal de ejemplo, podemos calcular los pesos de la neurona 5 sin que influya en como van a ser los pesos de las neuronas 2, 3 y 4. Es decir que empezamos con las neuronas de las capas más hacía la salida y una vez calculados sus pesos , calculamos los parámetros de las capa anterior (más hacia la entrada) , y eso significa ir hacia atrás o backpropagation.

backpropagation_3.mp4

Con backpropagation acabamos de ver el orden en el que se calculan los parámetros de cada neurona y a continuación vamos a ver con el descenso de gradiente como calculamos los parámetros de una neurona.

Junto con el backpropagation aparece otro concepto llamado regla de la cadena o chain rule que se usa para junto al backpropagation para hacer menos cálculos. Está relacionado con el cálculo de derivadas.

En los siguientes videos está explicado perfectamente el backpropagation y la chain rule:

¿Qué es una Red Neuronal? Parte 3 : Backpropagation | DotCSV: Video

¿Qué es una Red Neuronal? Parte 3.5 : Las Matemáticas de Backpropagation | DotCSV: Video

Creación de los gráficos del descenso de gradiente

Durante el tema hemos visto los gráficos que explican el descenso de gradiente. Veamos ahora como se pueden hacer dichos gráficos en Python.

La función que coste que hemos usado es la siguiente

cuya gráfica es la siguiente:

En python la función con NumPy sería así:

Y el algoritmo que calcula cada uno de los del descenso de gradiente es el siguiente:

Si ejecutamos lo siguiente:

El resultado es:

Que son cada uno de los valores de que empiezan en y acaban en

Pasamos ahora a mostrar los valores dentro de la gráfica de la función, para ello hemos creado 2 funciones:

plot_loss_function: Que dibuja la superficie con todos los colores

plot_descenso_gradiente: Dibuja los puntos por donde va pasando el algoritmo del descenso de gradiente

Si ejecutamos el código:

Vemos la siguiente gráfica donde se muestran los puntos que hemos obtenido de la función get_puntos_descenso_gradiente

La estrella roja es desde donde empieza el algoritmo. La estrella azul es donde acaba el algoritmo Los puntos amarillo son los pasos por lo que se va moviendo el algoritmo