モデルプルーニングがエッジAIのためのニューラルネットワークのサイズと複雑さをどのように削減するかを学びましょう。モバイルでのより高速な推論のためにUltralytics YOLO26を最適化する戦略を探ります。
モデルプルーニングは、不要なパラメータを体系的に削除することで、 ニューラルネットワークのサイズと計算複雑度を削減するために機械学習で用いられる手法です。庭師が枯れた枝や伸びすぎた枝を剪定して木の成長を促すように、開発者は人工ネットワークをプルーニングして、より高速、小型、かつエネルギー効率の高いものにします。このプロセスは、スマートフォン、組み込みセンサー、エッジコンピューティングハードウェアなど、リソースが限られたデバイスに最新の 深層学習アーキテクチャをデプロイするために不可欠です。
プルーニングの核となる考え方は、ディープニューラルネットワークがしばしば「過剰にパラメータ化されている」という点にあります。これは、特定の課題を解決するために厳密に必要とされるよりもはるかに多くのWeights and Biasesを含んでいることを意味します。学習プロセス中、モデルは膨大な数の接続を学習しますが、すべてが最終出力に等しく貢献するわけではありません。プルーニングアルゴリズムは、学習済みモデルを分析し、これらの冗長または非情報的な接続(通常は重みがゼロに近いもの)を特定して削除します。
剪定されたモデルのライフサイクルは、一般的に以下のステップに従います。
この手法は、Lottery Ticket Hypothesisと関連付けられることが多く、密なネットワークには、単独でトレーニングされた場合に元のモデルと同等の精度を達成できる、より小さく孤立したサブネットワーク(当選チケット)が含まれていると提唱しています。
プルーニング手法は、除去されるコンポーネントの構造に基づいて一般的に分類されます。
プルーニングはEdge AIにとって重要なイネーブラーであり、クラウド接続が利用できない、または遅すぎる環境で高度なモデルの実行を可能にします。
モデルプルーニングは強力なツールですが、他のモデル最適化技術と混同されたり、併用されたりすることがよくあります。
以下のpythonの例は、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 Platformが効率化されたインターフェースを提供します。YOLO26のような高度に最適化されたモデルを作成し、それらをTensorRTやCoreMLのようなハードウェアに優しい形式にエクスポートするプロセスを簡素化します。

未来の機械学習で、新たな一歩を踏み出しましょう。