Comparación de algoritmos de optimización

1 Desafíos de los algoritmos de optimización

1.1 Mínimos locales

1.2 Punto de silla

La función de pérdida es fácil de caer en estos dos puntos, y el gradiente del siguiente paso es muy pequeño o 0, y el entrenamiento no puede continuar.
Sin embargo, para un modelo no convexo de alta dimensión muy complejo como una red neuronal, se ha demostrado teóricamente que el mínimo local está muy cerca del mínimo global, por lo que el primer problema no recibe demasiada atención en la actualidad, y el punto de silla está más preocupado.

2 Algoritmo de descenso de gradiente

w: parámetro; f(w): función de pérdida; η : tasa de aprendizaje; t: número de iteración (iteración); ▽: gradiente

2.1 Descenso de gradiente completo (BGD, descenso de gradiente por lotes)

Δ peso ​=−▽ f ( peso ​)

wt +1​= wt ​+ η ∗Δ wt
​La función de pérdida aquí

Nota: La fórmula de látex en Zhihu no se puede transferir, se ve muy fea, puede transferir directamente a csdn para leer este artículo: https://blog.csdn.net/weixin_41786536/article/details/100187562

Ventajas:
en términos generales, el rendimiento de convergencia es mejor

Desventajas:
1. La velocidad de entrenamiento es lenta.
2. Los requisitos de memoria y poder de cómputo son relativamente altos, y solo es adecuado para aprender con pequeños conjuntos de datos. En la actualidad, este método apenas se usa.

2.2 Descenso de gradiente estocástico

La fórmula de cálculo es la misma que para el descenso de gradiente completo, excepto que solo se toma una muestra a la vez en lugar de todas las muestras.

Ventajas:
entrenamiento rápido

Desventajas:
solo hay una muestra a la vez, la aleatoriedad es relativamente grande, es probable que no converja y es muy turbulento. En la actualidad, este método apenas se usa.

2.3 Descenso de gradiente estocástico de lotes pequeños (descenso de gradiente estocástico de mini lotes, SGD)

Nota: De hecho, SGD debería ser la abreviatura del descenso de gradiente estocástico de muestra única anterior, pero ya no se usa, por lo que el descenso de gradiente estocástico de lotes pequeños predeterminado es SGD

Cada vez se toma aleatoriamente el mismo número de muestras, y el número de muestras es el tamaño del lote.

Ventajas:
combina las ventajas del descenso de gradiente de volumen completo y de muestra única, y reduce en gran medida las desventajas de los dos.

Desventajas (en comparación con los siguientes algoritmos):
1. La convergencia es relativamente lenta
2. Es fácil caer en puntos de silla, especialmente en estos puntos, que serán muy oscilantes.Si se visualiza, mostrará un zigzag hacia adelante y hacia atrás;
3. Sí La tasa de aprendizaje es sensible y requiere una tasa de aprendizaje adecuada.

2.4 Descenso de gradiente estocástico con impulso (SGD con impulso)

En vista del problema de que SGD es fácil caer en el punto de silla, aquí se usa el concepto de impulso en física (es mejor decir que la inercia se entiende mejor). Cuando la pérdida llega a un lugar con un pequeño desnivel, puede ser difícil que SGD continúe, pero es análogo a una pelota que rueda en un espacio con baches. Cuando cae en una depresión local (mínimo local) o una zona suave (silla de montar punto), con la ayuda de La inercia todavía puede continuar, esta inercia está determinada por la velocidad actual, por lo que aquí se introduce la variable de velocidad vt y v 0​=0.
Δ wt ​=−▽ f ( wt )

vt +1​= γvt ​+ η ∗Δ wt

peso +1​= peso ​+ vt +1

Donde γ es una constante (normalmente 0,9), que representa el coeficiente de atenuación (fricción en física).

Ventajas:
1. Acelerar la convergencia y reducir el choque
2. Aliviar el problema de la caída del SGD en el punto de silla.

Desventajas (en comparación con los siguientes algoritmos):
todavía hay oscilaciones

2.5 NAG (gradiente acelerado de Nesterov)

En el algoritmo SGD con m, el gradiente en el momento actual se usa para calcular la velocidad en el momento siguiente, lo que puede no ser muy preciso. El método NAG primero estima el gradiente en el momento siguiente y luego usa este gradiente para calcular la velocidad.
Δ peso ​=−▽ f ( peso ​+ γvt ​)

vt +1​= γvt ​+ η ∗Δ wt

