Sensitivity Analysis(민감도 분석)는 모델 내 각 레이어가 성능에 미치는 영향을 분석하여, Pruning 비율을 레이어별로 다르게 설정하는 방법이다. 이 접근법은 네트워크가 복잡하거나 레이어별로 상이한 특성을 가진 경우, 프루닝 성능을 최적화하는 데 중요한 역할을 한다.
1. Uniform Shrink vs Layer-wise Pruning
일반적으로 Uniform Shrink는 모든 레이어에서 동일한 비율로 파라미터를 제거하는 방식이다.
모든 레이어를 동일한 비율로 Pruning 할 경우, 네트워크 내 민감도가 높은 레이어가 과도하게 제거되어 성능 저하가 발생할 수 있다. 이는 각 레이어가 모델 전체 성능에 기여하는 정도가 다르다는 점을 고려하지 않기 때문이다.
반면, Layer-wise Pruning은 각 레이어의 특성을 분석하여, 레이어별로 다른 프루닝 비율을 적용한다.
장점으로는 민감도가 높은 레이어는 적게 Pruning 하고, 민감도가 낮은 레이어는 더 많이 Pruning 하여, 모델 성능을 효율적으로 유지할 수 있다. 또한, 동일한 프루닝 정도에서 Uniform Shrink보다 더 높은 성능을 달성할 수 있다.
2. 언제 Layer-wise Pruning을 사용해야 할까?
Layer-wise Pruning은 다음과 같은 경우에 특히 유용하다.
- 네트워크가 복잡한 경우
모델의 각 레이어가 서로 다른 역할을 수행하며, 일부 레이어는 민감도가 높고, 일부는 낮은 경우 - 레이어별 특성이 상이한 경우
하위 레이어는 단순한 엣지나 패턴을 학습하는 반면, 상위 레이어는 복잡한 피처를 학습하는 경우
그렇다면 어떤 Layer 가 민감도가 높다, 낮다 라고 말할 수 있을까??
위에는 CNN 에서 각 Layer 각 어떤 특징을 가지고 오는지 시각화한 것이다.
레이어별 민감도는 일반적으로 앞부분의 레이어의 민감도가 높다. 앞부분 레이어는 사람으로 비유하면 인식/감각 기관에 해당하며, 입력을 직접적으로 처리하고 모델의 기초적인 피처(엣지, 패턴 등)를 학습하기 때문이다. 이러한 레이어는 모델의 성능에 더 큰 영향을 미치므로, 적은 비율로 Pruning해야 한다.
뒷부분 레이어는 중복된 정보를 다루는 경우가 많으며, 최종적으로 판단을 내리기 위한 연산량이 상대적으로 적게 요구된다. 이 때문에 뒷부분 레이어는 더 높은 비율로 Pruning 을 할 수 있다.
아래 실제 레이어 별로 Pruning을 진행한 그래프이다.
L0 는 도입부 레이어이며, 50%만 해도 성능이 저하된다.
반면 뒷 부분 layer 은 Pruning 을 크게해도 성능저하가 적은 것을 알 수 있다.
이러한 방법도 있으니, 실제 필요할때 사용해보자.
이상입니다. 감사합니다.
끝!
'딥러닝 (Deep Learning) > [04] - 학습 및 최적화' 카테고리의 다른 글
[Optimizer] - 일반적으로 왜 Adam만 사용할까? [2] (1) | 2025.01.01 |
---|---|
[Optimizer] - 초기 optimizer 이해 [1] (3) | 2024.12.28 |
[경량화/최적화] - Pruning 방법의 분류 [2] (2) | 2024.12.24 |
[경량화/최적화] - Pruning 이란? [1] (1) | 2024.12.23 |
Pseudo 라벨링(Pseudo Labeling)이란 무엇인가? (0) | 2024.11.24 |