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.
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.metro1= 0.1 gtv1= 0.001 g2tmetro1/ ( 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^= g1v1^= g21metrot^/ ( 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=βmt−1+(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.g1m2=β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=βt−1g1+βt−2g2+...+gtβt−1+βt−2+...+1
m1←g1
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).