본문으로 바로가기

SGD (Stochastic Gradient Descent)

category AI/Deep Learning 2021. 3. 4. 14:55

Gradient Descent (경사하강법)

 

경사하강법의 직관적, 수학적 이해

Local maxima and minima 1) 개요 - scalar 값을 output으로 가지는 다변수 함수를 아래와 같이 떠올릴 수 있다. 이때, 각 꼭짓점들을 local maximum이라고 일컫는다. - local maximum point : local maximum이..

sjpyo.tistory.com

 

SGD (확률적 경사하강법) & MB-GD (Mini-Batch)

1) 개요

출처 : https://www.slideshare.net/yongho/ss-79607172

    - 전체 데이터가 아닌 특정 데이터로 학습하는 SGD는 DNN에서 주로 이용되는 최적화 기법

    - GD의 느린 속도를 개선하기 위해 사용

    - i번째 뉴런의 j번째 weight

$$w_{ij}^{t+1} = w_{ij}^{t}-\alpha \frac{\partial E}{\partial w_{ij}^{t}}$$

optimizing (최적화)
loss 값이 줄어들도록 모델의 학습 파라미터 (weight, bias)를 업데이트한다는 의미

 

2) SGD

    - 각 epoch마다 weights를 업데이트 수행

 

3) MB-GD

    - mini batch 단위로 정의되는 loss function을 적용한다.

    - batch_size 단위로 학습하는 것을 제외하고 SGD와 같다.

    - batch 단위로 연산을 하기 때문에 행렬 연산이 가능

 

4) SGD의 변형

    - 최적화를 더욱 효율적으로 하기 위해 여러 변형된 기법들이 탄생했다.

출처 : https://untitledtblog.tistory.com/149?category=823331


Momentum based gradient

Momentum

1) 개요

출처 : https://cedar.buffalo.edu/~srihari/CSE676/8.3%20BasicOptimizn.pdf

    - SGD 보다 빠르게 optimum으로 찾아간다.

    - momentum이라는 개념을 이용해 gradient 수정하는 알고리즘

    - momentum의 사전적 의미인 운동량의 개념을 적용한 것으로 어느 한 방향으로 진행하던 물체의 방향을 바꾸더라도 기존 방향으로 어느정도 힘이 작용하는 것을 나타낸 것이다. 즉, 이전 gradient는 현재 gradient에 영향을 끼친다는 개념이다.

 

2) 수학적 이해

$$w_{ij}^{t+1} = w_{ij}^{t} - v_{ij}^{t}$$

    - v : momentum을 나타내는데 해당 식은 아래와 같다.

    - beta는 이전 gradient의 영향력을 조정하는 hyper-parameter로 일반적으로 0.9 사용

$$v_{ij}^{t} = \beta v_{ij}^{t-1} + \alpha \frac{\partial E}{\partial w_{ij}^{t}},\;\;\; \beta \in [0, 1]$$

    - 모든 gradient를 나타낸 식은 아래와 같다.

$$v_{ij}^{t} = \alpha \frac{\partial E}{\partial w_{ij}^{t}} + \beta v_{ij}^{t-1} = \alpha \frac{\partial E}{\partial w_{ij}^{t}} +\beta \alpha \frac{\partial E}{\partial w_{ij}^{t-1}} + \beta^{2}v_{ij}^{t-2}=\cdots$$

    - 소수 형태인 beta값은 위의 식에서 볼 수 있듯이 제곱이 되면서 작아져 영향력이 줄어든다.

 

NAG (Nesterov accelerated gradient)

1) 개요

    - 기본 momentum의 관성이 작용해 경사하강을 중지해야 하는 지점을 지날칠 수 있는 단점을 개선하기 위해 생겼다.

    - momentum 계산 시, 해당 momentum을 적용했을 때의 변화를 미리 계산 후 적절한 momentum을 적용

 

2) 수학적 이해

    - 이전의 momentum만큼 이동했다고 가정한 뒤에 gradient를 계산

