Pruning 기본 개념과 복권 가설
딥러닝 모델의 경량화를 위해 제안된 여러 개념 중 Pruning이라는 것이 있습니다. 사전 의미로 가지치기라는 뜻처럼 Pruning은 딥러닝 모델에서 노드(뉴런)나 연결(시냅스)을 제거해 모델의 크기와 계산 비용을 줄이는 방법입니다.
Pruning을 뒷바침하는 이론으로 복권 가설(Lottery Ticker Hypothesis, LTH)이 있습니다. 이는 신경망 모델에서 일부를 잘 가지치기를 하면, 원래 모델과 같은 정도의 학습으로 동일한 효과를 얻을 수 있다는 가설입니다. 성공적인 pruning이 가능한 경우를 당첨 복권(winning ticket)이라 하며, 이에 대해 존재함을 실험적으로 증명했습니다.[1]
Pruning이 이뤄지는 일반적인 절차는 다음과 같습니다.
- 초기 모델 존재
- 제거 가능한 파라미터 판별
- 파라미터 제거
- 파인튜닝(fine-tuning)
- 최종 모델 도출
위 과정 중 2~4 부분에 대해 Pruning을 적용할 수 있는데 각 절차나 방법론에 따라 다음과 같이 분류할 수 있습니다.
Pruning의 분류
Structure
Pruning 단위에 따라 Unstructred와 Structured로 구분을 할 수 있습니다. Unstructred는 개별 파라미터 단위로 값을 0으로 변경하는데, 그러다보니 모델 구조의 변경이 수반되지 않습니다. Structured는 모델의 특정 구조(계층 등) 단위로 통째로 제거하는 방식으로 가지치기를 실행합니다. 그러다보니, 모델 구조 변경이 발생합니다.
Scoring
중요도(점수)를 계산해 덜 중요한 파라미터를 선정하는 방식에 따른 분류입니다. 여기서 방식은 점수를 계산하는 방법과 점수를 어떻게 반영할 것인지에 대한 방법론으로 구분할 수 있습니다.
점수를 계산하는 대표적인 방법은 파라미터의 절대값에 따라 작은 순으로 제거하는 방법과 구조 단위(레이어)별 Lp-norm을 계산해서 작은 순으로 제거하는 방법이 있씁니다.
중요도를 반영하는 방법으로 전체에서 비율을 적용하는 Global Pruning과 단위별로 비율을 적용하는 Local Pruning이 있습니다.
Scheduling
Pruning에서 파인튜닝에 대한 방법론에 대한 구분입니다. Pruning을 한번만 하는 One-shot과 여러 번에 나눠서 진행하는 Recursive가 있습니다. One-shot으로 진행할 경우 시간은 절약되나 성능이 좋지 않게 되고(Pruning 비율이 낮아짐), Recursive로 진행하게 되면 시간이 오래걸리나 성능이 좋아집니다.
Initialization
딥러닝의 훈련에서도 초기화가 중요한 이슈였습니다. Pruning 이후에 재학습 및 파인튜닝을 할 때 파라미터 초기화 여부에 따라 분류할 수 있습니다. 기존 모델의 가중치를 그대로 유지하고 파인튜닝을 진행하는 방법은 수렴은 빠르지만 성능이 불안정하게 됩니다. 반면, 초기화를 진행하고 재학습하는 방식(rewinding)은 성능이 좋지만 재학습이 필요하기 때문에 추가적인 자원이 필요합니다.
추가 고려사항
Matrix Sparsity
Sparsity는 전체 중 0의 비율을 의미하는 것으로 얼마나 데이터가 희소하냐는 것을 의미합니다. 앞서 Unstructured pruning은 파라미터를 개별적으로 0으로 바꾸는 방식이기 때문에 행렬에서 여전히 0을 저장하고 곱하는 연산이 남아 있습니다. 따라서 효율성이 바로 개선되지는 않죠.
이러한 문제를 해결하기 위해 크게 두가지 방법이 고려될 수 있습니다. 우선 Sparse Matrix Representation가 있는데 이미지 분할 문제에서 RLE 데이터 포맷처럼 데이터를 저장하는 방식입니다. 0이 아닌 값과 좌표를 Row, Column, Value의 3개 행으로 이뤄진 행렬로 구성합니다. 하지만, Sparsity가 1/3 미만일 때만 효율적입니다.
하지만, sparsity가 1/3을 넘어가는 애매한 정도라면 전용 하드웨어를 사용하는 것이 더 바람직합니다. 하드웨어에 대한 전문적인 지식은 없지만 대략적인 구동 방식은 곱셈 수행 전에 0의 위치를 파악하고, 해당 위치를 건너뛰고 계산되도록 조정하는 방식으로 연산을 수행합니다.
Sensitivity
네트워크가 복잡하거나 층별 특성이 다를 경우(즉, 다른 작업을 수행하기 위한 목적이 있는 경우) 파라미터나 층을 pruning 했을 때 성능 저하 정도를 민감도로 해서 측정 및 분석을 수행합니다. 민감도 분석 결과에 따라 민감도가 높으면 pruning ratio를 낮추고 민감도가 낮은 부분은 pruning ratio를 높이는 방식으로 대응하는 것이죠.
보통 민감도 분석은 성능 저하 정도를 실험적으로 측정합니다. 성능 저하 허용 범위(t %)를 고정하고, 이를 기준으로 레이어나 파라미터 별 prune ratio를 결정하는 방식이죠. 통상적으로 입력에 가까울수록 민감도가 높을 수 있습니다. 이는 신경망을 거치면서 정보가 점차 추상화되는데, 입력층에서는 추상화되기 전이기 때문에 더 크게 반응할 수 있습니다.
딥러닝에서 실제 활용
- CNN
Convolutional Neural Network(CNN)는 합성곱 연산이 이뤄지는 CONV 층과 분류와 같은 문제를 해결하는 Fully Connected(FC) 층으로 나눠볼 수 있습니다. 파라미터는 FC 층에 있고, 복잡한 합성곱 연산은 CONV 층에 있기 때문에 개별로 pruning이 필요합니다.
CONV 층을 거칠 때마다 나오는 피쳐맵은 이미지의 의미를 담고 있는데, 여기서 중요한 피쳐맵과 그렇지 않은 것을 구분하고 pruning하는 것이 필요합니다. sparsity가 높은 피쳐맵일수록 별 의미가 없는 정보인 경우가 많기 때문에 sparsity를 기준으로 가지치기가 필요합니다. (실무적으론 L2-norm으로 sparsity를 계산한다고 합니다)[3]
- BERT
Bidirectional Encoder Representation from Transformer(BERT)는 LLM 이전의 주요 언어 모델로 여러 개의 트랜스포머로 구성되어 작은 형태(단어)와 큰 형태(문장)을 인식하게 됩니다. 다만, 층마다 sparsity가 일관되지 않아 Structured 방법은 위험할 수 있습니다. 대신 층별로 local pruning을 적용하고, 대부분 파라미터가 0에 가깝기 때문에 절대값 기준으로 scoring을 하는 방법을 채택합니다.
참고자료
[1] Jonathon Fankle, Michael Carbin. "The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks". ICLR 2019.
[2] https://www.geeksforgeeks.org/sparse-matrix-representation/
[3] Pavlo Molchanov, Stephen Tyree, Tero Karras, Timo Aila, Jan Kautz. "Pruning Convolutional Neural Networks for Resource Efficient Inference". ICLR 2017.
[4] Mitchell A. Gordon, Kevin Duh, Nicholas Andrews. "Compressing BERT: Studying the Effects of Weight Pruning on Transfer Learning".
[5] 조현수. "모델 최적화 및 경량화". boostcamp AI Tech.
'Note > Deep Learning' 카테고리의 다른 글
모델 경량화를 위한 양자화 관련 기본 개념 정리 | Quantization (0) | 2024.12.26 |
---|---|
딥러닝 모델 경량화를 위한 Knowledge Distillation 기본 개념 정리 | 지식 증류, KD (0) | 2024.12.25 |
이미지 생성 모델 간단 정리하기 | GAN, Autoencoder, Diffusion (0) | 2024.12.09 |
이미지 생성 모델의 평가 지표 정리 | Inception Score, FID, CLIP Score (0) | 2024.12.06 |
[NLP] LLM 평가지표와 주요 데이터셋 간단 정리 | MMLU, HellaSwag, HumanEval, G-Eval (1) | 2024.12.05 |