딥러닝 모델을 빠른 시간에 돌리기위한 다양한 모델 경량화 방법들이 있다. 이러한 다양한 경량화 방법은 크게 3 가지로 나눌 수 있다.
1. 딥러닝 알고리즘 자체를 적은 연산과 효율적인 구조로 설계하는 방법
(1). Convolution layer는 연산량이 많은 대표적인 CNN의 layer이다. Conv를 적용하고 Max Pool을 통해 다운샘플링을 많이할수록 속도가 빨라질 수 있고, 연산량과 변수가 너무 많아 학습되지 않는 문제점을 해결할 수 있다. 하지만 너무 많은 Max Pool 연산은 해상도를 줄이게 됨으로써 성능 하락의 효과가 있다.
(2). 1x1 필터를 사용하는 방법
- Convolution을 적용할때 1x1 필터를 적용하여 연산수를 줄이는 방법이다. 일반적으로 Conv의 연산량은 ( 필터사이즈 x 입력 채널수(이전 layer) x output feature수(필터수) )로 계산된다. 하지만 1x1 Conv를 적용하여 채널수를 줄이고, output feature수로 만드는 conv를 적용했을 경우 파라미터가 많이 줄게된다.
- 1x1 conv를 사용하는 대표적인 방법으로 MobileNet, SqueezeNet, ShuffleNet 등이 있음(1x1 conv 연산을 적용하는 Depth wise, Pointwise Conv 사용)
(3) Global Average Pooling을 사용하는 방법
- 보통 이미지 분류를 할때 Fully Connected Layer를 많이 사용하는편이지만 모든 layer가 연결되어있는 구조라 연산량과 용량이 많이든다. Fully Connected Layer 대신 Global Average Pooling을 사용하여 용량을 줄일 수 있다.
(4). 자동 모델 탐색
- 강화학습을 통해 지연시간, 에너지 소모 등을 줄일 수 있는 최적의 모델을 자동으로 탐색하는 방법이 있다.(Mobile-NasNet, NetAdapt)
(5). Attention 모듈 경량화
- Attention 메커니즘 자체의 연산량을 줄이는 Sparse Attention, Low-Rank Approximation, Longformer 등을 적용할 수 있다.
2. 만들어진 모델의 파라미터를 줄이는 모델 압축 방법
(1). Quntization (양자화)
- 기존 신경망의 부동소수점 수를 특정 비트수만큼 줄이는것이다. 가령 32비트 소수점을 8비트로 줄여서 연산을 수행하여 연산량이 줄어든다. 하지만 정확도가 약간 떨어지는 단점이 존재. GPU가 탑재된 PC에서는 속도가 더 느려지는 경우도 있다.
모델 Quantization(양자화) 실험
(2). Weight Pruning (가중치 가지치기)
- 신경망이 가지고 있는 weights중 실제 추론을 위해 필요한 값만 남기고, 비교적 중요도가 적은 값들을 모두 0으로 변경하여 모델 크기를 줄이는 방법이다.
(3). Binarization (이진화)
- 신경망이 가지고있는 weight와 layer 사이의 입력값을 부호에 따라 -1 혹은 +1의 이진 형태 값으로 변환하여 기존 Floating point를 사용하는 신경망에 비해 용량과 연산량을 대폭 압축한다.
(4). Weight Sharing (가중치 공유)
- weight 값들을 근사한 값을 통해 가중치를 공유하여, weight에 대한 인덱스만을 저장하는 구조를 사용함으로써, 실제 저장 공간을 절약할 수 있다. 근사화하는 방법은 weight의 유사도에 기반하여 주로 k-means나 Gaussian Mixture Model을 활용한다.
(5). Knowledge Distillation (지식 증류)
- 성능이 좋은 다수의 큰 네트워크들을 미리 학습하고, 해당 네트워크들을 이용해서 작은 하나의 네트워크에 지식을 전달하는 방법이다. 다수의 큰 네트워크의 출력은 레이블에 대한 하나의 확률값만을 가지지만 이를 확률값 형태의 분포로 변형하여 기타 모델 학습시에 Loss를 동시 반영한다. 성능은 어느정도 유지한채 신경망을 간소화하는데 사용할 수 있다.
3. 가속화 방법
(1). 하드웨어 가속화
- 벡터/행렬 연산을 병렬처리하기 위한 TPU를 사용하는 방법
- On-device AI추론을 위한 VPU (Visual Processing Unit)
- GPU cluster 기반 가속기
- 하드웨어 성능을 가속화하여 빠르게 돌리는 여러가지 방법이 연구개발되고있음. 최근에는 경량 디바이스에서 사용 가능한 칩셋 또는 USB 스틱 형태로 임베디드 장치에서 가속화가 이루어지고있음(jetson tx2, edge-tpu)
'Computer Vision' 카테고리의 다른 글
Semantic Segmentation 개요:개체 영역 식별에 대한 소개 및 주요 문제 (0) | 2023.06.08 |
---|---|
MatCha - 차트 vision-language 추론 모델 (0) | 2023.05.30 |
Image Detection Transformer (DETR) (0) | 2023.05.26 |
Vision Transformer (0) | 2023.05.23 |
Text Detection : Arbitrary Shape Text Detection via Boundary Transformer (TextBPN++) 논문 리뷰 (0) | 2023.05.23 |