파이토치로 시작하는 딥러닝 기초 (부스트코스) - Lab-03 Deeper Look at GD

  • 어떠한 모델이 주어졌을 때, 그 모델의 좋고 나쁨은 어떻게 평가할까?
    -> cost function을 정의해서 평가
  • cost function: 해당 모델이 실제 데이터와 얼마나 다른지를 나타냄
    잘 학습된 모델일수록 낮은 cost를 가짐
  • 선형 회귀에서의 cost function은 Mean Squared Error (MES)

이해를 쉽게 하기 위해, b를 0으로 두고
x = 1일 때 y = 1
x = 2일 때 y = 2
x = 3일 때 y = 3인 모델을 찾고 싶다고 한다면

W=1에서 cost가 최소가 될 것임. 이 기울기를 Gradient라 부름.

Gradient Descent: Gradient를 이용해서 cost를 줄임.

gradient = 2 * torch.mean((W * x_train - y_train ) * x_train)
lr = 0.1
W -= lr * gradient

전체 코드

import torch
from torch import optim

x_train = torch.FloatTensor([1], [2], [3])
y_train = torch.FloatTensor([2], [4], [6])

W = torch.zeros(1)
lr = 9.1

nb_epochs = 10
for epoch in range(1, nb_epochs + 1):
    hypothesis = x_train * W
    cost = torch.mean((hypothesis - y_train) ** 2)
    gradient = torch.sum((W * x_train - y_train) * x_train)
    
    print('Epoch {:4d}/{} W: {:.3f}, Cost: {:.6f}'.format(
        epoch, nb_epochs, W.item(), cost.item()
    ))

    W -= lr * gradient

PyTorch에서는 torch.optim으로 gradient descent를 쉽게 할 수 있도록 함

  • 시작할 때 Optimizer 정의
  • Optimizer.zero_grad() => gradient를 0으로 초기화
  • cost.backward() => gradient 계산
  • optimizer.step() => gradient descent

0개의 댓글