-
[최적화] 모델 경량화 Pruning (작성중)최적화 2023. 8. 29. 00:09반응형
Pruning이란
: 중요도가 낮은 파라미터를 제거하여 네트워크를 가지치기 하는 것
Dropout과의 차이점
pruning : 파라미터 재사용 X
dropout : 파라미터 재사용 O, inference과정에서는 모든 파라미터 사용 (앙상블과 유사한 효과를 갖음)
Pruning의 장단점
- 장점
- 파라미터 감소로 인한 추론 속도 향상 (0으로 만드는 것이 아니라, 제거한 경우에만 해당?)
- Regularization으로 인한 일반화 성능 향상 (unstructed 방법에서도 효과가 있는건가??)
-단점
- 정보 손실 발생
- 입자도(granularity)가 하드웨어 가속 효율성에 영향을 미침 (너무 sparse한 경우, 효율이 떨어짐 - unstructed pruning)
Pruning의 종류
What to prune?
(어떤 것을 가지치기 할지?)
1. Structured Pruning
: 그룹 단위로 수행하는 것 (ex. channel, filter, layer, etc) -> 구조 자체를 제거함으로써, matrix 연산이 사라져 inference 속도가 향상될 수 있음. But. pruning 비율을 높게 하는 것에 한계가 있음.
2. Unstructed Pruning
: 독립적으로 수행하는 것 (matrix 내 값 하나하나를 검토하여 가지치기 수행) -> 보통 0근처의 weight를 가지치기함. 높은 비율로 pruning 가능함. But. weight를 0으로 변경할 뿐, matrix 연산은 그대로 수행해야 하기 때문에 inference 속도는 그대로임.
How to prune?
(어떻게 가지치기 할지?)
When to prune?
(언제 가지치기 할지?)
- 학습 전
- 학습 중
- 학습 후
How often?
(얼마나 자주 가지치기 할지?)
- one-shot : 한번만 pruning을 수행하는 것
- iterative : 학습+pruning 수행 후 sparse한 모델을 다시 학습하는 것 (일반적으로 pruning한 모델을 다시 학습하는 경우 성능이 더 향상된다고 알려져 있음)
=> 한번에 많은 파라미터가 pruning되면, 성능이 급격히 하락한다. 따라서, 반복적으로 조금씩 파라미터를 줄여나가는 방법이 주로 사용된다.
=> 아래 그래프를 통해 iterative를 적용한 모델은 파라미터가 90%까지 제거되더라도 기존 성능을 거의 유지하는 것을 확인할 수 있음
(보통 pruning과 L1/L2 reaularization은 같이 수행되나?)
(L1 reqularization w/ iterative prune and retrain은 왜 안해본 걸까)
Pruning vs Quantization vs Distillation
Lottery Ticket Hypothesis
이 논문은 현재 모델보다 적은 파라미터 수로 더 높은 성능을 갖는 모델이 있다는 생각으로 부터 출발한다.
후속 논문?
Iterative Magnitude Pruning
Iterative Magnitude Pruning with Rewinding
추가 조사 필요 내용
- Regularization이란/ unstructed 방법에서도 Regularization으로 인한 일반화 성능 향상 효과를 기대할 수 있는지?
- unstructed 방법이 경량화 방법이라고 말할 수 있는가? ->ㅇㅁㅇ sparse Matrix를 효율적으로 저장하는 방법이 있음 (COO(Coordinate Format), CSR(Compressed Sparse Row)
- COO : 0이 아닌 값의 값, 행, 열을 별도의 메모리에 저장하는 방법 (3a개 메모리 필요,a=0이 아닌 개수)
- CSR : 0이 아닌 값의 값과 열을 별도의 메모리에 저장하고, 행은 포인터(주소값)형태로 가지고 있는 방법 (2a+(n+1)개 메모리 필요, n=행의 길이)
- CSC : 0이 아닌 값의 값과 행을 별도의 메모리에 저장하고, 열은 포인터(주소값)형태로 가지고 있는 방법 (2a+(m+1)개 메모리 필요, m=열의 길이)
- lottery ticket hypothesis 부터
Reference
https://blogik.netlify.app/BoostCamp/U_stage/45_pruning/
https://simpling.tistory.com/50\
https://velog.io/@woojinn8/LightWeight-Deep-Learning-1.-Pruning
https://velog.io/@dldydldy75/%EA%B0%80%EC%A7%80%EC%B9%98%EA%B8%B0-Pruning-for-Network-Compression
반응형'최적화' 카테고리의 다른 글
[최적화] Model Compression 논문 리스트 (0) 2023.10.17 [최적화] pytorch CSR 구현 (작성중) (0) 2023.10.12 [최적화] 딥러닝 모델 더 작게 만들기(경량화) 내용 정리 (1) 2023.09.05 [최적화] Model Compression for Deep Neural Networks: A Survey 논문 리뷰 (0) 2023.08.30 [최적화] 프로그래밍 언어 CUDA (작성중) (0) 2023.08.24