Computing

Compression - 1 : Overview 본문

Deep Learning/Optimization (Algorithm)

Compression - 1 : Overview

jhson989 2022. 3. 29. 23:55

Deep Learning Challenge 

딥러닝 기술이 점점 더 어려운 문제를 해결하기 위해 사용하면서 딥러닝 네트워크의 크기가 매우 커지고 있다. 이번 포스터는 딥러닝 네트워크가 커지면서 발생하는 문제점들과 그 문제를 해결하기 위한 방법을 [1], [2], [3] 자료를 바탕으로 정리하고자 한다.

 

딥러닝 네트워크는 방대한 양의 parameters을 사용하면서 parameter들이 데이터의 특징을 학습하도록 한다. 딥러닝 기술을 더 복잡한 데이터의 특징을 학습하도록 하기 위해서 점점 더 많은 parameters가 사용되는 딥러닝 네트워크 구조가 제안되고 있다. 이때 어떤 문제를 충분히 잘 해결하는 최적의 딥러닝 네트워크를 찾는 것은 매우 힘들다(애초에 불가능할 수도 있다). 어떤 네트워크가 많은 수의 parameters를 사용하여 데이터들의 특징을 잘 학습했다고 하더라도, 그 네트워크보다 적은 수의 parameters를 사용하는 네트워크도 같은 데이터들의 특징을 잘 학습할 수 있다.

 

딥러닝 네트워크가 커질수록 다음과 같은 문제[1]를 일으킬 수 있다.

  • Network model size
    • 딥러닝을 점점 더 어려운 문제를 풀기 위해 사용하면서 네트워크 크기가 매우 커지고 있음
    • GPT-1는 117M parameters 사용 -> GPT-3는 175B parameters 사용
  • Network training & inferencing time
    • Parameter 수가 증가할수록 학습 & 추론에 더 많은 계산이 필요 -> 더 많은 시간이 필요
  • Energy Efficiency
    • Parameter 수가 증가할수록 학습 & 추론에 더 많은 계산이 필요 -> 더 많은 에너지가 소모됨

 

데이터센터와 같은 시스템에서 사용할 경우 위 문제들은 어느 정도 참을 수 있으나, 스마트폰과 같은 성능 및 배터리가 제한된 모바일 디바이스나 자율주행차와 같은 성능이 중요한 경우 위 문제는 크리티컬할 수 있다.

 

 

 

Deep Learning Network Compression

이러한 네트워크 크기에 의한 문제를 해결하기 위해 network compression (네트워크 압축) 기술이 제안되고 있다. 앞서 말했듯 네트워크 구조를 제안할 때 그 구조가 최적의 구조라는 것을 확신할 수 없다. 따라서 학습이 완료된 네트워크를 조금 더 작은 사이즈의 네트워크로 바꾸는 network compression 기술이 활발히 연구되고 있다.

 

다음은 대펴적인 network compression 방식을 정리한 것이다.

  • Pruning
  • Quantization
  • Low-rank approximation and sparsity
  • Knowledge distillation

 

 

Pruning

가지치기 기술로 graph pruning으로 많이 들어보았을 개념이다.

 

Fig 1. Pruning 예제 [1]

 

Pruning은 네트워크 내의 영향이 크지 않는 parameters(Fig 1.의 edge를 의미)를 제거하는 기술이다. 주로 값이 0이거나 일정 threshold보다 작은 값을 가지는 weight parameter들을 제거한다. 이를 통해 parameters의 수를 줄일 수 있다.

 

 

 

Quantization

Parameter의 type에 따라서 모델의 사이즈와 계산 시 필요한 energy 사용량, 계산 성능이 달라진다.

 

Fig 2. 데이터타입에 따른 energy cost 및 area cost 비교 [1]

 

Fig 2.는 큰 데이터타입(32 bit)을 사용할수록 작은 데이터타입(8 or 16 bit)을 사용하는 계산 연산과 메모리 연산의 에너지 소모량이 크다는 것을 보여준다. 뿐만 아니라 float 연산과 int 연산에서의 경우에도 float 연산이 더 많은 에너지를 사용한다. 즉 데이터타입에 따라 메모리 사용량, 에너지 사용량, 계산 성능(계산 성능의 경우 디바이스 특징에 따라서 달라짐. 일반적으로 float->int 변환할 경우 계산 성능이 좋아짐)이 달라진다. 다만 Fig 3에서 확인할 수 있듯이 데이터타입이 달라질 경우 표현할 수 있는 수의 범위와 정확도가 달라지므로 쉽게 데이터타일을 변경할 수 없다.

 

Fig 3. Data type별 표현 가능한 수 범위 및 정확도 [3]

 

Quantization은 float 변수로 표현되는 parameters을 int32, int8로 변환하는 기술이다. 이를 통해 메모리 사용량, 에너지 사용량, 계산 성능 향상을 이끌어낸다. 앞서 언급했듯 float 변수를 int로 바꿀 경우 소수점 이하의 값이 사라지는 등, 정확도에 차이가 발생하기에 이에 주의하며 네트워크를 개발해야 한다.

 

 

 

Knowledge distillation

한국말 지식 증류라는 할 수 있는데, 한 네트워크가 가진 지식을 더 작은 네트워크가 핵심만을 학습(=증류)하도록 하는 training 기법이다.

 

Fig 4. Knowledge distillation 구조도 [2]

 

Fig 4.는 knowledge distillation을 잘 설명해주는 그림이다. knowledge distillation는 잘 학습된 teacher model을 이용해 더 작은 student model 학습을 돕는 형태로 진행된다. Student model은 같은 데이터에 대하여 teacher model이 추론한 값과 얼마나 차이가 있는 지를 loss로 하여 학습을 진행한다. 이와 같은 학습 방법은 teacher model과 같은 기능을 하는 더 작은 parameters로 구성된 student model 생성을 목표로 한다.

 

 

 

Reference

[1] Song Han, Efficient Methods and Hardware for Deep Learning, May 25, 2017, Stanford University

[2] Pavlos Protopapas, Compression Techniques and Distillation, Institute for Applied Computational Science

[3] Floran de Putter, Optimizing neural networks for inference, Electronic Systems group, Eindhoven university of technology