RNN 훈련 및 평가

PyTorch로 배우는 Intermediate Deep Learning

Michal Oleszak

Machine Learning Engineer

평균 제곱 오차 손실

  • 오차:

    $$prediction - target$$

  • 제곱 오차:

    $$(prediction - target)^2$$

  • 평균 제곱 오차:

    $$avg[(prediction - target)^2]$$

오차를 제곱하면:

  • 양수/음수 오차가 상쇄되지 않음
  • 큰 오차에 더 큰 페널티 부여
  • PyTorch에서:
      criterion = nn.MSELoss()
    
PyTorch로 배우는 Intermediate Deep Learning

텐서 확장

  • 순환 레이어의 입력 형태: (batch_size, seq_length, num_features)
  • 현재 형태: (batch_size, seq_length)
  • 마지막에 차원 하나를 추가해야 함
for seqs, labels in dataloader_train:
    print(seqs.shape)
torch.Size([32, 96])
seqs = seqs.view(32, 96, 1)
print(seqs.shape)
torch.Size([32, 96, 1])
PyTorch로 배우는 Intermediate Deep Learning

텐서 squeeze

  • 평가 루프에서 훈련 루프의 형태 변환을 되돌려야 함
  • 레이블의 형태: (batch_size)

    for seqs, labels in test_loader:
      print(labels.shape)
    
    torch.Size([32])
    
  • 모델 출력의 형태: (batch_size, 1)

    out = net(seqs)
    
    torch.Size([32, 1])
    
  • 손실 함수를 위해 모델 출력과 레이블의 형태가 일치해야 함
  • 모델 출력의 마지막 차원 제거 가능

    out = net(seqs).squeeze()
    
    torch.Size([32])
    
PyTorch로 배우는 Intermediate Deep Learning

훈련 루프

net = Net()
criterion = nn.MSELoss()
optimizer = optim.Adam(
  net.parameters(), lr=0.001
)


for epoch in range(num_epochs): for seqs, labels in dataloader_train:
seqs = seqs.view(32, 96, 1)
outputs = net(seqs) loss = criterion(outputs, labels) optimizer.zero_grad() loss.backward() optimizer.step()
  • 모델 인스턴스화, 손실 및 옵티마이저 정의
  • 에포크 및 데이터 배치 반복
  • 입력 시퀀스 형태 변환
  • 나머지: 일반적인 방식과 동일
PyTorch로 배우는 Intermediate Deep Learning

평가 루프

mse = torchmetrics.MeanSquaredError()


net.eval() with torch.no_grad(): for seqs, labels in test_loader:
seqs = seqs.view(32, 96, 1)
outputs = net(seqs).squeeze()
mse(outputs, labels)
print(f"Test MSE: {mse.compute()}")
Test MSE: 0.13292162120342255
  • MSE 지표 설정
  • 그래디언트 없이 테스트 데이터 반복
  • 모델 입력 형태 변환
  • 모델 출력 squeeze
  • 지표 업데이트
  • 최종 지표 값 계산
PyTorch로 배우는 Intermediate Deep Learning

LSTM vs. GRU

  • LSTM:
Test MSE: 0.13292162120342255
  • GRU:
Test MSE: 0.12187089771032333
  • GRU 선호: 더 적은 연산으로 동일하거나 더 나은 결과
PyTorch로 배우는 Intermediate Deep Learning

연습해 봅시다!

PyTorch로 배우는 Intermediate Deep Learning

Preparing Video For Download...