[python] 파이썬 PyTorch에서 경사 하강법을 적용하는 방법은?

PyTorch는 딥러닝 프레임워크로서, 경사 하강법과 같은 최적화 알고리즘을 쉽게 적용할 수 있습니다. 이번 글에서는 PyTorch에서 경사 하강법을 적용하는 방법에 대해 알아보겠습니다.

  1. PyTorch 텐서 생성하기

가장 먼저 해야 할 일은 PyTorch 텐서를 생성하는 것입니다. 텐서는 딥러닝에서 데이터의 기본 단위로 사용되며, PyTorch에서는 torch.Tensor를 사용하여 텐서를 생성할 수 있습니다.

import torch

# 입력 데이터 생성
x = torch.tensor([1.0, 2.0, 3.0, 4.0], requires_grad=True)

# 타겟 데이터 생성
y = torch.tensor([2.0, 4.0, 6.0, 8.0])
  1. 모델 정의하기

경사 하강법을 적용하기 위해선 모델을 정의해야 합니다. PyTorch에서는 torch.nn.Module 클래스를 상속받아 모델을 정의할 수 있습니다. 모델은 주어진 입력에 대한 예측을 만들어 내는 함수로 구현됩니다.

import torch.nn as nn

class LinearRegression(nn.Module):

    def __init__(self):
        super(LinearRegression, self).__init__()
        self.linear = nn.Linear(1, 1)  # 입력 크기와 출력 크기를 지정

    def forward(self, x):
        return self.linear(x)
  1. 손실 함수 정의하기

손실 함수는 모델의 예측과 실제 타겟 값 사이의 차이를 계산하는 함수입니다. PyTorch에서는 torch.nn 패키지에 다양한 손실 함수를 제공합니다. 여기서는 평균 제곱 오차(Mean Squared Error, MSE)를 사용하도록 하겠습니다.

criterion = nn.MSELoss()
  1. 옵티마이저 정의하기

옵티마이저는 경사 하강법을 통해 모델의 가중치를 업데이트하는 역할을 합니다. PyTorch에서는 torch.optim 패키지에 다양한 옵티마이저를 제공하며, 여기서는 확률적 경사 하강법(SGD) 옵티마이저를 사용하도록 하겠습니다.

optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
  1. 경사 하강법 적용하기

이제 모든 준비가 완료되었습니다. 경사 하강법을 적용하여 모델을 학습시킬 수 있습니다.

for epoch in range(100):
    # Forward pass
    outputs = model(x)
    loss = criterion(outputs, y)

    # Backward and optimize
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    if (epoch+1) % 10 == 0:
        print(f'Epoch [{epoch+1}/{100}], Loss: {loss.item():.4f}')

위의 코드에서는 100번의 에포크 동안 모델을 학습시키고, 매 에포크마다 손실 값을 출력하고 있습니다.

PyTorch를 사용하여 경사 하강법을 적용하는 방법에 대해 알아보았습니다. 이를 통해 모델의 가중치를 업데이트하여 학습시킬 수 있습니다. PyTorch는 딥러닝 프레임워크로서 강력한 도구들을 제공하므로, 딥러닝 모델을 구현할 때 유용하게 사용할 수 있습니다.

참고 자료: