논문

하루에도 수만개의 글자를 읽고 있습니다. 하루에도 수백장의 종이를 들춰 읽습니다.
이것은 그 읽기에 대한 일기입니다.

Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding

1 Introduction

  • 컴퓨터 비전 분야에서 신경망은 매우 강력하지만 많은 수의 가중치들은 저장공간과 메모리 대역폭을 소모합니다.
  • 이런 이유로 신경망을 모바일 앱에 포팅하는 것을 어렵게 만들고 있습니다.
  • 첫번째 문제는 바이너리의 크기이며, 두번째 문제는 메모리 억세스에 의한 에너지 소모입니다.
  • 이 논문에서는 추론(inference)을 행할 때, 저장공간과 에너지 소모를 줄이기 위한 방법으로 deep compression을 제안합니다.
  • 원래의 정확도를 유지하면서도 바이너리 크기를 줄이기 위해, 먼저 중복된 연결을 제거하고 정보를 크게 가지고 있는 것들만을 유지시킵니다.
  • 다음 가중치들은 양자화(quantized)되어 여러 연결들이 같은 가중치 값을 공유하여 사용하도록 하여, 코드북을 통해 필요한 가중치의 인덱스만 저장하도록 하였습니다.
  • 마지막으로 허프만 코딩(Huffman coding)을 통해 남은 가중치의 분포가 한쪽으로 몰려 있는 경우 이득을 보도록 하였습니다.

2 Network Pruning

  • 일반적인 신경망 학습을 통해 연결을 학습하는 것으로 시작합니다.
  • 다음 작은 가중치를 가지는 연결을 제거합니다. 즉, 스레스홀드 값 이하의 가중치를 갖는 모든 연결을 제거합니다.
  • 마지막으로 남은 스파스(sparse) 연결들을 이용한 최종 가중치를 다시 한번 학습합니다.
  • 가지치기(pruning)된 스파스 구조는 compressed sparse row (CSR) 혹은 compressed sprase column (CSC) 형식으로 저장합니다.
  • 압축을 더 하기 위하여 가중치의 실제 위치를 사용하지 않고, 다음 가중치와의 인덱스 차이를 기록하여 저장하도록 합니다.
  • 이렇게 하면 conv 층은 8비트, fc 층은 5비트만을 사용할 수 있습니다.
  • 만약 인덱스 차이가 이 비트를 넘어서면 0을 삽입합니다.

3 Trained Quantization and Weight Sharing

  • 신경망 양자화와 가중치 공유를 통하여 앞의 결과를 더 압축할 수 있습니다.
  • 여러 연결을 하나의 가중치를 공유하도록 하여 의미있는 가중치의 수를 제한하고, 이에 맞게 파인튜닝을 수행합니다.
  • 가중치들은 실제 가중치의 수보다 적은 수의 대표값으로 양자화되어 이들 중 하나를 사용하고, 그 인덱스만을 저장합니다.
  • 학습 과정에서는 같은 가중치를 사용하도록 된 그래디언트들을 모두 더한 뒤, 이를 대표 그래디언트로 사용하여 양자화 대표 값을 갱신합니다.

3.1 Weight Sharing

  • 공유할 가중치를 정의하기 위하여 k-means 클러스터링을 사용하였습니다.
  • 같은 클러스터에 속하는 모든 가중치는 같은 값을 사용하도록 될 것입니다.

3.2 Initialization of Shared Weights

  • 양자화 가중치의 초기화는 신경망의 성능에 영향을 끼칩니다.
  • Forgy(random), density-based, linear initialization 의 3가지 방법을 실험해보았습니다.
  • 큰 가중치들을 작은 것들보다 더 중요한 역할을 하지만, 그 수는 적습니다. 따라서 Forgy나 desntiy-based 방법으로는 이들 가중치에서 좋지 못한 결과를 낳았습니다. Linear initialization에서는 이러한 문제가 없었습니다.

3.3 Feed-forward and Back-propagation

  • 1차원 k-means 클러스터링의 중점이 공유 가중치입니다.
  • 역전파(back-propagation) 시에는, 각 공유 가중치의 그래디언트을 계산한 뒤, 이를 이용하여 공유 가중치를 갱신합니다.

4 Huffman coding

  • 각 심볼의 출현 빈도에 따라 테이블을 작성한 위, 더 자주 나오는 심볼에 적은 비트를 할당합니다.

5 Experiments

6 Discussions


Add a Comment Trackback