Processing math: 100%

37 votos

¿Por qué es importante incluir un término de corrección del sesgo en el optimizador Adam para Deep Learning?

Estaba leyendo sobre la Optimizador Adam para Deep Learning y me encontré con la siguiente frase en el nuevo libro Aprendizaje profundo por Begnio, Goodfellow y Courtville:

Adam incluye correcciones de sesgo para las estimaciones tanto de la momentos de primer orden (el término de impulso) y los momentos de de segundo orden para tener en cuenta su inicialización en el punto origen.

parece que la razón principal para incluir estos términos de corrección del sesgo es que de alguna manera elimina el sesgo de la inicialización de mt=0 y vt=0 .

  • No estoy seguro al 100% de lo que eso significa, pero me parece que probablemente significa que el 1er y 2º momento empiezan en cero y de alguna manera empezar en cero inclina los valores más cerca de cero de una manera injusta (o útil) para el entrenamiento?
  • Aunque me encantaría saber qué significa eso con un poco más de precisión y cómo perjudica al aprendizaje. En concreto, ¿qué ventajas tiene desestabilizar el optimizador en términos de optimización?
  • ¿Cómo ayuda esto a entrenar modelos de aprendizaje profundo?
  • Además, ¿qué significa que sea imparcial? Conozco el significado de desviación típica insesgada, pero no me queda claro qué significa en este contexto.
  • ¿La corrección de sesgos es realmente importante o es algo que se exagera en el artículo sobre el optimizador Adam?

Para que la gente sepa, me he esforzado mucho por entender el documento original, pero he sacado muy poco de leerlo y releerlo. Supongo que algunas de estas preguntas podrían ser contestadas allí, pero me parece que no puede analizar las respuestas.

37voto

dontloo Puntos 334

El problema de NO corregir el sesgo
Según el documento

En el caso de gradientes dispersos, para obtener una estimación fiable del segundo momento es necesario promediar sobre muchos gradientes eligiendo un valor pequeño de β2; sin embargo, es exactamente en este caso de β2 pequeño donde una falta de corrección del sesgo de inicialización conduciría a pasos iniciales mucho mayores.

enter image description here

Normalmente en la práctica β2 está mucho más cerca de 1 que β1 (como sugiere el autor β2=0.999 , β1=0.9 ), por lo que los coeficientes de actualización 1β2=0.001 es mucho menor que 1β1=0.1 .

En el primer paso de la formación m1=0.1gt , v1=0.001g2t El m1/(v1+ϵ) en la actualización de parámetros puede ser muy grande si utilizamos directamente la estimación sesgada.

Por otro lado, cuando se utiliza la estimación con corrección de sesgo, ^m1=g1 y ^v1=g21 El ^mt/(^vt+ϵ) se vuelve menos sensible a β1 y β2 .

Cómo se corrige el sesgo
El algoritmo utiliza la media móvil para estimar el primer y el segundo momento. La estimación sesgada sería, partimos de una conjetura arbitraria m0 y actualizar la estimación gradualmente mediante mt=βmt1+(1β)gt . Así que es obvio en los primeros pasos nuestra media móvil está fuertemente sesgada hacia la inicial m0 .

Para corregirlo, podemos eliminar el efecto de la estimación inicial (sesgo) de la media móvil. Por ejemplo, en el momento 1, m1=βm0+(1β)gt sacamos el βm0 término de m1 y dividirlo por (1β) lo que da como resultado ^m1=(m1βm0)/(1β) . En m0=0 , ^mt=mt/(1βt) . La prueba completa figura en la sección 3 del documento.


Como bien ha comentado Mark L. Stone

Es como multiplicar por 2 (vaya, el resultado es sesgado) y luego dividir por 2 para "corregirlo".

De alguna manera esto no es exactamente equivalente a

el gradiente en el punto inicial se utiliza para los valores iniciales de estas cosas, y luego la primera actualización de parámetros

