경사 하강법의 종류
경사 하강법(Gradient Descent)은 모델을 학습시킬 때 사용되는 최적화 알고리즘 중 하나이며,
경사하강법은 세가지 종류가 있다. 데이터 학습시 한번의 업데이트에 데이터를 얼마나 많이 사용하는지에 따라 분류된다고 볼 수 있다.
실제로는 많은 경우 Mini-Batch 경사하강법을 활용한다.
1) Stochastic Gradient Method
한번에 하나의 데이터 포인트를 사용하여 업데이트한다.
각 훈련 데이터 포인트에 대해 손실 함수의 그래디언트를 계산하고, 이를 사용하여 매개변수를 업데이트하는 방법이다.
각 데이터 포인트를 한 번에 처리하기 때문에 계산 속도가 빠르고 대규모 처리가 가능하나, 불안정성이 높고 오래 걸릴 수 있다.
2) Mini-batch Gradient Method
한번에 미니배치 (mini-batch) 사이즈의 데이터를 사용하여 업데이트한다.
일정한 크기의 작은 미니배치(mini-batch)를 사용하여 그래디언트를 계산하고, 이를 사용하여 모델을 업데이트 한다.
전체 데이터셋을 사용하는 BGD와 한 개의 데이터 포인트를 사용하는 SGD의 중간 방법으로,
일정한 크기의 미니배치를 사용하기 때문에 계산 속도가 빠르면서도 그래디언트 업데이트의 안정성을 유지 가능하다.
효과적인 학습을 위해서는 상황에 따라 미니 배치의 크기 선정이 중요하다.
3) Batch Gradient Method
한번에 전체 데이터를 사용하여 업데이트한다.
모든 훈련 데이터를 한 번에 사용하여, 전체 훈련 데이터셋에 대해 손실 함수의 그래디언트(기울기)를 계산하고, 이를 사용하여 매개변수를 업데이트한다.
전체 데이터를 사용하므로 안정적인 그래디언트 업데이트가 가능하나, 계산 속도가 느리고 메모리가 많이 든다.
배치 크기 정하기 - Batch size matters
결국 경사하강법에서 배치 크기를 정하는 것이 생각보다 중요하다.
배치 크기의 선택은 경사 하강법의 성능과 수렴 속도에 큰 영향을 미치기 때문.
너무 큰 배치 크기를 선택하면 안정적인 그래디언트 추정이 가능하지만, 더 높은 계산 비용과 더 sharp한 최소값에 수렴된다.
반면 너무 작은 배치 크기를 선택하면 더 빠른 학습 속도와 더 flat한 최소값에 수렴할 수 있지만, 그래디언트의 노이즈가 증가한다.
- 큰 배치 사이즈를 활용할 시 : Sharp Minimizers - 한 번의 업데이트 당 그래디언트의 평균을 계산하므로 보다 안정적인 그래디언트 추정하나, 좁은 범위만 탐색. 이때 경사 하강법은 더 "sharp"한 최소값, 즉 골짜기(gully) 형태의 최소값을 찾기에 Sharp minimizer라고도 한다.
- 작은 배치 사이즈를 활용할 시 : Flat Minimizers - 각 업데이트 당 그래디언트의 변동성이 높을 수 있으나, 넓은 범위를 탐색 가능. 이때 경사 하강법은 보다 "flat"한 최소값, 즉 더 넓은 범위에 걸쳐 일정한 값을 가지는 최소값을 찾기에 Flat minimizer라고도 한다.
On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima (2017)
https://arxiv.org/abs/1609.04836
위 논문은 이 두가지 경우를 설명하면서, 작은 배치 사이즈를 활용하는 것이 더 낫다는 주장. (+ 큰 배치 사이즈 활용법 탐구)
우리의 목적은 Testing function의 minimum을 찾고 싶은 것인데, Flat minimizer의 경우 보다 일반화 되어 Training - Testing function의 최소값이 비슷한 반면, Sharp minimizer의 경우 배치 사이즈가 커지면 그 차이가 클 확률이 높기 때문.
경사하강법의 Optimizer의 종류
경사하강법을 사용할 때 다양한 최적화 기법(Optimizer)이 존재하며, 이들 각각은 특정한 문제나 데이터에 더 적합하게 선택될 수 있다.
1) Stochastic Gradient Descent
앞서 미리 설명한 'Stochastic' 경사하강법은, 랜덤성 혹은 확률이 포함된 개념으로, 전체 데이터셋이 아닌 무작위로 선택된 샘플을 사용하여 매개변수를 업데이트한다.
또한 매번 다른 샘플을 사용하여 기울기를 계산하므로, 기울기 추정에 노이즈가 포함된다.
가장 기본적인 경사하강법. 적절한 Learning rate을 잡아서 Gradient를 업데이트 하는 것이 매우 중요하다.
2) Momentum
Momentum 이란 '관성'을 뜻함. Optimization 테크닉의 기본이 되는 개념 중 하나로,
이전 단계의 기울기를 고려하여 현재 단계의 기울기에 관성을 부여한다. 이에 따라 수렴 속도를 높이고 지역 최적점에 빠지지 않도록 함.
Gradient를 계산한 후에, 그 다음 Gradient 계산에 이를 반영하는 식으로 정보를 흘려줘서, 함께 이용한다는 원리.
3) Nesterov Accelerated Gradient
Momentum의 향상된 버전으로, 기존의 Momentum 방식에서는 현재 기울기를 계산하기 전에 모멘텀 방향으로 이동하는 반면,
NAG는 모멘텀 방향으로 먼저 이동한 후 기울기를 계산한다.
이는 Gradient Descent의 문제 중 하나인 골짜기에서 진동이 발생하면서, 실제 최적점에서 멀어지는 현상을 해결하기 위한 기법이다.
Nesterov Accelerated Gradient는 현재 위치에서 기울기를 계산하는 대신,
앞으로 나아갈 예상 위치에서의 기울기를 먼저 예측해서 계산하므로, 진동을 줄이고 최적점에 빠르게 도달할 수 있도록 도와준다.
4) Adagrad
Adagrad 식의 방법은 Momentum의 '관성'을 이용하는 방식과 다르게, Adaptation 즉 조정을 이용한다.
('Adagrad adapts the learning rate, performing larger updates for infrequent and smaller updates for frequent parameters')
각 매개변수에 대해 개별적으로 학습률을 조정하는 방법으로,
학습에 따라 많이 변화하고 자주 갱신되는 파라미터의 학습률은 감소시키고, 덜 자주 갱신되는 파라미터의 학습률은 증가시키는 기법이다.
지금까지 해당 파라미터가 얼마나 변화했는지를 각각 추적하면서 (변화의 제곱합 : sum of gradient squares) 학습률을 조정해나간다.
5) Adadelta
Adagrad의 문제점을 개선한 알고리즘으로,
학습률 감소 문제를 해결하기 위해 제한된 moving average 윈도우 사이즈(window)을 사용하여 매개변수의 학습률을 조정한다.
Adagrad의 경우에, 학습이 반복 누적되고 파라미터 변화의 제곱합인 G가 무한대로 커지게되면 학습이 매우 더뎌지게 된다.
Adadelta는 이를 극복하여 과거의 모든 기울기 제곱을 누적하지 않고,
학습률이 아닌 이동평균된 제곱 그래디언트의 제곱근(EMA of gradient squares)의 비율을 사용하여 학습률을 동적으로 조절한다. (learning rate이 없음)
6) RMSprop (Root Mean Square Propagation)
RMSprop은 논문에 발표된 기법은 아니고, Geoff Hinton이 강의에서 제안한 기법.
Adagrad, Adadelta와 유사하지만, 지수 이동 평균을 사용하여 최근 기울기들을 반영하는 알고리즘으로,
이동평균된 제곱 그래디언트의 제곱근(EMA of gradient squares)를 사용하면서도, Adadelta와 다르게 learning rate을 나타내는 stepsize가 존재한다.
Adagrad의 학습률 감소 문제를 해결하면서 안정적인 학습을 가능하게 한다.
7) Adam (Adaptive Moment Estimation)
가장 무난하게 많이 사용되고 성능이 좋은 Optimizer.
Adam은 모멘텀과 RMSprop을 결합한 알고리즘으로,
1) Gradient square의 크기에 따라서 adaptive하게 학습률을 바꾸는 것과, 2) 이전 Gradient 정보에 해당하는 momentum 두개를 함께 활용하는 방식이다. Adaptation + Momentum
('Adaptive Moment Estimation (Adam) leverages both past gradients and squared gradients')
빠르고 안정적인 수렴, 다양한 문제에 대해 잘 작동하나, 메모리 사용량이 많으며, 하이퍼파라미터 설정해야 한다.
'ML study' 카테고리의 다른 글
Long Short Term Memory (LSTM)— Improving RNNs (0) | 2024.06.05 |
---|---|
[네이버AI class] 6주차 (5) - 정규화 (Regularization) (0) | 2024.06.04 |
[네이버AI class] 6주차 (3) - 최적화 주요 용어 (0) | 2024.06.03 |
[네이버AI class] 6주차 (2) - MLP 뉴럴 네트워크 (1) | 2024.06.03 |
[네이버AI class] 6주차 (1) - 딥러닝 기본 및 Historical review (0) | 2024.06.02 |