Stochastic Gradient Descent는 Batch Gradient Descent에 비해 최적값에 수렴할 가능성이 적으나, 적은 데이터를 사용하여 손실을 계산하고 모델을 업데이트 하므로 계산 속도가 빠르며 여러 번 반복할 경우 일반적인 batch 결과와 유사하게 수렴 가능하고 Batch Gradient Descent에서 빠질 지역 최소값에 빠지지 않고 더 좋은 방향으로 수렴할 가능성도 있음
※ Batch Gradient Descent가 최소값에 수렴함을 보장한다고 하였으나 그 값이 지역 최솟값일지 전역 최솟값일지 모름
일반적으로 Neural Network를 학습시킬 때는 SGD를 사용함
단순히 SGD 방식만 사용할 경우 노이즈가 많고 안장점에서 방향을 잘 못잡거나 학습 속도에 문제가 있는 경우가 많음
이를 해결하기 위해 SGD의 변형 알고리즘들이 있음
Gradient Descent를 통해 모델이 업데이트 되는 과정에서 일종의 관성을 주는 방법
모델 업데이트 시 현재의 gradient를 통해 이동하는 방향과 별개로 과거에 이동했던 방향을 기억하면서 그 방향으로 일정 정도를 추가적으로 이동하는 방식
해당 정도를 결정하는 momentum을 얼마나 줄 것인지 설정 필요
Momentum 방식을 기초로 하나, Gradient 계산 방식이 다름
Momentum 방식에서는 현재 위치에서의 gradient와 momentum을 독립적으로 계산하고 합쳤지만 NAG는 momentum에 의한 이동을 먼저 가정하고 그 자리에서의 gradient를 구하여 업데이트함
학습률이 너무 작으면 학습 시간이 너무 오래 걸리고, 너무 크면 발산해서 학습이 제대로 이루어지지 않음
Adagrad는 학습 진행 중에 학습률을 줄여나가는 방법
과거의 기울기를 제곱하여 더하는 방식으로 학습을 진행하여 갱신 정도가 약해짐
Adagrad의 단점을 보완한 기법
과거의 기울기들을 똑같이 더해가는 것이 아닌 먼 과거의 기울기는 조금만 반영, 최신 기울기는 많이 반영 (지수이동평균)
Momentum과 Adagrad를 융합
학습률, 일차 모멘텀용 계수, 이차 모멘텀용 계수를 설정할 수 있음
Adam에 Momentum 대신 NAG를 적용한 기법