경사하강법의 세 종류(BGD, SGD, MGD)

인공지능/Machine & Deep Learning

경사하강법의 세 종류(BGD, SGD, MGD)

해리누나 2023. 5. 17. 05:04
반응형

 


경사하강법(Gradient Descent Algorithm)

경사 하강법은 최적화 알고리즘 중 하나로, 손실 함수(Loss Function)의 값을 최소화하는 파라미터[가중치(weight)와 편향(bias)]를 구하기 위해 손실함수에 대한 각 매개변수의 기울기(Gradient)를 이용하는 방법이다.

이 때 기울기가 0인 지점인 손실함수의 값이 최저인 곳이므로 그 지점에 도달하기위해 매개변수는 기울기의 반대방향으로 움직여야 한다. 그래서 경사하강법에서 미분값의 -만큼 빼주는 값으로 가중치를 업데이트하는 것이다.

위에선 예시로 가중치에 대해서만 얘기했으나 다른 매개변수인 편향(Bias)에 대해서도 동일하게 적용된다.

 

결국 최적해에 도달할때까지 매개변수 업데이트를 반복(Iteration)하는 것인데 하나의 반복에서의 변화식은 같다.

Gradient Descent Algorithm
$w=w−α* \frac{d}{dw}*J(w,b) $
$b=b−α* \frac{d}{db}*J(w,b) $        $α$ : learning rate

이때 경사하강법은 하나의 반복 안에서 다룰 데이터 세트의 크기에 따라 세 종류로 나뉜다.

 

 

*각 매개변수에 대하여 편미분이 어떻게 친행되는지

 

 

 

1. 배치 경사 하강법 (Batch Gradient Descent Method, BGD)

배치 경사 하강법: 출처 https://medium.com/@kumaranupam2020/difference-between-batch-gradient-descent-bgd-minibatch-gradient-descent-mgd-and-stochastic-657efcb4194b

 

배치 경사 하강법은 보통 경사하강법으로 얘기하며 각 반복마다 모든 훈련 데이터 세트를 처리하는 방법이다.  즉 1 Iteration 안에서 전체 데이터 샘플의 기울기를 계산해한다. 기울기 계산 후 모든 매개변수에 대한 업데이트를 진행한 후 다시 최적의 해에 도달할 때까지 모든 데이터를 가지고 같은 계산을 반복한다. 따라서 수렴하는데 오랜 시간이 걸린다.

 

 

2. 확률적 경사 하강법 (Stochastic Gradient Descent, SGD)

 

확률적 경사 하강법, m: 전체 훈련 데이터 세트 크기

 

확률적 경사 하강법은 첫 단계로 일단 전체 훈련 데이터 세트를 무작위화 한 다음에, 하나의 Iteration 안에서 하나의 테이터에 대해서만 손실함수에 대한 기울기를 계산하여 업데이트를 진행하는 방법이다. 첫 매개변수를 업데이트 하면 그 다음 매개변수를, 또 그 다음인 세 번째부터 마지막 m 번째 데이터까지 기울기 계산 후 업데이트해준다. 물론 마찬가지로 최적의 매개변수 값에 도달할때까지 해당 계산을 반복한다.

 

 

3. 미니배치 경사 하강법 (Mini Batch Gradient Descen, MGD)

미니 배치 경사 하강법

 

배치 경사 하강법과 확률적 경사 하강법보다 더 빠르게 작동하는 경사 하강법으로, 전체 훈련 데이터 세트를 여러 작은 그룹(Mini Batch)들로 나눠서 경사 하강법을 진행한다. 하나의 Iteration 안에서 하나의 미니 배치에 속해 있는 데이터들에 대하여 기울기를 구한 후 , 그것의 평균 기울기를 통해 매개변수를 업데이트하는 방식이다.

[위의 식에서 b = 하나의 소그룹(Mini Batch)에 속하는 데이터 수]

 

 

이런 느낌이라고 보면 된다. 하나의 Iteration 에서 BDG는 전체 데이터 세트를, SGD는 임의의 하나의 데이터를, MGD는 설정한 미니 배치 사이즈만큼을 사용한다.

 

따라서 아래처럼 얘기할 수 있다.

전체 데이터 세트 : m 개 일때,
Batch Gradient Descent ➱ Mini-batch size = m
Stochastic Gradient Descent ➱ Mini-batch size = 1
Mini-batch Gradient Descent ➱ Mini-batch size = 1 < n < m

 

 

특징

 

1. 배치 경사하강법(Batch Gradient Descent)

장점

  • 하나의 데이터 값이 아닌 모든 훈련 데이터 세트의 평균을 계산하여 매개변수를 업데이트하기 때문에 손실 함수의 전역 최솟값을 향한 노이즈가 별로 없다.
  • 벡터화의 이점을 누릴 수 있다.

 

단점

  • Local optimal에 빠질 수 있으나 잡음이 별로 없어 locap optimal 에서 벗어나기가 힘들다.
  • 한번의 학습에 모든 데이터 세트를 사용하니 학습이 오래 걸린다.

 

 

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

장점

  • 한 번의 학습에 하나의 데이터만 처리되므로 계산 속도가 빠르다.
  • 데이터 세트가 더 크다면, 그만큼 매개변수를 더 자주 업데이트하게 되므로 더 빠르게 수렴할 수 있다.
  • 빈번한 업데이트로 생긴 잡음(노이즈) 덕에 local optimal 에서 벗어날 수 있다.

 

단점

  • 빈번한 업데이트로 인해 비교적 노이즈가 심하다.
  • 노이즈가 많아 손실함수의 최소값으로 수렴하는데 더 오래 걸릴 수 있다.
  • 대부분의 경우 전역 최솟값으로 가게 되지만 간혹 잘못된 방향으로 가기도 한다. (Optimal을 찾지 못할 가능성도 있다는 것.)
  • 한 번에 하나의 데이터만 다루니 벡터화의 이점을 잃는다.

 

 

3. 미니배치 경사하강법(Mini-batch Gradient Descent)

장점

  • 빠른 학습 제공
  • Local optimal에 갇힌 경우 노이즈를 통해 벗어날 수 있다.
  • 벡터화의 이점을 누릴 수 있다.

 

크기 설정

  • 훈련 데이터 세트가 작다면 (m < 2000) 그냥 배치 경사하강법을 사용하자.
  • 일반적으로 Batch size는 2의 n승[64,128,256,512]으로 설정한다. (컴퓨터는 2진수로 계산되니까)

 

 


 

참고

https://medium.com/@kumaranupam2020/difference-between-batch-gradient-descent-bgd-minibatch-gradient-descent-mgd-and-stochastic-657efcb4194b

https://velog.io/@minjung-s/Optimization-Algorithm

https://www.youtube.com/@Deeplearningai

 

728x90
반응형