(por supuesto, se puede convertir en la misma forma cambiando la regla de actualización (véase la actualización de la respuesta), y creo que esta línea tiene como objetivo principal mostrar la innecesidad de introducir el sesgo, pero tal vez vale la pena notar la diferencia)

Por ejemplo, el primer momento corregido en el tiempo 2

^m2=β(1β)g1+(1β)g21β2=βg1+g2β+1

Si utiliza g1 como valor inicial con la misma regla de actualización, m2=βg1+(1β)g2 que se inclinará hacia g1 en su lugar en los primeros pasos.

¿Es realmente importante corregir los sesgos?
Dado que en realidad sólo afecta a los primeros pasos de la formación, no parece un problema muy grave, en muchos marcos populares (por ejemplo. keras , café ) sólo se aplica la estimación sesgada.

Según mi experiencia, la estimación sesgada a veces conduce a situaciones indeseables en las que la pérdida no se reduce (no lo he comprobado a fondo, así que no estoy seguro de si se debe a la estimación sesgada o a otra cosa), y un truco que yo utilizo es utilizar un valor mayor de ϵ para moderar el tamaño de los pasos iniciales.

Actualización
Si despliega las reglas de actualización recursiva, esencialmente ˆmt es una media ponderada de los gradientes,
ˆmt=βt1g1+βt2g2+...+gtβt1+βt2+...+1 El denominador puede calcularse mediante la fórmula de la suma geométrica, por lo que es equivalente a la siguiente regla de actualización (que no implica un término de sesgo)

m1g1
while not converge do
mtβmt+gt (suma ponderada)
ˆmt(1β)mt1βt (media ponderada)

Por lo tanto, es posible hacerlo sin introducir un término de sesgo y corregirlo. Creo que el documento lo puso en la forma de corrección de sesgo para la conveniencia de comparar con otros algoritmos (por ejemplo, RmsProp).

3voto

stenvik team Puntos 16

Un ejemplo, con algunos cálculos numéricos, podría ser intuitivo y también ayudar a desacreditar la idea de utilizar el gradiente inicial en lugar de 0 .

Consideremos el problema 1D f(x)=x donde f(x)=1 . β1=0.9 y β2=0.999 como siempre.

Los primeros valores de mt y vt (redondeado a 4 cifras).

tmtvtmt/vt000N/A10.10000.0010003.16220.19000.0019994.25030.27100.0029974.95040.34390.0039945.442

En t=12 alcanzamos un máximo de mt/vt=6.568 y de ahí desciende a 1 el valor "correcto" de mt/vt . En otras palabras, con estos parámetros podemos alcanzar tamaños de paso aproximadamente 6.5 veces mayores de lo que deberían, lo que puede ser indeseable.


También podemos ver que inicialmente mt y vt están muy cerca de 0 . En dontloo muestra , mt y vt siempre van a empezar cerca del valor utilizado inicialmente.

En Comentarios de Mark L. Stone ,

Lo que no entiendo es por qué no se utiliza el gradiente en el punto inicial para los valores iniciales de estas cosas, y luego la primera actualización de parámetros. Entonces no habría contaminación por los valores iniciales cero, que tiene que ser deshecho. Así que no habría necesidad de la corrección de sesgo.

Consideremos, sin embargo, el contexto en el que se suelen utilizar las estimaciones de impulso: el descenso de gradiente estocástico/mini-lote. Cabe esperar que el gradiente inicial (estocástico) no es una estimación exacta del verdadero gradiente . Si realmente queremos una estimación precisa del gradiente, entonces necesitamos tener contribuciones casi iguales de los primeros gradientes.

Obsérvense entonces las expresiones ampliadas para su elección de mt utilizando m0=0 .

m1=0.1g1m2=0.1g2+0.09g1m3=0.1g3+0.09g2+0.081g1m4=0.1g4+0.09g3+0.081g2+0.0729g1

Es evidente que mt comparte casi la misma cantidad de gt .

Ahora considere la posibilidad de establecer m1=g1 .

