Stochastic Gradient Descent (SGD) – Descenso de Gradiente Estocástico
El Descenso de Gradiente Estocástico (SGD) es un método de optimización.
Utilizado en el entrenamiento de modelos.
De aprendizaje automático y redes neuronales.
Su principal objetivo es minimizar una función de pérdida.
Ajustando los parámetros del modelo.
Mediante iteraciones sobre los datos de entrenamiento.
Definición Formal
El SGD es una variante del método de descenso de gradiente
En lugar de calcular el gradiente de la función de pérdida.
Utilizando todo el conjunto de datos.
En el descenso de gradiente estándar.
Se actualizan los parámetros del modelo.
Utilizando un subconjunto minibatch
Incluso un solo dato por iteración.
Ecuación General del SGD:
θ: Parámetros del modelo.
η: Tasa de aprendizaje.
∇θL (θ; xi, yi): Gradiente de la función de pérdida L
con respecto a θ para el dato (xi, yi).
Características Principales
Aleatoriedad
La estocasticidad proviene del uso de una muestra aleatoria.
Minibatch para calcular el gradiente.
Introduce variabilidad en las actualizaciones.
Actualización Rápida
Debido a que solo se usa una parte del conjunto de datos.
Las actualizaciones son más rápidas en comparación.
Con el descenso de gradiente batch completo.
Convergencia en Promedio
Aunque el SGD fluctúa debido a su naturaleza aleatoria.
Converge en promedio hacia un mínimo local.
De la función de pérdida.
Ventajas del SGD
Eficiencia Computacional
Procesa datos en lotes pequeños o individuales.
Reduciendo la necesidad de memoria.
Tiempo de procesamiento.
Capacidad para Salir de Mínimos Locales
La naturaleza aleatoria puede ayudar a escapar.
Mínimos locales en funciones de pérdida no convexas.
Escalabilidad
Es adecuado para grandes conjuntos de datos.
Modelos con millones de parámetros.
Desventajas del SGD
Convergencia Ruidosa
Debido a la aleatoriedad.
Puede oscilar alrededor de un mínimo.
En lugar de converger suavemente.
Dependencia de la Tasa de Aprendizaje (η\etaη)
Elegir un η adecuado es crítico.
Una tasa muy alta puede impedir la convergencia.
Una muy baja puede hacerla muy lenta.
Inestabilidad
Puede requerir técnicas adicionales.
Momentum o regularización.
Estabilizar el proceso de optimización.
Variantes del SGD
SGD con Momentum
Introduce un término de «momento».
Acumula las actualizaciones anteriores.
Ayuda a suavizar las oscilaciones y acelerar la convergencia.
RMSProp
Ajusta la tasa de aprendizaje para cada parámetro individualmente.
Dividiendo el gradiente por una media cuadrática.
Móvil de gradientes pasados.
Adam (Adaptive Moment Estimation)
Combina las ideas de momentum y RMSProp.
Utilizando tasas de aprendizaje adaptativas.
Momentos acumulados.
Aplicaciones del SGD
Redes Neuronales Profundas
Método de optimización base.
Entrenar modelos de aprendizaje profundo.
Redes convolucionales (CNN)
Redes recurrentes (RNN).
Modelos de Regresión
En regresión lineal y logística.
SGD se utiliza para ajustar los parámetros de los modelos.
Procesamiento de Lenguaje Natural (NLP)
Es ampliamente utilizado en modelos.
Word2Vec, transformers y redes neuronales recurrentes.
Sistemas de Recomendación
Ayuda a optimizar modelos.
Predecir preferencias de usuarios.
Ejemplo Práctico
Imagina un modelo de clasificación con una función de pérdida.
De entropía cruzada.
En cada iteración del SGD.
Se selecciona aleatoriamente un dato (xi, yi) del conjunto de datos.
Se calcula el gradiente de la pérdida respecto a los parámetros θ.
Se actualizan los parámetros utilizando la fórmula del SGD.
Esto se repite hasta que la función de pérdida converge.
Alcanze un umbral predefinido.
Visualización Intuitiva
En un espacio de parámetros multidimensional.
Descenso de Gradiente (Batch)
Sigue un camino directo hacia el mínimo, pero puede ser lento.
SGD
Oscila alrededor del mínimo con pasos más pequeños y fluctuantes.
Llega más rápido a un resultado aceptable.
Implementación en Python (PyTorch)
import torch
import torch.nn as nn
import torch.optim as optim
# Definir un modelo simple
model = nn.Linear(10, 1) # Entrada de 10 características, salida de 1
loss_fn = nn.MSELoss() # Función de pérdida: Error cuadrático medio
# Optimizador SGD
optimizer = optim.SGD(model.parameters(), lr=0.01)
# Datos simulados
x = torch.randn(100, 10) # 100 muestras, 10 características
y = torch.randn(100, 1) # Etiquetas
# Entrenamiento
for epoch in range(100): # 100 épocas
for i in range(x.size(0)): # Iteración por cada muestra
optimizer.zero_grad()
output = model(x[i].unsqueeze(0))
loss = loss_fn(output, y[i].unsqueeze(0))
loss.backward()
optimizer.step()
El Descenso de Gradiente Estocástico (SGD) es una técnica en la optimización.
De modelos de aprendizaje automático.
Ofreciendo un equilibrio entre eficiencia computacional y rendimiento.
Las técnicas modernas como Adam y RMSProp.
Es robusto y efectivo para una amplia variedad de aplicaciones.
Dominar el SGD y sus variantes.
Construir modelos eficientes y escalables.
Te puede interesar;