Gradient Descent (경사하강법)
SGD (확률적 경사하강법) & MB-GD (Mini-Batch)
1) 개요
- 전체 데이터가 아닌 특정 데이터로 학습하는 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의 변형
- 최적화를 더욱 효율적으로 하기 위해 여러 변형된 기법들이 탄생했다.
Momentum based gradient
Momentum
1) 개요
- 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으로 가기 때문에 의미가 없어진다.
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/
'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 |