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

만약 우리가 모든 데이터 세트를 가지고 모델을 학습 시킨다면 예측의 정확성은 높일 수 있으나, 매우 오랜 시간이 걸릴 것 입니다. 확률적 경사하강법은 랜덤으로 단 한 개의 데이터를 추출하여(배치 크기가 1) 기울기를 얻어 냅니다. 이러한 과정을 반복해서 학습하여 최적점을 찾아내는 것이 확률적 경사하강법입니다.


Cf. 확률적(Stochastic): 기울기를 구하는데 필요한 한 개의 데이터가 무작위로 선택 됨


경사하강법과 확률적 경사하강법의 비교

 

경사하강법 

확률적 경사하강법 

1회의 학습에 사용되는 데이터 

  모든 데이터 사용

  랜덤으로 추출된 1개의 데이터 사용(중복 선택 가능)

 반복에 따른 정확도

  학습이 반복 될 수록 최적해에 근접 

  학습이 반복 될 수록 최적해에 근접 

노이즈

  거의 없음 

  비교적 노이즈가 심함 

해를 찾는 과정의 이미지 비교

 

 



=> 한 번 학습할 때 마다 모든 데이터를 계산하여 최적의 한 스텝을 나아가는 경사하강법과 달리, 확률적 경사하강법은 랜덤하게 추출한 하나의 데이터만 계산하여 빠르게 다음 스텝으로 넘거 갑니다. 그 결과 더 빠르게 최적점을 찾을 수 있게 되었지만 그 정확도는 낮아집니다.


배치(Batch)란?

확률적 경사하강법을 설명할 때 배치(Batch)의 크기가 1이다라는 말을 하였습니다. 배치란, 단일 반복에서 기울기를 계산하는 데 사용하는 예의 총 개수를 의미합니다. 


예를 들어, 배치의 크기가 1인 경우에는 기울기를 구하는데 사용되는 데이터가 1개이고 배치의 크기가 10인 경우는 기울기를 구하는데 사용되는 데이터가 10개라는 것입니다.


미니 배치 확률적 경사하강법(Mini-batch SGD: 확률적 경사하강법의 한계를 보완하다

확률적 경사하강법은 단일 반복에서 기울기를 구할 때 사용되는 데이터가 1개여서 노이즈가 너무 심하다는 한계가 있습니다.

이를 보완하는 것이 바로 미니 배치 확률적 경사하강법(Mini-batch SGD)입니다. 미니 배치 확률적 경사하강법은 전체 배치 반복과 SGD 간의 절출안으로써 배치의 크기가 10 ~ 1000 사이로 설정합니다.
미니 배치 확률적 경사하강법은 SGD의 노이즈를 줄이면서도 전체 배치보다는 더 빠르게 최적점을 구할 수 있습니다.



경사하강법(Gradient Descent)

앞의 포스트에서 매개변수를 업데이트를 하는 과정에서 손실을 줄이기 위해 가중치와 편향 값을 수정한다고 하였습니다. 하지만 그냥 아무 값이나 넣는다면 최적화된 값을 찾는데 매우 오랜 시간이 걸릴 것입니다.

경사하강법이란, 손실이 최소가 되는 최적의 가중치를 찾는 방법입니다. 먼저 함수의 기울기(경사)를 구하여 기울기가 낮은 쪽으로 계속 이동시켜서 극값에 이를 때 까지 반봅하는 작업을 반복하면 최적의 가중치를 을 수 있습니다.


경사하강법: 함수의 기울기(경사)를 구하여 기울기의 절댓값이 낮은 쪽으로 이동시켜 극값(최적값)을 찾는 방법


여기서 쓰이는 함수란, 손실이 최소가 되는 최적의 가중치를 구하기 위한 모든 w값의 손실을 나타내는 함수입니다. 이를 그래프로 그리면 아래의 그림과 같은 모양이 그려집니다.

가중치의 크기에 따른 손실 그래프를 그려보면 위의 그림과 같이 아래로 볼록한 모양이 됩니다. 왜 아래로 볼록한 모양이 나오는 것일까요?

손실이 최소가 되는 가중치의 최적점(점 A)이 있다고 가정하겠습니다.  이 점은 이미 손실이 최소인 점 A는 그보다 더 작은 가중치와 더 큰 가중치에서는 더 높은 손실을 나타낼 것입니다. 그리고 이 최적점에서 멀어질 수록 그 손실은 더 커지게 되어 위와 같은 아래로 볼록한 모양의 손실-가중치 그래프가 그려지게 됩니다.



경사하강법으로 최적의 가중치를 찾는 과정

1. 가중치(w)의 시작점 정하기

시작점을 정하는 것은 별로 중요하지 않습니다. w를 0으로 설정해도 좋고, 임의의 값을 설정해도 괜찮습니다. 이번 예에서는 0보다 조금 더 큰 값으로 시작점을 설정하겠습니다.


2. 시작점의 기울기를 구해 다음 점의 이동 방향 결정

시작점의 기울기를 편미분을 하여 구해줍니다. 그 다음 기울기의 크기의 반대 방향으로 점을 이동시켜줍니다.

우리가 설정한 시작점의 기울기는 음수(-)이니 점을 양수(+) 방향으로 이동시켜줍니다.



3. 기울기의 크기의 일부를 시작점에 더한 만큼 다음 점으로 이동

기울기의 크기의 일부를 시작점에 더해 다음 점으로 이동을 시켜줍니다. 이렇게 더해진 값을 보폭(Step)이라 합니다. 이 보폭을 어떻게 결정하는 지는 다음 포스트(06_학습률)에서 다루도록 하겠습니다.

+ Recent posts