Pruning 방법을 4가지 관점으로 분류해서 알아보자!
Structure
Structure는 Pruning 단위의 granularity에 따른 구분 방식이다. 여기서 granualarity는 조그마한 edge 단위로 없앨지 혹은 뉴런 단위나 레이어 단위로 제거할지를 의미한다.
Structure 관점으로 봤을 때, Pruning은 2가지의 세부 기법으로 분류할 수 있다.
Structured Pruning: 뉴런, 채널, 혹은 레이어 전체를 제거하는 방식으로, 모델 구조의 변경이 발생한다.
가속 실현이 쉽다는 장점이 있지만 구현이 어렵고, 아예 구현이 불가능한 경우도 존재한다.
Unstructured Pruning: 연결된 가중치를 개별적으로 검증하여 독립적으로 제거하는 방식으로, 여러 개의 edge 단위를 조금씩 제거한다. 즉, 중요하지 않은 개별 파라미터 단위로 pruning 하므로, 모델 구조의 변경이 없다.
파라미터 단위를 0으로 대치하는 것이기 때문에 구현이 쉽지만, 가속 실현이 어려워 하드웨어의 도움이 필요하다는 단점이 있다.

Scoring
Scoring은 pruning할 파라미터를 선정하는 방법에 따른 분류법이다. 따라서 덜 중요한 파라미터 또는 레이어가 pruning의 대상이 된다.
먼저 중요도를 계산하는 방법을 알아보자. 중요도는 파라미터 또는 레이어의 크기를 기준으로 계산을 하게 되는데 두 가지 방식이 있다.
1. 파라미터 별로 절댓값을 중요도로 사용하는 방법
절댓값이 작은 순으로 중요도를 계산하여 pruning 대상을 선정한다.
2. 레이어 별로 Lp−norm을 중요도로 사용하는 방법
Lp−norm : (∣x1∣p+∣x2∣p+...+∣xn∣p)1/p
L2−norm이 작은 순으로 중요도를 계산하여 pruning 대상을 선정한다.
이렇게 앞에서 계산된 중요도를 어느 단위에 반영할 지도 고려해야 할 부분이다. 이 단위도 두 가지에 적용할 수 있다.
1. Global Pruning
전체 아키텍처에서 50%의 weight를 없앤다고 했을 때, 각 레이어의 비율과 상관없이 전체에서 중요하지 않다고 생각되는 것들을 전역적으로 50%를 pruning 시키는 방식이다. (절대적인 비교)
전체 모델 단위로 pruning을 하기 때문에 중요한 레이어가 보존된다는 장점이 있다.
반면 전체에서 비교하기 때문에 계산량이 많다는 단점도 가진다.
2. Local Pruning
특정 단위 (ex.레이어)를 기준으로 각 단위별로 비율에 맞춰서 pruning을 하는 방식을 의미한다. 따라서 중요도를 한 단위 내에서만 상대적으로 비교하는 방식이다.
계층 단위로 pruning을 하기 때문에 특정 레이어에 pruning이 편중되지 않는다.
하지만 중요한 레이어가 과도하게 pruning이 될 수 있다는 단점이 있다.
Scheduling
Scheduling은 pruning을 한 다음에 fine-tuning을 언제, 얼마나 할 것인지에 따른 구분 방식이다. 기존 모델을 pruning을 하고 나면 성능이 떨어지기 때문에 fine-tuning을 하게 되는데, 이를 어떻게 할 것인지를 2가지의 방식으로 분류할 수 있다.
1. One-shot (single iteration)
이 방식은 pruning을 한 번에 진행하며, 다 진행된 아키텍처에서 fine-tuning을 한 번 진행하는 방식이다.
장점 : 시간 절약
단점 : 성능 불안정
2. Recursive (multiple iterations)
Recursive 방식은 위의 과정을 여러 번 세분화하여 진행하는 방식이다. 첫 번째 방식과 같이 pruning을 한 번에 너무 많이 하면 성능의 손실이 클 수 있기 때문에 조금씩 여러 번에 나눠서 진행한다.
장점 : 안정적인 성능 (pruning 할 수 있는 비율이 높음)
단점 : 시간이 오래 걸림

그래서 위의 그래프와 같이, pruning을 한 번에 진행하는 것보다 여러 번에 나눠서 진행하는 recursive 방식이 좀 더 성능이 좋은 것을 확인할 수 있다.
Initialization
Initialization은 pruning된 모델을 재학습 또는 fine-tuning 하기 전에 파라미터를 초기화하는 방법에 따른 분류법이다.
Pruning 직후에는 학습된 모델 파라미터 중 일부만 잘려나간 상태인데, 이후 최종 모델까지 추가 학습을 어떤 상태(파라미터 값)로 시작할지에 대해 2가지 방법으로 분류할 수 있다.
1. Weight-preserving (classic)
Pruning을 한 후, 기존의 값들을 유지하고 그대로 fine-tuning을 진행하는 방식이다.

즉, pruning 된 모델에서 기존에 학습된 모델이 사용하던 파라미터들을 그대로 사용하여 해당 값들을 초기화된 모델로서 재학습하는 방식이다.
그래서 학습과 수렴이 빠르지만, 성능이 불안정한 단점이 있다.
2. Weight-reinitializing (rewinding)
Pruning된 모델을 랜덤값으로 재초기화 한 후 재학습을 진행하는 방식이다.

Pruning 된 모델에서 남아 있는 파라미터들에서 기존 모델의 파라미터 값들을 사용하는 것이 아니라, 랜덤으로 초기화한 후에 재학습하는 것이다.
이 방식은 랜덤으로 초기화하는 과정이 들어가기 때문에 재학습이 필요하다는 단점을 가지지만, 성능이 안정적으로 나온다.