사실 once-for-all 논문의 방법론에 Regularized Evolution for Image Classifier Architecture Search란 논문의 evolution nas를 이용했다고 해서 살펴보았다.
논문이나 글 들을 보면 가끔 열받을 때가 있다.
본인이 맞다고 정해놓고 글을 전개하는데 내가 볼땐 아니면 굉장히 열을 받는다.
이번 논문을 굳이 리뷰하는 이유는 논문을 읽다가 굉장히 열을 받았기 때문이다.
열받은 내용은 후에 서술하겠지만 소위말해 굉장이 긁혔기 때문에 논문에 대해서 비판도 아니고 비난에 가깝게 서술할 것이다. 참고하여 읽기 바란다.
란 논문을 리뷰하겠다.
우선 기본 진화적 nas에 대해 간단히 말하자면 크게 2가지이다.
random sampling을 통해 search space에서 아키텍처를 2개 뽑는다. 그 후 각각 평가를 해 우수한 것만 남기고 나머지는 삭제한다.
우수한 것들을 기본으로 레이어들을 변이(mutation)하여 아키텍처에 추가한다. 그 후 1과 2를 반복한다.
논문에선 여기에 aging이란 기법을 추가했다. 그 알고리즘은 아래와 같다.
기본적인 evolution nas에서 초기에 뽑은 아키텍처들이 변이(mutation)되고 그 변이체들이 또 비교되고 이런식으로 시작하다보니 잘못하면 초기 아키텍처들 위주로 고정되어 버린다.
nas는 전체 가능성을 따져서 최선의 아키텍처를 찾는 방식인데 초기에 뽑은 아키텍처에 집중하는건 안된다.
그래서 초기에 생성한 아키텍처들에게 패널티를 주는거다. 나이를 매겨서 너무 늙었다면 삭제하는 식으로
나이를 줘서 초기 아키텍처 위주로 진행되는 진화 알고리즘을 보완한 것이다.
이런 결과를 보여주면서 본인들의 알고리즘이 Reinforce Learning 이용한 Nas, Random Search를 이용한 Nas보다 우월하다고 주장하고 있다.
논문 저자들이 주장하고 있는 Regulazied evolution Nas의 장점은 크게 2가지
다른 Nas들 보다 최적의 아키텍처를 찾는 시간이 빠르다.
다른 Nas보다 flops, parameters의 수가 적다.
논문이 쓰여진 연도인 2019년 이미 Enas가 나왔고 one-shot nas, proxyless nas가 등장할 시기다.
이 논문의 가장 큰 문제점은 Weight shared를 사용하지 않았다는 점이다.
따라서 효율은 개나줌.
그리고 문제점, random search를 이용했다는 점인데 이게 쓰일 시기엔 weight shared과 random search 간의 비교가 별로 없었나보다.
random search보다 weight shared가 우월하다는 논문들이 많이 나왔고 현재 시점에 Nas의 효율을 따지는 거의 모든 논문들은 Weight shared를 포함하고 있다.
그리고 2번째 문제점
결과가 좋다는 이유가 다른 Nas보다 빠르다는 점인데 당연한 거 아닌가?
evolution Nas는 방법은 초기부터 random search를 해서 바로 평가를 한다는 점이다.
일반적인 RL을 이용한 Nas의 경우 모든 가능성을 조사하는 전수 조사 방법이다.
Nas는 모든 가능성 중 가장 최선의 nas를 찾는게 주 목표여서 전수 조사를 하되 효율적으로 하는게 다른 Nas의 방법론이다.
반면 evolution nas는 전수 조사가 아닌 일부만 뽑아서 대충 발전시켜서 최선이라 생각하자가 방법론이다.
다시 그래프를 보자
Evolution이 왜 초반에 accuaracy가 높냐? 당연히 다 조사 안하고 초반에 뽑은 것 중 괜찮은것만 남겨서 그런 것 이다. 당연한 거 아님?
그래프를 보면 RL과 Evolution 둘 다 시간이 충분히 증가하면 비슷한 accuracy를 갖는걸 볼 수 있다.
내가 왜 열 받았냐? 이 그래프가 굉장히 naive한 결과기 때문
이 그래프는 그냥 초반에 운이 좋아서 좋은 아키텍처를 뽑았고 그걸 발전시킨 그래프로 본인들의 방법론 중 가장 운이 좋은 케이스를 결과랍시고 소개했기 때문에 내가 빡친 것 이다.
두 번째로 효율성을 따지는 부분에서 flops와 parameter수를 말했는데 weight shared를 안 쓴 시점에서 weight를 일일이 초기화 할 텐데 뭐가 효율적이란 말인가?
최종 아키텍처의 flops나 parameter의 수가 중요해? weight를 일일이 초기화 할게 뻔해서 느릴텐 데
그리고 요즘엔 flops, paramter은 효율성을 따지는 지표에서 비주류가 되었다.
차라리 mobileNetV1 같이 경량화 테크닉을 만드는 논문이라면 충분히 논리적인 결과이지만 search space를 찾는 Nas에서 flops, paramter를 따지는 건 미친소리라고 생각한다.
차라리 Enas 이전의 초기 Nas였으면 그냥 넘어가겠으나 비슷한 시기에 나온 Mnas, oneshot, froxyless Nas와 너무 비교가 되는 열등한 논문이라고 생각한다.