저번주까지는 프로젝트에 집중하느라 강의까지 신경쓸 겨를이 없지 않을까 하는 걱정을 했었다.
막상 이번주 강의 내용을 확인해보니 모델 경량화라는게 그 동안 고민하던 문제와 연결되는 부분이 있어서 굉장히 흥미롭게 들었다.
프로젝트를 진행하면서 모델의 실시간 서빙을 해보고 싶다는 욕심이 있었는데, 그렇게 하려면 모델 추론 속도를 높이는 것이 중요했다.
그래서 무거운 모델을 좀 더 가볍게 만들어서 학습과 추론 속도를 높일 수 있지 않을까하는 고민을 하고 있었는데, 마침 이 고민이 강의 주제와 맞물렸다.
덕분에 프로젝트 준비로 바쁜 와중에도 강의 내용을 의욕적으로 들을 수 있었다.
가지치기라고 할 수 있는 기법으로, 신경망 모델에서 노드나 간선을 제거하여 파라미터 수를 줄이고, 모델의 크기와 계산 비용을 줄이는 기법이다.
Pruning은 4가지 관점에서 방법론을 구분해볼 수 있다.
1) Structure : Pruning을 수행하는 단위에 따른 구분
2) Scoring : Pruning 할 파라미터를 선정하는 방법에 따른 구분
3) Scheduling : Pruning 및 fine-tuning을 언제, 얼마나 할 것인지에 따른 구분
4) Initialization : 재학습 및 fine-tuning을 진행할 때 파라미터 초기화 방식에 따른 구분
Structure에 따른 구분에서는 모델 구조에 대한 변경없이 개별 파라미터 단위로 Pruning을 진행하는 Unstructured Pruning과 레이어 단위로 Pruning을 진행해서 모델 구조가 변경되는 Structured Pruning이 있다.
Scoring에 따른 구분에서는 중요도를 계산하는 방법과, 계산된 중요도를 반영하는 단위로 또 구분할 수 있다.
중요도를 계산하는 방법은 파라미터별 절댓값을 중요도로 사용하는 방법과, 레이어별로 -norm을 중요도로 사용하는 방법이 있다.
계산된 중요도를 반영할 때는 모델 전체에서 일정 기준 이하의 중요도를 가진 파라미터를 Pruning하는 Global Pruning 방식과, 특정 단위 별로 중요도를 비교하여 Pruning하는 Local Pruning 방식이 있다.
Scheduling에 따른 구분에서는 한번만 재학습을 수행하는 One-shot 방식과, 여러번에 걸쳐서 재학습을 수행하는 Recursive 방식이 있다.
Initialization에 따른 구분에서는 재학습할 때, Pruning된 상태 그대로 fine-tuning을 진행하는 Weight-preserving 방식과, 파라미터를 랜덤으로 초기화한 후 fine-tuning을 진행하는 Weight-reinitializing 방식이 있다.
크고 복잡한 고성능의 Teacher 모델로부터 지식을 전달받아서 작고 간소화된 Student 모델을 학습시키는 기법이다.
보통 증류(전달)할 지식의 종류에 따라 아래와 같이 분류한다.
1) Logit-based : Teacher 모델의 logit값을 사용
2) Output-based (Imitation-Learning) : Teacher 모델의 output 사용
3) Feature-based : Teacher 모델의 중간 레이어 feature/representation 값 사용
이러한 방식은 Teacher 모델의 특성에 따라 적용 가능한 방식이 달라진다.
내부 구조, 파라미터 등을 모두 알 수 있는 White-box 모델인 경우에는 세 가지 방식을 모두 사용할 수 있지만, Black-box 모델인 경우에는 Output-based 방식만 사용할 수 있다.
숫자의 정밀도를 낮춰서 모델을 경량화하는 기법이다.
FP32 등 정밀하게 숫자를 표현하는 자료형을 INT8과 같이 정밀도가 낮은 자료형으로 변경하여 모델을 경량화한다.
🚩모델 실시간 서빙과 관련한 내용 더 알아보기