> For the complete documentation index, see [llms.txt](https://lswkim322.gitbook.io/til/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lswkim322.gitbook.io/til/til-ml/boostcamp/p-stage/3-automl.md).

# (3강) 작은 모델, 좋은 파라미터 찾기: AutoML 이론

> * AutoML에 대한 전반적인 소개
>
> **\[Further Reading** ]
>
> * [\[Optional\]\[Gaussian process 참고자료\] Bayesian Deep Learning; 최성준 교수님](https://www.edwith.org/bayesiandeeplearning/lecture/24811?isDesc=false)
> * [\[Optional\] A Visual Exploration of Gaussian Processes](https://distill.pub/2019/visual-exploration-gaussian-processes)
> * [Towards automating machine learning - Dr Thorben Jensen](https://www.youtube.com/watch?v=7lvwCZsrTn4)
> * [\[Paper\] Algorithms for Hyper-Parameter Optimization](https://papers.nips.cc/paper/2011/file/86e8f7ab32cfd12577bc2619bc635690-Paper.pdf)

AutoML에 대한 현실적인 접근에 대해 고민해보기

## 1. Overview

### 1.1. Conventional DL Training Pipeline

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FNOsYm8APK9PBNQXCMTMq%2Fimage.png?alt=media\&token=6ca701dc-7b14-440b-bfb2-f01711ecef2c)

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2F4lB2nhW9vSL6FHzFtBB0%2Fimage.png?alt=media\&token=266caad7-3b62-429f-a3ad-96a1a5738585)

{% hint style="info" %}
데이터의 추가나 변수 삭제에 따라 Re-Tuning하는 작업을 사람이 반복적으로 하게 된다.
{% endhint %}

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FcR5Dd1NNOT1APPAIhsrb%2Fimage.png?alt=media\&token=e3f20c1b-f163-4532-9225-cac3b6d59a94)

### 1.2. Objective of AutoML

#### AutoML(HPO: Hyperparameter Optimization)의 문제 정의

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FEW88QcX9TRVJ28qnjRaw%2Fimage.png?alt=media\&token=d204448a-abe1-4069-92d7-d4178ce25d5d)

### 1.3. Properties of configurations in DL

#### DL model Configuration(Architecture, Hyperparameter)의 특징

* 주요 타입 구분
  * Categorical

    ex) optimizer:\[Adam, SGD, AdamW], module: \[Conv, BottleNeck,...]
  * Continuous

    ex) learning rate, regularizer param, ...
  * Integer

    ex) Batch size, epochs, ...
* Conditional(🌟): 한 configuration에 따라 search space가 달라질 수 있음
  * Optimizer의 sample(e.g. SGD, Adam 등등)에 따라서 optimizer parameter의 종류, search space도 달라짐 (e.g,optimizer에 따른 learning rate range 차이, SGD:momentum, Adam:alpha, beta1, beta2, ..등등)&#x20;
  * Module의 sample(e.g.VanillaConv, BottleNeck, Inverted Residual 등등)에 따라서 해당 module의 parameter의 종류, search space도 달라짐

### 1.4. 모델경량화 관점에서의 AutoML

#### (주어진) 모델을 경량화하자 vs (새로운) 경량 모델을 찾자

* 모델 경량화의 접근 두가지
* 기존 가지고 있는 모델을 경량화하는 기법
  * Pruning, Tensor decomposition, ...
  * 추가적은 후처리가 필요하다. 일반적으로 하기 어려울 수 있다.
* <mark style="background-color:blue;">**Search를 통하여 경량 모델을 찾는 방법**</mark>
  * NAS(Neural Architecture Search), AutoML(Automated Machine Learning)...

## 2. Basic Concept

### 2.1. AutoML Pipeline

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2F0waNg6586N51vZ3gfyfr%2Fimage.png?alt=media\&token=1d0401e8-638f-4364-9a09-e7e75b83a1e8)

* Blackbox optimization; objective를 최대화하는 값을 찾는 것.
* 다음에는 어떤 $$\lambda$$를 찾아볼까를 반복하는 방식

