ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [08.27 P Stage Day5] - 🔨 Ensemble & Experiment Toolkits
    네이버 부스트캠프 AI Tech 2기 2021. 8. 28. 19:15
    728x90
    반응형

    Ensemble

    여러 실험 하다 보면 여러가지 모델로 여러 결과를 만들게 된다.

    그런데, 이런 여러가지 모델을 결합해서 더 좋은 모델을 만들 수 있지 않을까?

    → 그래서 이를 활용하는 '앙상블' 기법이 있다.

    의미 : 싱글 모델보다 더 나은 성능을 위해서 서로 다른 여러 학습 모델을 활용하는 것이다.

    살펴봐야 할 것들 : Overfitting(High Variance → Boosting), Under Fitting(High Bias → Bagging)

    Voting

    Model Averaging이 잘 동작하는 이유는 , 서로 다른 모델에서 같은 에러는 테스트에서 만들지 않게 되기 때문에 효과가 좋다.

    Hard Voting → 다수결 방식(단점, 다른 모델에서 소수의 의견(?)이 무시될 수 있다는 것)

    Soft Voting → 위의 Hard Voting의 단점을 해결하기 위해 확률적으로 처리하는 방법

    Cross Validation(CV라고 불림)

    훈련 셋과 검증 셋을 분리는 하외, 검증 셋을 학습에 활용할 수 없을 까?

    → Validation Set을 적절히 섞어서 학습에 활용을 한다.

    Stratified K-Fold Cross Validation

    적절한 Validation과 Train을 비율로 나누고, 그 Validation을 한 덩어리로 생각을 하고 모든 경우로 나눠서 처리하는 방법. (단점, fold 한 개수 → K 가 늘어나면 model이 그만큼 늘어난다.)

    (가능한 경우를 모두 고려하며, Split시에 Class 분포도 고려한다.)

    TTA(Test Time Augmentation)

    : Test 할때, Augmentation을 부여해서, 여러 상황에서 어떤 결과가 있는 지 확인해보는 방법

    이 테스트 셋에서의 Validation을 따지고 싶그 때문이다.

    하지만 앙상블 기법은 성능과 효율에 Trade-Off가 있다.

    Hyperparameter Optimization

    이 모델의 시스템 메커니즘에 영향을 주는 중요한 파라미터들을 최적화 시킨다는 것

    단점 : 파라미터 하나하나 수정할 때마다, 학습을 진행해야하기 때문에 시간적 효율이 떨어진다.

    방법 : Grid Search, Random Search, Basian Optimization

    import optuna
    def objectiv(tiral):
        ...
        x = trial.suggets_uniform('x', -10, 10)
        return (x - 2) ** 2
    
    study = optuna.create_study()
    study.optimize(objective, n_trial = '횟수')
    
    study.best_params

    Experiment Toolkits과 Tips

    Training Visualization

    1. Tensroboard
    from torch.utils.tensorboard import SummaryWriter
    
    logger = SummaryWriter(log_dir=f"result"/{name}")
    
    logger.add_scalar("Train/loss", train_loss, epoch * len(train_loader) + id)
    logger.add_scalar("Train/accuracy", train_loss, epoch * len(train_loader) + id)
    
    #어떤 이미지들이 들어가는 가? 도 볼 수 있다.
    for idx, batch in enumaerate(train_loader):
        inputs, labels = train_batch
    
        grid = torchvision.make_grid(inputs)
        logger.add_image('image', grid, 0)
        logger.add_graph(model, inputs)

    1. Weight and Bias(wandb)
      • wandb login 진행
      • 코드가 생성이 되어, 복사한 코드를 붙여서 사용한다.
      • import wandb
        
        wandb.init(config = {"batch_size" : batch_size, "lr" : lr, "epochs" : epoch, "backbone" : name})
        
        wandb.log({
        	"Train loss" : train_loss,
        	"Train acc" : train_acc
        })
        
        wandb.log({
        	"Valid loss" : val_loss,
        	"Valid acc" : val_acc
        })

     

    반응형
Designed by Tistory.