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

15

Estaba leyendo sobre el optimizador Adam para Deep Learning y encontré la siguiente oración en el nuevo libro Deep Learning de Begnio, Goodfellow y Courtville:

Adam incluye correcciones de sesgo a las estimaciones de los momentos de primer orden (el término de momento) y los momentos de segundo orden (no centrados) para dar cuenta de su inicialización en el origen.

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

  • No estoy 100% seguro de lo que eso significa, pero me parece que probablemente significa que el primer y segundo momento comienzan en cero y de alguna manera comienzan en cero inclina los valores más cercanos a 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 eso perjudica el aprendizaje. En particular, ¿qué ventajas tiene el sesgo del optimizador en términos de optimización?
  • ¿Cómo ayuda esto a entrenar modelos de aprendizaje profundo?
  • Además, ¿qué significa cuando es imparcial? Estoy familiarizado con lo que significa la desviación estándar imparcial, pero no me queda claro qué significa en este contexto.
  • ¿La corrección de sesgo es realmente un gran problema o es algo sobrevalorado en el artículo del optimizador Adam?

Solo para que la gente sepa que me he esforzado mucho por entender el documento original, pero he sacado muy poco de leer y volver a leer el documento original. Supongo que algunas de estas preguntas podrían responderse allí, pero parece que no puedo analizar las respuestas.

Charlie Parker
fuente
2
Enlace: arxiv.org/pdf/1412.6980v8.pdf Las estimaciones de gradiente del primer y segundo momento se actualizan a través de la media móvil y comienzan con ambas estimaciones siendo cero, de ahí que los valores iniciales para los que el valor verdadero no sea cero, sesgarían los resultados , porque las estimaciones iniciales de cero solo desaparecen gradualmente. Lo que no entiendo es por qué el gradiente en el punto inicial no se usa 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 cero iniciales, que deben deshacerse, por lo que no habría necesidad de corregir el sesgo.
Mark L. Stone el
1
Por lo tanto, parece que, en lugar de tener un código especial para la iteración inicial, los autores han decidido hacer algo matemáticamente equivalente al introducir lo que sería un sesgo y luego deshacerlo. Esto agrega cálculos innecesarios, aunque rápidos, en todas las iteraciones. Al hacer esto, han mantenido una pureza de código que se ve igual en todas las iteraciones. En su lugar, habría comenzado con la primera evaluación de gradiente, y la fórmula de actualización de momento de gradiente solo comienza en la segunda iteración.
Mark L. Stone el
@ MarkL.Stone, los autores enfatizan tanto la corrección del sesgo que me pareció que era lo que era novedoso o importante en su artículo. ¿Entonces podrían no haber "corregido el sesgo" y tener el mismo algoritmo? Si eso es cierto, no entiendo por qué Adam es un optimizador tan importante o cuál es el problema. Siempre pensé que era la corrección de sesgo.
Charlie Parker el
44
Presentan un sesgo y luego lo corrigen, sin ninguna razón aparente para mí. Es como multiplicar por 2 (oh, el resultado está sesgado), y luego dividir por 2 para "corregirlo". Todo el asunto con la introducción y eliminación de sesgos parece un espectáculo secundario innecesario. Tal vez el documento no fue lo suficientemente largo sin hacerlo, por lo que agregaron este papel para hacerlo más largo :) Adam puede tener sus méritos, pero habrían sido los mismos haciéndolo como propuse. Sin embargo, me encantaría que los autores vinieran aquí y lo explicaran. Tal vez me estoy perdiendo algún punto sutil o malentendido algo.
Mark L. Stone el

Respuestas:

16

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

En el caso de gradientes dispersos, para una estimación confiable del segundo momento, se necesita promediar muchos gradientes eligiendo un valor pequeño de β2; sin embargo, es exactamente este caso de β2 pequeño donde la falta de corrección del sesgo de inicialización conduciría a pasos iniciales que son mucho más grandes.

ingrese la descripción de la imagen aquí

Normalmente, en la práctica, se establece mucho más cerca de 1 que (como sugiere el autor , ), por lo que los coeficientes de actualización son mucho más pequeños que .β2β1β2=0.999β1=0.91β2=0.0011β1=0.1

