Pruning
プルーニングが冗長なパラメーターを削除し、Ultralytics YOLO26のようなニューラルネットワークを最適化する方法を説明します。Edge AI向けの構造化手法と非構造化手法を紹介します。
プルーニングは、不要なパラメーターを削除することで、ニューラルネットワークのサイズと計算の複雑さを低減するために使用される、戦略的なモデル最適化手法です。庭師が木の成長を促すために枯れた枝や伸びすぎた枝を剪定するのと同じように、プルーニングアルゴリズムは、モデルの予測性能への寄与が小さい冗長な重みとバイアスを特定して削除します。主な目的は、高い精度を維持しながら、メモリとエネルギーの消費を大幅に削減する、圧縮された「スパース」モデルを作成することです。この削減は推論レイテンシの改善に不可欠であり、携帯電話や組み込みデバイスなど、リソースに制約のあるハードウェア上でも高度なアーキテクチャを効率的に実行できるようにします。
仕組みと手法#
最新のディープラーニングモデルは過剰パラメーター化されていることが多く、特定のタスクを解決するために必要な数をはるかに超える接続を含んでいます。プルーニングでは、出力への影響が無視できるほど小さいという前提に基づき、値がゼロに近い接続を削除します。パラメーターを削除した後、通常はファインチューニングを行い、残った重みを調整するためにモデルを短時間再学習して、失われた性能を回復させます。この概念はLottery Ticket Hypothesisと密接に関連しています。これは、大規模なネットワークには、同等の精度を達成できる、より小さく非常に効率的なサブネットワークが含まれているという仮説です。
プルーニング戦略には、主に2つのカテゴリがあります。
- 非構造化プルーニング:この手法では、位置に関係なく、各重みを大きさに基づいて削除します。総パラメーター数を効果的に削減できる一方で、不規則なスパース行列が生成されるため、標準の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などのハードウェア対応フォーマットへのモデルのエクスポートまで、ワークフローを簡素化できます。









