2018년 8월 9일 목요일

MnasNet

Mobile platform에 최적인 넷 구조를 NAS로 찾는다.

1. 최적화할 목적함수를 accuracy와 실제 폰에서 측정한 latency(지연시간,연산시간) 2개를 합쳐 사용한다.
1-1. 실측 이유는 연산시간은 폰 의존적이고 폰 사양은 매우 다양하다. 필드에서 직접 관찰이 중요하다. 실험에 쓴 구글 픽셀 one 폰은 단일 쓰레드 CPU 환경이다.
1-2. accuracy와 latency 둘 다를 목적함수 하나로 합치기 위해 Pareto optimal을 사용한다. hard와 soft constraint 2가지를 정의하고 soft를 사용했다.

2. 기존 NAS는 동일 cell 타입을 층으로 쌓았다. 같은 3x3 conv라도 입출력 shape이 달라지면 지연량이 다름을 고려치 않았다. MnasNet은 block별로 구조나 연결이 다른 넷을 구성한다.

3. 후보 샘플링->넷 구성->reward 계산->RNN 학습. 절차는 기존 sampling기반 NAS와 동일하다.




넷 구조 형성에는 Factorized Hierarchical Search 공간을 정의하고 탐색한다.
CNN은 Net 앞 단이 더 큰 data를 처리하므로, 동일한 Block(또는 cell) 구조를 누적 사용할 경우, 뒷 단 보다 latency에 끼치는 영향이 크다.  Block에 들어가는 data 크기에 따라 구조나 연결이 달라야 한다.
MnasNet은 data shape에 따라 Block 구조도 달라진다.


References
[1] MnasNet paper
[2] Google AI BLog: MnasNet
[3] Pytorch-MnasNet





2018년 8월 2일 목요일

DARTS

Differentiable Architecture Search(DARTS)는 NAS 알고리즘 일종으로 기존 NAS에서 사용하던 강화학습 기반의 discrete한 후보 선택 방법을 미분 가능하고 연속적인 최적화 방법으로 바꾸었다.

입력 $x=[64,3,32,32]$에 연산자 $op$를 적용한다. $op$ 후보가 8개라 가정하자. 이 중 1번만 적용하고 나머지 7개는 무시하면 $x'=op_1(x)$이다.

만일 2번, 5번 연산자를 동일한 가중치로 적용하고 나머지를 무시하면
$x'=0.5 \cdot op_2(x)+0.5 \cdot op_5(x)$
이다. 단, 이 연산이 성립하려면 $op_2(x)$와 $op_5(x)$는 같은 shape를 가져야 한다.

8개 모두 적용 시
$x'=\sum w_i \cdot op_i(x)$
이다.
DARTS는 $w_i(i=0...7)$ 탐색을 통해 $x'$가 연결되어 만든 net의 validation loss 최소화로 NAS 해결방법을 찾았다.


이는 $x'$가 만드는 loss를 $w_i$에 대해 편미분해 구한다.
통상 CNN에서 층(layer)이라 함은 Conv나 ReLu 등 연산을 선택 후, 이 $op$에 관련된 학습 가중치를 net loss가 최소화되게 구하는 것이다.
그런데, 이종의 $op$가 결합되어 층 하나를 구성한다면 어떤 연산을 지배적으로 사용할건지를 나타내는 연산 가중치 $w_i$ 결정과 각 연산에 들어 있는 학습 가중치 결정 2가지 문제를 함께 풀어야 한다.


두 타입 인자 결정을 동시에 할 수는 없다. $op$ 가중치 최적화, CNN 학습 가중치 최적화를 차례로 수행해야 한다. DARTS는 두 단계 수행 방법을 설명한다.


Reference
[1] DARTS paper
[2] pytorch-DARTS