m1=g1m2=0.1g2+0.9g1m3=0.1g3+0.09g2+0.81g1m4=0.1g4+0.09g3+0.081g2+0.729g1

Como era de esperar, g1 ahora tiene una influencia diez veces mayor en mt .

Se podría argumentar que la influencia de g1 en mt disminuye rápidamente y, por tanto, es irrelevante.

Pero ¿qué pasa con vt ? Basándonos en nuestro ejemplo anterior, deberíamos esperar una influencia mil veces mayor. Comparemos vt y ˉvt donde v0=0 y ˉv1=g21 . Haciendo cuentas, he aquí el % influencia de g1 en el v 's durante varios t .

t% of g1 in vt% of g1 in ˉvt1100%100%109.96%99.1%1000.951%90.5%2000.452%81.9%3000.286%74.1%4000.203%67.1%5000.154%60.7%6000.122%54.9%10000.0582%36.8%20000.0156%13.5%

En mi humilde opinión, esto es atrozmente malo. ¿Preferiría arriesgarme a que una estimación inicialmente inexacta del gradiente persista en mi impulso de forma tan significativa sólo para evitar una división por 1βt2 ? Por supuesto que no.


Para los no tan matemáticos, ¿cómo resuelve su corrección de sesgo todos estos problemas? Veámoslo uno por uno.

En t=12 alcanzamos un máximo de mt/vt=6.568 y de ahí desciende a 1 el valor "correcto" de mt/vt . En otras palabras, con estos parámetros podemos alcanzar tamaños de paso aproximadamente 6.5 veces mayores de lo que deberían, lo que puede ser indeseable.

La corrección de sesgo resuelve este problema reescalando mt y vt para tener aproximadamente la misma magnitud que gt y g2t . ¿Cómo exactamente? Divide la suma total por la suma de los pesos de cada gt .

ˆm1=0.1g10.1 ˆm2=0.1g2+0.09g10.1+0.09 ˆm3=0.1g3+0.09g2+0.081g10.1+0.09+0.081 ˆm4=0.1g4+0.09g3+0.081g2+0.0729g10.1+0.09+0.081+0.0729

Resulta que este denominador puede escribirse más sencillamente como 1βt1 .

También puede verse en la última tabla que al inicializar v0=0 obtenemos un impulso mucho más preciso que inicializando v1=g21 . De hecho, utilizando v1=g21 en realidad introduce otro problema, quizá preocupante.

Además, observamos que el uso del enfoque de "gradiente inicial" está sujeto significativamente más a la elección de β . Aunque β=0.9 no es tan malo, cuando β=0.999 puede hacer que el valor inicial persista mucho más tiempo.


¿Qué debe entender de todo esto, intuitivamente? Mi opinión es que al inicializar el impulso al primer valor proporcionado, se convierte en sesgada hacia el valor inicial en lugar de inclinarse por 0 . Por el contrario, sesgado hacia 0 es notablemente sencillo, y mucho más intuitivo, de arreglar.


Una fórmula alternativa equivalente para calcular ˆmt es presentado por dontloo, pero tiene algunos inconvenientes semánticos. Para grandes t podemos ver que 1βt1 dejándonos con mtˆmt mientras que con los suyos obtienen mtˆmt/(1β1) . Esto provoca mt estar influida por la elección de β1 así como perder su significado como la aproximación del momento de gt . Dado que está influenciada por β1 ya no puede compararse directamente con gt .

Aunque se podría argumentar que no deberías preocuparte por la existencia de mt y en su lugar centrarse en ˆmt que es la misma en ambas formulaciones, yo diría que dejar que mt sea una aproximación de gt es mucho más intuitivo que este último.


Para tener alguna intuición sobre las fórmulas del momento, obsérvese también la similitud entre las siguientes:

mt=mt1+(1β1)(gtmt1) at=at1+1t(gtat1)

Resulta que, at es la fórmula acumulativa de la media real de gt . mt es entonces una aproximación de esto, donde el gradiente más reciente pesa ligeramente más que el anterior.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X