Adventure Time - Finn 3
본문 바로가기
AI/ML

경사 하강법(Gradient Descent) 으로 최적의 W 찾기

by hyun9_9 2026. 3. 4.

지난 포스트에서 선형 회귀의 개념과 코드 구현을 알아봤습니다.
이번엔 핵심 알고리즘인 경사 하강법을 자세히 파헤쳐 보겠습니다.


다시 짚고 넘어가기

가설 함수 (Hypothesis)

H(x) = Wx + b

비용 함수 (Cost Function)

cost(W, b) = 1/m * ∑(H(x) - y)²

우리의 가설 함수와 실제 데이터의 차이를 제곱한 값을 모두 더해서, 데이터 전체 개수 m으로 나눈 평균값입니다.

목표 : cost가 최소화되는 W와 b를 찾는 것!


계산을 쉽게 : Simplified Hypothesis

이해를 돕기 위해 b를 제거하고 수식을 간략하게 만들어 보겠습니다.

가설

H(x) = Wx

비용 함수

cost(W) = 1/m * ∑(Wx - y)²

W 값에 따른 Cost 변화

아래와 같은 데이터가 있을 때:

x y

1 1
2 2
3 3

W 값을 바꿔가며 cost를 직접 계산해보면:

  • W = 0, cost = 4.67
    • 1/3 * ((0*1-1)² + (0*2-2)² + (0*3-3)²)
  • W = 1, cost = 0
    • 1/3 * ((1*1-1)² + (1*2-2)² + (1*3-3)²)
  • W = 2, cost = 4.67
    • 1/3 * ((2*1-1)² + (2*2-2)² + (2*3-3)²)
  • W = 3, cost = 18.67
    • 1/3 * ((3*1-1)² + (3*2-2)² + (3*3-3)²)

이 결과를 그래프로 그리면 바구니(U자) 모양이 됩니다.
그리고 cost가 가장 작아지는 지점은 W = 1 인 점입니다.


경사 하강법 (Gradient Descent Algorithm)

컴퓨터가 이 최저점을 스스로 찾게 하려면 경사 하강법이 필요합니다.

경사 하강법이란, 어느 위치의 값에서 더 작은 쪽으로 점점 이동하는 알고리즘입니다.

동작 방식은 다음과 같습니다:

  1. 현재 지점의 기울기(gradient) 를 구한다
  2. 기울기에 학습률(α) 을 곱한 값을 W에서 뺀다
  3. 기울기가 0인 지점 (cost 최솟값) 에 도달할 때까지 반복한다

학습률 (Learning Rate)

α (알파) = 학습률

기울기 값을 W에 얼마만큼 반영할지 결정하는 작은 상수입니다.

  • 학습률이 크면 → 업데이트되는 값이 크고 빠르게 이동
  • 학습률이 작으면 → 조금씩 천천히 이동

보통 굉장히 작은 값을 사용합니다. (예: 0.001, 0.0001)


수식으로 보는 경사 하강법

경사 하강법을 구현하기 위해 cost 함수를 살짝 변형합니다.
(2m으로 나눠도 cost의 특성에 큰 영향을 미치지 않습니다)

cost(W) = 1/2m * ∑(Wx - y)²

이를 W에 대해 편미분하면:

W := W - α * (∂/∂W) * 1/2m * ∑(Wx - y)²
W := W - α * 1/2m * ∑ 2(Wx - y) * x

# 정리하면 (그레디언트)
W := W - α * 1/m * ∑(Wx - y) * x

W의 값이 얼마나 빠르게 변할지는 학습률(α) 에 따라 결정됩니다.


주의점 : 로컬 미니멈 (Local Minimum)

경사 하강법을 사용할 때 한 가지 주의해야 할 점이 있습니다.

그래프가 복잡한 경우 전체 최솟값(Global Minimum) 이 아닌
지역 최솟값(Local Minimum) 에 빠질 수 있습니다.

함수가 볼록(Convex) 형태 일 때는 로컬 미니멈과 글로벌 미니멈이 일치하기 때문에 경사 하강법을 안전하게 사용할 수 있습니다.

선형 회귀의 cost 함수는 볼록(U자) 형태이기 때문에 걱정 없이 사용 가능합니다. ✅


정리

개념 설명

경사 하강법 기울기를 따라 cost가 최소인 지점을 찾아가는 알고리즘
학습률 (α) 한 번에 얼마나 이동할지 결정하는 상수
그레디언트 cost 함수를 W로 편미분한 값
로컬 미니멈 전체 최솟값이 아닌 지역 최솟값에 빠지는 문제

다음 포스트에서는 이 경사 하강법을 실제 코드로 구현해보겠습니다! 🚀