논문 제목 : [SQUEEZENET] ALEXNET-LEVEL ACCURACY WITH50X FEWER PARAMETERS AND <0.5MB MODEL SIZE
논문 링크 : https://arxiv.org/abs/1602.07360
이번에 읽을 논문은 TinyML의 시조격인 SqueezeNet이다.
기존 AlexNet을 대폭 축소한 모델을 발표해서 경량화의 중요성을 보여준다.
[후기]
SqueezeNet + Simple Bypass + Deep Compression까지 했다면 가볍고 더 정확도 높은 모델을 만들었을텐데 아쉽게도 그런 언급은 없다.
Squeeze Layer 발상 자체가 신박하다.
1. Introduction And Motivation
- 작은 모델은 통신 오버헤드(연산에 필요한 시간, 메모리 등)가 작아 효율적 학습이 가능
- 새로운 모델 배포 시 용이
- FPGA(10MB 이하의 메모리, off-chip 메모리 없음)에서도 구동 가능
3. SqueezeNet : Preserving Accuracy with Few Parameters
여기서는 Fire module이라는 새로운 building block을 사용해서 SqueezeNet을 구성했다.
3.1 Architectural Design Strategies
1) 3x3 filter를 1x1로 대체해서 parameter 수를 1/9로 줄이기
2) 3x3 filter에 들어오는 input channel 수 줄이기
Parameter는 input channel * number of filters * (3*3) 이므로 3*3만 줄여서 될 게 아니라 input channnel도 줄인다.
이는 queeze layer를 사용해서 줄인다.
3) Downsampling을 늦게 해서 conv layer가 large activation map을 가지도록 한다
stride > 1을 네트워크 뒷부분에 집중시키고, 앞부분은 stride=1로 유지해서 최대한 큰 activation map을 유지한다.
1), 2)는 압축을, 3)은 정확도를 높이기 위함이다.
3.2 The Fire Module
Fire Module은 squeeze conv layer(1x1로만 구성)와 expand layer(1x1, 3x3 섞임)로 구성된다.
여기서 $s_{1x1}$은 squeeze layer의 1x1 filter 수를, $e_{1x1}, e_{3x3}$는 각각 expand layer의 1x1, 3x3 filter 수를 의미한다.
여기서 $s_{1x1} < (e_{1x1}+e_{3x3})$가 되도록 설정해서 3x3 filter로 들어가는 input channel 수를 제한한다.
3.3 The SqueezeNet Architecture
SqueezeNet의 구성도는 위 사진과 같다.
단독 conv layer 1개, 그리고 fire module 8개, 마지막으로 conv layer.
Fire module 내부 filter 수는 점차 증가시켰다(activation은 ReLU 사용).
중간 중간 max-pooling을 하되, 최대한 strategy 3에 맞게 했다.
Fire module 9 뒤에는 dropout(ratio 50%)를 진행했다.
FC layer는 사용하지 않았다.
4. Evaluation of SqueezeNet
기존 연구 목표는 AlexNet을 압축하는 것이므로, ALexNet을 사용해서 비교 및 평가를 진행했다.
+) 여기서 보면 알겠지만 after pruning을 보면 fire module의 경우 절반 이상 parameter가 줄었다.
그래서 total parameter는 무려 1/3으로 줄어든 것을 볼 수 있다.
기존 연구들은 축소에는 성공했지만 accuracy가 감소했다(SVD 기반, Network Pruning, Deep Compression..).
그러나 SqueezeNet은 50X 감소에 더불어서 top-1, top-5 accuracy가 AlexNet과 비슷하거나 더 뛰어나다.
압축 없이 SqueezeNet만 써도 최신 연구에 비해 1.4배 작았다.
거기에 33% sparsity, 8 bit quantization, deep compression을 곁들여 압축하면 엄청나게 작아진다.
그럼에도 동등한 정확도를 달성헀다.
여기서 Deep Compression은 큰 CNN 뿐만 아니라, 이미 작은 SqueezeNet도 압축할 수 있음을 보여준다.
5. CNN Microarchitecture Design Space Exploration
CNN 미시구조(per-module layer dimensions and configurations)를 살펴보자.
이 챕터의 목표는 정확도 높이기가 아니라, 각 요소가 어떤 영향을 주는지를 살펴보는 것이다.
5.1 CNN Microarchitecture Metaparameters
우리는 $s_{1x1}, e_{1x1}, e_{3x3}$를 가지고 있고, fire module은 총 8개이므로 hyperparameter는 24개나 된다.
따라서 이를 효율적으로 다루기 위해 아래와 같은 metaparameter를 고안했다.
- $base_e$ : expand filter 개수
- $incre_e$ : 매 freq마다 expand filter를 늘리는 개수
따라서 fire module i에서 $e_i = base_e + (incr_e * \lfloor{\frac{i}{freq}} \rfloor)$가 된다.
- $pct_{3x3}$ : [0, 1] 범위, 1x1, 3x3 filter 중 3x3 filter의 비율, 모든 fire module이 공유
따라서 $e_{i, 3x3}=e_i * pct_{3x3}, e_{i,1x1}=e_i*(1-pct_{3x3})$가 된다.
- SR : squeeze ratio, [0, 1] 범위이며 $s_{i,1x1}=SR*e_i$로 s를 조절한다, 모든 fire module이 공유
이 실험에서는 $base_e=128, incr_e=128, pct_{3x3}=0.5, freq=2, SR=0.125$를 사용했다.
5.2 Squeeze Ratio
SR의 영향을 알아보기 위해 [0.125, 1.0] 범위로 조절하며 실험했다.
그 결과 SR=0.75에서 최대 정확도를 달성하고, 그 이상에서는 더 나아지지 않았다.
(즉 $s_{i,1x1}$를 $e_i$에 가깝게 만든다 = squeeze를 덜한다, 이때 정확도는 높아지지만 75% 위로는 차이 x)
5.3 Trading off 1x1 and 3x3 filters
이 실험은 공간 해상도(다시 말해 1x1 filter를 많이 쓰면 large activation map이 나오므로 그걸 얼마나 줄일 수 있나?)의 중요성을 알아보기 위한 실험이다.
$pct_{3x3}$를 1%부터 99%까지 조절하며 실험했다.
그 결과, 딱 50%일 때 정확도가 최대이며, 이후로는 별반 차이가 없었다.
6. CNN Macroarchitecture Design Space Exploration
이 챕터는 거시적 레벨의 구조 변화가 어떤 영향을 줄지 실험하는 것이다.
크게 3가지 구조로 실험했다.
기본 SqueezeNet
SqueezeNet + Fire module 간 간단한 bypass connection
SqueezeNet + Fire module 간 복잡한 bypass connection
간단한 bypass는 추가적인 parameter가 없지만, 복잡한 bypass는 1x1 층이 새로 생기므로 parameter가 추가된다.
그 결과, 놀랍게도 복잡한 연결보다 간단한 연결이 더 우수하고, 더 가벼웠다.
야호!
'논문 읽기 > TinyML' 카테고리의 다른 글
DEEP COMPRESSION: COMPRESSING DEEP NEURAL NETWORKS WITH PRUNING, TRAINED QUANTIZATION AND HUFFMAN CODING (0) | 2024.11.08 |
---|