[PyTorch] 선형회귀(Linear Regression)

최원석·2026년 2월 19일
post-thumbnail

선형회귀(Linear Regression)

선형회귀는 입력 변수와 출력 변수 사이의 관계를 설명하는 직선을 찾는 기법

y=Wx+by = Wx + b

W(weight) - 가중치
b(Bias) - 편향

입력 값 x가 들어왔을 때 W와 b를 조정하며 정확한 y를 예측하는 것.!

Simple Linear Regression PyTorch 구현하기

목표

x(입력 값) [[1], [2], [3]] 이 y(출력 값) [[10.0], [20.0], [30.0]] 으로 되게 W와 b를 찾는 것이다.

x_train = torch.FloatTensor([[1], [2], [3]])
y_train = torch.FloatTensor([[10.0], [20.0], [30.0]])

라이브러리

import torch
import torch.optim as optim

torch.optim 패키지는 가중치 업데이트를 편리하도록 알고리즘을 모아둔 패키지이다.

가중치 && 편향

#weight 
W = torch.zeros(1,requires_grad=True)
#bias
b = torch.zeros(1,requires_grad=True)

requires_grad=True 은 텐서의 모든 연산을 기록하기 위해 사용한다. True로 설정을 해두면 torch가 모든 연산을 기록한다.

경사하강법

#Optimizer 설정
optimizer = optim.SGD([W,b],lr=0.01)

optim.SGD는 W,b를 0.01의 학습률을 이용해 값을 조정한다.
역전파로 계산된 기울기 값을 W = W - (lr - gradient) 을 이용해 조정한다.

가중치 업데이트

  optimizer.zero_grad()
  cost.backward()
  optimizer.step()

optimizer.zero_grad() 모델의 가중치 (W,b)에 저장되어있는 기울기를 0으로 초기화 한다. Pytorch는 역전파를 할때마다 기존값에 더해버리는 정실이 있기 때문에 원하는 학습결과를 위해 초기화해야한다.
cost.backward() 오차를 기준으로 미분을 수행하여 기울기 값이 채워짐
optimizer.step() 학습률을 곱해서 실제 가중치를 업데이트 한다.

전체 코드

import torch
import torch.optim as optim

x_train = torch.FloatTensor([[1], [2], [3]])
y_train = torch.FloatTensor([[10.0], [20.0], [30.0]])

#weight 
W = torch.zeros(1,requires_grad=True)
#bias
b = torch.zeros(1,requires_grad=True)

#Optimizer 설정
optimizer = optim.SGD([W,b],lr=0.01)

nb_epochs = 10000
for epoch in range(1,nb_epochs+1):
  hypothesis = x_train * W + b
  cost = torch.mean((hypothesis - y_train)**2)

  optimizer.zero_grad()
  cost.backward()
  optimizer.step()

  if epoch % 1000 == 0:
    print(f'Epoch {epoch:4d}/{nb_epochs} W: {W.item():.3f}, b: {b.item():.3f} Cost: {cost.item():.6f}')

0개의 댓글