딥러닝 경량화 기법 pruning은 무엇이고 왜 등장했는가

1. motivation

 

태어날 때 50조개의 neuron이 있는데 1년 뒤에는 1000조개의 neuron이 있다고함

 

이제 어른이 되면서 자주 쓰는 neuron은 보존하면서 자주 쓰지 않는 neuron은 없어지면서 500조개로 줄어든다고함

 

비슷한 원리로 막 설계한 machine learning model을 training하면서 complexity를 늘려가는데

 

자주쓰는 parameter는 살리고 자주 쓰지 않는 parameter는 제거

 

중요한 parameter는 살리고 중요하지 않은 parameter는 제거하는 기법

 

neural network뿐만 아니라 decision tree에서도 주로 사용해왔다

 

 

 

2. pruning을 왜 하는가?

 

network의 parameter를 잘라내니까 복잡도가 감소함

 

복잡도가 감소하면서 inference speed가 증가함

 

세밀하고 복잡하게 튜닝된 network를 덜 복잡하게 만들어 일반화시키는 regularization효과를 얻음

 

반대로 parameter를 잘라내면서 정보가 손실

 

어떻게 pruning을 하느냐에 따라 hardware에 올려 optimization을 할 때 까다로워질 수 있다고 함

 

보통 sparse하게 tensor를 만들면 까다로워진다고 함

 

 

3. optimal brain damage

 

30년전 1989년에 이미 ‘by removing unimportant weight from a network, several improvements can be expected: better generalization, fewer training examples required, and improved speed of learning and/or classification’라고 언급하여 pruning 개념이 등장했음

 

 

4. pruning의 효과

 

pruning 전에 weight value 분포가 0 주변에 상당히 많이 위치했는데

 

pruning을 하면 오른쪽 weight value 분포로 변하면서 0 주변의 weight들이 상당히 많이 없어짐

 

어느정도냐면 오른쪽 그래프를 왼쪽으로 옮겨보면 빨간색 선으로 1/10 수준

 

 

 

왼쪽이 pruning 전, 오른쪽은 pruning 후

 

scale이 달라서 scale을 맞추면 오른쪽 그래프는 왼쪽의 빨간선에 맞춰짐…

 

pruning을 하면 0 주변의 weight를 거의 대부분 없앤다는 사실을 알 수 있다

 

왜 그러냐면 network의 forward pass중에 0 주변의 weight는 중요하게 영향을 끼치지 않으니까 없앤다는 것이다.

 

 

5. pruning과 dropout의 차이

 

두 기법 모두 weight를 제거한다는 점, regularization 효과를 얻는다는 점에서 비슷하다

 

그렇다면 둘의 차이점은? pruning같은 경우는 한번 제거한 weight는 영원히 제거한다.

 

inference time에도 제거한 weight를 더 이상 복원하지 않음

 

dropout은 regularization이 목적이고 epoch 돌아가면서 꺼진 weight는 다시 켜질수 있고 추후 inference time에는 모든 weight를 다 키고 inference를 수행함

 

(최근에 수능영어모델링 하면서  배우긴했지만 꼭 그럴 필요는 없더라..)

 

왼쪽은 pruining, 오른쪽은 dropout

 

dropout같은 경우는 training epoch이 돌아가면서 weight를 랜덤하게 끄고 켤때마다 서로 다른 모델들의 앙상블 효과를 얻는다는 설명도 있다

 

dropout이 앙상블 효과를 가진다는 그림

 

dropout으로 랜덤하게 weight를 끄고 켠 subnetwork들이 오른쪽

 

training중 오른쪽의 subnetwork를 전부 학습하게되고 마지막 inference time에 왼쪽의 전부 합쳐진 network로 수행

 

TAGS.

Comments