Entonces, el descenso de gradiente basado en el impulso funciona de la siguiente manera:
donde es la actualización de peso anterior, y g es el gradiente actual con respecto a los parámetros p , l r es la tasa de aprendizaje y s e l f . m o m e n t u m es una constante.
y el descenso acelerado de gradiente de Nesterov funciona de la siguiente manera:
que es equivalente a:
o
fuente: https://github.com/fchollet/keras/blob/master/keras/optimizers.py
Entonces, para mí, parece que el descenso acelerado de gradiente de Nesterov solo le da más peso al término lr * g sobre el término de cambio de peso perceptible m (en comparación con el impulso anterior simple). ¿Es correcta esta interpretación?
optimization
gradient-descent
sidra de manzana
fuente
fuente
Respuestas:
La respuesta de Arech sobre el impulso de Nesterov es correcta, pero el código esencialmente hace lo mismo. Entonces, a este respecto, el método de Nesterov da más peso al término , y menos peso al término v .l r ⋅ g v
Para ilustrar por qué la implementación de Keras es correcta, tomaré prestado el ejemplo de Geoffrey Hinton .
El método de Nesterov adopta el enfoque "apuesta-> corrección".v′= m ⋅ v - l r ⋅ ∇ ( w + m ⋅ v )
w′= w + v′
m ⋅ v - l r ⋅ ∇ ( w + m ⋅ v ) (donde realmente deberíamos movernos a). ∇ ( ⋅ ) es la función de gradiente.m ⋅ v - l r ⋅ ∇ ( w + m ⋅ v ) ∇ ( ⋅ )
w ′ = w + v ′ El vector marrón es m ⋅ v (apuesta / salto), el vector rojo es - l r ⋅ ∇ ( w + m ⋅ v ) (corrección), y el vector verde es m ⋅ v - l r ⋅
El código se ve diferente porque se mueve por el vector marrón en lugar del vector verde , ya que el método de Nesterov solo requiere evaluar lugar de ∇ ( w ) . Por eso en cada paso queremos∇ ( w + m ⋅ v ) = : g ∇ ( w )
El código de Keras escrito para abreviar es , y hacemos algunas matemáticasp′=p+m⋅(m⋅v−lr⋅g)−lr⋅g
fuente
Me parece que la pregunta del OP ya fue respondida, pero trataría de dar otra explicación (con suerte intuitiva) sobre el momento y la diferencia entre el momento clásico (CM) y el gradiente acelerado (NAG) de Nesterov.
tl; dr
Simplemente salte a la imagen al final.
El razonamiento de NAG_ball es otra parte importante, pero no estoy seguro de que sería fácil de entender sin todo lo demás.
En otras noticias, últimamente aparecieron estas dos bolas inteligentes:
Resulta (de acuerdo con el comportamiento observado de las bolas, y de acuerdo con el artículo sobre la importancia de la inicialización y el impulso en el aprendizaje profundo , que describe tanto CM como NAG en la sección 2) que cada bola se comporta exactamente como uno de estos métodos , y entonces los llamaríamos "CM_ball" y "NAG_ball":
(NAG_ball está sonriendo, porque recientemente vio el final de la Lección 6c - El método de impulso, por Geoffrey Hinton con Nitish Srivastava y Kevin Swersky , y por eso cree más que nunca que su comportamiento lleva a encontrar un mínimo más rápido).
Así es como se comportan las bolas:
Razonamiento de NAG_ball
Así que debería considerar la situación como si ya hubiera realizado mi Momentum Jump, y estoy a punto de hacer mi Slope Jump.
Apéndice 1 - Una demostración del razonamiento de NAG_ball
En este fascinante gif de Alec Radford , puedes ver que NAG se desempeña posiblemente mejor que CM ("Momentum" en el gif).
(El mínimo es dónde está la estrella y las curvas son líneas de contorno . Para obtener una explicación sobre las líneas de contorno y por qué son perpendiculares al gradiente, vea los videos 1 y 2 del legendario 3Blue1Brown ).
Un análisis de un momento específico demuestra el razonamiento de NAG_ball:
Apéndice 2 - cosas / términos que inventé (por el bien de la intuición)
Apéndice 3 - términos que no inventé
fuente
No lo creo.
Hay una buena descripción de las propiedades de Nesterov Momentum (también conocido como Gradiente Acelerado de Nesterov) en, por ejemplo, Sutskever, Martens et al. "Sobre la importancia de la inicialización y el impulso en el aprendizaje profundo" 2013 .
La principal diferencia es que en el momento clásico primero corrige su velocidad y luego da un gran paso de acuerdo con esa velocidad (y luego repite), pero en el momento de Nesterov primero da un paso en la dirección de la velocidad y luego realiza una corrección a un vector de velocidad basado en nueva ubicación (luego repita).
es decir, impulso clásico:
Si bien el impulso de Nesterov es este:
En realidad, esto hace una gran diferencia en la práctica ...
fuente
Agregado: un curso de Stanford sobre redes neuronales, cs231n , ofrece otra forma de los pasos:
Aquí
v
está el estado de velocidad, también conocido como paso, ymu
es un factor de impulso, típicamente 0,9 más o menos. (v
,x
Ylearning_rate
pueden ser vectores muy largas; con numpy, el código es el mismo.)v
en la primera línea es el descenso en gradiente con impulso;v_nesterov
extrapola, continúa. Por ejemplo, con mu = 0.9,La siguiente descripción tiene 3 términos: el
término 1 solo es descenso de gradiente simple (GD),
1 + 2 da GD + impulso,
1 + 2 + 3 da Nesterov GD.
El último término es la diferencia entre GD con impulso simple y GD con impulso de Nesterov.
fuente