모델 가지치기를 통해 머신 러닝 모델을 최적화하세요. 리소스가 제한된 배포를 위해 더 빠른 추론, 메모리 사용량 감소 및 에너지 효율성을 달성하세요.
모델 가지치기는 모델 최적화 기법 신경망의 크기와 계산 복잡성을 줄이기 위해 설계된 불필요한 매개변수를 제거하여 매개변수를 제거하여 신경망의 크기와 계산 복잡성을 줄이기 위한 기술입니다. 인공 지능 모델이 더 높은 성능을 달성하기 위해 커지면 종종 최종 출력에 거의 기여하지 않는 많은 연결이나 뉴런을 포함하여 과도하게 매개변수화되는 경우가 많습니다. 이러한 불필요한 매개변수를 이러한 중복 구성 요소를 제거함으로써 개발자는 더 적은 메모리와 에너지를 필요로 하는 더 간결한 모델을 만들 수 있습니다. 더 빠른 실시간 추론을 제공할 수 있습니다. 이 프로세스는 다음과 같은 정교한 아키텍처를 배포하는 데 특히 중요합니다. YOLO11 와 같은 정교한 아키텍처를 배포하는 데 특히 중요합니다. 휴대폰이나 임베디드 센서와 같은 리소스가 부족한 하드웨어에 배포하는 데 특히 중요합니다.
가지치기 과정에는 일반적으로 훈련, 가지치기, 미세 조정의 세 가지 주요 단계가 포함됩니다. 미세 조정. 처음에는 대규모 모델을 훈련하여 복잡한 특징을 포착하기 위한 융합을 학습합니다. 가지치기 단계에서는 알고리즘이 특정 매개변수의 중요도를 평가합니다. 매개변수(일반적으로 weights and biases-를 기반으로 크기 또는 감도와 같은 기준에 따라 특정 매개변수의 중요성을 평가합니다. 중요하지 않다고 판단되는 매개변수는 0으로 설정되거나 완전히 제거됩니다.
하지만 단순히 네트워크의 일부를 잘라내는 것만으로 네트워크의 정확도가 떨어질 수 있습니다. 이를 방지하기 위해 모델은 미세 조정이라고 하는 미세 조정이라고 하는 후속 재훈련을 거칩니다. 이 단계를 통해 나머지 매개변수를 조정하고 누락된 연결을 보정하여 모델의 성능을 거의 원래 수준에 가깝게 복원할 수 있습니다. 이 접근 방식의 이 접근 방식의 효과는 복권 가설에 따르면 밀도가 높은 네트워크는 다음과 같이 구성됩니다. 독립적으로 학습할 때 비슷한 정확도를 달성할 수 있는 더 작은 하위 네트워크를 포함합니다.
가지치기 전략은 일반적으로 제거되는 구성 요소의 구조에 따라 분류됩니다:
둘 다 널리 사용되는 최적화 기법이지만, 가지치기를 다음과 같이 구분하는 것이 중요합니다. 모델 정량화와 구별하는 것이 중요합니다. 가지치기는 매개변수(연결 또는 뉴런)의 수를 줄이는 데 매개변수(연결 또는 뉴런)의 수를 줄여 모델의 아키텍처를 효과적으로 변경하는 데 중점을 둡니다. 반면 반면 양자화는 32비트 부동 소수점 숫자를 8비트로 변환하는 등 해당 파라미터의 정밀도를 낮춥니다. 부동 소수점 숫자를 8비트 정수로 변환하는 것과 같이 해당 매개변수의 정밀도를 떨어뜨립니다. 이러한 방법은 상호 보완적인 경우가 많으며, 개발자는 먼저 모델을 정리하여 중복성을 제거한 다음 을 정리하여 중복성을 제거한 다음 양자화하여 메모리 공간을 더욱 최소화할 수 있습니다. 배포할 수 있습니다.
프루닝은 고급 컴퓨터 비전을 실용적인 고급 컴퓨터 비전을 실제 시나리오에서 중요한 역할을 합니다:
다음과 같은 프레임워크 PyTorch 와 같은 프레임워크는 내장된 유틸리티를 제공하여 가지치기를 적용할 수 있는 내장 유틸리티를 제공합니다. 다음 예제는 컨볼루션 레이어에 구조화되지 않은 가지치기를 적용하는 방법을 보여줍니다. 레이어에 비정형 가지치기를 적용하는 방법을 보여줍니다. ONNX.
import torch
import torch.nn.utils.prune as prune
# Initialize a standard convolutional layer
layer = torch.nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3)
# Apply L1 unstructured pruning to remove 30% of the connections
# This sets the smallest 30% of weights (by absolute value) to zero
prune.l1_unstructured(layer, name="weight", amount=0.3)
# Verify sparsity: calculate the percentage of zero parameters
sparsity = float(torch.sum(layer.weight == 0)) / layer.weight.nelement()
print(f"Layer sparsity: {sparsity:.2%}")

