(5강) 작은 모델, 좋은 파라미터 찾기: Data Augmentation & AutoML 결과 분석

  • Data Augmentation

  • rand augmentation에 대해서

  • AutoML파트의 wrap-up으로 쉬운 예제를 활용해서 AutoML이 원하는 모델을 찾아가는 흐름에 대해 실험

[Further Reading]

1. Introduction

1.1. Augmentation이란?

부족한 데이터를 추가로 생성하기 위한 증강 방법. 이미지의 경우 좌우반전, 회전 등을 활용해서 증강할 수 있으며, NLP 측면에서는 EDA, AEDA 등의 방법으로 데이터 증강을 할 수 있다.

데이터 증강을 통해 얻을 수 있는 효과는 imbalance된 데이터 셋이나 적은 양의 데이터 셋에 활용할 수 있다는 것이 있습니다.

AutoML에서의 Augmentation이란?

경량화 관점에서는 연결되진 않지만, 성능향상에 필수적인 요소이다 보니 해당 강의에 추가되었다. 또한 Augmentation 기법을 하나의 AutoML의 Parameter로 사용될 수 있다.

경량화 측면에서 핵심적인 내용은 아니지만, 성능향상에 주요 기술이라고 한다. 각각의 Augmentation기법과 관련해서는 이미 이미지 분류 강의에서 배웠으니 간단하게 넘어가기로 한다.

그 동안 프로젝트를 진행하면서 Augmentation이 그렇게 크게 성능향상을 주진 못했었는데... 데이터 양이 한정되어서이지 않을까 싶다.

2. Image Augmentation

2.1. 어떤 Task에 어떤 Augmentation을 적용해야할까?

예를 들어 숫자 인식 데이터 (MNIST) 같은 경우 회전을 시킨다면, 6과 9를 구분할 수 없을 것이다! 이처럼 데이터에 적합한 Augmentation을 하기 위해 AutoAugment가 생겨났다.

AutoAugment: AutoML로 augmentation policy를 찾자

AutoAugment: Learning Augmentation Policies from Data

  • 데이터의 특징을 잘 나타내는 policy를 찾는것을 목표로 한다.

  • 총 5개의 sub policy, 각 sub policy는 2개의 augmentation type, 각 probability와 magnitude를 가진다.

    • 2개의 augmentation 조합을 찾고 각각에 대해서 이를 적용할지 여부에 대한 확률과 magnitude 값을 구한다.

❗ 위 그림을 보면 sub-policy 1~5로 증강하여 학습하게 되면 성능이 잘나오더라라고 찾게 된다는 것이다. 이런 5개의 sub-policy를 구하는 과정은 아래와 같다.

  • 단, 성능이 향상되지만 리소스가 정말 많이든다.... (하긴 그걸 다 해보려면....)

🎇 RandAugment

파라미터를 비약적으로 줄임으로써 (augmentation 한번에 몇개 적용할지, magnitude는 몇으로 할지?) 를 고려하지 않고, magnitude값을 고정함으로써 search space를 줄임 (RandAug: 10^2, AutoAug: 10^32)

보다시피 성능에 큰 차이가 없다는 것을 알 수 있다.

3. Rand Augmentation 코드

(스페셜 미션과 Baseline 코드를 통해 정리)

4. AutoML 구동 및 결과 분석

4.1. 가상의 시나리오

가용가능한 자원(GPU, CPU) 수 파악, 가능한 소요시간 등등을 고려해야할 것.

예를 들어, 하나의 Flow를 경험해보자.

1. 요청 접수

  • PC 1대(CPU:8core, GPU: V-100 1대)

  • cifar 10 classification task에 파라미터는 적고, 성능좋은 모델

  • 24시간 내로 완성

2. 상황에 대한 파악

  • Objective는?

    Multi objective 문제(minimize param, maximize accuracy)

  • task 수행에 걸리는 시간은?

    1회에 2~4시간

  • 주어진 리소스에서 몇개의 세션이 구동가능할지

    2~3개 정도

일반적으로 100~200회의 task수행이 되어야 유의미한 결과를 도출할 수 있다고 알고 있다면, 주어진 기한으로 시도할 수 있는 횟수는 24회로 제한되어있다. (기한 / 학습시간 * 세션갯수, 24시간 / 3시간*3개)

3. 시간을 줄여야하는 문제

  • Sample을 뽑아서 모델링해도 될지

  • 주요 파라미터만 search space에서 활용

4. 직접 시도해보기 (결국...정답은 없다 해보는 수밖에)

  • 데이터를 축소한다.

  • search space에서 중요하지 않다고 판단되는 hyperparameter는 고정한다

    batch:128, epoch:200, SGD(+Momentum), Cosine Annealing[11], Raduaug 적용(N:2, M:15)

5. 결과 확인하기

5. Discussion

  • AutoML로 데이터셋, task에 특화된 모델을 찾는 것이 가능

  • 현실적인 제약(시간, 리소스 등)들을 해소하기 위한 엔지니어링은 사람의 손길이 필요

Last updated