wt +1​= wt ​+ vt +1
​Este método no calcula el gradiente de los parámetros, que no calcula la función de pérdida, por lo que no es fácil de usar en la práctica. Generalmente, wt ​+ γvt se reemplaza, por lo que Capacidad para calcular gradientes con respecto a los parámetros simultáneamente.
Ventajas:
La situación de choque es más pequeña que SGD con m

Resuma los cinco algoritmos de optimización anteriores, que se caracterizan por utilizar la misma tasa de aprendizaje η para todos los parámetros . Pero, de hecho, hay muchos parámetros de redes neuronales. Durante el proceso de entrenamiento, algunos parámetros se actualizarán rápidamente y caerán rápidamente; algunos parámetros se actualizarán lentamente y caerán lentamente. Si se usa una tasa de aprendizaje pequeña para diferentes parámetros de actualización rápida y una tasa de aprendizaje grande para parámetros de actualización lenta, todos los parámetros se pueden actualizar mejor. Entonces apareció el siguiente algoritmo de optimización adaptativa.

pytorch usa un optimizador para proporcionar la implementación de los algoritmos SGD, SGD con m y NAG Dado que el descenso de gradiente de muestra única y completa casi nunca se usa, pytorch no proporciona algoritmos relacionados, y estos dos también se pueden cambiar cambiando el tamaño de lote_tamaño conseguir.

optimizer = optim.SGD(params, lr=required, momentum=0, dampening=0, weight_decay=0, nesterov=False)

lr: Impulso de la tasa de aprendizaje
: tamaño del impulso, es decir, γ , generalmente establecido en 0.9, si es 0, no hay elemento de impulso.
weight_decay: l2 coeficiente de regularización
nesterov: si usar el algoritmo de optimización NAG

3 algoritmo de optimización adaptativa

3.1 Dosis

Este método introduce la suma de los cuadrados de los gradientes de los parámetros de cada dimensión ∑ i =1 t ​(▽ f ( wi ​))2, donde i es la dimensión del parámetro, y ε es un pequeño número positivo ( generalmente 1e-7), evita que el denominador sea 0.
( wt +1​) i ​=( wt ​) i ​−∑ i =1 t ​(▽ f ( wi ​))2+ ε ​η ​∗ (▽ f ( wi ​)) yo

La tasa de aprendizaje es en realidad ∑ i =1 t ​(▽ f ( wi ​))2 η ​, cuando el gradiente histórico de los parámetros de esta dimensión es grande, la tasa de aprendizaje es pequeña, cuando su gradiente histórico es pequeño, la la tasa de aprendizaje es relativamente pequeña Grande, esto realiza la asignación adaptativa de las tasas de aprendizaje a diferentes parámetros.

Ventajas:
1. Realiza la asignación adaptativa de tasas de aprendizaje para diferentes parámetros
2. Es más adecuado para modelos con gradientes de coeficientes La característica de este modelo es que los gradientes de diferentes parámetros son relativamente grandes.

