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
'ML' 카테고리의 다른 글
(미완)[MachineLearning] SVM(Support Vector Machine)이란 (0) | 2020.11.14 |
---|---|
Bias-Variance Tradeoff (0) | 2020.11.10 |
[MachineLearning] Batch Normalization (0) | 2020.11.05 |
[Numpy]ndarray가 (built-in)list보다 빠른 이유 (0) | 2020.11.02 |
[Clustering]K-means Clustering (0) | 2020.10.29 |