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 .
- 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.
fuente
Respuestas:
El problema de NO corregir el sesgo
Según el documento
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.9 1 - β2= 0.001 1 - β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.metro1= 0.1 gt v1= 0.001 g2t metro1/ ( 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 .metro1^= g1 v1^= g21 metrot^/ ( vt^--√+ ϵ ) β1 β2
Cómo se corrige el sesgom0 mt=βmt−1+(1−β)gt m0
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 .
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 βm0 m1 (1−β) m1^=(m1−βm0)/(1−β) m0=0 mt^=mt/(1−βt)
Como Mark L. Stone ha comentado bien
De alguna manera esto no es exactamente equivalente a
(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
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ónm^t
m^t=βt−1g1+βt−2g2+...+gtβt−1+βt−2+...+1
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)
mientras no converge do (suma ponderada) (promedio ponderado)
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).
fuente