#### Bayesian Optimization(BO)

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FJCXstXS5kHFiTYCicuY4%2Fimage.png?alt=media\&token=d08c8e97-cfc3-4c47-b85f-1cc8d07b8c69)

* Surrogate Function: $$f(\lambda)$$를 예측하는 모델 (regression model)
* Acquisition Function: 다음엔 어느 $$\lambda$$를 찾아보면 좋을지?

### 2.2. Bayesian Optimization(with Gaussian Process Regression)

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2F3zOZEQE5MFZ64oZ3Vc2s%2Fimage.png?alt=media\&token=f40715a1-826a-49cc-acbb-a0711e137f4b)

* $$\lambda$$(그림의 x)를 Sample(observation)
* 해당 sample(configuration)로 DL 모델을 학습
* objective를 계산 (우측 point)
* Surrogate model update (그림의 실선, 파란 영역)

  ex) GP model, posterior mean, posterior variance(uncertainty)
* Acquisition Function update (그림의 초록 영역)

  ex) Expected Improvement, Upper Confidence Bounds

#### Gaussian Process Regression 의 설명

* 일반적인 Regression task: “Estimate the function f fits the data the most closely”

  Set of train data: $$(X,Y)$$set of test data: $$(X\_*, Y\_*), Y \approx f(X) + e$$​
* 우리가 알고자하는 특정위치의 $$Y\_*$$값은 우리가 알고있는 $$X, Y, X\_*$$들과(positive건, negative건) 연관이 있지 않을까? → $$X, Y, X\_*$$값으로부터 $$Y\_*$$를 추정, 연관에 대한 표현은 Kernel함수 $$K$$로!
* f(x)를 “Possible output of the function f at input x”인 “Random variable”로 보고, 각 r.v.들이 Multivariate Gaussian distribution 관계에 있다고 가정&#x20;

  \= 함수들의 분포를 정의하고, 이 분포가 Multivariate Gaussian distribution을 따른다 가정

  \= 함수 f가 Gaussian process를 따른다

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FOPTBVIMnqANP2KtFoFdQ%2Fimage.png?alt=media\&token=32ec0c3d-9958-494d-b140-8b608bf09eb9)

* 알고자 하는 값(test) $$f\_\* \approx Y\_\*$$​와 아는 값(train) $$f \approx Y$$​의 관계를 정의
* \+ Gaussian Identities(Gaussian의 marqinal, conditional도 Gaussian)

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FV8q1H8OygRPxMkEWoPwV%2Fimage.png?alt=media\&token=c46a4aa6-4d2c-4a5d-b6cb-3ba04af83185)

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2F2S1gsHRcp6UOUwN2hdp2%2Fimage.png?alt=media\&token=d6d60886-060c-4e73-b34b-a11cd2f7d43d)

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FKw9L5pBUtUxMwGDXVuXp%2Fimage.png?alt=media\&token=757177e3-fb5d-41e6-8426-f6f4e338e6eb)

<https://distill.pub/2019/visual-exploration-gaussian-processes/>

#### Surrogate Model(Function): $$f(\lambda)$$의 regression model

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FzH7vq5kWJ7WhS5RHtlEb%2Fimage.png?alt=media\&token=e046d2d6-cf0a-4366-aad0-7730f7319c5d)

* Objective $$f(\lambda)$$값을 예측하는 모델

  지금까지 관측된 $$f(\lambda)$$가 있을 때, 새로운 $$\lambda^*$$에 대한 objective $$f(\lambda^*)$$는 얼마일까?
* Objective를 estimate하는 surrogate model을 학습, 다음 좋은 $$\lambda$$를 선택하는 기중으로 사용
* 대표적은 Surrogate model로는 Gaussian Process Regression(GPR) Model(Mean: 예측 f값, Var: uncertainty)