$$w_{ij}^{t+1} = w_{ij}^{t} - v_{ij}^{t}$$

$$v_{ij}^{t} = \beta v_{ij}^{t-1} + \alpha \frac{\partial E}{\partial \hat{w}_{ij}^{t}}$$

$$\hat {w}_{ij}^{t}=w_{ij}^{t} - \beta v_{ij}^{t-1}$$


Adaptive learning rate

AdaGrad (Adaptive Gradient)

1) 개요

    - 고정된 learning rate가 아니라 각각의 변수마다 적합한 learning rate 자동으로 설정

    - weight의 변화가 많았던 변수들은 optimum 근처에 있을 확률이 높아 learning rate 작게함

    - weight의 변화가 적었던 변수들은 optimum에서 멀 확률이 높아 learning rate 크게함

 

2) 특징

    - learning rate를 직접적으로 조절할 필요가 없음

    - 학습할수록 upate가 이뤄지지 않는 문제 존재 (g의 값이 제곱해서 더해지기 때문에 learning rate가 매우 작아짐)

 

3) 수학적 이해

    - gradient의 크기는 변수의 변화정도를 나타내는데 이를 gradient 제곱의 합으로 나타냄

$$g_{ij}^{t} = g_{ij}^{t-1} + (\frac{\partial E}{\partial w_{ij}^{t}})^{2}$$

    - decay는 1e-8과 같이 매우 작은 상수로써 0으로 learning rate를 나누는 것을 방지하기 위해 설정

$$w_{ij}^{t+1} = w_{ij}^{t} - \frac{\alpha}{\sqrt{g_{ij}^{t}}+decay}\frac{\partial E}{\partial w_{ij}^{t}}$$

 

RMSProp (Root Mean Square Propagation)

1) 개요

    - AdaGrad의 단점을 보완하여 gradient 제곱의 지수 이동 평균으로 learning rate 조정

    - 이전의 변화량과 현재의 변화량의 평균으로 정의되어 learning rate가 급격하게 감소하는 현상 방지

    - 최근의 변화량에 더 높은 가중치를 줌

 

2) 수학적 이해

$$g_{ij}^{t}=\beta g_{ij}^{t-1} + (1-\beta)(\frac{\partial E}{\partial w_{ij}^{t}})^{2}$$

    - decay는 1e-8과 같이 매우 작은 상수로써 0으로 learning rate를 나누는 것을 방지하기 위해 설정

$$w_{ij}^{t+1} = w_{ij}^{t} - \frac{\alpha}{\sqrt{g_{ij}^{t}}+decay}\frac{\partial E}{\partial w_{ij}^{t}}$$

 


Adam (Adaptive Momentum Estimation)

1) 개요

    - 현재 DNN의 학습에서 가장 광범위하게 이용되고 있는 optimizer

    - Adam = momentum + RMSProp

 

2) 수학적 이해

    - unbiased expectation 형태로 momentum과 learning_rate를 바꾸는 이유로 학습 초기에 m, v 벡터들이 0으로 편향되는 것을 방지하고자 함이고 학습이 진행될수록 beta가 0으로 가기 때문에 의미가 없어진다.

출처 :  arxiv.org/abs/1412.6980

 

Recommended hyper-parameter
NAG AdaGrad RMSProp Adam
learning_rate =  0.01
beta = 0.9
learning_rate = 0.01
decay = 1e-8
learning_rate = 0.01
beta = 0.9
decay = 1e-8
learning_rate = 0.001
beta_1 = 0.9
beta_2 = 0.999
decay = 1e-8

참고

rasbt.github.io/mlxtend/user_guide/general_concepts/gradient-optimization/

untitledtblog.tistory.com/149?category=823331

www.slideshare.net/yongho/ss-79607172

'AI > Deep Learning' 카테고리의 다른 글

Batch Normalization  (0) 2021.03.05
Dropout  (0) 2021.03.04
Weight Initialization  (0) 2021.03.04
Activation function  (0) 2021.03.03
Feed-forward NN & Backpropagation  (0) 2021.03.03