희소(sparse)행렬: 행렬의 대부분의 요소가 0인 행렬
정확히 몇 퍼센트 이하면 희소하다 라는 개념은 아님.
메모리 효율
연산 효율
일반적인 n×m 행렬과 m×p 행렬의 행렬곱 계산량 = nmp에 비례
sparse 행렬이었을 경우 계산량
비슷하게, 충분히 sparse하면 훨씬 효율적
중간 정도일 경우에는 전용 하드웨어 사용
• 곱셈 수행 전, 스캔을 통해 0의 위치를 파악(overhead 약간 발생)
• 해당 위치를 건너뛰고 계산되도록 조정
파라미터의 몇%를 제거 할 것인지 비율
각 레이어의 특성을 반영
실험을 통해 측정하는 empirical하고 practical한 방법
Sensitivity 측정: 파라미터/레이어의 민감도: 해당 파라미터/레이어를 pruning 했을 때의 성능 저하 정도 측정
레이어 별로, 비율 별로 각각 측정
측정 한번에 pruning 전체 과정 1번 만큼의 iteration 소요.
보통의 CNN모델은 CNN부분과 FC부분으로 나누어짐
대부분의 파라미터는 FN부분
그러나 연산 속도의 bottleneck은 CNN부분
-> 따라서 공간/시간 효율을 모두 챙기려면 각각 pruning이 필요함
이 중 중요도가 작은 filter를 제거하는 것이 CNN의 pruning
Sparse한 filter의 비율이 높은 레이어는 pruning을 많이 해도 성능 저하가 덜함. 파란색으로 칠한 곳을 잘 살펴보면 pruning 비율이 높음에도 불구하고 성능저하가 적음을 알 수 있다.
Sensitivity analysis에 따르면
👉 따라서 CNN을 pruning 할 때엔 전체 제거 비율을 레이어 별로 나눠서 분배해야함
CNN 파트, FC 나눠서 진행
Structure
• Structured Pruning
• 레이어 별 filter 단위로 prune
Scoring
• Filter의 sparsity를 중요도로 사용
• Practical 하게는 L2-norm
• 레이어 별로 비율을 다르게 설정
BERT: Bidirectional Encoder Representations from Transformer
언어 모델 보통 앞쪽 레이어는 작은 형태(단어) 뒤쪽 레이어는 큰 형태(문장 등) -> 그러나 레이별 sparsity가 비일관적임
-> 따라서 global pruning 은 부적절하고 structured pruning도 위험함.
그렇기 때문에 local + 절대값 기준 pruning이 적절할 것으로 보임.
단어의 모음인 vocabulary, 이 vocabulary가 첫번째 레이어를 담당.
짧은 단어일수록 벡터가 더 sparse함 따라서,Local Pruning을 하면, 짧은 단어 위주로 pruning을 하기 때문에 유효
깃헙 추가.