Actualización de los parámetros

Resumamos cuál ha sido el proceso hasta ahora: hemos alimentado la red neuronal con estructuras Pandas (un DataFrame para las características predictivas y una Serie para los valores objetivo), las hemos transformado en listas (categorizando los valores objetivo), hemos creado una lista formada por tuplas (conteniendo cada una una muestra y su valor objetivo categorízado) y, por último, hemos separado esta lista en "mini-batches" con el objetivo de pasar cada uno de ellos por la red, calcular el error cometido y modificar los parámetros vía descenso de gradiente.

Y en la sección anterior dábamos por supuesta la existencia de un método al que llamamos __update_parameters, que recibía cada uno de estos mini-batches.

Este método deberá extraer cada una de las muestras (y su variable objetivo) del mini-batch y, para cada una de ellas, obtener el gradiente de la función de coste (la derivada parcial con respecto a cada parámetro de la red), sumar todos estos gradientes, multiplicar el resultado por la tasa de aprendizaje y actualizar los pesos y bias de la red. En pseudo-código, este proceso podría describirse de la siguiente manera:

def __update_parameters(self, mini_batch):
    Inicializamos a cero el gradiente acumulado
    Para cada muestra del mini-batch:
        Obtenemos el gradiente de la función de error
        Actualizamos el gradiente acumulado
    Calculamos el incremento a aplicar a cada parámetro(multiplicando el
                        gradiente acumulado por la tasa de aprendizaje)
    Actualizamos los parámetros sumando el incremento

Para ello vamos a utilizar las siguientes variables:

  • total_gradient_weights: gradiente acumulado de la función de error para los pesos
  • total_gradient_bias: gradiente acumulado de la función de error para los bias
  • delta_gradient_weights: gradiente de la función de error correspondiente a una muestra para los pesos
  • delta_gradient_bias: gradiente de la función de error correspondiente a una muestra para los bias