"신경망에서 정말 모든 weight가 필요할까?"
Pruning은 중요도가 낮은 weight, 뉴런, 채널을 제거해 모델을 가볍게 만드는 기법입니다.

Pruning이란?
Pruning(가지치기)은 신경망의 불필요한 파라미터를 제거하여 모델 크기를 줄이고 추론 속도를 높이는 방법입니다.
- 학습이 끝난 모델의 weight 중요도를 측정
- 중요도가 낮은 weight → 0으로 만들거나 제거
- 모델 sparsity 증가 → 연산량 감소
왜 중요한가?
- 모델 크기 줄이기 (저장 공간, 메모리 사용량 절약)
- 추론 속도 향상 (특히 하드웨어가 sparsity 가속 지원 시)
- Overfitting 감소 → 일반화 성능이 더 좋아질 수도 있음
Pruning의 종류
| Unstructured Pruning | 개별 weight 중요도 기준으로 0으로 만듦 (sparse matrix) | 모델 크기 크게 줄어듦 | sparsity 지원 없는 HW에서는 속도 향상 제한 |
| Structured Pruning | 채널/필터/헤드 단위로 제거 | 속도 향상 확실 | 모델 아키텍처 자체가 변경, 성능 영향 클 수 있음 |
| Iterative Pruning | 여러 단계로 조금씩 Pruning → Fine-tuning 반복 | 성능 보존 | 학습 시간 증가 |
| One-shot Pruning | 한 번에 가지치기 후 fine-tuning | 빠름 | 성능 급격히 떨어질 수 있음 |
중요도 측정 기준
- Magnitude (L1/L2 Norm): weight 크기 작은 것부터 제거 (가장 흔한 방식)
- Gradient-based: loss 변화에 민감하지 않은 weight 제거
- Fisher Information / Hessian: 중요도 정량화 후 제거
장점
1. 모델 크기 줄이기 (압축 효과)
2. 연산량 감소 → latency 단축
3. Overfitting 감소 → regularization 효과
4. 다른 압축 기법과 조합 가능 (Quantization + KD + Pruning)
단점 & 주의점
지나치게 Pruning 시 성능 급락
Unstructured sparsity는 하드웨어 가속 없으면 속도 향상 거의 없음
Structured pruning은 모델 capacity 줄어들어 fine-tuning 필요
PyTorch 예시 (Unstructured Pruning)
import torch
import torch.nn.utils.prune as prune
model = get_pretrained_model()
# Conv layer weight 중 30%를 L1 기준으로 pruning
prune.l1_unstructured(model.conv1, name="weight", amount=0.3)
# 실제 weight 값 확인 (많은 값이 0으로 됨)
print(model.conv1.weight)
실제 효과 (예시)
| ResNet-50 | 50% (unstructured) | 25.6M → 12.8M | -0.5% |
| ResNet-50 | 80% (unstructured) | 25.6M → 5.1M | -3.0% |
| BERT-base | 40% (structured, head pruning) | latency 20% ↓ | -1.5% |
적절한 비율을 찾는 것이 핵심 → 보통 30~50% 수준이 sweet spot
실무 적용 팁
- 먼저 unstructured pruning으로 sparsity vs accuracy curve 확인
- 최적 sparsity 찾은 후 structured pruning으로 변환 (속도 향상)
- pruning 후 반드시 fine-tuning 수행 (성능 회복)
- Quantization과 함께 쓰면 추가 압축 가능
결론
Pruning은 모델의 불필요한 연결을 줄여 가볍고 빠르게 만드는 핵심 기법입니다.
적절히 적용하면 성능 저하 없이 모델 크기와 latency를 줄일 수 있습니다.
단, 하드웨어 가속이 있는 환경(예: NVIDIA Ampere, TensorRT Sparse 지원)에서 효과가 극대화됩니다.
다음 편은 아래에 있습니다!
https://machineindeep.tistory.com/70
모델 압축·배포 최적화 시리즈 4편: Weight Clustering / Sharing
"비슷한 값의 가중치를 굳이 따로 저장할 필요가 있을까?"Weight Clustering(또는 Sharing)은 유사한 가중치를 묶어 모델을 추가로 압축하는 기법입니다.Weight Clustering / Sharing이란?Weight Clustering은 비슷한
machineindeep.tistory.com
'ML | DL > 딥러닝 방법론|실습' 카테고리의 다른 글
| 모델 압축·배포 최적화 시리즈 5편: ONNX / TensorRT / TFLite 변환 (0) | 2025.09.14 |
|---|---|
| 모델 압축·배포 최적화 시리즈 4편: Weight Clustering / Sharing (0) | 2025.09.14 |
| 모델 압축·배포 최적화 시리즈 2편: Quantization (양자화) (1) | 2025.09.14 |
| 모델 압축·배포 최적화 시리즈 1편: Knowledge Distillation (0) | 2025.09.14 |
| AI 모델 경량화 시리즈 5편: QLoRA (Quantized LoRA) (0) | 2025.09.14 |