본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 11. 4. · 298 Views
PyTorch 기초부터 심화까지 완벽 가이드
PyTorch의 텐서 연산부터 신경망 구축, 학습, 최적화까지 단계별로 학습합니다. 실무에서 바로 활용 가능한 딥러닝 핵심 개념을 다룹니다.
들어가며
이 글에서는 PyTorch 기초부터 심화까지 완벽 가이드에 대해 상세히 알아보겠습니다. 총 12가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- 텐서_생성과_기본_연산
- GPU_가속_활용
- 자동_미분_Autograd
- 신경망_모델_정의
- 데이터_로더_활용
- 손실_함수와_최적화
- 모델_학습_루프
- 모델_평가와_예측
- 학습률_스케줄러
- 모델_저장과_로드
- 커스텀_데이터셋_생성
- 전이_학습_활용
1. 텐서 생성과 기본 연산
개요
PyTorch의 핵심 자료구조인 텐서를 생성하고 기본적인 수학 연산을 수행하는 방법입니다.
코드 예제
import torch
# 텐서 생성
x = torch.tensor([[1, 2], [3, 4]], dtype=torch.float32)
y = torch.ones(2, 2)
# 기본 연산
result = x + y
print(result) # [[2, 3], [4, 5]]
설명
torch.tensor()로 데이터를 텐서로 변환하고, NumPy처럼 직관적인 연산이 가능합니다. GPU 가속을 위한 기본 단위입니다.
2. GPU 가속 활용
개요
CUDA를 이용해 텐서를 GPU로 이동시켜 연산 속도를 대폭 향상시키는 방법입니다.
코드 예제
import torch
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
x = torch.randn(1000, 1000).to(device)
y = torch.randn(1000, 1000).to(device)
result = torch.mm(x, y) # GPU에서 행렬 곱셈
print(f"Device: {result.device}")
설명
.to(device)로 텐서를 GPU/CPU로 이동시킵니다. 대규모 행렬 연산에서 GPU는 CPU 대비 수십 배 빠릅니다.
3. 자동 미분 Autograd
개요
역전파를 위한 자동 미분 기능으로, 신경망 학습의 핵심 메커니즘입니다.
코드 예제
import torch
x = torch.tensor(2.0, requires_grad=True)
y = x ** 3 + 2 * x ** 2 + x
y.backward() # dy/dx 계산
print(f"Gradient: {x.grad}") # 3*4 + 2*2*2 + 1 = 21
설명
requires_grad=True로 미분 추적을 활성화하고, backward()로 그래디언트를 자동 계산합니다. 복잡한 수식도 자동으로 처리됩니다.
4. 신경망 모델 정의
개요
nn.Module을 상속받아 커스텀 신경망을 정의하는 표준 방법입니다.
코드 예제
import torch.nn as nn
class SimpleNet(nn.Module):
def __init__(self):
super().__init__()
self.fc1 = nn.Linear(784, 128)
self.fc2 = nn.Linear(128, 10)
def forward(self, x):
x = torch.relu(self.fc1(x))
return self.fc2(x)
설명
__init__에서 레이어를 정의하고 forward에서 순전파 로직을 구현합니다. 역전파는 autograd가 자동 처리합니다.
5. 데이터 로더 활용
개요
대용량 데이터를 배치 단위로 효율적으로 로드하고 셔플하는 방법입니다.
코드 예제
from torch.utils.data import DataLoader, TensorDataset
X = torch.randn(1000, 20)
y = torch.randint(0, 2, (1000,))
dataset = TensorDataset(X, y)
loader = DataLoader(dataset, batch_size=32, shuffle=True)
for batch_X, batch_y in loader:
print(batch_X.shape) # torch.Size([32, 20])
설명
TensorDataset으로 데이터를 묶고 DataLoader로 배치 처리합니다. shuffle=True로 에폭마다 데이터 순서를 섞어 학습 효과를 높입니다.
6. 손실 함수와 최적화
개요
모델 학습을 위한 손실 함수 계산과 옵티마이저 사용법입니다.
코드 예제
import torch.optim as optim
model = SimpleNet()
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
output = model(torch.randn(10, 784))
loss = criterion(output, torch.randint(0, 10, (10,)))
optimizer.zero_grad()
loss.backward()
optimizer.step()
설명
CrossEntropyLoss로 분류 손실을 계산하고, Adam 옵티마이저로 가중치를 업데이트합니다. zero_grad()로 그래디언트 초기화가 필수입니다.
7. 모델 학습 루프
개요
전체 학습 과정을 포함한 완전한 트레이닝 루프 구현입니다.
코드 예제
model.train()
for epoch in range(10):
total_loss = 0
for X_batch, y_batch in loader:
optimizer.zero_grad()
output = model(X_batch)
loss = criterion(output, y_batch)
loss.backward()
optimizer.step()
total_loss += loss.item()
print(f"Epoch {epoch}: Loss {total_loss:.4f}")
설명
model.train()으로 학습 모드 활성화 후, 배치별로 순전파→손실 계산→역전파→가중치 업데이트를 반복합니다.
8. 모델 평가와 예측
개요
학습된 모델로 새로운 데이터에 대한 예측을 수행하는 방법입니다.
코드 예제
model.eval()
with torch.no_grad():
test_input = torch.randn(5, 784)
predictions = model(test_input)
predicted_classes = torch.argmax(predictions, dim=1)
print(predicted_classes) # tensor([7, 2, 0, 4, 9])
설명
model.eval()과 torch.no_grad()로 그래디언트 계산을 비활성화해 메모리를 절약합니다. argmax로 가장 높은 확률의 클래스를 선택합니다.
9. 학습률 스케줄러
개요
학습 진행에 따라 학습률을 동적으로 조정하여 수렴 성능을 개선합니다.
코드 예제
from torch.optim.lr_scheduler import StepLR
optimizer = optim.Adam(model.parameters(), lr=0.01)
scheduler = StepLR(optimizer, step_size=5, gamma=0.5)
for epoch in range(20):
# ... 학습 코드 ...
scheduler.step()
print(f"LR: {optimizer.param_groups[0]['lr']:.6f}")
설명
StepLR은 step_size 에폭마다 학습률을 gamma배로 감소시킵니다. 초반엔 빠르게 학습하고 후반엔 세밀하게 조정합니다.
10. 모델 저장과 로드
개요
학습된 모델의 가중치를 저장하고 나중에 불러오는 방법입니다.
코드 예제
# 저장
torch.save(model.state_dict(), 'model_weights.pth')
# 로드
model = SimpleNet()
model.load_state_dict(torch.load('model_weights.pth'))
model.eval()
설명
state_dict()로 모델의 파라미터만 저장하는 것이 권장됩니다. 전체 모델을 저장하는 것보다 유연하고 호환성이 좋습니다.
11. 커스텀 데이터셋 생성
개요
자신만의 데이터를 PyTorch Dataset으로 변환하여 표준 파이프라인에 통합합니다.
코드 예제
from torch.utils.data import Dataset
class CustomDataset(Dataset):
def __init__(self, data, labels):
self.data = data
self.labels = labels
def __len__(self):
return len(self.data)
def __getitem__(self, idx):
return self.data[idx], self.labels[idx]
설명
Dataset 클래스를 상속받아 __len__과 __getitem__만 구현하면 됩니다. DataLoader와 함께 사용해 표준화된 데이터 처리가 가능합니다.
12. 전이 학습 활용
개요
사전 학습된 모델을 가져와 마지막 레이어만 교체하여 새로운 태스크에 적용합니다.
코드 예제
import torchvision.models as models
resnet = models.resnet18(pretrained=True)
# 마지막 레이어만 교체
num_features = resnet.fc.in_features
resnet.fc = nn.Linear(num_features, 10)
# 사전 학습 레이어는 고정
for param in resnet.parameters():
param.requires_grad = False
resnet.fc.requires_grad = True
설명
ImageNet으로 학습된 ResNet을 가져와 분류기만 교체합니다. 적은 데이터로도 높은 성능을 얻을 수 있는 강력한 기법입니다.
마치며
이번 글에서는 PyTorch 기초부터 심화까지 완벽 가이드에 대해 알아보았습니다. 총 12가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.
관련 태그
#PyTorch #Tensor #NeuralNetwork #Autograd #Optimization
댓글 (0)
함께 보면 좋은 카드 뉴스
에이전트 클래식 패러다임 구현 완벽 가이드
ReAct, Plan-and-Solve, Reflection 등 AI 에이전트의 핵심 클래식 패러다임을 원리부터 실전 구현까지 체계적으로 학습합니다. 초보 개발자도 이해할 수 있도록 비유와 스토리로 풀어냅니다.
에이전트 발전사 기호주의에서 LLM까지
AI 에이전트의 기원부터 LLM 기반 에이전트까지 발전 과정을 이북 스타일로 살펴봅니다. 초보 개발자도 쉽게 이해할 수 있도록 비유와 스토리텔링으로 풀어냅니다.
Value Embeddings 완벽 분석 ResFormer 아키텍처
AutoResearch 프로젝트의 train.py에 구현된 Value Embeddings(ResFormer) 아키텍처를 심도 있게 분석합니다.
Flash Attention 3과 Rotary Embeddings 완벽 분석
AutoResearch 프로젝트의 train.py에 구현된 Flash Attention 3 커널 선택 로직, Rotary Position Embeddings(RoPE)의 수학적 원리와 구현, 그리고 Sliding Window Attention 패턴을 심도 있게 분석합니다.
GPT 모델 아키텍처 완벽 분석 - CausalSelfAttention부터 GPT까지
AutoResearch의 train.py에 구현된 GPT 모델 아키텍처를 상세 분석합니다. GPTConfig 데이터클래스부터 CausalSelfAttention, MLP, Block, GPT 클래스까지 전체 구조와 가중치 초기화 전략을 다룹니다.