본문 바로가기
프로그래밍 ( Programming )/머신러닝 ( ML )

경사하강법 (Gradient descent)

by Jayce_choi 2021. 1. 23.
반응형

경사 하강법 (Gradient descent)

Gradient Descent 방법은 1차 미분계수를 이용하여 함수의 최소 값을 찾아가는 iterative 방법입니다. 

Gradient Descent는 함숫값이 낮아지는 방향으로 진행이 되는데 최종적으로는 최소 함숫값을 갖도록 하는 독립 변수를 찾는 방법입니다. 때문에 이러한 진행방법 때문에 앞이 안개로 덮인 산에서 가장 낮은 위치를 찾기 위해서 산을 더듬으며 내려오는 것과 비슷하다고 해서 Steepest Descent라고도 불립니다. 

Gradient Descent의 주목적은 함수의 최솟값을 찾는 것입니다. 함수는 머신러닝에서 예를 들면 Sum of Squared Residual이 될 수 있습니다. 때문에 경사 하강법을 통해서 Residual의 합이 최소가 되는 지점을 찾게 됩니다. 그러나 한 번에 미분계수가 0이 되는 지점을 찾으면 되지 않느냐고 물을 수 있겠지만 우리가 해결하는 다양한 문제들은 형태가 Dynamic 하고 닫힌 형태 거나 Nonlinear 한 시스템일 수 있기에 interative 하게 해를 찾는 방법입니다. 

예를 들어보겠습니다. 

 특정 그룹에 사람들의 몸무게와 키에 대한 데이터를 x축은 무게, y축은 키를 나타내게 하여 그래프로 표현하였습니다. 여기서 해당 그룹이 어떠한 양상을 지닐 것인가(새로운 무게 Data가 들어왔을 때 키가 얼마가 될 것인가)에 대해서 예측을 하고 싶을 때, 즉 Regression을 위해서 우리는 양상을 대표하는 최적의 그래프를 구성하는 파라미터를 찾아야 합니다. 마치 오른쪽 그림과 같이 어떤 x라는 몸무게 데이터가 들어왔을 때 어떤 키를 가질 것인가를 예측하는 것입니다. 

RSS ( Residual sum of squares )는 잔차들의 합의 제곱값입니다. 어떤 기준이 되는 Linear 함수에 대해서 측정된 값과 예측된 값의 차이를 합산한 결과입니다. 그리고 제곱을 하는 이유는 차이를 더욱더 확대시켜서 확실하게 구분을 할 수 있도록 하기 위해서 제곱을 합니다. 

하단의 그림에서 현재 랜덤으로 생성된 1차원 함수가 있고 3개의 데이터가 있습니다. 동일한 몸무게 위치에서 함수와 데이터의 차이가 현재 차이가 매우 큰 데이터도 있으며 차이가 작은 데이터 1개가 있습니다. 해당 차이는 제곱을 통해서 더욱더 커지기 때문에 해당 함수는 최적화되어있지 않다고 판단할 수 있습니다. 

만약 위의 그래프가 하단의 그래프와 같이 회전을 한다면 어떻게 될까요. 회전을 하면서 Residual은 점점 인간이 생각하는 답으로 각도가 맞춰진다면 그때 오차의 합이 매우 작은 상태가 될 것입니다. 이때를 y=wx+b에서 w와 b를 제대로 찾은 것이 됩니다. 

그러나 회전을 더하게 된다면 다시 오차가 더 증가하게 되므로 Residual sum of squares값이 증가하고 실제 그래프로 표현하게 되면 convex한 form 즉 2차 함수 형태로 나오게 됩니다. 하단의 그림처럼 각도에 따라서 다시 증가하게 됩니다. 

이때 기울기가 0인 지점, 즉 최적화된 파라미터 값을 찾기 위해서 경사하강법을 사용하게 됩니다. 

그러나 경사하강법을 적용하기 위해서는 규칙이 필요합니다. 위치는 랜덤으로 시작되어서 중앙으로 가기 위해 먼 곳에서 시작했을 때는 큰 step size로 가야 하며 그러나 너무 큰 step size를 유지할 때는 수렴이 되지 않고 오히려 중앙에서 벗어나게 됩니다. 또한 너무 작을 경우 학습시간이 매우 오래 걸리는 문제가 발생하기 때문에 적절한 step size 선정이 필요한데 여기서 learning Rate가 적용됩니다.

Learning Rate는 말 그대로 학습률입니다. 보폭(Step Size)을 조절하기 위해서 사용되는데 보통은 0과 1 사이의 값을 가지고 비율을 줄이는 역할을 수행합니다. 때문에 경사 하강법에 의해서 계산된 값에 Learning Rate가 곱해지고 곱해진 값은 이전 값에 더해지거나 뺄셈 작용을 통해서 피드백이 수행되어 점점 중앙으로 수렴하게 됩니다. 

경사하강법에서 알파가 바로 learning Rate

또 하나의 규칙은 언제 멈출것인지에 대해 기준이 필요합니다. 해당 물음에 답하기 위해서는 2가지 개념이 사용됩니다.

1. epoch : number of iterations ( 얼마나 반복할 것인가 ) 
2. loss : cost function

첫 번째는 반복 횟수입니다. 반복을 수행하면서 수렴이 안 되는 것을 대비하기 위해서 미리 실행 횟수를 한정시켜두는 방법입니다. 두 번째는 cost function인데 cost function이 위에서 언급한 RSS와 동일한 개념입니다. 때문에 계산된 loss 즉 오차(RSS)가 다음에 계산된 오차와 얼마나 차이가 있는가에 따라서 멈출지 아니면 계속 진행될지 결정됩니다. 예를 들면 오차 간의 차이 값이 0.0001 안으로 나온다면 그때 도달했다고 판단되어 멈추게 되는 것이지요.

* 여기서 비용 함수 (Loss Function)를 최소화하는 w와 b를 구하기 때문에 경사 하강법은 일종의 최적화 알고리즘 즉 Optimizer라고 부릅니다. 

 

 

Local minima 문제 

Gradient descent를 사용할 때 문제점이 있습니다. 바로 실제 우리가 찾고자 하는 어떤 최소 구간을 위해서 경사 하강법을 사용하였는데 경사 지점에서 기울기가 0이 되는 지점이 2개 이상을 가진 함수에서는 Global 한 minimum값을 찾지 못할 수도 있다는 것입니다. 기존의 기계학습 시스템이 성능이 잘 안 나오는 이유에 대해서도 학습 도중에 Local Minima에 빠졌다고 생각하는 게 일반적이었습니다.  

해결 방법에 대해서 SGD ( 확률적 경사 하강법 ), Momentum ( 모멘텀을 이용하여 경사를 넘는 방법 ), Adagrade ( 러닝 레이트(학습률) 신경망 학습이 되면서 자체적으로 조정이 되는 방법 ), Adam ( Momentum 장점 + Adagrade 장점을 살린 경사 감소법 , 가속도와 learning rate 조절 ) 등 보완하고 또는 더나은 방법들이 현재는 적용되고 있습니다. 

Reference : Gradient Descent, Step-by-Step

엔지니어는 구현을 못하면 못하는 것이다. 참 맘에 드는 말이다. 

반응형

댓글