Velocity Settles At Ten Times

Keras implements SGD with momentum as

velocity = momentum * velocity - learning_rate * g
w = w + velocity

A job trains stably with plain SGD at learning_rate=0.1. You turn on momentum=0.9 and leave the learning rate alone. Over a stretch where the gradient gg is roughly constant, what does the velocity settle at, and which learning rate restores the old step size?

A

Velocity grows without bound on a constant gradient, so momentum is only usable when the gradient changes sign regularly.

B

Velocity settles at −g-g, so each step moves ten times further than plain SGD's −0.1g-0.1g; learning_rate=0.01 restores the original step.

C

Velocity settles at −0.1g-0.1g, the same as plain SGD. Momentum only smooths noisy gradients, so keep 0.1.

D

Velocity settles at −0.09g-0.09g, so momentum shrinks the step by the factor 0.9; raise the learning rate to about 0.11.