Please enable JavaScript.
Coggle requires JavaScript to display documents.
Algoritmos de optimización para redes neuronales (Antonio Richaud) -…
Algoritmos de optimización para redes neuronales (Antonio Richaud)
Introducción
Optimizar = minimizar (o maximizar) una función de costo
El modelo ajusta sus parámetros internos de forma iterativa
Usos: clasificación, regresión, reconocimiento de patrones
Importancia: pesos mal optimizados dan predicciones incorrectas
Objetivo: elegir la técnica más adecuada para cada modelo
Descenso de gradiente por lotes (Batch GD)
Explicación
Gradiente con TODO el conjunto de datos
Una actualización por época
Gradiente más suave y menos ruidoso
Fórmula
θ = θ − η ∇θ J(θ)
Gradiente calculado con todos los ejemplos
Aplicación práctica
TensorFlow: batch_size=len(X_train)
PyTorch: todo el dataset como un lote
Ventajas
Estabilidad
Gradiente más preciso
Desventajas
Ineficiencia computacional
Convergencia lenta
No escala a grandes volúmenes de datos
Ideal para datasets pequeños que caben en memoria
Descenso de gradiente con momento
Explicación
Acumula un promedio ponderado exponencial de gradientes pasados
Funciona como memoria / inercia
Útil en mesetas y valles de la función de costo
Fórmulas
1) v
t = β v
(t−1) + (1 − β) ∇θ J(θ)
2) θ = θ − η v_t
v_t: velocidad acumulada
β: coeficiente de momentum
η: tasa de aprendizaje
Visualización
Puntos A, B, C acercándose al óptimo local
Óptimo local vs. óptimo global
Oscilaciones arriba/abajo vs. avance hacia la derecha
Impacto de la tasa de aprendizaje
Tasa alta = oscilaciones de mayor magnitud
Ajustarla junto con el coeficiente de momentum
Aplicación práctica
MNIST con CNN en TensorFlow (SGD momentum=0.9)
MNIST con CNN en PyTorch (momentum=0.9)
Ventajas
Ayuda a superar mínimos locales
Acelera la convergencia
Reduce oscilaciones erráticas
Desventajas
Ajustar β: muy alto se salta el mínimo, muy bajo casi no tiene efecto
Algo más de almacenamiento y cálculo (velocidad)
RMSprop (Root Mean Square Propagation)
Explicación
Propuesto por Geoffrey Hinton en un curso online
Tasa de aprendizaje adaptativa
Evita pasos demasiado grandes o demasiado pequeños
Resuelve oscilaciones por variabilidad en la magnitud de gradientes
¿Cómo funciona?
Promedio ponderado exponencial de cuadrados de gradientes
Ajusta la tasa de aprendizaje de cada parámetro
Fórmulas
1) s_dw = β s_dw + (1 − β) (∇θ J(θ))^2
s_db = β s_db + (1 − β) (∇θ J(θ))^2
β típico = 0.9
2) w = w − η ∇w J / (sqrt(s_dw) + ε)
b = b − η ∇b J / (sqrt(s_db) + ε)
ε típico = 10^−8
Pasos para implementar
Inicializar s_dw y s_db a cero
Calcular gradientes de w y b (retropropagación)
Actualizar el promedio ponderado
Actualizar w y b con la tasa ajustada
Aplicación práctica
MNIST en TensorFlow (RMSprop, lr=0.001)
MNIST en PyTorch (optim.RMSprop, alpha=0.9)
Ventajas
Tasa de aprendizaje adaptativa
Convergencia estable, menos oscilaciones
Desventajas
Sensible a β
Puede quedarse en mínimos locales en entrenamientos largos
Descenso de gradiente estocástico (SGD)
Explicación
Actualiza parámetros con cada ejemplo de entrenamiento
Introduce ruido pero es eficiente con datos grandes
Aprendizaje incremental
Fórmula
θ = θ − η ∇θ J(θ; x(i); y(i))
θ: parámetros del modelo
η: tasa de aprendizaje
∇θ J: gradiente en el i-ésimo ejemplo
Aplicación práctica
Regresión lineal en TensorFlow (SGD, lr=0.01)
Regresión lineal en PyTorch (optim.SGD)
Ventajas
Rapidez: converge rápido en datasets grandes
Menor costo computacional por iteración
Desventajas
Oscilaciones y ruido alrededor del mínimo
Convergencia no estable / mínimos locales
Se combina con momentum o disminución de la tasa de aprendizaje
Descenso de gradiente con Mini-Batch
Explicación
Combina lo mejor de SGD y Batch GD
Actualiza tras procesar un pequeño lote de ejemplos
Aprovecha el hardware paralelo (GPUs)
Fórmula
θ = θ − η ∇θ J(θ; x(i:i+n); y(i:i+n))
Promedio de gradientes del mini-batch: suaviza y reduce ruido
Aplicación práctica
CNN sobre CIFAR-10 en TensorFlow (batch_size=32)
CNN sobre CIFAR-10 en PyTorch (DataLoader)
Muy usado en redes profundas / CNNs
Ventajas
Equilibrio entre precisión y velocidad
Eficiencia computacional (memoria y GPU)
Mejor generalización (el ruido ayuda a salir de mínimos locales)
Desventajas
Difícil elegir el tamaño del mini-batch
Muy pequeño: entrenamiento inestable
Muy grande: se comporta como Batch GD
Oscilaciones residuales si la tasa de aprendizaje es alta
Optimizador ADAM
Explicación
Adaptive Moment Estimation
Combina Momentum + RMSprop
Muy usado en aprendizaje profundo con millones de parámetros
¿Cómo funciona?
Estimación del momento (promedio de gradientes)
Estimación del momento cuadrático (promedio de gradientes al cuadrado)
Tasa de aprendizaje adaptativa por parámetro
Fórmulas
1) Promedio de gradientes
v_dw = β1 v_dw + (1 − β1) ∇θ J(θ)
v_db = β1 v_db + (1 − β1) ∇θ J(θ)
β1 típico = 0.9
2) Promedio de gradientes al cuadrado
s_dw = β2 s_dw + (1 − β2) (∇θ J(θ))^2
s_db = β2 s_db + (1 − β2) (∇θ J(θ))^2
β2 típico = 0.999
3) Corrección del sesgo
v̂_dw = v_dw / (1 − β1^t)
ŝ_dw = s_dw / (1 − β2^t)
4) Actualización de parámetros
θ = θ − η v̂_dw / (sqrt(ŝ_dw) + ε)
ε típico = 10^−8 (evita división por cero)
Pasos para implementar
Inicializar v_dw, v_db, s_dw, s_db a cero
Calcular gradientes y aplicar fórmulas
Aplicar corrección del sesgo
Actualizar parámetros
Aplicación práctica
MNIST en TensorFlow (Adam, lr=0.001)
Modelo simple en PyTorch (optim.Adam)
Ventajas
Rápida convergencia
Adaptabilidad de la tasa de aprendizaje
Eficiencia en memoria y cálculo
Desventajas
Sensible a β1, β2 y η
Puede converger a soluciones subóptimas
Referencia: paper original arxiv.org/abs/1412.6980
Síntesis: cuándo usar cada uno
Batch GD: datasets pequeños, prioriza estabilidad
SGD: datasets grandes, requiere ajuste fino
Mini-Batch: estándar en redes profundas y GPUs
Momentum: reduce oscilaciones y acelera
RMSprop: gradientes de magnitud variable
ADAM: opción preferida en redes profundas