전정(pruning)이 중복 매개변수를 제거함으로써 Ultralytics 같은 신경망을 최적화하는 방법을 알아보세요. 에지 AI를 위한 구조화된 방법과 비구조화된 방법을 탐구해 보세요.
가지치기는 불필요한 매개변수를 제거하여 신경망의 크기와 계산 복잡성을 줄이는 전략적 모델 최적화 기법이다. 정원사가 나무가 잘 자라도록 죽거나 지나치게 자란 가지를 다듬듯, 가지치기 알고리즘은 중복된 가중치와 편향을 식별하여 제거한다. weights and biases 모델의 예측 능력에 거의 기여하지 않는 중복 가중치와 바이어스를 식별하고 제거합니다. 주요 목표는 높은 정확도를 유지하면서도 훨씬 적은 메모리와 에너지를 소비하는 압축된 "스파스(sparse)" 모델을 생성하는 것입니다. 이러한 축소는 추론 지연 시간 개선에 필수적이며, 모바일 폰이나 임베디드 장치와 같은 자원 제약 하드웨어에서 고급 아키텍처가 효율적으로 실행될 수 있도록 합니다.
현대 딥러닝 모델은 종종 과도하게 매개변수화되어 특정 작업을 해결하는 데 필요한 것보다 훨씬 많은 연결을 포함합니다. 프루닝은 출력에 미미한 영향을 미친다는 가정 하에 값이 0에 가까운 연결을 제거함으로써 이를 활용합니다. 매개변수가 제거된 후 모델은 일반적으로 미세 조정 과정을 거치는데, 이는 잔여 가중치를 조정하고 손실된 성능을 회복하기 위해 짧은 재훈련을 수행하는 것이다. 이 개념은 로터리 티켓 가설과 밀접한 관련이 있는데, 이는 대규모 네트워크 내에 비슷한 정확도를 달성할 수 있는 소규모의 고효율 하위 네트워크가 존재한다는 것을 시사한다.
가지치기 전략에는 크게 두 가지 범주가 있습니다:
가지치기는 하드웨어 자원이 제한된 다양한 산업 분야에서 엣지 AI를 구현하기 위해 필수적입니다:
YOLO26과 같은 최신 모델은 효율성을 위해 설계되었지만, 개발자는 PyTorch를 사용하여 레이어를 더욱 최적화할 수 있습니다. 다음 예시는 컨볼루션 레이어에 비정형 트리밍을 적용하는 방법을 보여줍니다.
import torch
import torch.nn.utils.prune as prune
# Initialize a standard convolutional layer
layer = torch.nn.Conv2d(in_channels=3, out_channels=32, kernel_size=3)
# Apply L1 unstructured pruning to remove 30% of weights with the lowest magnitude
prune.l1_unstructured(layer, name="weight", amount=0.3)
# Verify sparsity (percentage of zero parameters)
sparsity = 100.0 * float(torch.sum(layer.weight == 0)) / layer.weight.nelement()
print(f"Sparsity achieved: {sparsity:.2f}%")
배포를 위해 모델을 효과적으로 최적화하려면 가지치기(pruning)를 다른 전략과 구분하는 것이 도움이 됩니다:
포괄적인 라이프사이클 관리(훈련, 주석 부착, 최적화된 모델 배포 포함)를 위해 사용자는 Ultralytics 활용할 수 있습니다. 이를 통해 데이터셋 관리부터 ONNX와 같은 하드웨어 친화적 형식으로 모델을 내보내는 작업까지 워크플로우가 간소화됩니다. ONNX 또는 TensorRT와 같은 하드웨어 친화적 형식으로 모델을 내보내는 작업까지 간소화합니다.