NAS (Nerual Architecture Search) 방식은 크게 3가지 component로 구분할 수 있다.
1. Search space : 어떤 architecture의 어떤 block의 어떤 파라미터를 찾아낼 것인지 등
2. Search strategy : 어떻게 찾아낼 것인지
3. Performance estimation : 찾아낸 architecture를 어떻게 평가할 것인지
Search Space
먼저 Search space를 어떻게 정할지에 대해 2가지 접근법이 존재한다.
1. Cell-level search space
2. Network-level search space
먼저 Cell-level이란 네트워크를 이루는 block들을 어떻게 구성할 것인가를 search space로 잡는 것이다.
위의 그림에서 보는 것처럼 input에 어떤 연산을 적용할지, 그리고 어떤 방법으로 결합시킬지 등을 search space로 만드는 것인데 위에서 보다시피 M개의 input연산, N개의 operation을 B개의 layer에 대해 적용한다고 하면 M=5, N=2, B=5로 잡아도 (그렇게 큰 네트워크가 아님에도 불구하고) 엄청나게 큰 search space가 만들어진다.
따라서 cell-level 에서의 구조는 고정시켜놓고 depth와 네트워크의 전체 구조 등만 search space로 만드는 방법이 Network-level serach space이다. 이 방법 또한 두 가지로 구분할 수 있는데 topology를 고정시켜놓고 convolution의 채널수나 layer 수 정도만 search space로 잡는 방법이 있고 topology 자체를 search space로 잡는 방법이 있다.
첫번째 그림은 layer의 개수를 search sapce로 잡은 것이고 두번째 그림은 network의 구조를 search space로 잡은 것이다. network 구조 같은 경우에는 downsample, upsample등을 고려해 search space를 만든다.
Search strategy
다음은 Search strategy이다. Search space가 정해지면 이 space내에서 최적의 파라미터들을 어떻게 찾을 것인지에 대한 내용이다.
Grid search : search space의 parameter들을 하나 하나 넣어서 결과를 측정해보는것, EfficientNet도 depth, width, resolution을 파라미터로 만들어 각각을 grid search를 통해 최적의 파라미터를 찾는 방식으로 만들었다고 한다.
Random search : Search space를 잘 만들면 Random search 방식으로 해도 생각보다 좋은 결과들이 나온다고 함.
Reinforcement Learning : 강화학습을 사용하는 것인데 강화학습을 사용하는 이유는 목적 함수 (accuracy 등)이 미분 불가능하기 때문이다. 강화학습은 이러한 미분불가능한 함수에 대해서도 사용가능하기 때문에 강화학습을 기반으로 최적 파라미터를 찾는다.
Bayesian optimizaion : 기본적으로 단계적으로 파라미터를 찾아가는 방식인데 기존 방식을 최대한 유사하게 만드는 exploitation 방식과 많이 다른 구조로 만드는 exploration 방식을 적절히 balancing해서 최적 파라미터를 찾아가는 방식이다.
Gradient-based search : 위에서 미분불가능한 목적함수를 위해 강화학습을 적용할 수 있다고 했는데 아예 목적함수를 미분가능하게 바꿔서 gradient-based로 search하는 방법도 존재한다. 제일 대표적인 방식이 아래에 있는 DARTS 방식이다.
두 node간의 연결 edge들이 각각 operation인데 이러한 edge를 파라미터화 해서, 즉 operation을 파라미터화 해서 미분가능하게 만들어 최적의 operation을 찾는 방법이다. 이러한 방법으로 latency를 가장 적게 하는 구조도 찾을 수 있다. 아래와 같이 각 operation을 파라미터화 했으니까 각 operation이 지니는 연산량은 정해져 있기 때문에 이를 이용해 latency를 추정해 loss function으로 만들면 gradient based 방식으로 latency까지 최소화 시키는 구조를 찾을 수 있다.
Evolutionary search : 기본적으로 인간의 진화과정과 유사하게 네트워크가 만들어질 수 있도록 하는 방법
위의 그림에서 mutate와 crossover 과정이 있는데, mutate과정은 기존 네트워크 구조에서 약간 변형시켜(돌연변이) 만들어낸 구조이고 cross over는 그렇게 만들어진 돌연변이와 원래 네트워크를 적절히 조합해서 새로운 네트워크 구조가 만들어지는 과정이다. 인간이 돌연변이가 생기고 그와 상호작용해서 더 발전된 유전자를 갖게 되는 그러한 구조를 본떠서 만들어진 것 같다. 이렇게 네트워크를 만들어가면서 특정 조건(정확도, 속도 등)을 만족하면 멈추는 그런 구조이다.
Performace estimation
마지막으로 이렇게 찾아진 네트워크의 performance를 어떻게 평가할 것인가 이다. 찾아진 모든 네트워크를 scratch부터 training하고 평가하는 것은 물리적으로 불가능하기 때문에 다른 방식이 필요하다.
먼저 weight Inheritance 방식은 parent model로 부터 weight를 넘겨받는 것이다. 새로 네트워크를 생성하고 weight를 initialization해서 training하는 방식이 아니라, 찾아진 네트워크를 parent model로부터 변형시켜서 만들도록 해서 최대한 parent model의 weight정보를 가져오는 방식이다.
다음은 HyperNetwork를 이용하는 방법이다. weight를 생성하는 네트워크를 만들어서 네트워크에 적용하는 방식이다.
다음은 weight sharing으로 search space를 모두 포함하는 큰 super-network를 미리 training시키고 찾아진 sub-network에 그 weight을 가져와 evaluation 하는 방식이다. (근데 이러면 pruning이랑 다를게 뭔가..?)
마지막으로는 찾아진 네트워크를 training하지 않고 그냥 heuristic하게 찾아내는 방법인데 ZenNAS, GradSign 방식등이 있는데 ZenNAS는 좋은 네트워크라면 input에 작은 perturbation에도 sensitive하게 반응할 수 있어야한다는 가정으로 네트워크를 평가하고 GradSign 방식은 좋은 네트워크라면 local minimum간의 거리가 작아야한다는 가정으로 네트워크를 평가한다.
'AI 강의 정리 > TinyML and Efficient Deep Learning' 카테고리의 다른 글
Neural Architecture Search (NAS) - Once-for-All (0) | 2023.06.26 |
---|---|
Neural Architecture Search (NAS) - Hardware-Aware NAS (ProxylessNAS) (0) | 2023.06.22 |
Neural Architecture Search (NAS) - Manually Designed Neural Networks (0) | 2023.06.16 |
[MIT 6.S965] Lecture 03 - Pruning and Sparsity (Part I) (2022 Fall) (0) | 2023.03.17 |