Zorba blog
Gradient Descent Optimization Algorithms 본문
Gradient Descent
- Neural Network의 weight을 조절하는 과정에는 보통 "Gradient Descent" 라는 방법을 사용함.
- 네트워크에서 내놓는 결과값과 실제 결과값 사이의 차이를 정의하는 함수 Loss function J()
- J()를 최소화하기 위해 기울기를 이용하는 방법을 Gradient Descent라 함.
- 한 Interation 에서의 변화 식은 다음과 같음.
사진
- J() 앞에 붙은 에타(n)은 미리 정해진 step size로 learning rate로 불림.
- 보통 0.01~0.001 정도의 적당한 크기를 사용.
- Loss Function을 계산할 때 전체 train set을 사용하는 것을 Batch Gradient Descent 라고 함.
- 이렇게 계산할 경우 한 Step마다 전체 데이터에 대해 Loss Function을 계산하므로 너무 많은 계산량 필요.
- 이를 방지하기 위해 Stochastic Gradient Descent(SGD) 방법을 사용.
- SGD는 Loss Function을 계산할 때 전체 데이터(Batch) 대신 일부 조그마한 데이터모음(mini-batch)에 대해서만 Loss Function을 계산하여 이 값을 이용해 Parameter Update 진행.
- 장점1) 계산 속도 측면에서 훨씬 나은 성능을 기대할 수 있음.
- 장점2) 여러 번 반복 수행할 경우 보통 batch의 결과와 유사한 결과로 수렴.
- 장점3) Batch Gradient Descent에서 빠진 local minima에 빠지지 않을 가능성 있음
움짤 추가.
sgd momentum nag - Google 검색
SGD, Momentum, NAG velog.io
www.google.com
- 위 그림은 SGD 및 SGD의 변형 알고리즘들이 최적값을 찾는 과정을 시각화한 것이며, 아래는 특징들을 설명.
- SGD는 다른 알고리즘들 보다 이동속도가 현저하게 느리다.
- 단순한 SGD를 이용해 네트워크를 학습시킬 경우 네트워크가 상대적으로 좋은 결과를 얻지 못할 것이라 예측할 수 있음. (같은 epoch 만큼 돌았을 경우 최적값까지 도달하는 epoch의 차이 발생 가능성.)
- 네트워크와 Loss Function의 특징에 맞춰 적당한 알고리즘을 채택하는 것이 학습 성능 개선에 영향을 줄 것.
Momentum
- Momentum 방식은 말 그대로 Gradient Descent를 통해 이동하는 과정에 일종의 '관성'을 주는 것.
- 현재 Gradient를 통해 이동하는 방향과는 별개로, 과거에 이동했던 방식을 기억하면서 그 방향으로 추가적으로 이동하는 방식.
식 추가.
- r는 얼마나 momentum을 줄 것인지에 대한 momentum term으로 보통 0.9 값 사용.
- 과거에 얼마나 이동했는지에 대한 정보를 항 vt-1 에 기억.
- 새로운 이동을 진행할 경우 이를 고려해 Parameter 를 업데이트.
- SGD가 진동(Oscilation) 현상을 겪을 때 적용.
사진 추가
- 중앙의 최적적으로 이동해야 하는 상황에서 한번의 Step으로 움직일 수 있는 step_size(learning rate)는 각 Parameter들의 방향으로 한계가 생김.
- 그러나 momentum 방식은 우측 그림에서 처럼 step이 반복될 수록 이동하는 방향으로 힘을 얻기 때문에 상대적으로 빠르게 이동.(그 효과는 r값의 곱만큼 계속해서 줄어듬)
사진
- 장점) local minima를 빠져나오는 효과
- 단점) 기존 변수 외에도 과거에 이동했던 양을 변수별로 저장해야 하므로 메모리가 기존의 두 배 필요.
Nesterov Accelerated gradient(NAG)
- Momentum 방식에서는 이동 벡터 vt를 계산할 때 현재 위치에서의 gradient와 momentum step을 독립적으로 계산하고 합침.
- 반면 NAG에서는 momentum step을 먼저 고려하여, 먼저 이동했다고 생각한 후 그 자리에서의 gradient를 구해서 gradient step을 이동.
식 추가
- 멈춰야 할 시점에도 관성에 의해 훨씬 멀리 갈수도 있다는 단점을 보완.
- Momentum 방식의 빠른 이동에 대한 이점을 누리면서 멈춰야 할 적절한 시점에서 제동을 거는데 훨씬 용이.
- 단점) 연산량이 기존 Momentum 방식보다 많음.
Adagrad(Adaptive Gradient)
- Adagrad(Adaptive Gradient)는 변수들을 Update 할 때 각각의 변수마다 Step size를 다르게 설정해서 이동하는 방식.
- 기울기가 클 때는 G(t)가 커져서 학습률이 작아지고, 기울기가 작을 때는 G(t)가 작아져서 학습률이 커짐.
- 알고리즘의 기본적인 아이디어 : 지금까지 많이 변화했던 변수들은 Step size를 작게 하자.
- 자주 등장하거나 변화를 많이 한 변수들의 경우 : optimum에 가까이 있을 확률이 높기 때문에 작은 크기로 이동하면서 세밀한 값을 조정.
- 적게 변화한 변수들의 경우 : optimum 값에 도달하기 위해서 많이 이동해야 할 확률이 높기 때문에 먼저 빠르게 loss 값을 줄이는 방향으로 이동하려는 방식.
- Neural Network의 Parameter가 k개라고 할 때, Gt는 k차원 벡터로서 time step t까지 각 변수가 이동한 gradient의 sum of squares 저장.
- 델타를 업데이트하는 상황에서는 기존 step size에 Gt의 루트 값에 반비례한 크기로 이동을 진행.
- 지금까지 많이 변화한 변수일 수록 적게 이동.
- 적게 변화한 변수일 수록 많이 이동.
- 입실론e 은 10^-4 ~ 10^-8 정도의 작은 값으로 0으로 나눠지는 것을 방지.
- 장점) 고의적 Step size decay를 신경쓰지 않아도 된다.
- 단점) 학습이 계속적으로 진행될 때 step size가 너무 줄어든다는 문제점.
식 삽입.
- 학습이 오래될 경우 결국 거의 움직이지 않게 되는데, 이를 보오나하여 고친 알고리즘 존재.(RMSProp 과 AdaDelta)
RMSProp
- Adagrad의 단점 해결.
- r가 0.5면 기존 Adagrad와 동일. r가 1이면 이전 스텝의 G(t)만 남음. r가 0이면 기울기의 제곱이 G(t) 를 차지.
- 이전 기울기가 중요하냐, 아니면 현재 기울기가 중요하냐.
- Gradient의 제곱값을 더해 나가면서 구한 Gt 부분을 합이 아니라 지수 평균으로 바꾸어 대체.
- 장점) Gt가 무한정 커지지 않는 효과
- 장점) 변화량의 변수간 상대적 크기 차이는 유지
식 추가.
AdaDelta(Adaptive Delta)
- 동일하게 Gt를 구하지만 Parameter 업데이트를 위한 합을 구하는 과정에서 지수 평균을 사용.
캡처본 추가.
Adam(Adaptive Moment Estimation)
- RMSProp과 Momentum 방식을 합친 것 같은 알고리즘
- Momentum 방식과 유사하게 지금까지 계산해온 지수평균을 저장.
- RMSProp과 유사하게 기울기의 지수 평균을 저장.
식 추가.
Conclusion
- Momentum, NAG, AdaGrad, AdaDelta, RMSProp, Adam 등 다양한 Optimization 알고리즘이 존재.
- 여기서 설명한 알고리즘들은 모두 Stochastic Gradient Descent 방식으로 단순한 first-order optimization의 변형.
- 단순한 second-order optimization을 사용하기 위해서는 Hessian Matrix란 2차 편미분 행렬을 계산한 후 역행렬을 구해야 함.
출처: https://www.slideshare.net/yongho/ss-79607172
자습해도 모르겠던 딥러닝, 머리속에 인스톨 시켜드립니다.
백날 자습해도 이해 안 가던 딥러닝, 머리속에 인스톨 시켜드립니다. 이 슬라이드를 보고 나면, 유명한 영상인식을 위한 딥러닝 구조 VGG를 코드 수준에서 읽으실 수 있을 거에요
www.slideshare.net
'Machine Learning' 카테고리의 다른 글
RNN(Recurrnet Neural Neetwork) (0) | 2022.08.06 |
---|---|
LSTM and GRU(Long Short Term Memory & Gated Recurrent Unit) (0) | 2022.08.06 |
앙상블(Ensemble) / Bagging, Boosting, Stacking (0) | 2022.06.22 |
서포트 벡터 머신 (Support Vector Machine, SVM) (0) | 2022.05.16 |
분류 (classification) / 이진 분류기, 다중 분류기의 성능 평가 방법 (0) | 2022.05.16 |