Model compression - 20250424

홍윤아·2025년 4월 30일

공부정리

목록 보기
4/7

Model Compression (경량화)

모델압축 또는 모델 경량화 기술들은 모델의 크기를 줄이고, 처리 속도를 개선하며, 메모리 사용량을 감소시키기 위해 사용된다.

왜 경량화가 필요한가?

  1. 파라미터 수를 감소시킴으로써 저장공간을 절약할 수 있다.
  2. 연산량이 감소하여 연상 속도가 향상된다.
  3. 메모리 사용향이 감소하고 배터리 수명이 향상된다. (모바일 같은 경우에 필요)

1. Pruning

불필요하거나 중요도가 낮은 Model의 weight들의 연결을 제거하여 모델의 sparsity를 높이는 방식이다.

Method

  1. Structured Pruning (일반적으로 많이 사용)
    그룹 단위로 channel, filter, layer 등 구조 자체를 제거하는 방법. matrix 연산이 사라져 inference 속도가 향상될 수 있음. 하지만 pruning 비율을 높게 하는 것에 한계가 있다.

  2. Unstructed Pruning
    구조와 상관없이 특정 기준을 세워서 matrix 내 값 하나하나를 검토하여 가지치기 수행. 0근처의 weight를 가지치기한다. 필요 없다고 판단되는 weight를 0으로 만드는 것이므로 높은 비율로 pruning 가능하다. 하지만 weight를 0으로 변경할 뿐 matrix 연산은 그대로 수행해야 하기 때문에 inference 속도는 그대로이다.

Dropout과의 차이점

  • pruning : 파라미터 재사용 X

  • dropout : 파라미터 재사용 O, inference과정에서는 모든 파라미터 사용.

대표적인 pruning 기법

  1. L1 Regularization (L1 정규화):
    L1 정규화는 모델의 손실 함수에 가중치의 L1 norm을 추가하여 가중치를 제한하는 방법. 이를 통해 작은 가중치의 연결을 0으로 수렴시키고, 희소한 모델을 만들어 pruning 효과를 얻을 수 있습니다.
  2. Global Magnitude-based Pruning:
    전체 가중치의 절댓값에 대한 분포를 계산하고, 상위 또는 하위 퍼센트의 가중치를 제거하는 방법. 예를 들어, 상위 20%의 가중치를 제거하면 상위 20%에 해당하는 가중치들이 가지치기되어 희소한 모델이 만들어집니다.
  3. Layer-wise Magnitude-based Pruning:
    각 layer에 대해 가중치의 절댓값에 대한 분포를 계산하고, 각 층에서 상위 또는 하위 퍼센트의 가중치를 제거하는 방법. 각 층에 대해 개별적으로 pruning을 수행하므로, 모델의 각 부분이 서로 다른 pruning 비율을 가질 수 있습니다.
  4. Iterative Magnitude-based Pruning:
    여러 번의 pruning iteration을 통해 점진적으로 가중치를 제거하는 방법. pruning 후에 모델을 재학습하고, 이를 반복함으로써 점진적으로 희소한 모델을 형성합니다.
  5. Structured Pruning:
    특정 패턴이나 블록 단위로 pruning을 수행하는 방법. 예를 들어, 컨볼루션 층에서 필터 전체를 제거하거나, RNN에서 특정 타임 스텝에 해당하는 연결을 제거하는 등이 있습니다.
  6. Gradient-based Pruning:
    역전파 도중에 그래디언트 정보를 기반으로 가중치를 업데이트하면서 pruning을 수행하는 방법. 이 방식은 학습 도중에 동적으로 모델을 가지치기할 수 있는 장점이 있습니다.
  7. Taylor Approximation-based Pruning:
    Taylor 근사를 사용하여 각 가중치에 대한 미분 값을 계산하고, 미분 값이 낮은 가중치를 제거하는 방법. 이는 모델의 출력에 미치는 영향이 적은 가중치를 제거하는 방식입니다.

2. Distillation

모델의 크기를 줄이고 성능을 유지하는데 초점을 맞춘 기법으로 teacher모델 (큰 모델)에서 학습한 지식을 student model (작은 모델)에 전달하는 방법

