데이터를 가장 잘 설명하는 직선 하나를 찾는 문제예요. 빨간 점선(오차)이 전체적으로 가장 짧아지게 만들면 됩니다.
🖱️ 빈 곳을 클릭하면 점이 생기고, 점을 다시 클릭하면 사라져요.
오차(MSE)는 각 점에서 직선까지의 세로 거리(빨간 점선)를 제곱해서 평균 낸 값이에요. 자동 학습은 1단계에서 배운 경사하강법으로 w와 b를 조금씩 고쳐 갑니다.
import torch
x = torch.tensor([1.0, 2.0, 3.0, 5.0, 7.0, 9.0]) # 입력
y = torch.tensor([2.3, 3.1, 4.2, 5.5, 7.0, 8.9]) # 정답
w = torch.zeros(1, requires_grad=True) # 기울기
b = torch.zeros(1, requires_grad=True) # 절편
optimizer = torch.optim.SGD([w, b], lr=0.01)
for epoch in range(200):
y_pred = w * x + b # 예측 (직선)
loss = ((y_pred - y) ** 2).mean() # 오차 (MSE)
optimizer.zero_grad()
loss.backward() # 기울기 자동 계산
optimizer.step() # 경사하강법 한 걸음
print(f"학습 결과: y = {w.item():.2f}x + {b.item():.2f}")