모델에서 최적화의 목표는 손실함수(Loss function)의 값을 최소로 만들어줄 수 있는 가중치 Weight를 효율적으로 찾는 것이라고 여러 번 말했었다. $$ w^* = \arg\min_w L(w) $$
이러한 최적화 알고리즘 중 경사하강법, 스토케스틱 경사하강법, 미니배치 경사하강법을 이전에 알아봤었다.
이번에는 경사하강법을 발전시킨 다양한 옵티마이저들을 알아보겠다.
1. Gradient Descent
손실함수의 기울기를 계산하여, 기울기의 반대방향으로 이동하는 방식으로 가중치를 갱신한다.
2. Stochastic Gradinet Descent
전체 데이터셋이 아닌 무작위로 선택한 하나의 샘플을 사용하여 가중치를 갱신한다.
3. Mini-Batch Gradient Descent
미니 배치라는 작은 단위의 데이터셋을 이용하여 기울기를 계산하여 가중치를 갱신한다.
위의 방법들은 단순하고 구현도 간단하지만, 옵티마이저의 진행방향에 따라 기울기가 달라지게 되면 매우 비효율적으로 진행되었다.(방향이 완전히 바뀜)
아래의 Momentum과 Nesterov Accerlerated Gradient는 가중치가 업데이트되는 방향을 개선하기 위한 방법들이다.
4. Momentum
SGD에 관성 효과를 추가한 것으로, 이전 기울기를 고려하여 가중치를 갱신한다. 이는 최적점을 더 빠르게 도달하게 하며 local minima를 피하는데 더욱 효과적이다. 일반적으로 $\alpha$를 0.9로 설정하여 이전 값의 영향을 90% 정도 유지하면서 이번에 계산된 변화량을 10%로 정도 반영하는 것이다. 즉 한 번에 기울기가 팍팍 변하지 않고, 기존의 방향을 유지하려는 관성의 성질이 들어가되(90%) 이번에 계산한 대로 방향을 튼다. 이렇게 생각하면 될 것 같다. 따라서 90%는 이전의 방향을 유지하므로 지역해에 빠지거나 gradient가 0이 되어도 빠져나올 수 있다. 그러나 모멘텀은 전역해도 지나칠 수도 있다는 단점이 있다.
$$ v \leftarrow \alpha v - \eta \frac{\partial L}{\partial W} $$ $$ W \leftarrow W + \eta v $$
5. Nesterov Accerlerated Gradient
NAG:Nesteroc Accerleratied Gradient는 Momentum의 변형으로 모멘텀을 먼저 적용하고 해당 위치에서 기울기를 구하여 가중치를 업데이트한다. 이는 관성의 효과를 전역해를 지나치던 모멘텀의 단점을 해소할 수 있다.
$$v \leftarrow \alpha v - \eta \frac{\partial L}{\partial W}(W+\alpha v) $$ $$ W+v
아래에 나올 AdaGrad와 RMSProp은 학습률을 발전시키는 방법이다.
6. AdaGrad
AdaGrad는 각각의 변수에 따라 학습률을 자동으로 조정하며 가중치를 갱신하는 방법이다. 많이 변화된 특성들은 이미 최적해에 도달했을 거라는 가정하에 학습률을 낮춰서 세밀하게 조정하고, 많이 변화되지 않은 특성들에 대한 학습률을 높여 빠르게 오차를 줄이고자 하였다. 아래식에서 h 특정 변수에 대한 그래디언트가 업데이트된 크기가 클수록, 적게 업데이트되게끔 하였다. 그러나 학습이 진행될수록 h가 계속하여 커지기 때문에 반대로 가중치의 값은 점점 업데이트가 덜 되어 이게 학습이 잘 되어서 업데이트가 안 되는 것인지 아니면 단순히 학습을 많이 해서 그런 것인지 구분할 수 없다는 단점이 있다.
$$h \leftarrow h + (\frac{\partial L}{\partial W})^2 $$ $$W \leftarrow W - \frac{\eta}{\sqrt{h}} \frac{\partial L}{\partial W}
$$
7. RMSProp
다음으로 RMSProp은 AdaGrad의 단점을 보완하기 위하여 과거의 모든 기울기 정보를 고려하는 것이 아니라 최근 기울기만을 고려하여 업데이트를 진행한다. 좀 더 자세하게 말하자면, 지수이동평균(Exponential Moving Average)을 이용하여 최근 기울기에 높은 가중치(지금 업데이트하는 가중치가 아니라 영향) 이전 가중치들에는 점차 가중치를 적게 주는 방식으로 이전 기울기의 정보를 고려한다.
$$ h = \beta h + (1 - \beta) (\frac{\partial L}{\partial W})^2 $$ $$ W \leftarrow W - \frac{\eta}{\sqrt{h + \epsilon}} \frac{\partial L}{\partial w} $$
8. Adam
마지막으로 Adam: Adaptice Moment Estimation은 스텝방향을 정하는 방식을 발전시킨 Momentum의 장점과 RMSProp의 스텝사이즈를 업데이트하는 방식을 모두 결합한 방식으로 최근에는 기본값으로 제일 많이 사용하는 방식이다.
$$ m = \beta_1 m + (1 - \beta_1) \frac{\partial L}{\partial W} $$ $$ v = \beta_2 v + (1 - \beta_2) (\frac{\partial L}{\partial W})^2 $$ $$ W = W - \eta \frac{m}{\sqrt{v} + \epsilon} $$
9. 요약
Gradient Descent: 전체 데이터를 이용한 그래디언트를 이용하여 최적화
Stochastic Gradient Descent: 무작위로 선택한 하나 혹은 batch size로 나눈 데이터 샘플에 대한 기울기를 이용하여 최적화.
Momentum: 이전의 이동 방향과 현재의 기울기를 모두 고려하여 업데이트, 관성 효과로 수렴을 빠르게 함.
Nesterov Accelerated Gradient: Momentum과 유사하지만, 미래 위치의 기울기를 사용하여 업데이트하여 수렴 속도를 향상.
Adagrad: 각 매개변수에 대해 학습률을 조절하면서 업데이트, 자주 나타나는 특성에 대한 학습률을 감소시킴.
RMSprop: Adagrad의 단점을 보완하고자 지수 이동 평균을 사용하여 학습률을 조절.
Adam: Momentum과 RMSprop을 결합한 방법으로, 효과적인 최적화와 학습률 조절을 동시에 수행하여 안정적이고 빠른 수렴을 이끔.
'ML & DL > 개념정리' 카테고리의 다른 글
PyTorch- 텐서 조작 (0) | 2023.12.26 |
---|---|
Data Augmentataion: 데이터 증강 (0) | 2023.12.26 |
가중치 초기화, 규제, 학습 (0) | 2023.12.26 |
성능 고도화 기법 (0) | 2023.12.23 |
RNN, LSTM, GRU (1) | 2023.12.22 |