모델 프루닝이 엣지 AI를 위해 신경망의 크기와 복잡성을 어떻게 줄이는지 알아보세요. 모바일에서 더 빠른 추론을 위해 Ultralytics 최적화하는 전략을 탐구하세요.
모델 정리는 기계 학습에서 신경망의 크기와 계산 복잡성을 줄이기 위해 불필요한 매개변수를 체계적으로 제거하는 기법이다. 정원사가 나무가 잘 자라도록 죽거나 지나치게 자란 가지를 다듬듯이, 개발자들은 인공 신경망을 더 빠르고, 더 작으며, 더 에너지 효율적으로 만들기 위해 가지치기를 합니다. 이 과정은 스마트폰, 임베디드 센서, 에지 컴퓨팅 하드웨어와 같은 제한된 자원을 가진 장치에 현대적인 딥러닝 아키텍처를 배포하는 데 필수적입니다.
트리밍의 핵심 개념은 심층 신경망이 종종 "과도한 매개변수화" 상태라는 점입니다. 즉, 상당히 더 많은 weights and biases 보다 훨씬 더 많은 가중치와 편향을 포함한다는 것입니다. 훈련 과정에서 모델은 방대한 수의 연결을 학습하지만, 모든 연결이 최종 출력에 동등하게 기여하는 것은 아닙니다. 프루닝 알고리즘은 훈련된 모델을 분석하여 이러한 중복되거나 정보가 없는 연결들— 일반적으로 가중치가 0에 가까운 연결들—을 식별하고 제거합니다.
정제된 모델의 수명 주기는 일반적으로 다음과 같은 단계를 따릅니다:
이 방법론은 종종 복권 티켓 가설과 연관되어 있으며, 이는 밀집된 네트워크 내에 고립된 하위 네트워크(당첨 티켓)가 존재한다는 것을 시사한다. 이러한 하위 네트워크는 개별적으로 훈련될 경우 원본 모델과 유사한 정확도를 달성할 수 있다.
가지치기 방법은 일반적으로 제거되는 구성 요소의 구조에 따라 분류됩니다.
프루닝은 엣지 AI의 핵심 기반 기술로, 클라우드 연결이 불가능하거나 너무 느린 환경에서도 정교한 모델을 실행할 수 있게 합니다.
모델 전지는 강력한 도구이지만, 종종 다른 모델 최적화 기법과 혼동되거나 함께 사용됩니다.
다음 Python PyTorch를 사용하여 컨볼루션 레이어에 비정형 가지치기를 적용하는 방법을 보여줍니다. PyTorch. 이는 모델을 최적화된 형식(예: ONNX과 같은 최적화된 형식으로 내보내기 전에 수행하는 일반적인 단계입니다.
import torch
import torch.nn as nn
import torch.nn.utils.prune as prune
# Initialize a standard convolutional layer
module = nn.Conv2d(in_channels=1, out_channels=20, kernel_size=3)
# Apply unstructured pruning to remove 30% of the connections
# This sets the weights with the lowest L1-norm to zero
prune.l1_unstructured(module, name="weight", amount=0.3)
# Calculate and print the sparsity (percentage of zero elements)
sparsity = 100.0 * float(torch.sum(module.weight == 0)) / module.weight.nelement()
print(f"Layer Sparsity: {sparsity:.2f}%")
데이터셋과 모델의 전체 라이프사이클(훈련, 평가, 배포 포함)을 관리하려는 사용자를 위해 Ultralytics 간소화된 인터페이스를 제공합니다. 이는 YOLO26과 같은 고도로 최적화된 모델 생성 및 하드웨어 친화적 형식(예: TensorRT 또는 CoreML 같은 하드웨어 친화적인 형식으로 내보내는 과정을 간소화합니다.