경사하강법(Gradient Descent)은 파라미터 조정을 통해서 cost function 값이 가장 낮아지게 하는 독립 변수를 찾아내는 알고리즘이다. 기본적인 원리는 현재 설정된 위치를 기준으로 값이 가장 가파르게 낮아지는 방향으로 파라미터를 조정하는 것이다.
(자주 비유되는 상황은 안개가 낀 산에서 가장 빠르게 내려가는 방법은 내 발 밑에서 가장 가파른 방향으로 움직이는 것이다.)
Figure 1처럼 랜덤한 값으로부터 시작하여 learning rate 하이퍼파라미터에 결정된 크기만큼 조금씩 움직이는 형태이다.
- 만약 learning step이 너무 작다면 minimum에 도착하기까지 시간이 너무 많이 걸리고, 너무 크다면 오히려 발산해버리거나 minimum에 절대 도달하지 못할 수도 있다.
- 평균 제곱 오차 (MSE) 함수는 보통 볼록한(convex) 함수이기 때문에 값이 작아지는 방향으로 가면 무조건 global minimum을 찾을 수 있다. 하지만 함수가 불규칙적이라면 local minimum에 빠지거나, 평평한 구간 (plateau)에서 멈춰버릴 수도 있다.
Gradient Descent의 유형
1. Batch Gradient Descent
Batch Gradient Descent는 매 step마다 전체 데이터셋을 사용해서 gradient를 연산하는 방법이다.
gradient vector는 모든 파라미터에 대해서 cost function의 편미분을 구한 것이다. 전체 데이터셋 X에 대해서 진행되기 때문에 데이터셋이 커지면 연산 복잡도가 매우 올라가고, 속도가 느려진다는 단점이 존재한다.
2. Stochastic Gradient Descent
Stochastic Gradient Descent는 Batch Gradient Descent의 느린 연산 속도와는 반대로 빠른 속도를 자랑하는 Gradient Descent 방법이다. 전체 데이터셋을 사용하는 것이 아닌, 각 스텝마다 랜덤한 instance를 선택하고 그것을 바탕으로 gradient를 연산하는 방법이다.
하나의 instance만을 필요로 하기 때문에 속도는 매우 빠르고 local minimum에서도 빠르게 탈출할 수 있다는 장점이 있다. 하지만, Batch Gradient Descent와는 다르게 하나의 minimum에 정착하기 어렵고 그 주변에서 계속해서 맴돌게 된다. 이를 해결하기 위해서는 step이 진행될 수록 learning rate를 조금씩 줄일 필요가 있다.
3. Mini-batch Gradient Descent
Mini-batch Gradient Descent는 위에서 설명된 2가지 방법들의 절충안이다. 여러 개의 instance들을 하나의 mini-batch로 만들어서 Gradient Descent를 진행하는 방법이다. 병렬처리(GPU를 주로 사용)를 활용함으로써 Stochastic Gradient Descent보다 메모리를 더 효율적으로 사용할 수 있다는 장점이 있다.
아래는 3가지 방법을 시각화 해놓은 그림이다.
'AI > ML' 카테고리의 다른 글
[ML] 선형 모델 정규화 (Regularization) (0) | 2024.09.08 |
---|---|
[ML] 오차/오류의 종류 (0) | 2024.09.06 |
[ML] 분류 (Classification) (0) | 2024.08.16 |
[ML] 모델 파인튜닝 (0) | 2024.08.14 |
[ML] 데이터셋 준비 (0) | 2024.08.13 |