728x90
반응형
Optuna
Optuna 특징 및 과정
- 특징
- SOTA 알고리즘 구현
- 병렬화 용이
- Conditional parameter 구성 용이
- search 과정
- Optuna Study 인스턴스 생성 : blackbox optimizer역할 및 전체 trial관리
- Study에 최적화할 목적함수(objective) 및 시도 횟수(n_trials), 조건 등 부여
- Optimize!
- 전체 흐름
- search_model : 모델을 sampling하여 config 반환
- search_hyperparam : 하이퍼파라미터를 sampling하여 config 반환
- train_model : 위의 config들을 가지고 model 학습 후, 학습된 모델 반환
- evaluate : 위의 학습된 모델을 가지고 evaluate하여 score 반환
- study.optimize : 위의 score를 가지고 TPE알고리즘을 통해 또 다른 sampling할 모델 및 하이퍼파라미터를 탐색하여 새로운 config를 설정할 수 있도록 정보를 넘겨줌 (Blackbox optimizer)
위의 그림은 AutoML파이프라인에 끼워맞추어 코드를 분리한 것이고, 실제로는 아래와 같이 objective함수 안에서 study.optimize외의 모든 것이 구현된다.
sample_model
먼저 Optuna과정 중 모델을 샘플하는(sample_model) 파트를 상세하게 보자.
Architecture Model
- Motivation
아래 그림과 같이, 모델을 테이블로 표현 가능하다면,
특정 data structure에 block들을 넣어서 모델을 조립할 수 있지 않을까?
block들을 임의로 쌓아서 모델을 새로 생성할 수 있지 않을까?
- [1단계] 테이블 → Yaml
- [2단계] Yaml → Model
<전체 과정>
1. yaml파일을 Model클래스에 넣어 인스턴스 객체를 만든다.
2. Model클래스 내 ModelParser클래스가 있다.
3. ModelParser클래스는 yaml파일을 load한 후 config들을 할당하고 _parse_model()을 통해 모델을 생성한다.
<모델 생성 과정>
1. input_channel = 3을 받으면, 3이 backbone에 전달되고 backbone이 할당된다. (module weight의 shape결정에 input_channel필요)
2. backbone은 [repeat, module, module argument(output_channel, kenel_size, stide)]들로 조립된다.
3. config들이 ModelGenerator에 들어가서 각각의 모듈 Generator를 통해 pytorch모듈을 생성한 후에 리스트(layers)에 append한다.
<모델 생성 코드>
1. backbone내 module을 for문으로 돌면서 해당 module의 Generator에 args와 width_multiple같은 config를 넣어 인스턴스 객체를 만든다.
2. 인스턴스 객체에 repeat을 설정한 후 module을 생성한다.
3. layers에 생성한 module을 append한다.
4. 현재 module의 output_channel은 다음 module의 input_channel이 되므로 해당 코드를 추가한다.
5. for문을 모두 돌고나면 layers를 nn.Sequential로 묶은 후 모델을 반환한다.
Architecture Config
1. Categorical config
- suggest_categorical 함수 사용
- name에 parameter 설정
- choices에 목록 설정
2. Continuous config
- suggest_float 함수 사용
- name에 parameter 설정
- low와 high에 하한과 상한 설정
3. Integer config
- suggest_int 함수 사용
- name에 parameter 설정
- low와 high에 하한과 상한 설정
4. Conditional config(★)
- 1, 2, 3번에서 설정한 parameter에 내에서 조건을 걸고 싶을 때, if문 사용
- ex) Adam 전용 parameter 따로 sample가능
Custum Search Space
Learning Transferable Architectures for Scalable Image Recognition 논문
- Neural Architecture Search(NAS) 논문
- 모듈 Block(micro)들의 조합과 구성(macro) 모두를 탐색하지 않고, 모듈 Block만을 탐색하는 것에 초점
- 성능은 좋지만 computational cost가 높음
- 모듈 Block들로 생성되는 네트워크 구조(macro)는 고정
- 모듈 Block은 기존에 있는 좋은 것들 사용하되, macro한 구조는 아래 이미지 차용
즉, Conv와 같은 모듈들을 가져다 쓰되, 아래 그림과 같은 구조(macro)만 가져가자는 게 주요 골자
[reference]
728x90
반응형
'AI > 딥러닝' 카테고리의 다른 글
[최적화] Data Augmentation , AutoML (0) | 2021.12.15 |
---|---|
[최적화] AutoML , Surrogate Model , Acquisition Function (0) | 2021.11.23 |
[최적화] 모델 경량화 , AutoML , Pruning , Knowledge Distillation , Tensor Decomposition , Quantization , Compiling (0) | 2021.11.22 |
[MRC] Retrieval, Scaling up with FAISS (2) | 2021.10.17 |
[MRC] Passage Retrieval – Dense Embedding (0) | 2021.10.17 |
댓글