초록 |
딥러닝(Deep Learning)은 인공지능의 한 분야이다. 딥러닝의 대표적인 예로 Convolutional Neural Networks(CNN)가 있다. CNN은 이미지 분류(image classification), 객체 감지(object detection) 및 시맨틱 세분화(semantic segmentation)와 같은 컴퓨터비전(computer vision) 영역에서 지난 10여 년 동안 상당한 기술적인 진전을 이루어왔고, 우리의 일상생활에도 많이 이용되고 있다. 지난 10년 동안 컴퓨터비전에서 딥러닝 모델의 새로운 아키텍처 개발뿐만 아니라 모델의 압축(compression)에 대한 연구도 함께 진행되어왔다. 딥러닝 모델의 압축은 모델의 메모리 크기를 줄이고, 모델의 수행 속도를 높이고, 전력 소모는 낮추는 데에 목적이 있다. 이러한 압축 방법들 중 하나가 딥러닝 모델의 양자화(quantization)이다.<br /> 양자화(quantization)는 컴퓨터프로그램에서 일반적으로 사용되는 부동소수점(floating point) 32비트를 고정소수점(fixed point) 16비트(bitwidth) 또는 정수(integer) 8비트와 같은 상대적으로 낮은 정밀도로 대체하는 것이다. 일반적으로 컴퓨터에서는 변수값이 예를 들어 35.4567287… 등의 32비트로 저장되고 연산에 사용되는데, 이것을 고정소수점 35.46이라든가 정수 35로 변환해서 저장하고 연산하는 것이 양자화이다. <br /> 인공지능, 특히 딥러닝 모델에서의 양자화(quantization)는 딥러닝 모델을 더 빠르고 더 낮은 메모리 요구사항으로 실행할 수 있는 저렴하고 쉬운 방법이다. 이러한 양자화를 통해서 연산에 따른 파워 소모를 낮추고, 메모리 bandwidth를 낮추고, 모델의 저장용량도 낮추고, 모델의 수행 속도는 높일 수 있는 다양한 장점이 있다.<br /> 딥러닝의 양자화는 정보 압축에 기초를 두고 있다. 딥러닝에서의 양자화는 가중치(모델 파라미터) 및/또는 활성화(activation)된 변수값의 수치적 정밀도를 줄이는 것을 의미한다. 딥러닝 모델을 양자화하면 메모리가 작아지고, 소비전력이 줄어든다. 물론 양자화를 하게 되면 모델의 정확도(accuracy)가 저하될 가능성이 있다. 따라서 어떻게 하면 이러한 정확도의 저하를 최소화시킬 수 있을 것인가 하는 것이 관건이다. 그림 1에 딥러닝의 가중치를 양자화하는 예를 나타냈다.<br /> <br /> 그림 1. 딥러닝 모델의 가중치의 양자화의 예[7]<br /> <br /> 이 보고서에서는 딥러닝에서 양자화의 기초 원리에 대해 설명하고 각 기술이 실제로 어떻게 실행되는지 구체적인 예를 가지고 살펴볼 것이다. 본 보고서의 내용 중 상당 부분은 참고문헌 1을 참고로 했다. Program coding을 포함한 실제적인 예를 들기 위해서, Pytorch를 사용하여 darknet19[2] 기반 모델을 구축했다. Darknet19은 19개의 convolutional layer로 구성되어 있고, 활성화 함수로는 leaky_relu를 사용하고 있다. Darknet19의 아키텍처를 그림 2에 나타내었다. 본인은 Darknet19을 이용하여 1,000개의 클래스가 있는 ImageNet2012 데이터세트에 대해서 모델을 훈련시켰다. 입력 이미지 크기는 (224,224,3)이다. float32 모델의 top1 및 top5 정확도는 0.7207, 0.9137이다.<br /> <br /> 그림 2. Darknet19의 아키텍처[3]<br /> |