En el primer paso del entrenamiento , , el término en la actualización de parámetros puede ser muy grande si usamos la estimación sesgada directamente.m1=0.1gtv1=0.001gt2m1/(v1+ϵ)

Por otro lado, cuando se utiliza la estimación con corrección de sesgo, y , el término se vuelve menos sensible a y .m1^=g1v1^=g12mt^/(vt^+ϵ)β1β2

Cómo se corrige el sesgo
El algoritmo usa el promedio móvil para estimar el primer y segundo momento. La estimación sesgada sería, comenzamos con una suposición arbitraria , y actualizamos la estimación gradualmente por . Por lo tanto, es obvio en los primeros pasos que nuestro promedio móvil está fuertemente sesgado hacia el inicial .m0mt=βmt1+(1β)gtm0

Para corregir esto, podemos eliminar el efecto de la suposición inicial (sesgo) del promedio móvil. Por ejemplo, en el tiempo 1, , sacamos el término de y lo dividimos por , lo que produce . Cuando , . La prueba completa se da en la Sección 3 del documento.m1=βm0+(1β)gtβm0m1(1β)m1^=(m1βm0)/(1β)m0=0mt^=mt/(1βt)


Como Mark L. Stone ha comentado bien

Es como multiplicar por 2 (oh, el resultado está sesgado), y luego dividir por 2 para "corregirlo".

De alguna manera esto no es exactamente equivalente a

el gradiente en el punto inicial se usa 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 (vea la actualización de la respuesta), y creo que esta línea apunta principalmente a mostrar la innecesaria introducción del sesgo, pero quizás valga la pena notar la diferencia)

Por ejemplo, el primer momento corregido en el momento 2

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

Si usa como el valor inicial con la misma regla de actualización, que se hacia en los primeros pasos.g1

m2=βg1+(1β)g2
g1

¿La corrección de sesgo es realmente un gran problema?
Dado que en realidad solo afecta los primeros pasos del entrenamiento, no parece ser un gran problema, en muchos marcos populares (por ejemplo , keras , caffe ) solo se implementa 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 disminuirá (no lo he probado exhaustivamente, así que no estoy exactamente seguro de si esto se debe a la estimación sesgada o algo más), y un truco que uso es usar un más grande para moderar los tamaños iniciales de los pasos.ϵ

Actualización
Si despliega las reglas de actualización recursiva, esencialmente es un promedio ponderado de los gradientes, El denominador se puede calcular mediante la fórmula de suma geométrica, por lo que es equivalente a la siguiente actualización regla (que no implica un término de sesgo) m^t

m^t=βt1g1+βt2g2+...+gtβt1+βt2+...+1

m1g1
mientras no converge do (suma ponderada) (promedio ponderado)
mtβmt+gt
m^t(1β)mt1βt

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

dontloo
fuente
1
¿Estás de acuerdo con mi segundo comentario sobre la pregunta? Para mí, esa es la conclusión. Se suponía que la cuestión de multiplicar y dividir por 2 era una analogía "más fácil de entender", no las matemáticas utilizadas en el asunto en cuestión. si hubo otros documentos, que no he visto, que introdujeron un sesgo por el mismo mecanismo, que en el caso de ADAM parece completamente evitable, pero no lo corrigió, entonces eso es totalmente ESTÚPIDO (a menos que de alguna manera el sesgo ayudó al rendimiento del algoritmo).
Mark L. Stone
@ MarkL.Stone sí! en realidad lo voté, perdón por mi inglés. y creo que el algoritmo que no corrigió el sesgo es rmsprop, pero a diferencia de adam rmsprop funciona bien con el sesgo.
dontloo
@dontloo, ¿su respuesta aborda el comentario de Mark L. Stone sobre por qué la corrección de sesgo parece superflua? (Eso creo que es bastante importante, tal vez incluso más que parafrasear lo que dice el artículo original).
Charlie Parker
@CharlieParker, ¿quiere decir por qué la corrección de sesgo es superflua o por qué el autor hace que parezca superflua?
dontloo
@dontloo No creo que los autores lo hagan superfluo. Pensé que realmente lo necesitaban (dadas sus condiciones específicas). Sin embargo, pensé que no era necesario dada la sugerencia de Mark. Creo que mi pregunta en la sección de comentarios en este momento es si realmente necesitaban el término de corrección.
Charlie Parker