논문 읽기/Model Compression

[논문 읽기] Deep Compression(2016), Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding

AI 꿈나무 2021. 6. 13. 14:12
반응형

 안녕하세요, 오늘 읽은 논문은 Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding 입니다.

 

 해당 논문에서 제안하는 방법으로 성능저하 없이 AlexNet의 메모리를 240MB -> 6.9MB로 35x 감소시킵니다. VGG-16의 경우에는 552MB -> 11.3MB로 49x 감소시킵니다.

 

 

 논문에서 제안하는 Deep Compression은 3가지 단계로 구성됩니다. 1) 많은 정보를 포함하는 connection만을 유지한채로 쓸모없는 connection을 제거하여 model을 pruning 합니다. 2) 가중치들을 quantize 합니다. 비슷한 값을 가진 weight들을 동일한 weight 갖도록 bin에 넣어 weitht sharing을 한 후 bin의 인덱스만을 저장합니다. 3) 허프만 코딩으로 가장 빈번한 weight 값을 적은 bit로 표현합니다.

 

Network Pruning

 일반적인 방법으로 신경망을 학습하여 connectivity를 학습합니다. 그 후에 small-weight connections를 prune 합니다. 일정 임계값 이하인 가중치들을 가진 connections은 제거됩니다. 최종적으로 spase connection을 가진 신경망이 탄생합니다. 이러한 pruning으로 AlexNet의 파라미터를 9배, VGG-16의 파라미터를 13배 감소합니다.

 

 pruning하여 생성된 sparse structure을 compressed sparse row(CSR)또는 compressed sparse column(CSC) 형식으로 저장합니다. 이것은 2a + n + 1의 숫자만을 필요로 하며, a는 non-zero elements의 수, n은 row또는 column의 수 입니다.

 

 

 CSC또는 CSR 형식으로 저장된 sparse matrix에 absulute position을 저장하는 대신 index difference를 저장합니다. conv layer에서는 8bit, fc layer에서는 5bit로 표현합니다. 만약에, non-zero element의 간격이 8비트 또는 5비트 이상 차이난다면 위 그림처럼 zero padding을 추가합니다.

 

Trained Quantization and Weight Sharing

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

 

 

 weight sharing은 위 그림처럼 진행합니다. 입력 벡터 크기가 4, hidden layer 노드가 4개라면 가중치가 4x4 행렬로 표현됩니다. 이 가중치들이 4개의 bin으로 quantize 됩니다. 비슷한 값을 갖는 가중치들이 동일한 빈에 담겨서 동일한 값으로 표현됩니다. weight sharing된 가중치들에 대한 loss도 동일하게 묶여 sum 과정을 거쳐 하나의 값으로 표현됩니다. 여기에 lr을 곱하여 bin의 값들이 fine-tuning 됩니다. conv layer는 8bit로 표현하므로 256개의 shared weight가 존재합니다.

 

1) Weight sharing

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

 

 

2) Initialization of shared weights

 centroid initialization은 clustering의 quality에 영향을 주므로 신경망의 정확도에도 영향을 미칩니다. 해당 논문에서는 Forgy, Density-based, Linear 3가지 방법을 실험하며, Linear방법을 사용하기로 결정합니다.

 

 

 

 linear initialization이 가장 좋은 결과를 나타냅니다. 높은 값을 갖는 가중치는 큰 역할을 하는데, forgy와 density-based 방법은 높은 값을 갖는 centroid가 얼마 없습니다. linear은 weight 최대 최소 값에 따라 선형간격으로 centroid를 결정합니다. 따라서 linear 방법은 낮은 값과 높은 값에 골고로 centroid value를 갖습니다. 이 덕분에 수는 적지만 큰 역할을 하는 높은 값의 weight를 share weight로 표현할 수 있습니다.

 

3) Feed-Forward and Back propagation

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

 

 

Huffman Coding

 마지막으로 huffman coding을 사용하여 가장 빈번하게 나타나는 weight 값을 더 적은 bit로 표현합니다.

 

Performance


참고자료

[1] https://arxiv.org/abs/1510.00149

반응형