Math Study

[basic] Gradient Descent와 Optimizer

jinahhub 2026. 5. 21. 14:42

[Contents]

1. Gradient Descent (경사하강법)

  1.1. Gradient 와 Gradient Descent
  1.2. Learning Rate

2. Optimizer 소개

  2.1. SGD
  2.2. Mini-Batch SGD
  2.3. Adam
  2.4. Momemtum


 

1. Gradient Descent (경사하강법)

 

이전 포스팅에서 공부했던 입력과 출력간의 관계를 선형으로 놓고 알아내는 Linear Regrssion에서 Loss를 최소화한다는 것은 y=ax+b 라는 관계 안에서 우리는 a(Weight),b(Bias)를 알아내서 예측 모델을 만드는 일이다

 

경사 하강법은 손실함수(Loss Function) 그래프에서 손실을 최소화 하는 최적의 Weight(W) 가중치를 자동으로 찾아내는 알고리즘이다.

손실(Loss = 예측값-실제값)을 최소화 한다는 것은, 임의의 값인 W를 변경해가면서 예측값과 실제값을 가깝게 만든다는 의미다.

 

즉, 임의의 값 W에서 해당 지점의 기울기(미분)를 계산하고, 기울기가 0에 가까워지는 방향(Gradient의 반대)으로 W값을 점진적으로 업데이트하여 Loss 최저점을 찾아가는 것이다.

 

어떻게 찾아갈까? (#・∀・)?

 

 

1.1. Gradient와 Gradient Descent 

fig1. Gradient Descent (이해를 위해 bias 없는셈 쳤음) (출처 : Sungkim Youtube)

선형적인 1개의 data라면 몇번 손으로 노가다해서 하겠지만, 우리의 모델학습은 그보다 훨씬 많은 양의 데이터를 다루므로 효과적인 방법이 필요했다. 그 방식에 대해서 공부해보자.

 

최적의 W(Weight : a,b)을 찾아간다는 것은 간단히 말해 위 그래프에서 보면 임의 W에서
기울기가 + 라면, W가 작아지는 방향(왼쪽)으로 기울기가 - 라면, W가 커지는 방향(오른쪽)으로 간다는 것을 직관적으로 알 수 있다.

 

다시 말해, 초기 W의 기울기(W에 따른 Loss의 변화)가 작아지는 방향으로 학습해야 하는데, 이 방향을 어떻게 연산할까? 에서 출발한게 Gradient의 개념이다.

 

우리에게 필요한 건, 초기 W에서 다음 W까지 급격하게 변하는 방향으로 가야하는 것이다.

여기서 Gradient가 바로 그 가장 가파른 방향을 뜻한다. 그리고 Gradient는 x,y를 각 x와 y로 각 편미분을 하고 벡터로 묶은 것이다.

(이것을 수학적으로 한 번 증명해 볼 수 있는데, 머리 긁적이면서 해 본거라서 따로 정리해야겠다)

결론적으로 Gradient의 반대인, Gradient 'Descent'를 활용하는 것이고 이를 알기 위해선 Gradient 의 개념부터 알아야 했다.

fig.2 혁펜하임과 함께 공부해본 gradient

 

여기서 또 중요하게 봐야 하는 점은

얼마나 성큼 갈건데?  (#・∀・)?

 

1.2. Learning rate (a)

위에 나의 발로 그린 그림을 보면,

현재 위치와 옮길 위치가 gradient descent에 의해서 옮기면 서로 같은 자리를 왔다갔다 하게 된다는걸 알 수 있다.

 

그래서 Learning Rate (lr) 가 필요하다. 똑같은 f(x,y) = x2+y2 에 lr=0.1을 적용 시켜보면 이렇게 바뀐다.

(OpenCV 이미지처리에서는 lr=0.001이 국룰이라 했다)

Fig3. 혁펜하임과 함께 공부해본 lr

 

2. Optimizer 소개

 

fig.3 Optimizer 종류

 

Gradient Descent는 모든 data를 고려해서 최적의 방향을 선택하는 방식이므로, 너무 신중하다! 느려터졌다!

또한 출발 지점과 가장 가까운 Local Minimum에서 멈출 수 밖에 없기에 Global Minimum에서 Best.pth를 추론한다는게 문제점이다. 그렇기에 등장한 Optimizer가 SGD이다.

 

하지만 SGD가 무조건 정답은 아니므로 지금부터 다양한 Optimizer들에 대해서 공부해보자.

 

2.1. SGD (Stochastic Gradient Descent)

SGD는 GD의 2가지 단점을 해결한다. 느렸다는것과, Local Minimum에 빠진걸 구출할 수도 있다는 것.

 

기존에는 모든 Loss를 고려했다면, SGD는 말그대로 '랜덤하게' 하나를 뽑아서 Gradient를 계산하는 것이다.

위의 편미분 식을 보면, 모든 L(loss)에 x와 y로 편미분 하였는데 SGD는 모든 L이 아닌 랜덤으로 고른 하나의 L인것이다.

 

합리적이야! (⌒0⌒)/~~

 

그렇다면, 뽑은 건 버린가?

그렇다. 비복원추출이기에 모든 데이터를 한 번에 고려하진 않아서 덜 신중하지만 훨씬 빨라진다. 즉, 5개였다면 1/5 -> 1/4 -> 1/3 ... 의 확률로 뽑는 것 그렇다고 이걸 한번만 하진 않겠다. 뽑고 Gradient 구하고 minimum 찾아가고, 다시 처음 주머니에서 또 뽑는다.

(이 반복을 1에포 (epoch) 이라고 한다.)

 

그리고 랜덤추출된 Loss로부터 랜덤적인 Gradient desenct하므로 요리조리 산만하게 Minimum을 찾아가기에 Local Minimum으로부터 탈출할 수 있다.

 

fig4. Local Minimum과 Global Minimum 그리고 GD/SGD

 

2.2. Mini-Batch SGD

근데 data가 10만개인데 1개씩만 본다? 이것 또한 불합리하다. 빠르지만 불안정하다.

그래서 등장한 것은 Mini-Batch SGD 이다.

 

2.3. Momentum

 

2.4. Adam

 

 

*참고url : https://www.youtube.com/watch?v=nma8R7sMuv0

*참고url : https://youtu.be/b4Vyma9wPHo?si=TIHXFKcL_Qui19c5,https://www.youtube.com/watch?v=YjPV_sYKAbg&list=PL_iJu012NOxdw1jc3KEo8Mq5oD5SXKhLu&index=8