파이톨치

[BoostCamp AI Tech] 학습 시 고려 사항 본문

AI&ML/BoostCamp AI Tech

[BoostCamp AI Tech] 학습 시 고려 사항

파이톨치 2024. 11. 20. 14:09
728x90

모델 학습에서 일관된 실험 관리와 성능 향상을 위해 고려해야 할 중요한 요소들을 정리했습니다. 이 글에서는 seed 고정, 실험 기록, k-fold와 augmentation, 그리고 TTA 활용법 등 효과적인 실험 관리와 모델 최적화 전략을 다룹니다.

 

1. Seed 고정: 실험의 재현성을 보장

머신러닝 실험에서 가장 중요한 원칙 중 하나는 **재현성(reproducibility)**입니다. 모델 학습에서 발생할 수 있는 난수를 제어하기 위해 seed 값을 고정해야 합니다. 이를 통해 학습 과정에서 동일한 초기값으로 시작하여 결과를 비교 분석할 수 있습니다.

import torch
import numpy as np
import random

def set_seed(seed: int):
    torch.manual_seed(seed)
    torch.cuda.manual_seed_all(seed)
    np.random.seed(seed)
    random.seed(seed)
    torch.backends.cudnn.deterministic = True
    torch.backends.cudnn.benchmark = False

set_seed(42)

 

2. 실험 기록: 철저한 데이터 관리

모든 실험 과정과 결과를 기록하는 습관은 필수입니다. 이를 통해 어떤 설정이 좋은 결과를 가져왔는지 명확히 파악할 수 있습니다. 기록할 내용은 다음과 같습니다:

  • 실험 이름 및 날짜
  • 모델 및 하이퍼파라미터 설정
  • 데이터셋 및 전처리 방법
  • 학습 곡선 및 성능 지표
  • 결과와 실험 분석

팁: 자동화된 로깅 시스템 사용

  • Weights & Biases (W&B)
  • MLflow

3. 실험은 한 번에 하나씩

여러 가지 설정을 동시에 변경하면 어떤 요인이 성능에 영향을 미쳤는지 알 수 없습니다. 한 번에 하나의 변수만 변경하며 실험하는 것이 중요합니다. 이를 통해 실험 결과를 명확히 해석할 수 있습니다.

4. Validation의 중요성

왜 Validation이 중요한가?

Validation 데이터는 모델의 성능을 빠르게 평가할 수 있도록 도와줍니다. 특히 public leaderboard에 의존하지 않고 모델 성능을 검증할 수 있어, 오버피팅을 방지할 수 있습니다.

Validation 데이터 분할 전략

  1. Hold-out Validation (e.g., 20%)
    • 장점: 빠른 검증 가능
    • 단점: 학습에 사용하지 못하는 데이터 손실 발생
  2. k-Fold Cross Validation
    • 모든 데이터를 학습에 사용할 수 있음
    • 여러 모델을 학습하므로 시간이 많이 소요됨
    • 데이터 클래스의 분포를 균일하게 유지하려면 Stratified k-Fold 사용
    • 그룹이 존재한다면 Group k-Fold로 그룹 간 데이터 누수를 방지

5. Augmentation: 일반화 성능 향상

Augmentation의 필요성

데이터의 다양성을 증가시키기 위해 Augmentation을 사용합니다. 이는 모델이 더 일반적인 상황에서도 잘 작동하도록 도와줍니다. 예: 회전, 크기 조정, 색상 변화, 플립 등

import albumentations as A

transform = A.Compose([
    A.RandomResizedCrop(height=224, width=224),
    A.HorizontalFlip(p=0.5),
    A.ColorJitter(p=0.3),
    A.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)),
])

 

6. Test Time Augmentation (TTA): 추론 성능 향상

TTA는 모델 추론 시 Augmentation을 적용하여 더 안정적이고 일반화된 결과를 얻는 방법입니다. 여러 Augmentation 결과를 합산(평균)하여 최종 출력을 만듭니다.

 

import ttach as tta

tta_transforms = tta.Compose([
    tta.HorizontalFlip(),
    tta.Rotate90(angles=[0, 90, 180, 270]),
])

tta_model = tta.SegmentationTTAWrapper(model, tta_transforms)
output = tta_model(image)

 

위의 방법들은 머신러닝 실험을 체계적으로 관리하고, 성능을 극대화하는 데 유용한 전략들입니다. 실험 관리의 기본 원칙과 함께 validation, augmentation, TTA 등의 기법을 잘 활용한다면, 모델의 성능을 한층 더 끌어올릴 수 있을 것입니다.

728x90

'AI&ML > BoostCamp AI Tech' 카테고리의 다른 글

[Web] HTTP와 REST API  (1) 2024.12.11
[BoostCamp AI Tech] Segmentation 오답노트  (0) 2024.11.21
[BoostCamp AI Tech] U-Net  (1) 2024.11.18
[BoostCamp AI Tech] Semantic Segmentation  (0) 2024.11.17
[BoostCamp AI Tech] DilatedNet  (0) 2024.11.15