우노
[DL] 양자화(Quantization)란? 본문
들어가기 앞서,
- 모바일이나 임베디드 환경에서, 딥러닝 모델을 사용한 추론은 어렵습니다.
- 일반 PC 와 달리, 메모리, 성능, 저장공간 등의 제한이 있기 때문입니다.
- 따라서, 딥러닝에서는 모델 경량화와 관련된 연구들이 많이 진행되고 있습니다.
- 즉, “모델을 가볍게 만드는 연구”라고 이해할 수 있습니다.
- 이러한 경량화 연구는 크게 두 가지로 나눠집니다.
- 모델을 구성하는 알고리즘 자체를 효율적인 구조로 설계하는 연구
- 기존 모델의 파라미터들을 줄이거나 압축하는 연구
- 전자의 경우, 대표적인 방법으로 “모델 구조 변경”, “효율적인 합성곱 필터 기술”, “경량 모델 자동 탐색 기술” 이 존재합니다.
- 모델 구조 변경
- 모델 구조를 변경함으로써 경량화하는 방법 (ResNet, DenseNet, SqueezeNet, etc)
- 효율적인 합성곱 필터 기술
- 채널을 분리시켜, 연산량과 변수의 개수를 줄임으로써 경량화하는 방법 (MobileNet, ShuffleNet, etc)
- 경량 모델 자동 탐색 기술
- 자동 탐색 기법을 사용해, 경량화할 수 있는 모델 구조와 합성곱 필터를 설계하는 방법 (NetAdapt, MNAsNet, etc)
- 모델 구조 변경
- 후자의 경우, 대표적인 방법으로 “가중치 가지치기”, “양자화”, “이진화” 가 존재합니다.
- 가중치 가지치기 (Weight Pruning)
- 결과에 영향을 미치는 파라미터들을 제외한 나머지 파라미터들을 0 으로 설정하는 방법
- 양자화 (Quantization)
- 부동소수점으로 표현되는 파라미터들을 특정 비트 수로 줄이는 방법
- 이진화 (Binarization)
- 파라미터들을 이진화함으로써, 표현력은 줄어들지만, 정확도의 손실은 최소로하는 경량화 방법
- 예를 들어, -1 과 1 로만 표현
- 파라미터들을 이진화함으로써, 표현력은 줄어들지만, 정확도의 손실은 최소로하는 경량화 방법
- 가중치 가지치기 (Weight Pruning)
양자화란?
Neural Network 모델의 내부는, 대부분 weight 와 activation output 으로 구성되어 있습니다.
또한, weight 와 activation output 은 모델의 정확도를 높이기 위해, 32bit floating point (FP32) 로 표현되고 있습니다.
전체적인 구조는 아래와 같습니다.
32bit floating point 는 아래와 같이 표현됩니다.
하지만, 리소스가 제한된 환경에서, 모든 weight 와 activation output 을 32bit floating point 로 표현한 모델은, 추론에 사용하기 어렵습니다.
따라서, 양자화는 weight 와 activation output 표현에 사용되는 비트 수를 줄임으로써, 모델의 크기를 줄이는 것을 의미합니다.
물론, 기존 모델보다 성능은 떨어질 수 있지만, 모델의 크기가 줄어들기 때문에, 제한된 리소스 환경에서도 사용할 수 있게 됩니다.
양자화의 주 목적
- Training Time 을 줄이는게 아닌, Inference Time 을 줄이는 것이 주 목적입니다.
양자화 예제
- 각 계층의 소수값(Float32)들 중, 최소/최대 값을 구합니다.
- 해당 소수값(Float32)들을, 선형적으로 가장 가까운 정수값(Int8)에 매핑합니다.
- 예를 들어, 기존 계층의 소수값 범위가 -3.0 부터 6.0 까지라면,
- -3.0 은 -127 로, 6.0 은 +127 로 매핑됩니다.
- 이 방식을 사용한다면, 32bit 로 표현되는 weight 를 적은 bit 로 표현할 수 있으므로, 메모리 감소 효과 를 볼 수 있습니다.
양자화 종류
- 언제 Quantiation?
- Quantiation Aware Training
- FP 모델로 학습하는 과정에서 Quantization 하는 것
- Post Training Quantiation
- FP 모델로 학습한 뒤, Quantization 하는 것
- Quantiation Aware Training
- 어떻게 Quantiation?
- Dynamic
- FP 모델로 학습한 뒤, weight 만 Quantiation 하고 있다가,
- inference 시점에 동적으로 activation 을 Quantiation 하는 것
- Static
- FP 모델로 학습한 뒤, weight 와 activation 에 대해 Quantiation 하는 것
- Dynamic
- 무엇을 Quantiation?
- Weight
- Activation
- 얼마나 Quantiation?
- 16bit
- 8bit
- 4bit
- 2bit
- 1bit
- Mixed-precision
추가
- PTQ 의 경우, 모델이 작을수록 Quantization 에 따른 정확도 감소가 크게 일어날 수 있습니다.
- 모델이 작을수록, Quantization 에 따라 모델이 예민하게 반응하기 때문입니다.
참고
- https://ko.wikipedia.org/wiki/양자화
- https://shelling203.tistory.com/30
- https://talkingaboutme.tistory.com/entry/Embedded-DL-Tensorflow-Lite-Quantization
- https://tensorflowkorea.gitbooks.io/tensorflow-kr/content/g3doc/how_tos/quantization/
- http://itteckmania.blogspot.com/2018/03/quantize.html
- https://ko.wikipedia.org/wiki/IEEE_754
- http://itteckmania.blogspot.com/2018/03/quantize.html
- https://velog.io/@jooh95/딥러닝-Quantization양자화-정리
- https://computistics.tistory.com/22
- https://blogik.netlify.app/BoostCamp/U_stage/46_quantization/
- https://gaussian37.github.io/dl-concept-quantization/
'AI > Deep Learning' 카테고리의 다른 글
[DL] TVM 이란? (0) | 2022.01.12 |
---|---|
[DL] TFLite 와 TensorRT 간단 비교 (2) | 2022.01.12 |
[DL] Tensorflow version 확인 (0) | 2021.11.04 |
[DL] Tensorflow 모델 저장/불러오기 (0) | 2021.08.12 |
[DL] Distributed Training (분산 학습) 이란? (0) | 2021.07.29 |
Comments