경사 하강법
IT 위키
더 많은 작업
경사 하강법(Gradient Descent)은 머신러닝 및 딥러닝에서 손실 함수의 값을 최소화하기 위해 매개변수를 반복적으로 갱신하는 최적화 기법이다.
경사 하강법은 손실 함수의 기울기, 즉 그래디언트(gradient)를 계산하여, 그 반대 방향으로 파라미터를 이동시킴으로써 손실 값을 점차 줄여 나가는 방식이다. 함수의 기울기가 0에 가까워질수록 최솟값에 수렴하게 된다. 이 방식은 선형 회귀, 로지스틱 회귀, 신경망 등 다양한 모델에서 널리 사용된다.
경사 하강법은 다음과 같은 과정을 반복한다.
- 현재 매개변수에서 손실 함수의 기울기를 계산한다.
- 기울기의 반대 방향으로 일정 비율만큼 파라미터를 이동시킨다.
- 이 과정을 원하는 수의 반복(epoch)만큼 수행한다.
여기서 이동하는 비율을 학습률(learning rate)이라고 하며, 이 값이 너무 크면 발산하고 너무 작으면 수렴 속도가 느려질 수 있다.
경사 하강법은 데이터를 어떤 단위로 사용하는지에 따라 다음과 같이 나뉜다.
- 전체 배치 경사 하강법: 전체 훈련 데이터를 한 번에 사용하여 기울기를 계산한다.
- 확률적 경사 하강법(SGD): 훈련 샘플을 하나씩 사용해 기울기를 계산한다.
- 미니배치 경사 하강법: 일정한 수의 샘플(미니배치)을 사용하여 기울기를 계산한다.
- 단순하고 구현이 쉬우며, 대부분의 신경망 학습 알고리즘에서 기본이 되는 방식이다.
- 손실 함수가 볼록(convex)한 경우에는 전역 최솟값으로 수렴이 보장된다.
- 하지만 비볼록 함수에서는 지역 최솟값이나 안장점에 수렴할 수 있으며, 최적의 결과를 보장하지 않는다.
- 하이퍼파라미터인 학습률 설정에 민감하다.
기본 경사 하강법은 학습률이 모든 매개변수에 똑같이 적용되고, 기울기가 작은 평탄한 구간이나 골짜기에서 느리게 진동한다. 이를 보완하려고 매개변수 갱신 규칙을 바꾼 최적화 기법(옵티마이저)이 나왔다. 크게 이동 방향을 개선한 모멘텀 계열과 보폭(학습률)을 매개변수마다 조절하는 적응적 학습률 계열로 나뉜다.
| 기법 | 계열 | 아이디어 |
|---|---|---|
| 모멘텀(Momentum) | 방향 | 이전 갱신 방향을 관성처럼 누적해 이번 갱신에 더한다. 진동이 줄고 평탄한 구간이나 얕은 지역 최솟값을 지나가기 쉽다 |
| NAG(Nesterov Accelerated Gradient, 네스테로프 모멘텀) | 방향 | 관성 방향으로 먼저 이동해 본 위치에서 기울기를 계산한다. 멈춰야 할 지점을 지나치는 일이 모멘텀보다 적다 |
| AdaGrad | 보폭 | 매개변수마다 과거 기울기의 제곱을 누적해 학습률을 나눈다. 많이 갱신된 매개변수일수록 학습률이 작아진다. 누적만 하므로 학습이 길어지면 학습률이 0 에 가까워져 갱신이 멈출 수 있다 |
| RMSProp | 보폭 | AdaGrad 의 단순 누적을 지수이동평균으로 바꿔 오래된 기울기의 영향을 줄인다. 학습률이 계속 작아지기만 하는 문제를 완화한다 |
| AdaDelta | 보폭 | AdaGrad 를 개선한 방식으로, 학습률 하이퍼파라미터 없이 갱신량을 스스로 정한다 |
| Adam(Adaptive Moment Estimation) | 방향 + 보폭 | 모멘텀(기울기의 이동평균)과 RMSProp(기울기 제곱의 이동평균)을 결합하고 초기 편향을 보정한다. 딥 러닝에서 기본값처럼 널리 쓰인다 |
- Ian Goodfellow, Yoshua Bengio, Aaron Courville, 《Deep Learning》, MIT Press
- Sebastian Raschka, 《Python Machine Learning》, Packt Publishing