2014년 Google이 제시한 Incetption V1은 약 5M의 파라미터를 가지고 있으며 ImageNet 데이터셋에서 약 69%의 정확도를 보여주었다. 2017년 발표된 ResNext101은 83.6M개의 파라미터를 가지고 있으며 80.9%의 정확도를 나타냈다.
모델의 크기가 커질수록 정확도가 향상된다는것은 모두가 알고있는 사실이지만 11%의 정확도를 상승시키고자 16배이상 커진 파라미터갯수를 보고있노라면, 한번쯤 효율성 측면에서 고려해봐야할듯하다.
이러한 비효율적인 딥러닝 모델을 비판하기 위해서 2019년 MIT에서 발간된 발행물에서는, Transformer를 통해 획득한 NLP 모델의 경우 자동차 5대가 신차 구매시점에부터 폐차할때까지 탄소 소비량과 같음을 지적하였다. 뿐만아니라GPU를 수십대 연결한 서버환경에서 생성된 딥러닝 모델을소형 디바이스나 모바일 환경에서 활용하는 것은 불가능에 가깝다.
이러한 이유로 인해 모델경량화에 대한 요구가 필연적으로 대두될것이며, 최근 발표된 논문들 또한 평가 척도에 모델 효율성을 반영하기 시작하였다.
그러면 이제 모델 경량화 방법론을 몇가지 알아보도록 하자.
1. 가지치기(Prunning)
신경망은 노드와 가중치의 연산을 통해 다음 노드로 전달되는 형태로 구성되있다. 좀더 곰곰히 생각해보면 모든 가중치와 연산을 하는것이 효율적인가 의문을 가질 수 있다.
그래서 생겨난 방법론이 가지치기이다. 신경망 학습을 함에 있어서 중요성이 떨어지는 노드를 제거하고 재학습을 하는 과정을 반복하여 모델의 크기를 줄여나간다.
Pruning을 어떠한 기준으로 할것인지와 같은 세부정인 방법론에 대한 다양한 연구들이 시도되어왔다. 2015년 발표된 Paper인 "Deep compression"에서는 VGG-16모델을 약 49배 경량화에 성공하였고, 2018년 논문인 "Clip-q: Deep network compression learning by in-parallel pruningquantization" 에서는 ResNet-50 모델을 15배 경량화 함과 동시에 정확도를 0.6% 개선하였다.
2. 지식증류(Knowledge Distillation)
기존에 학습이 잘 완료된 아주깊은 딥러닝 모델과 아직 학습이 되지 않은 작은 크기를 가진 딥러닝 모델이 있다고 하자. 큰 딥러닝 모델은 작은 크기의 딥러닝 모델에게 지식을가르쳐 줄 수 있지 않을까? 라는 것으로부터 출발한다.
큰 모델은 이제 Teacher모델로 부르고 작은 모델은 Student 모델이라 명명하겠다.
위 그림에서 입력으로 들어온 이미지에 대하여 Teacher 모델과 Student 모델에 동시에 입력으로 들어가게 된다. 이때 Teacher모델은 입력으로 들어온 이미지에 대해서 아주 잘 예측을 할것이고, Student 모델은 그렇지 못할것이다.
예를들어 개, 소, 고양이 3개의 카테고리가 있다고 했을때, 고양이 이미지에 대하어 Teacher 모델의 Softmax값은 개, 소는 낮은 확율값을 가지고 고양이는 아주 높은 확률값을 가지게 될것이다. 이제 이 값을 정답셋으로 확정하고 Student 모델로부터 얻은 확률과 Loss를 구해주면 된다.
Teacher 모델의 Softmax로부터 획득한 확률값을 다시 정답셋으로 활용하는것을 바로 Soft Label 이라고 부른다. 인간이 이미지에 대해 정답셋을 만들어 놓은 과정을 Hard Label이라고 부른다. 이 Hard Label은 원-핫-인코딩 과정을 거쳐 0 또는 1의 값으로만 나타나는것에 비해, Soft Label은 Softmax로 부터 획득하였기 때문에 모든 카테고리에 대해 확률값으로 나타난다는 차이점이 있다.
특이한것은 MNIST 데이터에 대하여 실험을 진행하였는데, 숫자 [7, 8]만 가지고 학습을 한 Student 모델이 한번도 보지 못했던 [1, 2, 3, 4, 5, 6, 9] 를 무려 87%의 확률로 맞췄다는것이다. Teacher 모델은 Soft Label의 형태로 지식을 증류하기 때문에 Student모델은 한번도 보지못한 카테고리에 대해서도 정답을 맞췄다는것은 꽤 합리적이어 보인다.
이처럼 지식증류에서는 Soft Label을 다시 정답셋으로 활용하기 때문에 활성함수의 교체나 Loss Function 설계가 주요 이슈사항인것 같다. 특히 Object Detection Task의 경우에는 단순히 분류만 하는것이 아니라 Bounding Box에 대해서도 함께 추정을 해주어야 하기때문에 그 방법이 매우 복잡해진다.
그래서인지 지식증류 기법은 다른 경량화 방법들과 달리 아직까지 그 연구속도가 더딘편이며 주로 데이터셋을 합성하는등 데이터와 관련된 방향으로 발전되는 추세인것 같다.
3. 양자화(Quantization)
신경망 모델에서 사용하는 파라미터는 모두 완전정밀도 타입(FP32)을 사용하고 있다. 이렇게 큰 비트너비를 가진 파라미터는 연산을 함에 있어서 부담으로 작용할 수 밖에 없다. 아무리 병렬연산을 하더라도 말이다.
신경망 모델에서의 모든 파라미터는 추정되어 나온 근사값이기 때문에 32Bit로 표현하는것은 비효율적이라고 생각할 수 있다. 따라서 32Bit를 K-bit(0<K<32)의 작은크기로 만든다면 보다 계산이 빨라질것이다. 물론 표현할 수 있는 값의 범위가 줄어들기 때문에 정확도의 손실로 이어지게된다.
양자화 방법론은 학습모델을 획득하는 과정에서 적용이 될 수 있으며, 이미 학습이 완료된 모델을 양자화 하는 방법론 2가지가 존재한다. 전자의 경우에는 학습시간의 절약이 큰 이점이 될 수 있으며, 후자의 경우에는 기존에 학습이 완료된 Pre-Trained Model이 많이 존재함으로 전자의 경우보다 적용하기 쉬워 범용적으로 사용할 수 있다는 점이다.
양자화의 대상이 되는 값은 모델에 사용되는 모든 파라미터가 가능하지만 일반적으로 가중치, 활성화출력, 기울기 3가지가 대상이 되고있다. 이중에서 기울기와 관련해서는 1)분포가 일정하지 않고 2)극단적인 경우가 발생하며 3)양자화 오류로 인한 수렴불가와 같은 이슈가 존재하여 양자화 대상으로 크게 고려가 되고 있지 않는 추세이다.
양자화를 하는 방법은 대표적으로 이진화(Binary)가 있다. 이진화를 하게되면 이론상으로 파라미터 단위당 1/32배 경량화가 가능하다.
이진화 방법은 단순하지만 큰 문제를 가지고 있다. 이진화에 사용되는 함수는 보통 Signal Function을 사용하게 되는데, 이 함수의 도함수를 보면 0 이외의 값에서는 모두 0을가지게 되고, 0에서는 무한대로 발산하게 된다. 즉, 역전파를 수행할때 파라미터의 역전파 기울기가 모두 0이 되버리는 문제가 발생한다.
그래서 이진화를 수행할때는STE(Straight Through Estimator)라는 방법을 도입한다. STE는 hard tanh 함수를 주로 사용하며역전파를 수행할때 이진화에 사용된 함수를 사용하는것이 아니라 STE 함수를 사용하게 되면 역전파 수행을 할 수 있게된다.
최근 연구들은 위 3가지 기법을 단독적으로 사용하기 보다는 조합한 연구 결과들이 나오고있다. 2019년 Facebook AI에서는 "And the bit goes down: Revisiting the quantization of neural networks" 논문을 통해 지식증류와 양자화 방법을 혼합한 방법은 제안하였으며, 같은 해 Alibaba AI팀에서는 "Quantization networks" 논문을 통해 활성함수를 변형시킨 지식증류 방법과 양자화 방법을 혼합한 방법을 제안하였다.
지금까지 모델 경량화 기법에 대한 3가지 방법론에 대해서 살펴보았다. 경량화와 관련해서는 그 연구성과가 미진한 영역인것은 틀림없다. 이 글을 작성한 시점 기준으로 한글로 되어있는 정리 블로그는 거의 전무한 정도였고, 해외 사이트에서도 잘 정리되어있는 자료는 찾아보기 힘들었다. 아직 개척되지 않은 분야에 대해서 많은 연구가 이루어져 AI모델이 좀 더 우리의 일상에 가까이 다가왔으면 하는 바램이다.
최근댓글