지난 포스트에서 선형 회귀의 개념과 코드 구현을 알아봤습니다.
이번엔 핵심 알고리즘인 경사 하강법을 자세히 파헤쳐 보겠습니다.
다시 짚고 넘어가기
가설 함수 (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)
컴퓨터가 이 최저점을 스스로 찾게 하려면 경사 하강법이 필요합니다.
경사 하강법이란, 어느 위치의 값에서 더 작은 쪽으로 점점 이동하는 알고리즘입니다.
동작 방식은 다음과 같습니다:
- 현재 지점의 기울기(gradient) 를 구한다
- 기울기에 학습률(α) 을 곱한 값을 W에서 뺀다
- 기울기가 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로 편미분한 값 |
| 로컬 미니멈 | 전체 최솟값이 아닌 지역 최솟값에 빠지는 문제 |
다음 포스트에서는 이 경사 하강법을 실제 코드로 구현해보겠습니다! 🚀
'AI > ML' 카테고리의 다른 글
| Multi-variable Linear Regression 코드로 구현해보기 (TensorFlow) (0) | 2026.03.07 |
|---|---|
| Multi-variable Linear Regression : 여러 변수로 예측 정확도 높이기 (0) | 2026.03.06 |
| 경사 하강법(Gradient Descent) 코드로 구현해보기 (TensorFlow) (0) | 2026.03.05 |
| 선형 회귀 코드로 구현해보기 (TensorFlow) (0) | 2026.03.03 |
| 머신러닝 : 선형 회귀(Linear Regression) (0) | 2026.03.02 |