상세 컨텐츠

본문 제목

[논문 리뷰 스터디] Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding

심화 스터디/논문 리뷰 스터디

by 예바뤼 2023. 5. 30. 16:46

본문

17기 김예은

 

 

0. Abstract

이 논문은 딥러닝 분야에서의 최우수 학회 중 하나인 ICLR 2016에서 발표되었으며, 최우수 논문으로 선정된 논문 중 하나이다. 논문에서 제안한 방법인 Deep Compression은 딥러닝 네트워크를 압축하여 그 용량과 에너지 소비량을 줄이는 기법으로, 우수한 압축 성능을 보였다는 점에서 현재까지도 베이스라인(baseline) 방법으로 다루어지고 있다. 

1. Background

딥러닝 모델은 레이어들로 구성되어 있으며 뉴런들이 서로 연결된 구조를 띠고 있다. 

 

딥러닝 구조

딥러닝 모델의 에너지 소비 문제

- 큰 네트워크를 사용할 때 가중치를 인출하는 과정에서 많은 메모리 대역폭을 요구하고 포워딩을 위해 많은 수의 내적 연산이 수행된다. 이 때 메모리 접근 과정에서 많은 에너지 소비가 발생한다.

 

-> 뉴럴 네트워크의 용량과 에너지 소비량을 줄일 수 있는 Deep Compression을 제안한 논문으로, 이 방법은 성능저하 없이 AlexNet의 메모리를 240MB -> 6.9MB로 35x 감소시킬 수 있으며, VGG-16의 경우에는 552MB -> 11.3MB로 49x 감소시킬 수 있다.

 

2. Deep Compression 의 3단계

 

 논문에서 제안하는 Deep Compression은 3가지 단계로 구성한다.

 

1) 가지치기(Pruning): 많은 정보를 포함하는 connection만을 유지한 채, 불필요한 연결을 제거(model pruning) 한다.

2) 양자화(Quantization): 가중치들을 quantize 하여 비슷한 값을 가진 weight들을 동일한 weight 갖도록 bin에 넣음으로써 가중치를 나타내기 위한 비트(bit)의 수를 감소시킨다.

3) 허프만 코딩(Huffman coding): 가장 빈번하게등장하는 가중치( weight ) 값에 작은 코드워드를 할당하여 비트(bit)의 수를 감소시킨다. 

 

3. Network Pruning

네트워크 가지치기(Network Pruning)은 복잡도(complexity)과적합(over-fitting) 감소에 기여한다.

 

1) 일반적인 네트워크 학습을 진행한다.

2) 가중치 값이 작은 연결을 제거한다.

3) 남아있는 연결을 유지한 채로 가중치를 재학습한다. 

 

Network Pruning

가지치기 후에는 희소행렬이 생성되며, 다양한 네트워크에서 용량을 획기적으로 줄일 수 있을 뿐만 아니라 정확도는 거의 유지되는 좋은 성능을 가진다.

 

--희소 구조--

Coordinate Format (COO)

0이 아닌 원소의 개수가 a 일 때 3a 만큼의 원소가 요구된다. 

 

Compressed Sparse Row (CSR)

행 압축 정보(Row Pointer)을 이용하여 희소행렬을 표현하는 자료구조로 2a + (n+1) 만큼의 원소가 요구된다. (n: 행 길이)

 

 

-> Deep Compression은 희소구조를 compressed sparse row(CSR)또는 compressed sparse column(CSC) 형식으로 저장하고, 희소구조에 따라 2a + n + 1의 수를 저장해야한다. 또한 추가적인 압축을 위해 절대적인 위치를 저장하지 않고, 위치 사이의 차이를 저장한다.

 

conv layer에서는 8bit, fc layer에서는 5bit로 표현되는데, 만약, non-zero element의 간격이 8비트 또는 5비트 이상 차이난다면 위 그림처럼 zero padding을 추가한다.

 

4.Trained Quantization and Weight Sharing

pruning된 모델을 quantization과 weight sharing을 적용하여 추가적으로 compress 한다. 각 가중치를 표현하는데 필요한 bit수를 감소시키는 과정으로, 여러 값을 갖고 있는 가중치들이 동일한 가중치를 갖도록 weight sharing을 하여 가중치의 수를 제한한다.

 

