성탄절 오전에 가볍게 pruning 공부!
Sparsity
전체에서 0이 차지하는 비율. density = 1-sparsity
Matrix Sparsity
희소행렬. 행렬의 원소가 대부분 0인 행렬. 일반적으로 2/3이 0일때
희소 행렬을 효율적으로 저장하고 처리하기 위한 데이터 구조
이미지 출처 : geeksforgeeks
행렬에서 0이 아닌 원소의 행, 열, 값을 튜플형태로 저장
density 가 1/3일때(sparsity가 2/3일때) 부터 이 방법이 더 효율적
저장에는 효율적이지만 연산에는 효율적이지 않을 수도 있다.
신경망의 가중치나 레이어가 pruning에 얼마나 민감한지 분석하여 효율적으로 네트워크를 압축하는 방법
특정 레이어나 가중치의 pruning level을 설정하고 pruning 수행
테스트 데이터셋으로 평가를 실행하여 정확도 변화 측정해 여러 레이어에 다양한 sparsity level에 대해 반복
네트워크의 중요한 부분을 보존하면서 효율적인 압축 가능
CNN 모델은 Convolution 레이어와 Fully-Connected 레이어 부분으로 나뉘기때문에 pruning도 나눠서 한다.
파라미터 대부분은 FC에 있지만 연산 속도의 bottleneck은 대부분 Convolution에 생기기 때문에 시간-공간 효율을 챙기려면 양쪽 다 pruning이 필요하다.
일반적으로 Convolution 레이어가 FC 레이어보다 더 민감하고, 앞쪽 레이어가 더 민감하다.
그래서 보통 뒤쪽 레이어 위주로 pruning을 진행한다.
Filter : CNN에는 레이어별로 여러개의 filter가 있는데 앞쪽에는 디테일, 뒤쪽에는 전체 구조를 파악하는 경향이 있다. sparse한 filter가 절반정도는 있기 때문에, sparse한 filter부터 날려버리는 structured pruning을 주로 한다
.
언어 모델도 보통 앞쪽 레이어가 단어 같은 작은 형태를, 뒤쪽 레이어가 문장 같은 큰 형태를 모델링한다. 하지만 레이어별 sparsity는 나름 일정하기 때문에 unstructured, local pruning으로 진행한다.
대부분의 파라미터가 0에 가깝긴 하기 때문에 절대값 기준 pruning이 유효하다.
일반적으로는 30%까진 큰 성능차이가 없고, 60% 선도 가능은 하다.