Problem Solving with Algorithms

728x90
반응형

딥러닝과 머신러닝에서 "경사하강법(Gradient Descent)"은 모델을 학습시키는 데 필수적인 최적화 알고리즘입니다.

 

이번 포스팅에서는 경사하강법의 세 가지 대표적인 방식, 즉 배치 경사하강법(Batch Gradient Descent), 확률적 경사하강법(Stochastic Gradient Descent, SGD), 미니배치 경사하강법(Mini-batch Gradient Descent)에 대해 초보자 관점에서 자세히 설명해보겠습니다.

 

로컬 미니마 문제

 

로컬미니마 문제를 해결하기 위한 방법들

 


경사하강법(Gradient Descent)이란?

딥러닝 모델을 학습시킬 때 "손실 함수(loss function)"를 최소화하는 방향으로 파라미터(가중치)를 조정합니다. 이때 경사(gradient)는 함수가 증가하거나 감소하는 방향을 나타내며, 경사하강법은 손실이 작아지는 방향(음의 경사)으로 가중치를 반복적으로 업데이트하는 알고리즘입니다.

간단한 예로, 모델이 예측한 값과 실제 값의 차이를 모두 더한 것이 손실 함수이고, 그 손실이 최소가 되도록 가중치를 조금씩 조합해 나가는 과정이 바로 경사하강법입니다.

 

 

 


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

배치 경사하강법은 전체 데이터셋을 사용하여 한번에 손실 함수의 값을 계산하고, 전체 데이터를 고려해서 한 번에 가중치를 업데이트합니다.

  • 장점: 매우 안정적이며, 손실이 부드럽게 감소함
  • 단점: 데이터가 많아질수록 한 번 업데이트에 시간이 많이 걸림(비효율적임)

수식
전체 데이터 $N$에 대해 평균 손실 함수의 경사:

$$
\frac{\partial}{\partial w} \frac{1}{N} \sum_{i=1}^{N} L(y_i, f(x_i; w))
$$

 

그런 회귀모드레 regression model

 

 

 

 

학습률을 0.01로 계산한다면

여기까지만 보면 여느 경사하강법과 다를 바가 없어 보이지만은,

오늘 주목할 부분은 알고리즘이 아니라 어떻게 데이터를 계산에 사용하는가 입니다.

 

 

상당히 안정적으로 가중치를 계산할 수 있다는 장점이 있지만, 데이터가 많아지면..?

 

 

 

 

 

 


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

SGD는 데이터 한 개(혹은 샘플 한 개)만 사용해서 손실 값을 계산하고, 그때마다 가중치를 바로바로 업데이트합니다. 즉, 데이터 하나를 보고 바로 손실 함수의 경사를 구해 파라미터를 수정합니다.

  • 장점: 업데이트가 매우 빠름, 처리속도가 빨라 대용량 데이터에도 효율적임
  • 단점: 한 번 업데이트할 때마다 결과가 불안정하게 튈 수 있음(노이즈 발생, 손실 함수가 들쭉날쭉)

수식
데이터 $i$번째 샘플에서 즉시 업데이트:

$$
w \leftarrow w - \eta \frac{\partial L(y_i, f(x_i; w))}{\partial w}
$$

여기서 $w$는 가중치, $\eta$는 학습률(learning rate)입니다.

 

부연설명: 학습률(learning rate)이란?
학습률은 한 번의 업데이트에서 얼마나 크게 가중치를 조정할 것인지를 결정하는 값입니다. 너무 크면 손실함수의 최소값 근처를 계속 튀게 되고, 너무 작으면 학습 속도가 느려집니다.

 

확률적 경사하강법

 

여기서부터(왜 2부터인가?)는 랜덤으로 하나의 데이터만을 이용해서 값을 구한다.


그리고 새로운 w인 0.272를 사용하여 계산을 이어간다.

 

효율적인 방법이긴 하지만, 가중치 업데이트 하는데 데이터 하나하나에 영향을 받기 때문에 로컬미니마에 빠질 가능성이 높다.

 

솔루션: 미니배치 경사하강법 (Mini-batch Gradient Descent)

 

 

 

 


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

미니배치 경사하강법은 데이터 일부(미니배치)를 모아서 손실을 한 번 계산하고, 이 그룹의 평균 손실을 기준으로 가중치를 업데이트합니다. 예를 들어, 데이터 100개 중에서 10개씩 뽑아서(미니배치=10) 계산 후, 다음 10개 또 계산하는 식입니다.

  • 장점: 안정성(배치의 장점), 속도(확률적의 장점) 둘 다 챙길 수 있음
  • 단점: 배치 크기를 잘 선택해야 효율적임

수식
미니배치 $B$에 대해 평균 손실 함수의 경사:

$$
w \leftarrow w - \eta \frac{1}{|B|} \sum_{i \in B} \frac{\partial L(y_i, f(x_i; w))}{\partial w}
$$

 

 

부연설명: 미니배치란?
미니배치(Mini-batch)는 전체 데이터 중 일부(작은 그룹)를 의미합니다. 보통 16, 32, 64처럼 2의 거듭제곱으로 사이즈를 지정합니다.

 

 

예를 들면, 5개의 데이터를 선정해서 에러를 계산한 다음, 5개의 평균 에러값을 사용하여 기울기를 업데이트 한다.

 

또 랜덤하게 5개 선택하고 다시 이 5개의 평균에러값을 사용하여 가중치를 업데이트한다.

 

앞에말한 두개의 장점을 조금씩 가지게 된다.

 

방법:

앞에까지는 동일하게 하고,

 

새로운 가중치가 업데이트 되면,

 

 

 

 


경사하강법에서 흔히 발생하는 문제:

  • 로컬 미니마(local minimum) : 손실 함수가 완전히 최소값(global minimum)이 아닌, 일시적으로 작은 값(지역 최소값)에 빠지는 현상이 종종 발생합니다.
  • 이를 피하기 위해, 초기값, 학습률, 데이터 순서 등을 바꿔가며 최적화 기법들을 사용합니다.

실제 코드 예시

  • 배치 경사하강법: 모든 데이터를 사용해서 계산
  • SGD: 데이터 한 개씩 선택해서 계속 업데이트
  • 미니배치: 랜덤하게 일정 개수(예: 32개) 골라서 비용 계산 후 업데이트

초보자라면 미니배치 경사하강법이 손실 감소 안정성과 효율 모두에서 가장 널리 쓰인다는 점을 기억하세요!


정리

경사하강법은 머신러닝과 딥러닝에서 모델을 학습시키는 핵심 알고리즘입니다.
모든 데이터를 쓰는 배치 방식, 한 개를 쓰는 확률적 방식, 일부만 쓰는 미니배치 방식이 있으며, 각각 장단점이 있습니다. 초보자라면 미니배치 경사하강법부터 학습하며, 코드 실습과 수식, 배경 개념까지 함께 익히면 더욱 쉽고 빠르게 실력을 쌓으실 수 있습니다.
딥러닝의 첫 관문, 경사하강법을 꼭 마스터해 보세요!
^1

https://youtu.be/mccscAH2kkk?si=-vdrnmveHneDiAhI

728x90
반응형
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
250x250