노타의 주요 기술로 언급되었던 모델 경량화는 현재 인공지능 시장을 이끌고 있는 핵심 알고리즘인 딥 뉴럴 네트워크(Deep Neural Network, DNN)에서 가장 각광받는 핵심 기술 중 하나로 자리 잡고 있습니다. 모델 경량화라는 목표를 달성하기 위하여 여러 방면의 연구 개발이 진행되고 있는데, 여기서는 경량화를 달성하기 위한 여러 기술 중 Pruning에 대해 간략히 설명하고자 합니다.
DNN은 수많은 연결로 구성된 복잡한 형태의 네트워크이며, 사람이 일일이 세어서 확인할 수 없을 정도로 무수히 많은 연결이 얽혀 하나의 네트워크를 구성합니다. Alpha-Go, Deep Dream 등 DNN의 놀라운 능력을 보여준 사례가 그간 많이 보여져 왔지만, 한계는 여전히 존재합니다.
DNN의 장점 (+) 과 단점 (-) 은 다음과 같이 요약해볼 수 있습니다.
경량화 기법 중 하나인 Pruning은 우리말로 가지치기라고 번역할 수 있습니다. 기존 복잡한 신경망 내부의 가중치 중 유의미한 연결은 남겨두고 동시에 중요하지 않은 연결은 가지치기하여 모델의 전체적인 크기를 줄이는 기술입니다. 중요도가 적다고 간주한 뉴런 하나를 제거함으로써 해당 뉴런과 연결된 모든 연결(node)을 제거할 수 있고, 이후 계산 비용을 줄이기 위한 재학습 과정을 거치면서 본래의 성능을 유지하는 것을 목표로 둡니다. 이는 계산 비용(계산 속도, 모델 사이즈) 을 줄이는 데 매우 효율적이며 매우 이점이 크다고 할 수 있습니다. Nota AI를 비롯한 여러 AI 회사들이 이 기술을 채택하고 있습니다. 그렇다면 Pruning은 어떠한 순서로 이루어질까요?
관례적으로 Pruning은 한 번에 경량화된 모델을 얻는 One-Shot Pruning 기법과 점진적인 과정을 거치는 Iterative Pruning 기법으로 구분해볼 수 있으며, 여기서는 최근 가장 널리 사용되는 Iterative Pruning을 좀 더 설명해 드리겠습니다. Iterative Pruning 기법은 크게 3가지의 절차로 구성됩니다.
<aside> 💡 1. 모델 학습 (Training) 2. 가지치기 (Pruning) 1. 각 뉴런 별, 중요도를 파악 2. 중요하지 않은 뉴런과 그 연결을 제거 3. 재학습 (Fine-tuning) 4. 2, 3번 반복
</aside>
가지치기를 수행하기에 앞서, 주어진 데이터와 모델 초깃값으로부터 모델 학습을 진행합니다. 충분히 학습이 진행된 이후에야 가지치기를 수행하게 되는데, 네트워크 전체를 훑어가며 각 뉴런 별로 중요도를 파악하고, 이후 모든 뉴런 중 덜 유의미하다고 판단되는 뉴런과 해당 뉴런에 연결되어 있는 모든 edge를 제거합니다. 가지치기 방법의 구체적인 종류에 따라 어떤 뉴런을 더 중요하고 덜 중요하게 볼지의 기준이 달라질 수 있습니다. 가지치기 된 모델은 이후 재학습을 통해, 기존 모델의 성능을 회복(recovery)하기 위하여 몇 번의 재학습 (retraining)을 수행하게 됩니다.
현재까지의 가지치기 연구/개발은 가지치기 대상 범위에 따라 비구조적(unstructured) 가지치기와 구조적(structured) 가지치기로 나누어 볼 수 있습니다.