경사 하강법 프로그래밍 - gyeongsa hagangbeob peulogeulaeming

경사 하강법(Gradient Descent)의 원리

선형 회귀 모델과 모델의 예측 평가 방법까지 알았으니 이제 어떻게 가장 최적의 모델을 찾을 것인지 알아보자. 이전 포스트에서 언급했듯이, 가장 최적의 모델은 가장 적은 비용(cost)을 갖는 모델이다. 모델이 최소 비용을 갖는 매개변수를 찾는 과정을 훈련한다고 하며 비용 최소화하기 위해서는 경사 하강법(Gradient Descent)을 이용한다. 이 방법의 원리는 산 정상에서 골짜기로 가장 빠르게 내려오는 방법인 가장 경사가 가파른 길을 골라 내려오는 것과 같다. 이 방법은 회귀뿐만 아니라 다양한 종류의 문제에서 최적의 해법을 찾을 수 있는 일반적인 최적화 알고리즘이다.

경사 하강법 프로그래밍 - gyeongsa hagangbeob peulogeulaeming

경사 하강법을 실행하는 모습. x0에서 시작하여, 경사가 낮아지는 쪽으로 이동하여 차례대로 x1, x2, x3, x4를 얻는다.

이 그림에서 볼 수 있듯이, 등고선에서 고지를 찾는 방법은 임의의 시작점 x0에서 경사(기울기)가 낮아지는 쪽(등고선이 서로 가까울수록 경사가 가파르며 고지에 가까울수록 경사는 낮아진다)을 찾아 차례대로 이동하여 가장 경사가 낮은 곳(최적해)을 찾으면 된다. 이때 최종적으로 고지에 도달하면 경사가 0에 도달한다.

경사 하강법 프로그래밍 - gyeongsa hagangbeob peulogeulaeming

그러나 위와 같은 형태의 곡면의 경우 임의의 시작점 ⍬0에서 출발하여 경사가 0에 도달해 찾은 고지가 다른 임의의 시작점 ⍬1에서 출발하여 찾은 고지와 다를 수 있다. 즉, 임의의 시작점 ⍬에서 찾은 지역적인 최적해(local minimum)가 전역적인 최적해(global minimum)라고 보장할 수 없다. 

다행히 비용 함수는 다음과 같은 모양의 이차 곡면을 가진다. 즉 하나의 전역 최솟값을 가지고 있다는 뜻이다.

경사 하강법 프로그래밍 - gyeongsa hagangbeob peulogeulaeming

경사 하강법 프로그래밍 - gyeongsa hagangbeob peulogeulaeming

학습률(Learning Rate)

경사 하강법에서 가장 중요한 파라미터는 스텝의 크기로 학습률 하이퍼파라미터로 결정된다. 여기서 하이퍼파라미터는 일반적인 파라미터와는 달리 데이터를 학습해서 얻을 수 없으며, 모델의 성능 향상을 위해 별도의 최적화 과정을 거쳐 찾아내야 하는 조정 파라미터(tuning parameter)를 말한다.

등고선에서 x0에서 x로 나아가기 위해서는 얼마나 멀리까지 이동을 할 것인가를 결정하는 것이 학습률 하이퍼파라미터를 결정하는 것이다.

경사 하강법 프로그래밍 - gyeongsa hagangbeob peulogeulaeming

학습률이 너무 작으면 알고리즘이 수렴하기 위해 반복을 너무 많이 진행해야 하므로 시간이 오래 걸리며 전역 최솟값에 수렴하기 전에 지역 최솟값에서 모델이 학습을 중단할 수도 있다. 반면에 학습률이 너무 크면 골짜기를 가로질러 골짜기 아래로 내려가는 것이 아니라 반대로 올라갈 수도 있으며 알고리즘이 더 큰 값으로 발산하게 되어 적절한 해법을 찾을 수 없게 된다. 이를 overshooting이라고 한다. 따라서 적절한 해법을 찾기 위해서는 여러 가지 학습률을 적용해보고 비교하는 과정이 필요할 수도 있다.

경사 하강법 프로그래밍 - gyeongsa hagangbeob peulogeulaeming
학습률이 너무 작은 경우(왼)와 학습률이 너무 큰 경우(오)
경사 하강법에서의 계산 : 배치 경사 하강법(Batch Gradient Descent)

시작점 X0 출발하여 현제 Xi에 위치해 있을 때, 다음으로 이동할 점인 Xi+1은 다음과 같이 계산한다.

경사 하강법 프로그래밍 - gyeongsa hagangbeob peulogeulaeming
여기서 α는 이동할 거리를 조절하는 매개변수이다.

경사 하강법을 비용 함수에서 구현하려면 각 모델 파라미터 W에 대해 비용 함수의 경사(gradient)를 계산해야 한다. 이는 W가 조금 변경될 때 비용 함수가 얼마나 바뀌는지 계산한다는 의미이다. 이를 편미분(Partial Derivative)라고 한다. 이를 이용하여 비용 함수에서의 편미분을 구하는 방법은 다음과 같이 유도할 수 있다.

