Pruning
pruning이 중복 parameter를 제거해 Ultralytics YOLO26과 같은 neural network를 최적화하는 방법을 알아보세요. Edge AI를 위한 structured 및 unstructured 방법을 살펴보세요.
프루닝은 불필요한 파라미터를 제거하여 모델 최적화를 수행하고 신경망의 크기와 계산 복잡도를 줄이는 전략적 기법입니다. 정원사가 나무가 잘 자라도록 죽었거나 지나치게 자란 가지를 다듬는 것처럼, 프루닝 알고리즘은 모델의 예측 성능에 거의 기여하지 않는 중복 가중치와 편향을 식별하고 제거합니다. 주요 목표는 높은 정확도를 유지하면서도 메모리와 에너지를 훨씬 적게 사용하는 압축된 "희소" 모델을 만드는 것입니다. 이러한 감소는 추론 지연 시간을 개선하는 데 필수적이며, 모바일 장치와 임베디드 장치처럼 리소스가 제한된 하드웨어에서 고급 아키텍처를 효율적으로 실행할 수 있도록 합니다.
메커니즘 및 방법론#
최신 딥러닝 모델은 과도하게 파라미터화된 경우가 많으며, 이는 특정 작업을 해결하는 데 필요한 것보다 훨씬 많은 연결을 포함한다는 의미입니다. 프루닝은 값이 0에 가까운 연결을 제거하여 이러한 특성을 활용하며, 해당 연결이 출력에 미치는 영향이 무시할 수 있을 정도로 작다고 가정합니다. 파라미터를 제거한 후에는 일반적으로 파인튜닝 과정이 진행되며, 남은 가중치를 조정하고 손실된 성능을 회복하기 위해 모델을 짧게 재학습합니다. 이 개념은 복권 가설과 밀접한 관련이 있습니다. 복권 가설은 대규모 네트워크에 유사한 정확도에 도달할 수 있는 더 작고 매우 효율적인 서브네트워크가 포함되어 있다고 설명합니다.
프루닝 전략에는 두 가지 주요 범주가 있습니다:
- 비구조적 프루닝: 이 방법은 위치와 관계없이 크기에 따라 개별 가중치를 제거합니다. 전체 파라미터 수를 효과적으로 줄일 수 있지만, 불규칙한 희소 행렬을 생성하므로 특수 소프트웨어 없이는 표준 CPU와 GPU가 이를 효율적으로 처리하기 어려울 수 있습니다.
- 구조적 프루닝: 이 접근 방식은 합성곱 신경망(CNN) 내의 뉴런, 채널 또는 레이어와 같은 전체 기하학적 구조를 제거합니다. 행렬 구조를 유지하므로 구조적 프루닝은 표준 하드웨어 가속기와의 호환성이 높으며, 실시간 추론에서 즉각적인 속도 향상을 제공하는 경우가 많습니다.
실제 적용 사례#
프루닝은 하드웨어 리소스가 제한된 다양한 산업 분야에서 엣지 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}%")프루닝과 관련 최적화 기법의 비교#
배포를 위해 모델을 효과적으로 최적화하려면 프루닝을 다른 전략과 구분하는 것이 도움이 됩니다:
- 모델 양자화: 연결을 제거하는 프루닝과 달리 양자화는 가중치의 정밀도를 낮춥니다(예: 32비트 부동 소수점 수를 8비트 정수로 변환). 두 기법을 함께 사용하면 임베디드 시스템의 효율성을 극대화할 수 있습니다.
- 지식 증류: 더 작은 "학생" 모델을 학습하여 더 큰 "교사" 모델의 동작을 모방하도록 하는 방법입니다. 프루닝은 원본 모델을 직접 수정하는 반면, 증류는 새로운 소형 아키텍처를 학습합니다.
학습, 주석 처리 및 최적화된 모델 배포를 포함한 포괄적인 라이프사이클 관리를 위해 사용자는 Ultralytics Platform을 활용할 수 있습니다. 이를 통해 데이터셋 관리부터 ONNX 또는 TensorRT와 같은 하드웨어 친화적 형식으로 모델을 내보내는 작업까지의 워크플로를 간소화할 수 있습니다.









