이번 장에서는 딥러닝 학습을 위해 준비해야 하는 사항과 학습이 이뤄진 후 모델의 결과인 예측 정확도를 높이기 위해 사용하는 방법을 알아보자.
= 모델을 최적화하고자 할 때 사용하는 알고리즘을 솔버라고 부름.
* 대표적인 문제
- 중간에 값이 국소적으로 작아졌다가 커지는 극솟값 (왼쪽 그림)
- 변화량이 국소적으로 거의 변화가 없다가 내려가는 안장점 (오른쪽 그림)
--> 그래디언트가 0에 가까워지면서 학습을 진행할 수가 없!!
= 경사 하강으로 최적화하는 과정에 운동량이라는 개념을 추가한 방법

while True:
dx = get_gradient(x)
x += learningRate * dx

vx = 0
while True:
dx = get_gradient(x)
vx = rho * vx + dx
x += learningRate * vx
모멘텀의 역할
= 경사 하강으로 진행되는 x의 변화를 가속하는 역할
= 경사 하강에서 일어나는 지그재그 현상으로 속도가 떨어지는 것을 방지해서 빠른 속도로 수렴하게 해줌
- 모멘텀은 경사 하강 중인 가중치가 변화하는 관성을 이용해 극솟값에서 머물지 않고 지속적으로 변화할 수 있게 함
* 변화율을 지속해 극솟값 문제가 발생하지 않게 함!!
= 모멘텀이 지역 최저점에서도 멈추지 못하는 경우가 있기 때문에 제안됨
= NAG는 모멘텀으로 이동해 발생하는 변화율을 먼저 계산한 다음 모멘텀을 계산함


= 신경망 학습에서 Adagrad(Adaptive Gradient)는 가중치의 파라미터를 갱신할 때 변수마다 스텝 사이즈를 다르게 설정해 주는 방식
= Adagrad의 식에서 과거 그래디언트를 제곱해서 계속 더한 Gt를, 과거 그래디언트는 서서히 반영을 줄이고 타임 스텝 t까지 각 변수가 이동한 그래디언트 합을 구하도록 바꾼 방법
= RMSProp과 모멘텀 방식을 통합해 정확도와 속도를 모두 얻고자 하는 알고리즘
