[DL] 옵티마이저(Optimizer)의 필요성 및 종류
Deep Learning에서 고려해야하는 Optimizer에 대해 알아본다.
✔️ Optimizer 란?
optimizer는 오차 함수(손실 함수)를 최소화하거나 생산 효율을 최대화하기 위해 사용되는 알고리즘 또는 방법이다.
- 가중치 및 편향과 같은 모델의 학습 가능한 매개변수에 따라 달라지는 수학 함수
- 손실을 줄이기 위해 신경망의 가중치와 학습 속도를 변경하는 방법을 알도록 도와줌
Optimizer는 손실 함수(loss function)을 통해 구한 차이를 사용해 기울기를 구하고 Network의 parameter(W, b)를 학습에 어떻게 반영할 것인지를 결정하는 방법이다. 즉, loss function의 최솟값을 찾는 것이 최적화(Optimization)이고 이를 수행하는 알고리즘이 최적화 알고리즘(Optimizer) 이다.
cf. W:가중치(Weight), b:편향(bias)
✔️ Optimizer의 필요성
딥러닝은 입력층(Input layer)과 출력층(Output layer) 사이에 여러 개의 은닉층(Hidden layer)으로 이루어진 신경망이다.
층이 깊어질 수록 모듈과 함수에 따른 하이퍼파라미터(Hyperparameter)도 비례하여 많아지기에 이 하이퍼파라미터를 결정하여 모델이 정확하게 결과를 뱉어낼 수 있도록 하는 것이 학습의 핵심이다.
그러기 위해 Loss Function을 정의해야하고, 손실함수를 최적화해야한다.
✔️ Optimizer의 종류
다양한 유형의 옵티마이저와 손실 함수를 최소화하기 위해 정확히 어떻게 작동하는지 알아본다.
1. Gradient Descent(GD)
- 볼록 함수를 기반으로 하는 최적화 알고리즘
- 매개변수를 반복적으로 조정하여 주어진 함수의 최솟값을 찾아야 함
- Gradient Descent는 현재 위치를 기준으로 기울기가 가파른 곳이 아닌 곳으로 이동하여 손실 함수(Loss Function)를 반복적으로 줄임
(1) 장점
- 이해하기 쉬움
- 구현하기 쉬움
(2) 단점
- 한 번의 업데이트로 전체 데이터 세트에 대한 기울기를 계산하기 때문에 계산 속도가 매우 느림
- 대용량 메모리 필요, 계산 비용 많이 듦
- 하이퍼파라미터(Learning rate, …) 등에 영향을 많이 받음
(3) Learning Rate
- 경사하강법은 최솟값 방향으로 학습이 이루어지는데 이 과정은 학습률(learning rate) 의 크기에 따라 발산이 이루어지기도 한다.
- 최적의 가중치를 향해 얼마나 빨리 갈 것인지, 느리게 갈 것인지를 결정하는 하이퍼파라미터이다.
2. Stochastic Gradient Descent(SGD)
- 확률적 경사 하강법(Stochastic Gradient Descent, SGD) 는 배치 경사 하강법이 모델 학습 시 많은 시간과 메모리가 필요하다는 단점을 개선하기 위해 제안된 기법이다.
- SGD는 배치 사이즈를 1로 설정하여 파라미터를 업데이트하기 때문에 배치 경사 하강법보다 훨씬 빠르고 적은 메모리로 학습한다. cf. 배치 경사 하강법의 배치 사이즈는 전체 데이터의 개수 => 속도 이슈
(1) 장점
- 메모리 사용량이 상대적으로 적음
- 한 번에 하나의 예만 업데이트하기 때문에 대용량 데이터 세트를 사용할 수 있음
(2) 단점
- 빈도가 높으면 오류가 감소하는 대신 증가할 수 있는 노이즈 기울기가 발생할 수 있음
- 분산이 높은 편임
- 업데이트를 계속할 수록 비용이 많이 드는 편임
- 파라미터 값의 업데이트 폭이 불안정해서 배치 경사 하강법보다 정확도가 낮은 경우가 발생할 수 있음
3. Mini-Batch Gradient Descent
미니배치 경사하강법은 SGD와 배치 경사하강법의 개념을 결합한 것이다. Train 데이터셋을 작은 배치로 분할하고 각 배치에 대한 업데이트를 수행한다. 이는 확률적 경사하강법(SGD)의 견고성과 배치 경사하강법의 효율성 사이에 균형을 만든다. 매개변수가 업데이트될 때 분산을 줄일 수 있고 수렴이 더 안정적이다.
(1) 장점
- 이전 방식보다 안정적으로 수렴할 수 있음
- 이전 방식보다 효율적으로 기울기 계산이 가능
- 이전 방식보다 메모리 사용량이 적음
(2) 단점
- 수렴 결과가 좋다고 말할 수 없음
- 학습 속도가 너무 작으면 수렴 속도가 느려지고 너무 크면 손실 함수가 발산하거나 최솟값에서 편차가 발생할 수 있음
4. SGD with Momentum
SGD with Momentum는 확률적 경사하강법에 운동량(momentum) 항을 추가한 것이다. Momentum은 객체가 움직일 때 관성을 시뮬레이션 하는데 즉, 업데이트 중에 이전 업데이트의 방향이 어느정도 유지되는 반면 현재 업데이터 gradient는 최종 업데이트 방향을 미세 조정하는데 사용된다.
- 모멘텀은 SGD에서 계산된 접선의 기울기에 한 시점(step) 전의 접선의 기울기값을 일정한 비율만큼 반영
- 작은 웅덩이에 빠지게 되더라도 관성의 힘으로 넘어서는 효과 줄 수 있음
- 즉, local minimum에 빠졌을 때 빠져나올 수 있음
(1) 장점
- 노이즈 제거에 도움이 됨
- 지수 가중 평균은 곡선을 부드럽게 하는데 사용됨
- 지그재그가 SGD보다 덜함
(2) 단점
- 하이퍼파라미터가 추가됨
- 즉, 고려해야하는 파라미터가 증가
5. AdaGrad(Adaptive Gradient Descent)
매개변수들은 각자 의미하는 바가 다른데, 모든 매개변수에 동일한 학습률을 적용하는 것은 비효율적이다. AdaGrad는 각 매개변수에 서로 다른 학습률을 적용시킨다. 즉, 처음에는 크게 학습했다가 조금씩 작게 학습시킨다.
(1) 장점
- 학습률은 은닉층에 대해, 각각의 뉴런에 대해 서로 다른 학습률을 사용할 수 있음
- 데이터 양이 적은 경우도 훈련할 수 있음
(2) 단점
- 신경망이 깊으면 학습률이 매우 작아져 일부 뉴런이 죽을 수 있음
- 신경망 학습 시 빨리 멈추는 경우가 발생할 수 있음
- 학습률이 감소되어 최솟값 지점에 도착하기 전에 알고리즘 멈춤
6. RMS-Prop(Root Mean Square Propagation)
RMS-Prop는 학습률이 기울기 제곱의 누적 합 대신 기울기의 지수 평균인 Adagrad의 special version이다. 즉, 지수 이동평균을 적용하여 학습의 최소 step을 유지한다.
(1) 장점
- 학습률을 자동 조정, 매개변수별로 다른 학습률 적용 가능
- 학습이 진행됨에 따라 파라미터 사이 차별화는 유지되고 학습속도는 지속적으로 줄어들어 0에 수렴하는 것을 방지할 수 있음
(2) 단점
- 학습이 느림
7. AdaDelta
AdaDelta도 Adagrad의 문제점을 개선하기 위해 만들어진 것이다. Adagrade의 공격성을 줄이고 학습률을 단조롭게 줄이고 학습 속도 감소 문제를 제거하는 것을 목표로 합니다. Adadelta에서는 이전 시간 단계의 실행 평균과 현재 기울기의 비율을 취하기 때문에 학습 속도를 설정할 필요가 없다.
(1) 장점
- 학습률을 설정할 필요가 없음
(2) 단점
- 경사하강법에서는 1차 미분만 하여 최솟값을 찾는 반면 AdaDelta는 2차 미분까지 하기 때문에 계산 속도가 느림
- 계산 비용이 비싼 편임
8. Adam(Adaptive Moment Estimation)
Adam optimizer는 가장 인기 있고 유명한 경사하강법 최적화 알고리즘 중 하나이다. 각 파라미터마다 다른 크기의 업데이트를 적용하는 방법으로 앞의 Adagrad, Adadelta, RMS-Prop과 유사하다.
(1) 장점
- 구현하기 쉬움
- 계산이 효율적임
- 요구하는 메모리량이 적음
9. 시각화로 비교하기
➕ 적절한 Optimizer 찾는 방법
어떤 Optimizer를 써야할지 모르겠다면 Adam을 써라!
- 데이터가 희소한 경우, Adagrad, Adadelta, RMS-Prop, Adam 사용
- 데이터양이 많은 경우, Adadelta, RMS-Prop, Adam의 효과는 비슷함
- Adam은 RMS-Prop를 기반으로 편향 보정, 모멘텀 추가됨
- Gradient가 희소해짐에 따라 Adam은 RMS-Prop보다 잘 수행 됨
✔️ Reference
- Medium by Musstafa - Optimizers in Deep Learning
- 티스토리 by Tony Park - [딥러닝] 경사 하강법(Gradient Descent) 종류
- 티스토리 by White Whale - 수식과 코드로 보는 경사하강법(SGD,Momentum,NAG,Adagrad,RMSprop,Adam,AdaDelta)
- 네이버 블로그 by 허니피그 - Deep Learning - 6장. 학습관련 기술(SGD, Momentum, Adagrad, Adam)
👩🏻💻개인 공부 기록용 블로그입니다
오류나 틀린 부분이 있을 경우 댓글 혹은 메일로 따끔하게 지적해주시면 감사하겠습니다.
댓글남기기