Función de optimización de una red neuronal

domingo, 3 de set. de 2023

Función de optimización de una red neuronal

Las funciones de optimización son las brújulas que guían a las redes neuronales hacia el ajuste de pesos más efectivo. Su objetivo principal es minimizar la función de coste o error de la red, permitiendo que las predicciones se acerquen a los valores reales. Exploraremos algunas funciones de optimización populares y entenderemos cómo afectan el proceso de aprendizaje.
Volver

Gradient descent

El gradient descent es un algoritmo de optimización que se utiliza para minimizar una función de coste. El algoritmo funciona iterativamente para ajustar los pesos de la red neuronal. En cada iteración, el algoritmo calcula el gradiente de la función de coste con respecto a los pesos y actualiza los pesos en la dirección del gradient descent.

Si la función de coste se representa de la siguiente manera:

J(W,B)J(W,B)

Entonces el gradient descent se puede representar de la siguiente manera:

W=WαJ(W,B)WW = W - \alpha \frac{\partial J(W,B)}{\partial W}

Donde:

  • WW es el vector de pesos.
  • α\alpha es la tasa de aprendizaje.
  • J(W,B)W\frac{\partial J(W,B)}{\partial W} es el gradiente de la función de coste con respecto a los pesos.

Algorimto de gradient descent

Tenemos los siguientes datos:

x1x_1x2x_2yy
000
011
.........
111

Entonces el algoritmo de gradiente descendente se puede representar de la siguiente manera:

# Inicializar las variables
J = 0 # Función de costo
dw1 = 0 # Derivada parcial de J con respecto a w1
dw2 = 0 # Derivada parcial de J con respecto a w2
db = 0 # Derivada parcial de J con respecto a b
alpha = 0.01 # Tasa de aprendizaje
m = 4 # Número de ejemplos
# Iterar sobre los ejemplos
for i in range(m):
# Calcular la predicción
y_predict = sigmoid(w1 * x1[i] + w2 * x2[i] + b)
# Calcular la función de costo (loss entropy)
J += - (y[i] * np.log(y_predict) + (1 - y[i]) * np.log(1 - y_predict))
# Calcular las derivadas parciales
dw1 += (y_predict - y[i]) * x1[i]
dw2 += (y_predict - y[i]) * x2[i]
db += (y_predict - y[i])
# Actualizar los pesos
J = J / m
w1 = w1 - alpha * dw1 / m
w2 = w2 - alpha * dw2 / m
b = b - alpha * db / m

A continuación se presentan 3 variantes del algoritmo de gradiente descendente:

Batch gradient descent

Con este algoritmo actualizamos los pesos de la red neuronal al final de cada epoch.

  • Función de optimización más lenta.
  • Suele converger a un mínimo de la función de coste.
  • Ideal para conjuntos de datos pequeños.
  • El algoritmo tomará menos tiempo para completar un epoch, ya que solo se realiza una actualización de peso por epoch.

Mini-batch gradient descent

En mini-batch gradient descent, se calcula el gradiente de la función de coste con respecto a los pesos utilizando un subconjunto(mini-batch) de los datos de entrenamiento en lugar de todos los datos de entrenamiento.

  • Se puede usar para entrenar un conjuntos de datos muy grandes.
  • Función de optimización más rápida que batch gradient descent.
  • Suele converger a un mínimo de la función de coste de manera menos directa.
  • Ideal para conjuntos de datos grandes.
  • El tamaño del mini-batch es un hiperparámetro, cuyos valores recomendados son 32, 64, 128, 256, 512, 1024, etc.
  • El algoritmo tomará más tiempo para completar un epoch, ya que se realizan múltiples actualizaciones de peso por epoch.

Stochastic gradient descent

En el stochastic gradient descent, se calcula el gradiente de la función de coste con respecto a los pesos utilizando un solo ejemplo de los datos de entrenamiento en lugar de todos los datos de entrenamiento.

  • Función de optimización más rápida que mini-batch gradient descent.
  • No suele converger a un mínimo de la función de coste, aunque se puede aproximar.
  • Ideal para conjuntos de datos grandes.
  • El algoritmo tomará más tiempo para completar un epoch, ya que realizá una actualización de peso por ejemplo.

Momentum Gradient Descent

El momentum gradient descent es un algoritmo de optimización que se utiliza para minimizar una función de coste. El algoritmo es igual que el mini-batch gradient descent, pero con una diferencia. Este algoritmo implementa un concepto llamado Exponecial Weighted Average, que se utiliza para acelerar el proceso de aprendizaje.

  • Esta función se aplica a cada uno de los pesos de la red neuronal al final de cada mini-batch.
  • La función de optimización es más rápida que el mini-batch gradient descent.

Exponential Weighted Average

Exponential Weighted Average permite calcular la media de un conjunto de valores vecinos para suavisar la curva de aprendizaje. La fórmula es la siguiente:

Vt=βVt1+(1β)θtV_t = \beta V_{t-1} + (1 - \beta) \theta_t

Donde:

  • VtV_t es el nuevo valor suavizado.
  • Vt1V_{t-1} es el valor anterior.
  • β\beta es el factor de suavizado.
  • θt\theta_t es el valor actual.

RMSprop

  • Mantener un promedio móvil del cuadrado de gradientes
  • Divide el gradiente por la raíz de este promedio.
  • Esta función se aplica a cada uno de los pesos de la red neuronal al final de cada mini-batch.
  • La función de optimización se comporta mejor que el momentum gradient descent.

Adam optimization algorithm

Este algoritmo se basa en el momentum gradient descent y el RMSprop. La fórmula es la siguiente:


Creado por Carlos Castillo Blas

© 2024 Todos los derechos reservados