우선 간단한 계산을 위해 선형 회귀식 H(x)의 파라미터를 W만 남긴다.

경사 하강법 프로그래밍 - gyeongsa hagangbeob peulogeulaeming

이때 비용 함수는 다음과 같이 표현될 수 있다. 마찬가지로 간단한 미분을 위해 1/2을 한다. 1/m과 1/2m은 이 식에 큰 영향을 끼치지 않는다.

경사 하강법 프로그래밍 - gyeongsa hagangbeob peulogeulaeming

이렇게 정리한 비용 함수 cost(W)를 W에 대해서 편미분 하면 다음과 같은 식을 얻을 수 있다.

경사 하강법 프로그래밍 - gyeongsa hagangbeob peulogeulaeming

위의 경사 하강법 계산식의 ƒ(x)에 비용 함수를 대입하면 경사 하강법의 스텝 W에 대해 다음과 같은 정의를 할 수 있다. 여기서 α는 학습률이며 내려가는 스텝 W의 크기를 결정한다.

경사 하강법 프로그래밍 - gyeongsa hagangbeob peulogeulaeming

이러한 알고리즘을 배치 경사 하강법(Batch Gradient Descent)라고 한다. 이 알고리즘에서 매 스텝에서 훈련 데이터 전체를 사용하기 때문에 큰 훈련 데이터 세트에서 매우 느리다. 때문에 확률적 경사 하강법(Stochastic Gradient Descent)을 사용하기도 한다.

확률적 경사 하강법(Stochastic Gradient Descent)

매우 큰 훈련 데이터 세트에서의 배치 경사 하강법의 단점을 보완하기 위한 방법으로 확률적 경사 하강법이 있다. 이 방법은 매 스텝을 결정할 때마다 전체 훈련 데이터 세트를 이용하는 배치 경사 하강법과 달리 매 스텝에서 단 한 개의 데이터만 무작위로 선택하고 그에 대한 경사(Gradient)를 계산한다

다만 확률적(무작위)이기 때문에 배치 경사 하강법보다 불안정하다는 특성이 있다. 이 특성은 알고리즘이 지역 최솟값을 무시할 수 있도록 도와주지만 시간이 지나도 최솟값에 매우 근접할 뿐 최솟값을 찾기는 어렵다. 즉 배치 경사 하강법보다 전역 최솟값을 찾을 가능성이 높지만 전역 최솟값에 이르기 어렵다는 뜻이다.

이를 해결하기 위한 방법 중 하나는 학습률을 점진적으로 감소시키는 것이다. 이렇게 하면 알고리즘이 전역 최솟값에 도달하게 한다. 이렇게 매 스텝에서 학습률을 결정하는 함수를 학습 스케줄(learning schedule)이라고 한다.

미니 배치 경사 하강법(Mini-Batch Gradient Descent)

미니 배치 경사 하강법은 확률적 경사 하강법과 유사하다. 다만, 하나의 샘플이 아닌 미니 배치라 부르는 임의의 작은 샘플 세트에 대해서 경사를 계산한다는 점이 다르다. 

미니 배치 경사 하강법의 경우 확률적 경사 하강법에 비해 전역 최솟값에 더 빨리 가까이 도달하게 된다. 미니 배치 경사 하강법 역시 확률적 경사 하강법과 마찬가지로 전역 최솟값에서 멈추지 않고 그 주변을 반복적으로 맴돌 가능성이 있다. 이때 적절한 학습 스케줄을 통해 최솟값에 도달할 수 있다.

경사 하강법 프로그래밍 - gyeongsa hagangbeob peulogeulaeming

미니 배치 경사 하강법에서 스텝의 변동

참고

오렐리앙 게론, "핸즈온 머신러닝", 한빛미디어, 2017년 3월

필드 케이디, "처음 배우는 데이터 과학", 한빛미디어, 2018년 2월

니킬 부두마, "딥러닝의 정석", 한빛미디어, 2018년 3월

Probst, Philipp, Anne-Laure Boulesteix, and Bernd Bischl. "Tunability: Importance of Hyperparameters of Machine Learning Algorithms." Journal of Machine Learning Research 20.53 (2019): 1-32.

Edwith, 머신러닝과 딥러닝 BASIC 중 'Linear Regression의 cost 최소화 알고리즘의 원리', https://youtu.be/TxIVr-nk1so

위키백과, 경사하강법, https://ko.wikipedia.org/wiki/%EA%B2%BD%EC%82%AC_%ED%95%98%EA%B0%95%EB%B2%95

위키백과, 이차 초곡면, https://ko.wikipedia.org/wiki/%EC%9D%B4%EC%B0%A8_%EC%B4%88%EA%B3%A1%EB%A9%B4

Wikipedia, Gradient Descent, https://en.wikipedia.org/wiki/Gradient_descent

Wikipedia, Stochastic Gradient Descent, https://en.wikipedia.org/wiki/Stochastic_gradient_descent