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

안녕하세요.

오늘은 딥러닝에서 매우 중요한 개념인 경사하강법(Gradient Descent)과 확률적 경사하강법(Stochastic Gradient Descent)에 대해 알아보겠습니다.

경사하강법이란?

경사하강법이란 손실(loss)을 줄여 최대의 성능을 이끌어내는 작업이라고 할 수 있습니다.
즉, 미분 값(기울기)이 가장 최소가 되는 지점을 찾아 알맞은 weight(가중치 매개변수)를 찾는 것입니다.

사진1
  1. 경사하강법의 첫 번째 단계는 w1에 대한 시작점을 선택하는 것입니다.

Linear Regression의 경우 그림과 같이 선형 모양으로 시작점 자체는 별로 중요하지 않습니다.
상수항 결합(Bias Augmentation)을 통해 w1값에 0을 추가하거나 임의의 값을 선택하기 때문입니다.
위의 그림에서는 0보다 조금 큰 시작점을 설정하였습니다.

(단, loss 함수가 위와 같지 않다면 시작점을 찾는 것이 매우 중요합니다.)

  1. 시작점에서 손실(loss) 곡선의 기울기(Gradient)를 계산합니다.

기울기는 각각의 노드의 편미분 값의 벡터로 어느 방향이 더 정확한지, 부정확한지를 찾아냅니다.
위의 그림처럼 단일 가중치에 대한 손실의 기울기는 미분값과 일치합니다.
손실함수 곡선의 다음 지점을 결정하기 위해 경사하강법(Gradient Descent) 알고리즘은 단일 가중의 일부에 시작점을 더해줍니다.
(어느 방향으로 +, - 만큼 이동할지를 결정함)

기울기의 보폭을 통해 손실 곡선의 다음 지점으로 이동합니다. (기울기의 보폭이란 우리가 흔히 쓰는 learning rate 입니다.)

  • 경사하강법(Gradient Descent)은 이러한 작업을 반복적으로 수행함으로써, 최소값에 점점 접근합니다.

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

배치 크기가 x만큼인 경사하강법 입니다.
즉, 확률적 경사하강법은 데이터 세트에서 배치사이즈 만큼 균일하게 선택한 데이터 셋에 의존하여 각 단계의 예측 경사를 찾아내는 과정입니다.

사진2

배치(Batch)란?

경사하강법에서 배치는 단일 반복에서 기울기를 계산하는 데, 사용되는 데이터라고 할 수 있습니다.
(Gradient Descent에서의 배치는 우리가 가지고 있는 데이터셋 전체입니다.)

하지만 대규모 작업에서는 데이터 셋이 수억, 수십억개도 될 수 있으며, 전체 데이터셋을 사용할 경우, 배치 사이즈는 거대할 것이며,
엄청나게 많은 특성을 파악하느라 그만큼 계산량이 많아지며, 이러한 이유로 계산하는 데 매우 오랜 시간이 걸릴 수 있습니다.

따라서 무작위로 샘플링 된 데이터가 포함된 대량의 데이터 셋에는 중복 데이터가 포함되어 있을 수 있습니다.
실제로 배치 크기가 커지면 중복의 가능성도 그만큼 높아지게 됩니다.

“만약에 훨씬 적은 계산으로 적절한 기울기를 얻을 수 있다면 어떨가요??”

데이터 셋에서 데이터를 임의로 선택하면(노이즈는 존재하겠지만) 훨씬 적은 데이터셋으로 중요한 평균값을 추정할 수 있습니다.
확률적 경사하강법(SGD)은 이 아이디어를 확장한 개념으로, 반복 당 데이터 개수만을 사용합니다.

이것이 배치사이즈의 개념이라고 할 수 있습니다.

확률적(Stochastic)이라는 용어는 각 배치를 포함한 하나의 데이터 셋이 무작위로 선택된다는 것을 의미합니다.

<단점>

  1. 반복 횟수가 많으면 개선될 여지는 많이 있으나 노이즈가 매우 심합니다.
  2. SGD의 경우에도 함수의 최저점(미분값이 최소)을 가능성이 높지만 항상 보장되지는 않습니다.

<제안>

  1. 미니 배치(Mini-Batch)는 전체 배치 반복과 SGD의 절충안 방법이라고 할 수 있습니다.
  • 미니 배치는 일반적으로 무작위로 선택한 10개에서 1000개 사이의 데이터 셋으로 구성됩니다.
  • 미니 배치 SGD는 일반 SGD의 노이즈를 줄이면서도 성능 또한 개선되는 등 조금 더 효율적인 모습을 보입니다.
You need to set install_url to use ShareThis. Please set it in _config.yml.
You forgot to set the business or currency_code for Paypal. Please set it in _config.yml.

Comments

You forgot to set the shortname for Disqus. Please set it in _config.yml.