Desventajas:
en la etapa posterior del entrenamiento, el término acumulativo de la suma de los cuadrados del gradiente puede ser muy grande, lo que da como resultado una tasa de aprendizaje muy baja, lo que hace imposible continuar con la actualización y no se puede entrenar temprano (especialmente en no modelos de redes neuronales convexas, pero en modelos de funciones convexas No hay tal problema en

optimizer = optim.Adagrad(params, lr=0.01, lr_decay=0, weight_decay=0, initial_accumulator_value=0)

Promedio móvil ponderado exponencialmente (EWMA)

El algoritmo RMSProp utiliza una media móvil exponencialmente ponderada.
Este es un método de pronóstico que asigna diferentes pesos a una parte de las observaciones más recientes en la historia, y asigna pesos grandes a valores cercanos al valor actual, y asigna pesos pequeños a valores alejados del valor actual para obtener un promedio móvil, y use este promedio móvil para predecir el valor futuro.
yt es la variable a predecir, xt es una variable relacionada
yt ​= γyt −1​+(1− γ )∗ xt ​=(1− γ )∗ xt ​+ γyt −1 = (1− γ )∗ xt ​+(1− γ )∗ γ ∗∗ xt −1​+ γ 2∗ yt −2​.......
Reemplace n =1− γ 1​, entonces ( 1− norte 1​) norte = γ1− γ 1
​y n →+∞lim​(1− n 1​) n = e −1​<1
entonces cuando γ está cerca de 1, γ 1− γ 1​= e −1, entonces puede ser ignorado γ 1− γ 1​Términos bajos.
Entonces, yt ​=(1− γ )∗ i =0∑1− γ 1​−1​ vixti
​yt ​Es el promedio ponderado de xt​ del 1− γ 1​paso de tiempo más cercano.

3.2 RMS Prop

En comparación con Adagrad, ya no acumula la suma de los cuadrados de todos los gradientes históricos, sino que solo toma la información del gradiente
vt +1​= γvt ​+(1− γ )∗(▽ f ( wt +1​))2

( peso +1​) i ​=( peso ​) i ​− vt +1​+ ε ​η ​∗(▽ f ( wi ​)) i
​vt +1​es (▽ f ( peso +1​) )2 media móvil ponderada exponencialmente, es decir, la media ponderada de la suma de los cuadrados del gradiente de 1− γ 1​pasos de tiempo, cuanto más cerca del tiempo actual, mayor es el peso del gradiente.

Ventajas:
Resuelve el problema de que Adagrad es difícil de actualizar en la segunda mitad del entrenamiento

optimizer =optim.RMSprop(params, lr=0.01, alpha=0.99, eps=1e-08, weight_decay=0, momentum=0, centered=False)

3.3 AdaDelta

RMSProp se mejoró introduciendo una variable adicional Δ xt ​, y x 0​=0, utilizando Δ xt​ en lugar de la tasa de aprendizaje
vt +1​= γvt ​+(1− γ )∗(▽ f ( wt +1​))2

( wt +1​) i ​=( wt ​) i ​− vt +1​+ ε Δ xt ​+ ε ​​∗(▽ f ( wt ​)) i

Δ xt +1= γ ∗Δ xt ​+(1− γ )∗( vt +1​+ ε Δ xt ​+ ε ​∗▽ f ( wt ​) i ​)2

Δ xt +1​es una media móvil exponencialmente ponderada de ( vt +1​+ ε Δ xt ​+ ε ​∗▽ f ( wt ​) i ​)2.

Ventajas:
1. No es necesario establecer la tasa de aprendizaje global, y la selección de los parámetros más importantes en el proceso de ajuste se resuelve de inmediato. 2.
También resuelve el problema de que Adagrad es difícil de actualizar en la segunda mitad de capacitación

optimizer = optim.Adadelta(params, lr=1.0, rho=0.9, eps=1e-06, weight_decay=0)

3.4 Adán

Adam es equivalente a RMSProp+momentum, que combina las ventajas de los dos métodos y es un maestro. Momentum usa un gradiente de primer orden, RMSProp usa un gradiente de segundo orden y Adam usa ambos.
Gradiente de primer orden: mt ​= β 1​∗ mt −1​+(1− β )∗▽ f ( wt ​)

Gradiente de segundo orden: vt ​= β 2​∗ vt −1​+(1− β 2​)∗(▽ f ( wt ​))2

Corrección de sesgo: en la etapa inicial del entrenamiento, la suma de los pesos de gradiente es relativamente pequeña y la suma de los pesos debe corregirse a 1.
mt ​^​=1− β 1​ mt

vt ​^​=1− β 2​ vt

( wt +1​) i ​=( wt ​) i ​− vt ​^​​+ εη ​∗ mt ​^
​其中β 1​=0.9, β 2​=0.999

optimizer =optim.Adam(params, lr=0.001, betas=(0.9, 0.999), eps=1e-08, weight_decay=0, amsgrad=False)

4 Resumen

Pytorch también proporciona otros cuatro algoritmos de optimización y no los he estudiado detenidamente ya que no uso muchos de ellos.
A juzgar por la situación actual, Adam se ha convertido en una opción obvia. La mayoría de los proyectos e investigaciones utilizan Adam, pero, de hecho, algunos estudios han demostrado que los algoritmos adaptativos pueden no ser capaces de encontrar los resultados óptimos. Esto solo puede considerarse como " perezoso". enfoque de la gente". El uso del SGD más primitivo combinado con una caída de la tasa de aprendizaje y técnicas de entrenamiento más apropiadas puede lograr mejores resultados, pero esto requiere una comprensión relativamente alta de los algoritmos y modelos.Después de todo, los algoritmos de optimización a menudo no son el factor más importante a considerar en la investigación del aprendizaje profundo. ., y lo que es más importante, el modelo estructural, los datos, etc., que hacen de Adam la elección de la panacea.

Supongo que te gusta

Origin blog.csdn.net/qq_46644680/article/details/130178846
Recomendado
Clasificación