🧠 경사하강법은 마치 사람이 산 아래로 내려가는 것과 같습니다. 가장 가파른 경사(기울기)를 따라 한 걸음씩 내려가다 보면 결국 가장 낮은 지점(오차가 가장 작은 지점)에 도달하게 되는 거죠.
1. 🚶♂️ 한 걸음씩 내려가기 (경사 하강법 예시)
아래 코드는 온도로 판매량을 예측하는 간단한 모델입니다. 처음에는 예측 오차가 크지만, 경사 하강법을 반복적으로 적용하여 오차가 점점 줄어드는 것을 볼 수 있습니다.
Python
# 1. 간단한 데이터 준비 (온도와 판매량)
X = [1, 2, 3, 4, 5] # 입력: 온도
Y = [10, 20, 30, 40, 50] # 정답: 실제 판매량
# 2. 가중치(w)와 편향(b) 초기화
# 첫 시작은 아무렇게나 정합니다.
w = 0.5 # 가중치
b = 0.5 # 편향
# 3. 하이퍼파라미터 설정
learning_rate = 0.01 # 학습률 (보폭)
epochs = 1000 # 반복 횟수
# 4. 경사 하강법 시작! (1000번 반복)
for i in range(epochs):
# a. 예측값 계산
y_pred = [w*x + b for x in X]
# b. 오차(MSE) 계산
mse = sum([(y - y_p)**2 for y, y_p in zip(Y, y_pred)]) / len(Y)
# c. 경사(기울기) 계산 - "어디로 내려가야 할지" 조언을 구함
dw = sum([2*(y_p - y)*x for y, y_p, x in zip(Y, y_pred, X)]) / len(X)
db = sum([2*(y_p - y) for y, y_p in zip(Y, y_pred)]) / len(Y)
# d. 가중치와 편향 업데이트 - "조언"에 따라 한 걸음 이동
w = w - learning_rate * dw
b = b - learning_rate * db
# e. 100번째마다 현재 상태 출력
if i % 100 == 0:
print(f"Epoch {i}: w={w:.4f}, b={b:.4f}, MSE={mse:.4f}")
print("\n최종 결과")
print(f"최적의 w={w:.4f}, 최적의 b={b:.4f}")
2. 🔎 코드 자세히 보기
- w = w - learning_rate * dw: 이 한 줄이 바로 경사 하강법의 핵심입니다.
- dw: 오차를 줄이기 위해 가중치 w를 어떻게(증가/감소), 얼마나(크기) 바꿔야 하는지에 대한 경사(기울기) 값입니다. 이 값이 양수이면 w를 감소시키고, 음수이면 증가시킵니다.
- learning_rate: 한 번에 얼마나 큰 보폭으로 이동할지를 정하는 값입니다.
- 반복문 (for i in range(epochs):): 이 반복문이 바로 "한 걸음, 한 걸음" 움직이는 과정을 시뮬레이션합니다. 매번 w와 b를 업데이트할 때마다 MSE는 점점 작아집니다.
위 코드를 실행하면 MSE가 249.0000에서 시작하여 0.0000에 가까워지는 것을 볼 수 있습니다. 이것이 바로 경사 하강법이 MSE를 최소화하고 모델을 학습시키는 과정입니다.
3. ⛰️ 경사 하강법의 시각적 이해
아래 이미지는 경사 하강법의 원리를 시각적으로 보여줍니다. 3차원 그래프의 계곡은 오차를 나타내며, 가장 낮은 지점이 오차가 0인 이상적인 지점입니다. 공이 높은 곳에서 시작하여 가장 가파른 경사를 따라 굴러 내려가면서 최저점을 찾아가는 과정이 바로 경사 하강법과 같습니다.

이 공이 한 걸음씩 움직이며 최적의 w(가중치)와 b(편향)를 찾아가는 것입니다. ✅
'AI 엔지니어준비' 카테고리의 다른 글
| 독립변수 (X) 와 종속변수(y) 를 나누는 이유? (1) | 2025.08.26 |
|---|---|
| 왜 train 데이터만 수정하지 않고 test 데이터도 수정할까? (0) | 2025.08.26 |
| ❓ 시그모이드는 뭐야? (0) | 2025.08.22 |
| ❓ K-Fold교차 검증에서 K의 값을 선택할 때 고려해야 할 점은 무엇인가요? (2) | 2025.08.21 |
| ❓ 모델 학습 시 발생할 수 있는 편향과 분산에 대해 설명하고, 두 개념의 관계에 대해 설명해 주세요. (0) | 2025.08.21 |