네스테로프 모멘텀(Nesterov Accelerated Gradient, NAG)
네스테로프 모멘텀은 모멘텀 값과 기울기 값이 더해져 실제 값을 만드는 기존 모멘텀과 달리 모멘텀 값이 적용된 지점에서 기울기 값을 계산합니다. 모멘텀 방법은 멈추어야 할 시점에서도 관성에 의해 훨씬 멀리 갈 수 있는 단점이 있지만, 네스테로프 방법은 모멘텀으로 절반 정도 이동한 후 어떤 방식으로 이동해야 하는지 다시 계산하여 결정하기 때문에 모멘텀 방법의 단점을 극복할 수 있습니다. 따라서 모멘텀 방법의 이점인 빠른 이동 속도는 그대로 가져가면서 멈추어야 할 적절한 시점에서 제동을 거는 데 훨씬 용이합니다.
수식은 다음과 같습니다.
모멘텀과 비슷하지만 속도(v)를 구하는 과정에서 조금 차이가 있습니다. 이전에 학습했던 속도와 현재 기울기에서 이전 속도를 뺀 변화량을 반영해서(더해서) 가중치를 구합니다.
▲ 그림 4-24 모멘텀과 네스테로프 모멘텀
예를 들어 텐서플로 2에서는 다음과 같이 네스테로프 모멘텀을 구현할 수 있습니다.
# SGD()의 파라미터로 nesterov=True를 지정하면 됩니다.
from tensorflow.keras.optimizers import SGD
model.compile(loss='categorical_crossentropy',
optimizer=SGD(lr=0.01, momentum=0.9, nesterov=True),
metrics=['accuracy'])