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

> * Data Augmentation
> * rand augmentation에 대해서
> * AutoML파트의 wrap-up으로 쉬운 예제를 활용해서 AutoML이 원하는 모델을 찾아가는 흐름에 대해 실험
>
> **\[Further Reading]**<br>
>
> * [Automl 리포트 예시](https://wandb.ai/placidus36/automl101/reports/Automl101--Vmlldzo0NzI1MTc)[\[Paper\]](https://arxiv.org/abs/1805.09501v3)
> * [AutoAugment: Learning Augmentation Policies from Data](https://arxiv.org/abs/1805.09501v3)
> * [\[Paper\] RandAugment: Practical automated data augmentation with a reduced search space](https://arxiv.org/abs/1909.13719v2)

## 1. Introduction

### 1.1. Augmentation이란?

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

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

#### AutoML에서의 Augmentation이란?

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

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FuDLHGVHBTcc0ga5SK9VX%2Fimage.png?alt=media\&token=cf554f2d-f385-4eb3-8c03-8b1485a20315)

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2Fk8YmdpiGSlrJdYavJt2m%2Fimage.png?alt=media\&token=3fc3a09d-e4b6-42d5-94ec-1a48cbedcdf9)

> &#x20;경량화 측면에서 핵심적인 내용은 아니지만, 성능향상에 주요 기술이라고 한다. 각각의 Augmentation기법과 관련해서는 이미 이미지 분류 강의에서 배웠으니 간단하게 넘어가기로 한다.
>
> &#x20;그 동안 프로젝트를 진행하면서 Augmentation이 그렇게 크게 성능향상을 주진 못했었는데... 데이터 양이 한정되어서이지 않을까 싶다.

## 2. Image Augmentation&#x20;

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

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

#### AutoAugment: AutoML로 augmentation policy를 찾자

[AutoAugment: Learning Augmentation Policies from Data](https://arxiv.org/abs/1805.09501v3)

* &#x20;데이터의 특징을 잘 나타내는 policy를 찾는것을 목표로 한다.
* &#x20;총 5개의 sub policy, 각 sub policy는 2개의 augmentation type, 각 probability와 magnitude를 가진다.
  * 2개의 augmentation 조합을 찾고 각각에 대해서 이를 적용할지 여부에 대한 확률과 magnitude 값을 구한다.

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2Ftv3qil8A1WsreMcopwsQ%2Fimage.png?alt=media\&token=b477c229-cb63-433f-9cb5-e8120e6c86aa)

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

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FivBUJEc18fHefnoLGRy2%2Fimage.png?alt=media\&token=16576230-4b6b-4e8d-8b1d-1b483778a29b)

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

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FPtaXAAVzuw9NOKcGQIwl%2Fimage.png?alt=media\&token=25ebe457-4a03-47e7-aabf-f55f45743553)

🎇 **RandAugment**

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

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FTjb2O9VDWJpOyl8Wr3Az%2Fimage.png?alt=media\&token=93afafa6-7b2c-40c9-9423-af31c487aa1f)

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

## 3. Rand Augmentation 코드

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

## 4. AutoML 구동 및 결과 분석

### 4.1. 가상의 시나리오

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

&#x20;예를 들어, 하나의 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개 정도

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

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

* Sample을 뽑아서 모델링해도 될지
* 주요 파라미터만 search space에서 활용

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

* &#x20;데이터를 축소한다.
* search space에서 중요하지 않다고 판단되는 hyperparameter는 고정한다

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

#### 5. 결과 확인하기

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2F5S4YcjsXHHV7I9anFOIV%2Fimage.png?alt=media\&token=af4e8aec-1a13-4cfb-9f02-71e4a8635bce)

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2F7KqtoTqUx64xeHpS5HtV%2Fimage.png?alt=media\&token=24b04602-9683-413c-8679-16b9e2554c33)

## 5. Discussion

* AutoML로 데이터셋, task에 특화된 모델을 찾는 것이 가능
* 현실적인 제약(시간, 리소스 등)들을 해소하기 위한 엔지니어링은 사람의 손길이 필요
