학습된 신경망에서 기여가 작은 부분을 잘라내 모델을 줄이는 압축 기법이다. 잘라낸 뒤에는 보통 재학습을 붙여 떨어진 성능을 회복시킨다.
큰 모델은 파라미터 상당수가 출력에 거의 영향을 주지 않는다. 그 부분을 제거하면 메모리와 연산이 줄고, 성능 손실은 재학습으로 상당 부분 되돌릴 수 있다는 것이 전제다.
Unstructured 와 structured
unstructured pruning 은 개별 가중치를 0 으로 만든다. 절댓값이 작은 가중치부터 없애는 방식이 기본이다. 정확도 손실 대비 제거 비율이 가장 좋지만, 결과가 불규칙하게 0 이 흩어진 희소 행렬이라 일반적인 GPU 연산으로는 빨라지지 않는다. 실제 속도 이득을 보려면 희소 연산을 지원하는 하드웨어나 커널이 필요하다.
structured pruning 은 채널, attention head, 층처럼 구조 단위를 통째로 없앤다. 결과가 여전히 조밀한 작은 행렬이라 별도 지원 없이 그대로 빨라진다. 대신 한 번에 큰 덩어리를 없애므로 정확도가 더 많이 떨어진다.
| 제거 단위 | 실제 가속 | 정확도 손실 | |
|---|---|---|---|
| unstructured | 가중치 하나 | 별도 커널·하드웨어 필요 | 작다 |
| structured | 채널·head·층 | 그대로 얻어진다 | 크다 |
knowledge distillation 과 함께 쓰기
structured pruning 은 손실이 커서 단독으로는 쓰기 어렵다. 여기에 증류를 붙이면, 잘라내기 전의 원본 모델을 교사로 두고 잘라낸 모델을 학생으로 학습시켜 성능을 되돌릴 수 있다.
NVIDIA 의 Minitron 계열이 이 조합을 크게 밀어붙인 사례다. 큰 모델을 한 번에 목표 크기까지 줄이는 대신, 조금 잘라내고 증류로 회복시키는 과정을 반복해 여러 크기의 모델을 만든다. 각 단계에서 잃는 성능이 작아 회복도 쉽고, 처음부터 작은 모델을 학습시키는 것보다 훨씬 적은 토큰으로 같은 성능에 도달한다.
무엇을 잘라낼지는 활성값의 크기나 제거했을 때 손실이 얼마나 늘어나는지를 재서 정한다.