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 $m_t = 0$ y $v_t = 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 $\beta_2$ está mucho más cerca de 1 que $\beta_1$ (como sugiere el autor $\beta_2=0.999$ , $\beta_1=0.9$ ), por lo que los coeficientes de actualización $1-\beta_2=0.001$ es mucho menor que $1-\beta_1=0.1$ .

En el primer paso de la formación $m_1=0.1g_t$ , $v_1=0.001g_t^2$ El $m_1/(\sqrt{v_1}+\epsilon)$ 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, $\hat{m_1}=g_1$ y $\hat{v_1}=g_1^2$ El $\hat{m_t}/(\sqrt{\hat{v_t}}+\epsilon)$ se vuelve menos sensible a $\beta_1$ y $\beta_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 $m_0$ y actualizar la estimación gradualmente mediante $m_t=\beta m_{t-1}+(1-\beta)g_t$ . Así que es obvio en los primeros pasos nuestra media móvil está fuertemente sesgada hacia la inicial $m_0$ .

Para corregirlo, podemos eliminar el efecto de la estimación inicial (sesgo) de la media móvil. Por ejemplo, en el momento 1, $m_1=\beta m_0+(1-\beta)g_t$ sacamos el $\beta m_0$ término de $m_1$ y dividirlo por $(1-\beta)$ lo que da como resultado $\hat{m_1}=(m_1- \beta m_0)/(1-\beta)$ . En $m_0=0$ , $\hat{m_t}=m_t/(1-\beta^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

$$\hat{m_2}=\frac{\beta(1-\beta)g_1+(1-\beta)g_2}{1-\beta^2}=\frac{\beta g_1+g_2}{\beta+1}$$

Si utiliza $g_1$ como valor inicial con la misma regla de actualización, $$m_2=\beta g_1+(1-\beta)g_2$$ que se inclinará hacia $g_1$ 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 $\epsilon$ para moderar el tamaño de los pasos iniciales.

Actualización
Si despliega las reglas de actualización recursiva, esencialmente $\hat{m}_t$ es una media ponderada de los gradientes,
$$\hat{m}_t=\frac{\beta^{t-1}g_1+\beta^{t-2}g_2+...+g_t}{\beta^{t-1}+\beta^{t-2}+...+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)

$m_1\leftarrow g_1$
while not converge do
$\qquad m_t\leftarrow \beta m_t + g_t$ (suma ponderada)
$\qquad \hat{m}_t\leftarrow \dfrac{(1-\beta)m_t}{1-\beta^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$ . $\beta_1=0.9$ y $\beta_2=0.999$ como siempre.

Los primeros valores de $m_t$ y $v_t$ (redondeado a 4 cifras).

\begin{array}{c|c|c|c} t&m_t&v_t&m_t/\sqrt{v_t}\\\hline 0&0&0&\mathrm{N/A}\\ 1&0.1000&0.001000&3.162\\ 2&0.1900&0.001999&4.250\\ 3&0.2710&0.002997&4.950\\ 4&0.3439&0.003994&5.442 \end{array}

En $t=12$ alcanzamos un máximo de $m_t/\sqrt{v_t}=6.568$ y de ahí desciende a $1$ el valor "correcto" de $m_t/\sqrt{v_t}$ . 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 $m_t$ y $v_t$ están muy cerca de $0$ . En dontloo muestra , $m_t$ y $v_t$ 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 $m_t$ utilizando $m_0=0$ .

\begin{align} m_1&=0.1g_1\\ m_2&=0.1g_2+0.09g_1\\ m_3&=0.1g_3+0.09g_2+0.081g_1\\ m_4&=0.1g_4+0.09g_3+0.081g_2+0.0729g_1 \end{align}

Es evidente que $m_t$ comparte casi la misma cantidad de $g_t$ .

Ahora considere la posibilidad de establecer $m_1=g_1$ .

\begin{align} m_1&=g_1\\ m_2&=0.1g_2+0.9g_1\\ m_3&=0.1g_3+0.09g_2+0.81g_1\\ m_4&=0.1g_4+0.09g_3+0.081g_2+0.729g_1 \end{align}

Como era de esperar, $g_1$ ahora tiene una influencia diez veces mayor en $m_t$ .

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

Pero ¿qué pasa con $v_t$ ? Basándonos en nuestro ejemplo anterior, deberíamos esperar una influencia mil veces mayor. Comparemos $v_t$ y $\bar v_t$ donde $v_0=0$ y $\bar v_1=g_1^2$ . Haciendo cuentas, he aquí el $\%$ influencia de $g_1$ en el $v$ 's durante varios $t$ .

\begin{array}{c|c|c} t&\%\text{ of $g_1$ in $v_t$}&\%\text{ of $g_1$ in $\bar v_t$}\\\hline 1&100\%&100\%\\ 10&9.96\%&99.1\%\\ 100&0.951\%&90.5\%\\ 200&0.452\%&81.9\%\\ 300&0.286\%&74.1\%\\ 400&0.203\%&67.1\%\\ 500&0.154\%&60.7\%\\ 600&0.122\%&54.9\%\\ 1000&0.0582\%&36.8\%\\ 2000&0.0156\%&13.5\% \end{array}

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-\beta_2^t$ ? 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 $m_t/\sqrt{v_t}=6.568$ y de ahí desciende a $1$ el valor "correcto" de $m_t/\sqrt{v_t}$ . 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 $m_t$ y $v_t$ para tener aproximadamente la misma magnitud que $g_t$ y $g_t^2$ . ¿Cómo exactamente? Divide la suma total por la suma de los pesos de cada $g_t$ .

\begin{align} \hat m_1&=\frac{0.1g_1}{0.1}\\~\\ \hat m_2&=\frac{0.1g_2+0.09g_1}{0.1+0.09}\\~\\ \hat m_3&=\frac{0.1g_3+0.09g_2+0.081g_1}{0.1+0.09+0.081}\\~\\ \hat m_4&=\frac{0.1g_4+0.09g_3+0.081g_2+0.0729g_1}{0.1+0.09+0.081+0.0729} \end{align}

Resulta que este denominador puede escribirse más sencillamente como $1-\beta_1^t$ .

También puede verse en la última tabla que al inicializar $v_0=0$ obtenemos un impulso mucho más preciso que inicializando $v_1=g_1^2$ . De hecho, utilizando $v_1=g_1^2$ 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 $\beta$ . Aunque $\beta=0.9$ no es tan malo, cuando $\beta=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 $\hat m_t$ es presentado por dontloo, pero tiene algunos inconvenientes semánticos. Para grandes $t$ podemos ver que $1-\beta^t\approx1$ dejándonos con $m_t\approx\hat m_t$ mientras que con los suyos obtienen $m_t\approx\hat m_t/(1-\beta_1)$ . Esto provoca $m_t$ estar influida por la elección de $\beta_1$ así como perder su significado como la aproximación del momento de $g_t$ . Dado que está influenciada por $\beta_1$ ya no puede compararse directamente con $g_t$ .

Aunque se podría argumentar que no deberías preocuparte por la existencia de $m_t$ y en su lugar centrarse en $\hat m_t$ que es la misma en ambas formulaciones, yo diría que dejar que $m_t$ sea una aproximación de $g_t$ 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:

$$m_t=m_{t-1}+(1-\beta_1)(g_t-m_{t-1})$$ $$a_t=a_{t-1}+\frac1t(g_t-a_{t-1})$$

Resulta que, $a_t$ es la fórmula acumulativa de la media real de $g_t$ . $m_t$ 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