1) 실제로 사용할 가중치의 개수를 설정한다.

2) 해당 k개의 가중치를 저장한 뒤에 이를 공유한다.

3) 해당 k개의 가중치를 미세조정(fine-tuning)한다.

 

 weight sharing은 위 그림처럼 진행되는데, 입력 벡터 크기가 4, hidden layer 노드가 4개라면 가중치가 4x4 행렬로 표현됩니다. 이 가중치들이 4개의 bin으로 quantize 된다. 비슷한 값을 갖는 가중치들이 동일한 빈에 담겨서 동일한 값으로 표현할 수 있게 된다. 

 

 

 

 

압축률은 다음과 같이 구할 수 있다.

 

 

 

 

 

1) Weight sharing (가중치 공유)  

 shared weights들은 동일한 값을 갖는데, 이 값들은 k-means clustering으로 결정된다. n개의 가중치가, k개의 cluster로 표현되는 것이다. k-means clustering은 아래 식이 최소화 하는 방향으로 학습하고, same weight 값을 centroid라고 표현한다.

centroid(학습된 가중치) = 코드북(Codebook)

2) Initialization of shared weights (공유된 가중치 초기화)

 centroid initialization은 clustering의 quality에 영향을 주기 때문에 신경망의 정확도에 영향을 준다.

해당 논문에서는 Forgy, Density-based, Linear 3가지 방법으로 실험하였다. 

1) Forgy(Random) 초기화: 초기중심점을 가중치 중 랜덤으로 k개 선택한다.

2) Density-based 초기화: 가중치의 CDF에서 y축에 대해 동일한 간격으로 초기중심점을 선택한다.

3) Linear 초기화: 가중치의 [min,max] 사이에서 동일한 간격으로 초기중심점을 선택한다. 

 

위 결과를 통해 Linear Initialization이 가장 좋은 결과가 나오는 것을 확인할 수 있다. 

 

3) Feed-Forward and Back propagation

 역전파과정에서 loss는 동일한 bin에 담긴 weight들에 대하여 loss를 하나로 묶어 역전파를 진행합니다. 이를 구현하기 위해 indicator function을 사용합니다.

 

5. Huffman Coding

Huffman Coding을 사용하여 가장 빈번하게 나타나는 weight 값을 더 적은 bit로 표현할 수 있다.

 

허프만 트리(Huffman Tree) 구축 알고리즘

1) 각 심볼을 출현 빈도와 함께 하나의 노드로 생성한다.

2) 모든 노드를 우선순위 큐에 삽입한다.

3) 우선순위 큐에 노드가 하나 남을 때까지 다음과 같은 과정을 반복한다.

     -우선순위 큐에서 2개의 노드 추출       - 2개의 노드를 자식 노드로 하는 새로운 노드를 생성해 우선순위 큐에 삽입

1 단계
2단계
3단계

 

허프만 트리 구축 완성 단계

다음과 같이 각 심볼에 대한 다른 길이의 부호를 부여할 수 있게 된다. 따라서 허프만 부호화를 이용해 가변 길이 부호화를 진행할 수 있게 된다. 

 

6. Performance

Deep Compression은 네트워크의 용량을 35배에서 49배까지 압축할 수 있었다. 

(압축과정: Pruning(13X) -> Quantization(31X) -> Huffman Coding(49X)

 

압축 결과를 확인해보면, 압축률은 높으며, 정확도의 감소는 거의 일어나지 않았다는 점을 확인해 볼 수 있다. 또한, Pruning은 가중치 행렬을 희소 행렬로 바꾸므로 인덱스를 저장하기 위한 추가적인 공간이 필요하고, Quantization은 코드북(Codebook)을 위한 추가적인 공간이 필요하나 이에  따른 오버헤드는 무시할 만한 수준이기에 좋은 성능을 가지고 있다고 판단할 수 있다.

 

Reference

Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding (ICLR 2016 Oral)1510.00149.pdf (arxiv.org)

Deep Compression [꼼꼼한 딥러닝 논문 리뷰와 코드 실습] - YouTube

 

관련글 더보기

댓글 영역