#### Acquisition Function: 다음은 어디를 trial 하면 좋을까?

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FkIM4E1TgMFyihKLuLA8s%2Fimage.png?alt=media\&token=9cc52c1c-9cff-4dd2-998a-094ebfb65a50)![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2Fw4GbgyjTYCanl8hY9OdO%2Fimage.png?alt=media\&token=e7167f53-7e7f-4b6a-b11a-a8a108febfd8)

* Surrogate model의 output으로부터, 다음시도를 해보면 좋을 $$\lambda$$를 계산하는 함수
* Exploration(불확실한 지점) vs Exploitation(알고있는 가장 좋은 곳)의 trade off
* Acqusition function의 max 지점을 다음 iteration에서 trial
* EX) Upper Confidence Bound (UCB)

#### With Tree-structured Parzen Estimator(TPE)\[6]

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FUMiOdwHkYUkIobCEmcZj%2Fimage.png?alt=media\&token=5c98ac78-86f9-424b-9805-4aae523dbb8a)![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2Fn0arF3ULGVdbUyWnOknI%2Fimage.png?alt=media\&token=351789b8-f069-478d-8cb3-4dd3f355dbbf)

* GP의 약점:
  * High-dim($$O(N^3)$$)
  * Conditional, cont/disc 파라미터들의 혼재시 적용이 어려움
* TPE: GPR($$p(f\mid\lambda)$$)과 다르게 $$p(\lambda \mid f)$$와 $$p(\lambda)$$를 계산
* TPE를 통한 다음 step의 $$\lambda$$ 계산 방법
  * 현재까지의 observation들을 특정 quantile(inverse CDF)로 구분

    ex) 전체중 75% bad, 25% good, 위의 빨간, 파란&#x20;
  * KDE(Kernel density estimation)으로 good observations 분포(p(g)), bad observation의 분포 (p(b))를 각각 추정

    greater의 분포, lower의 분포
  * p(g)/p(b)은 EL(Expected Improvement, acquisiition function 중 하나)에 비례하므로(\[6]), 높은 값을 가지는 $$\lambda$$를 다음 step으로 설

#### EI 증명

* Likelihood를 Quantile로 구분되는 두 함수로 정의

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2FR4oHraZCvqYFpqRbVUoT%2Fimage.png?alt=media\&token=6d16326f-4555-4ab2-9045-2272a4160695)

* l(x)(좋았던 관측 분포), g(x)(안좋았던 관측 분포) 로 부터 l(x)/g(x)가 가장 높은 지점을 탐색한다?
* l(x)가 높은 쪽을 선호하되, g(x)가 낮은곳도 , 즉, 안좋은지 알 수 없는 것도 찾아 보자는 의미이다.

## 3. Further Studies

AutoML의 한계점과 현실적인 접근 방법에 대해 알아보기

![](https://3944465397-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MjcKlzGhHYe2bvmxTwS%2Fuploads%2F1ETG8uq2cl5nYWcgJbPc%2Fimage.png?alt=media\&token=83ea1285-de15-4880-bb32-d76b1b9f954a)

학습에 소요되는 시간과 리소스가 너무 크다...

* DL에서의 AutoML은 scalability 이슈가 더욱 대두됨
* 주요 키워드
  * Hyperparameter Gradient Descent(탐색과 학습을 동시에)
  * Meta-learning(Auto "AutoML")
  * Multi-fidelity optimization
    * Data의 subset만을 활용
    * 적은 epoch
    * RL을 활용한 적은 trial
    * Image Downsampling 등등
* **충분히 절충하면서 사용이 가능하다!**
  * 어느정도의 prior를 개입, 적은 search space를 잡고,
  * 적지만, 대표성을 띄는 좋은 subset 데이터를 정하고 (+ n-fold Cross validation 등)
  * 학습과정의 profile을 보고 early terminate 하는 기법 적용
  * (ASHA Scheduler, BOHB (Bayesian Optimization & Hyperband))

> 이론적인 부분으로 확 와닿지는 않지만 다음 강의를 듣고, 다시한번 들어봐야할 필요성을 느꼈다..