Teacher model에서 정보를 얻는 방식

  1. Response-Based Knowledge - 최종만 빼내는 경우
  2. Feature-Based Knowledge - 중간중간 layer의 결과를 빼내어 student에게 넘겨주는 경우
  3. Relation-Based Knowledge - 데이터 간의 정보(input layer), 여러 feature들간의 정보(hint layers), 출력 결과 간의 정보(output layer)처럼 특정 데이터 혹은 feature 간의 정보를 활용한 경우

Distilling the Knowledge in a Neural Network 논문 내용

기존의 softmax 수식에서 temperature내용만 추가됨.
softmax는 logit 값들을 입력으로 받아 각 클래스에 대한 확률이 0과 1사이에 있고 전체 합이 1이 되도록 출력하는 함수이다.

qi=exp(zi/T)jexp(zj/T)q_i = \frac{\exp(z_i / T)}{\sum_j \exp(z_j / T)}
  • qiq_i: 클래스 ii에 대한 확률 (Softmax 출력)

  • ziz_i: 클래스 ii에 대한 logit 값 (모델의 예측값)

  • exp(zi)\exp(z_i): 클래스 ii의 로짓에 대한 지수 함수 값
    (확률이 지수 함수를 통해 스케일링됨)

  • jexp(zj)\sum_j \exp(z_j): 모든 클래스의 지수 값들의 합
    (정규화 분모, 전체 클래스 확률의 합이 1이 되도록 함)


T>1:분포를 부드럽게T<1:분포를 날카롭게T>1 : \text{분포를 부드럽게}\\ T<1 : \text{분포를 날카롭게}

T가 1보다 크면 출력 확률 분포가 더 균등해짐. 확신이 덜한 예측, 즉 다른 경우의 수도 함께 추가 고려.

Cross Entropy Loss (LCEL_{CE})와 Distillation Loss (LKDL_{KD})로 구성됨.

  • LL: Loss function
  • SS: Student model
  • TT: Teacher model
  • (x,y)(x, y): 하나의 입력 이미지와 해당 정답 레이블
  • θ\theta: 모델의 학습 파라미터
  • τ\tau: Temperature (온도 하이퍼파라미터)

3. Quantiation

모델의 수치적 표현을 최적화하여 계산 효율성을 높이고 메모리 요구사항을 줄이는 방법. 파라미터 수는 그대로이지만 모델의 크기가 작아진다.

32bit -> 4byte / 1byte = 8bit
모델 크기 = 파라미터 수 x 파라미터 크기 = 1억 x 4 byte = 4억 byte
1MB = 1024KB / 1KB = 1024B

Quantization FP32 전=100,000,000×4bit1024×1024381MB\text{Quantization FP32 전}=\frac{100{,}000{,}000 \times 4\,\text{bit}}{1024 \times 1024} \approx 381\,\text{MB}
Quantization int8 후=100,000,000×11024×1024=100,000,0001,048,57695.37MB\text{Quantization int8 후}=\frac{100{,}000{,}000 \times 1}{1024 \times 1024} = \frac{100{,}000{,}000}{1{,}048{,}576} \approx 95.37\,\text{MB}

Quantization 기법들

Quantization ModesData RequirementsInference LatencyInference Accuracy Loss
Dynamic QuantizationNo DataUsually FasterSmallest
Static QuantizationUnlabeled DataFastestSmaller
Quantization Aware TrainingLabeled DataFastestSmaller

1) Post-Training Quantization (학습 완료 후 양자화)

  • Dynamic quantization
    Dynamic quantization이란 weight는 항상 양자화 하고, activation은 inference할 때 양자화 하는 방법입니다.
    따라서 activation은 메모리에 저장될 때 floating-point형태로 저장됩니다.

  • Static quantization
    Static quantization은 weight와 activation을 모두 양자화 하는 방법입니다.
    Static quantization은 Dynamic quantization과 다르게 activation의 scale factor와 zero point를 계산할 필요가 없어 연산이 빠른 장점이 있습니다.

2) Quantization Aware Training

  • Post-Training Quantization
    Post-Training Quantization은 32bit를 사용하여 저장한 floating-point형 숫자를 더 낮은 비트를 사용하여 표현하는 방법입니다. 따라서 숫자를 저장할때 정확도 손실이 발생하며, 이 모델로부터 다시 원래 숫자를 복원할 때 양자화 하기 전의 값과 차이가 발생합니다. 이 차이로부터 모델 전체의 성능저하가 발생하게 됩니다.

reference

Pruning

Distillation

Quantization

profile
공부 블로그 입니다!

0개의 댓글