728x90

SGD(mini-batch로 gradient계산하고 그것을 즉각 반영)은 GD(학습데이터 전체로 gradient계산)보다 gradient 반영을 잦게 함으로써 수렴 속도 증가 이점이 존재

 

Momentum Optimization

현재 local gradient*learning_rate(η)를 weight에 적용하고 이전 weight 변화량에 friction(β)을 곱한 것을 더해주자.

즉, 현재 local gradient*learning_rate만큼 변화 주고, 예전에 가던 방향을 또 가자!

->이로써 평지를 좀 더 빠르게 탈출할 수 있다.

->friction의 존재로 local optimum에서의 진동을 막아준다.

 

NAG(Nesterov Accelerated Gradient)

이전 weight변화량에 friction곱한 것을 더해준 다음에 그 지점을 local로 보고 gradient*learning_rate를 반영

->즉 momentum vector가 주로 올바른 방향으로(to global optimum)가는 데

그 때 가고나서 gradient를 계산하는게 더 빠르게 수렴한다.

 

AdaGrad(Adaptive Gradient Descent)

각 weight의 i-th position마다 gradient를 누적해둔 term이 존재하고 

그 누적값이 큰 곳은 적게 이동

그 누적값이 적은 곳은 상대적으로 크게 이동

->learning_rate decay효과가 생기므로 learning_rate tuning cost 감소

하지만, 누적term이 계속 쌓이기 때문에, 너무 일찍이 learing_rate가 decay해서 학습이 멈춰버릴 수도 있다.

 

RMSProp(Root mean Square Propagation)

AdaGrad에서 누적값에 exponential moving average(decay_rate β)로 채우자.

즉, 오랜 과거 누적값은 상쇄시켜 AdaGrad를 하자는 것, 왜냐하면 AdaGrad의 누적값이 항상 커져서 이른 학습 종료가 잦기 때문

->AdaGrad의 learning_rate decay 효과가 여전히 있으므로 learning_rate tuning cost감소

 

 

Adam(Adaptive Moment estimation)

기존 Momentum Optimization에서 Momentum에 붙은 friction, 이 때 (1-friction)을 gradient에 추가

RMSProp에서 누적값 차용

Moment와 누적값 모두 초기 boosting((1-friction)과 (1-decay_rate)를 iteration 횟수만큼 나눔)

따라서 moment에 누적값을 나눈 것 * learning_rate를 weight에 적용

즉, Adjusted Momentum Optimization과 RMSProp을 합친 형태

 

NADAM(Nesterov 방식이었던 Accelerated를 Adam에 적용, Accelerated Adaptive Moment estimation)

Adam에서 moment를 Nesterov방식을 차용하여 더 빠른 수렴속도를 얻음

 

 

 

결국 정리하면

moment개념이 있고(Momentum)

moment먼저타고 gradient구하기(Nesterov)

gradient 누적하여 step size 정정(AdaGrad)

gradient 옛 누적값 상쇄(RMSProp)

Momentum + RMSProp(Adam)

Nesterov + RMSProp(Nadam)

 

 

 

추가로, gradient 대신에 2차항까지 써서, 즉 Hessian까지 써서 weight를 update하는 것은?

->수많은 parameter에 제곱개수의 계산이 필요하므로 doesn't fit in memory and large computing resources

 

728x90

+ Recent posts