-
알고리즘 경량화 - 모델 압축 기법AI/Vision 2022. 10. 5. 18:36
현재 Deep Learning(DL) model들의 연구가 활발히 진행됨에 따라 가파른 성장을 보이고 있습니다.
Convolutional Neural Network (CNN)의 경우 이미 특정 데이터 세트에서는 classificatoin 성능이 인간을 뛰어넘었습니다.
CNN의 성능 지표이다. 이미 인간의 오류율을 뛰어 넘었음을 확인할 수 있다. 그러나 이러한 발전과 함께 CNN을 비롯한 DL model들은 더 깊어지고 복잡해지며 이전보다 더 많은 데이터와 더 많은 computing power를 요구하게 되었습니다.
이러한 문제는 제한된 실제 리소스 상황에서 좋은 성능을 가지는 최신 DL model을 사용하는 것에 무리가 생기게 됩니다. 이러한 문제를 해결하고자 많은 경량화 방법들이 연구되었습니다.
경량화의 큰 두가지 갈래 경량화를 진행하는 경우 반드시 기존 모델과 비슷한 수준의 성능을 유지하며 더 적은 parameter와 연산량을 가지게 하여 inference time을 줄여야 합니다.
경량화의 경우 크게 경량 알고리즘과 알고리즘 경량화 두 가지로 나누어 볼 수 있습니다.
경량 알고리즘 : 알고리즘 자체를 적은 연산과 효율적인 구조로 설계하여, 기존 모델 대비 효율을 극대화
알고리즘 경량화 : 만들어진 모델의 prameter를 줄이는 모델 압축과 같은 기법을 사용한 방법
오늘은 이 두 가지 방법들 중에 알고리즘 경량화에 대해서 살펴보도록 하겠습니다.
< 알고리즘 경량화 방법 및 특징 >
- 불필요한 parameter를 제거한다.
- parameter의 공통된 값을 가지고 공유한다.
- parameter의 표현력을 잃지 않으면서 기존 모델의 크기를 줄인다.
-> 즉, 기존 모델의 설계를 건드리지 않고 압축을 진행하는 방식입니다.
< 알고리즘 경량화 기법 >
- 모델 압축
- Pruning
- Quantization / Binarization
- Weight Sharning
- 지식 증류 (Knowledge Distillation)
- 하드웨어 가속화
- 모델 압축을 적용한 경량 모델 자동 탐색 기술
이중 모델 압축 기법에 대해서 집중적으로 알아보도록 하겠습니다.
1.1 Pruning
pruning은 기존 Decision Tree에서 많이 사용되는 방법입니다.
Decision Tree 에서의 Pruning Decision Tree의 tree pruning의 경우 overfitting을 방지하기 위해서 많이 사용됩니다.
pruning은 decision tree의 overfiiting을 줄이고 일반화 가능성을 증대시키는 sub-tree를 찾는 과정입니다.
경량화 기법에서의 pruning은 이와 유사하게 연결을 자르는 방식으로 진행됩니다.
모델 학습 시 중요한 parameter는 살리고 그렇지 않은 parameter는 pruning을 합니다.
pruning이 진행되면 오른쪽과 같이 연결이 줄어든다. (pruning 논문의 figure)
< Pruning flow >
pruning 논문에서 제시하는 flow Pruning은 위 그림과 같은 순서로 진행합니다.
1. Train Connecitivity
일반적인 학습 과정을 통해서 어떤 연결들이 중요한지를 파악합니다.
2. Prune Connections
Weight가 threshold 보다 낮은 경우에 제거합니다.
Dense network를 통해서 sparse network를 얻게 되는 과정.
이 과정에서 다양한 방법으로 ranking을 만들어가 threshold를 정할 수 있습니다.
3. Train Weights
Weight 제거로 만들어진 sparse network를 retrain 하여 보완합니다.
retrain을 하지 않으면 performance drop 문제가 생기게 됩니다.
< Training Detail >
# Regularization (정규화)
올바른 정규화를 선택하는 것은 pruning과 retraining에 영향을 미치게 됩니다.
L1 정규화 : weight 절댓값의 합에 비례하여 weight에 페널티를 부과하며 중요도가 낮은 weight를 0이 되도록 한다.
L2 정규화 : weight 제곱의 합에 비례하여 weight에 페널티를 부과하며 이상점 weight를 0에 가까운 값이 되도록 한다.
L1, L2 정규화 모두 사용할 수 있지만, 전체적으로 L2 정규화가 좋은 pruning 결과를 가져오게 되므로 L2 정규화를 사용하는 것을 권장하고 있습니다.
# Dropout and Capacity Control
Dropout은 overfitting 방지를 위해서 많이 사용이 되는 기법입니다.
그러나 retraining 주에서는 model 용량의 변화를 고려하여 dropout 비율을 조정해야 합니다.
Parameter를 pruning 되면 다시 되돌릴 수 없습니다.
Pparameter가 sparse 해지면 분류기가 가장 유용한 예측 변수를 선택하므로 예측 분산이 훨씬 작아져 overfitting이 감소하게 됩니다. (이는 위에서 설명한 decision tree와 유사하게 적용되는 듯합니다.)
그러므로 model의 capcity가 이미 감소하였으므로 retraining dropout은 더 작아져야 합니다.
# Local Pruning and Parameter Co-adaptation
Retraining 중에는 pruned layer를 다시 초기화하는 것보다 pruning pruning에서 살아남은 연결에 대해 초기 학습 단계의 weight를 유지하는 것이 좋다. ( finetuning 하는 게 좋다. )
# Iterative Pruning
원하는 pruning 수준을 달성할 때까지pruning과 retraining retraining을 반복적으로 수행
최상의 connectionconnection을 찾는 greedy search.
# Pruning Neurons
반복적인 pruning process를 수행하면서 입력 연결이 0이거나 출력 연결이 0인 노드는 제거된다.
출처 : https://blogik.netlify.app/BoostCamp/U_stage/45_pruning/ 위 이미지와 같이 많은 pruning 기법이 연구되고 있습니다.
1.2 Quantization (양자화)
Neural Network Model의 내부는 대부분 weight와 activation output으로 구성되어 있습니다.
이때, weight와 activation output은 model의 정확도를 높이기 위해서 32bit floating point로 표현됩니다.
그러나, 실제 우리가 스마트폰, 자동차, 가전기기 등에 embedding 할 땐 리소스가 제한되게 되는 이때 32bit floationg point를 사용하기에는 무리가 있습니다.
양자화는 이러한 문제를 해결하기 위해서 사용하는 bit 수를 줄여 model의 크기를 줄이는 방법입니다.
출처 : https://wooono.tistory.com/405 양자화 또한 위와 같이 다양하 기법들이 연구되고 있습니다.
# When?
- 학습과정
- 학습한 뒤
# How?
- Dynamic
학습한 뒤, weight 만 양자화하고 있다가,
inference 시점에 동적으로 activation activation을 양자화
- Static
학습한 뒤, 모두 양자화
# What?
- weight
- activation
# How much?
- 16 bit
- 8 bit
- 4 bit
- 2 bit
- 1 bit
- Mixed-Precision
1.3 Weight Sharing
낮은 정밀도에 대한 높은 내성을 가진 신경망의 특징을 활용해 weight를 근사하는 방법.
기존 weight 값들은 근사한 값 (코드북)을 통해 weight들을 공유하는데, 코드북과 그 값에 대한 인덱스만을 저장하는 구조이므로, 실제 저장 공간을 절약할 수 있다.
근사화 방식은 weight들의 유사도에 기반하는데, 주로 K-Means 또는 Gaussian Mixture Model을 활용한다.
참조 자료
# Pruning
https://blogik.netlify.app/BoostCamp/U_stage/45_pruning/
모델 경량화 1 - Pruning(가지치기)
가지치기 by 홍원의 마스터님, BoostCamp AI Tech 8주차
blogik.netlify.app
https://kimdingko-world.tistory.com/104
머신러닝 - 의사결정나무(Decision Tree)
의사결정나무(Decision Tree)란? 의사결정 나무란 예측변수를 기반으로 분류하거나 예측하는 머신러닝 모델기법으로 반복적으로 질문을 던져 질문에 대한 Yes or No 에 따라 대상을 구분해가는 방식
kimdingko-world.tistory.com
https://seongkyun.github.io/study/2019/04/16/model_comp_1/
Model compression(Pruning/Distillation) 정리 · Seongkyun Han's blog
seongkyun.github.io
https://wannabeaprogrammer.tistory.com/41?category=854834
Pruning 논문 2편 정리
1. 3단계 pruning 학습 pipeline (원본 논문 Link) 1) 개요 신경망 모델의 정확도에 영향을 주지 않고 모델 저장 공간 및 모델 연산량을 절감할 수 있는 방법론을 제안함 3단계 pruning 학습 방법을 이용하
wannabeaprogrammer.tistory.com
# Quantization
https://wooono.tistory.com/405
[DL] 양자화(Quantization)란?
들어가기 앞서, 모바일이나 임베디드 환경에서, 딥러닝 모델을 사용한 추론은 어렵습니다. 일반 PC 와 달리, 메모리, 성능, 저장공간 등의 제한이 있기 때문입니다. 따라서, 딥러닝에서는 모델 경
wooono.tistory.com
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=dmatrix&logNo=221248293331
IEEE 754 float 32-bit
Computer에서 floating point을 나타낼 수 있는 방법은 여러가지이지만, 거의 모든 컴퓨터에서 IEEE 7...
blog.naver.com
# Weight sharing
https://zerojsh00.github.io/posts/Vector-Quantization/
Vector Quantization과 Codebook 개념 정리
이 포스트는 개인적으로 공부한 내용을 정리하고 필요한 분들에게 지식을 공유하기 위해 작성되었습니다. 지적하실 내용이 있다면, 언제든 댓글 또는 메일로 알려주시기를 바랍니다.
zerojsh00.github.io
# 그 외
경량화 정리 kci 논문
https://ettrends.etri.re.kr/ettrends/176/0905176005/34-2_40-50.pdf
Pruning paper
https://www.semanticscholar.org/reader/1ff9a37d766e3a4f39757f5e1b235a42dacf18ff
'AI > Vision' 카테고리의 다른 글