[Boostcamp AI Tech] [모델 최적화] 17주차 Day 3 학습 기록

bluegun·2021년 11월 24일
0

AI Tech 2기 활동

목록 보기
76/87

요약

강의 내용

  • AutoML
  • AutoML 라이브러리인 Optuna에 대한 코드 및 실습

무엇을 했나요?

  • baseline 코드에 Optuna를 적용시킬 방법 연구

피어 세션

  • 기업 파트너 ART Lab 발표세션 내용 공유
    • 데이터의 중요성
  • DEVIEW 얘기
  • 최종 프로젝트 client 관련 대화

강의 내용

AutoML

기존의 ML 학습 방법 : Model Architecture와 hyperparameter 선정 후 학습 → 다시 Model Architecture와 hyperparameter 변경 후 학습하며 최적의 조건을 찾음

AutoML(HPO) : Dataset과 Model Architecture가 정해졌을 때 최적의 hyperparameter를 자동으로 search

AutoML은 새로운 경량 모델을 search를 통해 찾는 방법이다.

  • 기존 가지고 있는 모델을 경량화 하는 기법 : Pruning, Tensor decomposition..
  • Search를 통해 경량 모델을 찾는 기법 : NAS(Neural Architecture search), AutoML

(15page 이미지)

Bayesian Optimization

일반적인 AutoML Pipeline이 위 이미지와 같다면, 그 중에서 Bayesian Optimization은 아래와 같이 Blackbox Optimization을 수행한다.

(16page 이미지)

대략적으로, λ의 분포가 Gaussian 분포를 따른다고 가정하고(Surrogate model이 Gaussian), Acquisition Function을 통과해 나온 다음 추천 위치에 대해 λ를 sampling 하고, 이에 따라 Surrogate Function을 update하고(Gaussian 분포의 분포를 따르던 영역 중 확실해진 영역을 지우는 느낌?) 다시 이를 바탕으로 Acquisition Function을 통과해 다음 위치를 추천한다.

참고 링크 : https://distill.pub/2019/visual-exploration-gaussian-processes/

TPE : 가능성 높은 부분과 낮은 부분을 구분하여, 가능성 높은 부분이거나 가능성이 낮은 부분인지 알 수 없는 부분을 찾는 것
위의 Gaussian과 같이 하나의 Optimization 정책으로 이해하자.

Optuna

Optuna : AutoML 라이브러리로서, 모델, Augmentation, 하이퍼파리미터 튜닝을 Optimization 정책(TPE, Gaussian, ...)에 맞게 자동으로 찾아준다.

Optuna를 활용한 AutoML 구조

Optuna는 Study라는 객체를 통해 Optimization을 진행한다.

    study = optuna.create_study(
    	direction="maximize",
        study_name="my_study",
        sampler=...,
        storage=...,
        load_if_exists=...
    )
    study.optimize(objective, n_trials=100)

study.optimize() 를 통해 n_trial번 만큼 parameter 값을 바꿔 학습을 시도하고, study.best_trial을 통해 best 값을 확인할 수 있다.

학습은 objective 함수에 정의된 대로 진행이 된다. 즉, objective 함수 내에서 model과 dataset을 선언하고 train을 시킨 후, evaluation 값들을 return하면 된다.
이 때, trial.suggest로 되어있는 부분은 매 trial마다 다른 값이 들어갈 수 있다. 이 값은 Optimization 정책에 따라 성능 향상을 기대할 수 있는 파라미터로 선택된다.

def objective(trial):

    # Generate the model.
    model = define_model(trial).to(DEVICE)

    # Generate the optimizers.
    optimizer_name = trial.suggest_categorical("optimizer", ["Adam", "RMSprop", "SGD"])
    lr = trial.suggest_loguniform("lr", 1e-5, 1e-1)
    optimizer = getattr(optim, optimizer_name)(model.parameters(), lr=lr)

...
    
    return accuracy

무엇을 했나요?

강의를 듣고 Optuna가 잘 이해가 되지 않아 자료를 찾아보며 위의 '강의 내용'란에 적은 것처럼 구조를 이해했고, 이를 바탕으로 baseline 코드에 어떤 식으로 적용하면 되는 지를 고민하였다. 하지만 yaml 파일로부터 모델을 읽어들인다는 점 때문에 model을 어디서 어떻게 만들고 매 trial마다 다른 파라미터를 적용시킬 지 정리가 되질 않았다.
스페셜 미션으로 제공되는 코드를 보지 않고 해보려 했지만 오늘 하루동안 생각해도 답이 잘 나오지 않았고, 내일 제공된 코드를 참조하여 진행해봐야 할 것 같다.

피어 세션

오늘 부스트캠프 기업 파트너인 ART Lab의 CEO 이신 Terry님께서 간단한 강연 및 기업 소개를 하는 시간을 가졌다.
발표 내용을 막 공개하긴 힘들 것 같아 강조하시는 부분이나 느낀 점을 말하자면, 실무에선 확실히 질 좋은 데이터를 만들기 위한 Data Pipeline에 많은 시간과 노력을 쏟는다는 느낌을 받았다. 다들 강조하는 것처럼 데이터를 잘 다루고 한땀한땀 라벨링하지 않아도 자동으로 데이터를 만들 수 있는 구조를 만드는 게 중요하다는 걸 다시 새겼다.
또한 문제해결을 위해 내가 배운 지식을 어떤 식으로 적용할 수 있는지, 기업의 기술에 관해 설명해주신 내용을 듣고 이해할 수 있었다.

다른 분들께선 DEVIEW의 라이브 세션에 참여하신 분이 계셨다. 기본적으로 동영상으로 제공되는 세션 말고도 직접 기업 부스같은 느낌으로 ZOOM에 들어가 채용에 관한 얘기를 할 수 있는 자리가 있었다고 한다. 다만 여러 명의 관계자와 몇십 명의 방문객이 같이 있는 자리에서 각자 얘기하기가 힘들 테고 한 명씩 말하게 될 테니 너무 부담스러워서 나는 별로 들어가고 싶진 않았다.

최종 프로젝트 client 부분 개발을 다들 부담스러워하고 계시고, 이를 위해 kotlin을 공부하시면서 인터넷의 데모를 찾아서 분석하시고 있었다. 나는 맡은 파트가 최적화 및 포팅인 만큼 이번 주는 대회에 집중하겠다고 했다.

0개의 댓글