딥러닝 파이토치 강좌, 파이토치 기초 문법

1. 서론

딥러닝은 머신러닝의 한 분야로서, 인공지능의 혁신을 이끌고 있는 중요한 기술입니다.
최근 몇 년 사이 파이토치(PyTorch)는 연구 및 개발에 널리 사용되고 있는 딥러닝 프레임워크 중 하나로 자리 잡았습니다.
이 글에서는 파이토치의 기본 개념과 문법을 자세히 살펴보며, 실용적인 예제 코드를 통해 이해를 돕고자 합니다.

2. 파이토치 소개

파이토치는 사용하기 쉬운 인터페이스를 제공하며, 동적 계산 그래프(dynamically computed graphs)를 지원합니다. 이는 연구자들이 실험하고 모델을 변경하는데 유연성을 제공합니다.
또한, 파이토치는 GPU 가속을 통해 계산 속도를 높일 수 있습니다. 이러한 장점들로 인해 파이토치는 많은 데이터 과학자와 연구자들 사이에서 인기를 끌고 있습니다.

3. 파이토치 설치

파이토치를 설치하기 위해서는 파이썬이 설치되어 있어야 합니다.
다음과 같은 명령어로 파이토치를 설치할 수 있습니다:

            pip install torch torchvision torchaudio
        

4. 기본 문법

4.1 Tensor

파이토치에서 가장 기본적인 데이터 구조는 Tensor입니다. Tensor는 다차원 배열로,
NumPy 배열과 유사하지만 GPU에서 계산을 수행할 수 있습니다.
Tensor를 생성하는 방법 몇 가지를 살펴보겠습니다.

            
import torch

# 1D Tensor 생성
tensor_1d = torch.tensor([1.0, 2.0, 3.0])
print(tensor_1d)

# 2D Tensor 생성
tensor_2d = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
print(tensor_2d)

# 랜덤 Tensor 생성
random_tensor = torch.randn(2, 3)  # 2 x 3 크기의 랜덤 Tensor
print(random_tensor)
            
        

위 코드는 다양한 형태의 Tensor를 생성하는 예제입니다.
Tensor는 다양한 수학적 연산에 사용될 수 있습니다.

4.2 Tensor 연산

Tensor는 다양한 수학적 연산을 지원합니다. 여기서는 기본적인 텐서 연산 몇 가지를 다뤄보겠습니다.

            
# Tensor의 합
a = torch.tensor([1, 2])
b = torch.tensor([3, 4])
c = a + b
print(c)

# 행렬 곱
x = torch.randn(2, 3)
y = torch.randn(3, 2)
z = torch.matmul(x, y)
print(z)

# Tensor의 전치
transpose = z.t()
print(transpose)
            
        

4.3 Autograd

Autograd는 파이토치의 자동 미분 시스템입니다.
이는 딥러닝 모델의 학습 과정에서 기울기를 자동으로 계산할 수 있도록 도와줍니다. 예제 코드를 통해 알아봅시다.

            
# Tensor에 requires_grad=True 설정
x = torch.tensor([[1.0, 2.0], [3.0, 4.0]], requires_grad=True)
y = x ** 2 + 2 * x + 1  # y를 x에 대해 정의

# y에 대한 x의 기울기 계산
y.backward(torch.ones_like(y))
print(x.grad)  # x에 대한 기울기 출력
            
        

5. 간단한 선형 회귀 모델 구현하기

이제 파이토치를 이용하여 선형 회귀 모델을 구현해보겠습니다.
학습 데이터를 생성하고, 모델을 정의한 후 학습을 진행하겠습니다.

            
# 1. 데이터 생성
import numpy as np
import torch

# 임의의 데이터 생성
X = np.random.rand(100, 1).astype(np.float32) * 10  # 0부터 10 사이의 값
y = 2 * X + 1 + np.random.randn(100, 1).astype(np.float32)  # y = 2x + 1 + noise

# 2. Tensor로 변환
X_tensor = torch.from_numpy(X)
y_tensor = torch.from_numpy(y)

# 3. 모델 정의
model = torch.nn.Sequential(
    torch.nn.Linear(1, 1)  # 입력 1개, 출력 1개
)

# 4. 손실 함수 및 옵티마이저 정의
criterion = torch.nn.MSELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

# 5. 모델 학습
for epoch in range(100):
    model.train()
    
    # 순전파
    y_pred = model(X_tensor)

    # 손실 계산
    loss = criterion(y_pred, y_tensor)

    # 기울기 초기화
    optimizer.zero_grad()

    # 역전파
    loss.backward()

    # 가중치 업데이트
    optimizer.step()

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

위 예제는 매우 간단한 선형 회귀 문제를 해결하는 과정입니다.
데이터 생성부터 모델 학습까지의 모든 과정을 포함하고 있습니다.
결국 학습이 완료된 후, 모델의 파라미터를 확인해보면 2와 1에 가까운 값으로 수렴하는 것을 볼 수 있습니다.

6. 결론

파이토치는 딥러닝을 위한 강력하고 유연한 도구입니다.
이 글에서는 파이토치의 기초 문법과 텐서 생성 및 연산, 자동 미분, 간단한 선형 회귀 모델 구현을 다루었습니다.
이러한 기초를 바탕으로 향후 더 복잡한 딥러닝 모델을 구축할 수 있습니다.
앞으로 파이토치로 더 많은 프로젝트와 연구를 진행해보길 바랍니다.

© 2024 딥러닝 강좌