プルーニングが冗長なパラメータを削除することで Ultralytics YOLO26 のようなニューラルネットワークをどのように最適化するかを学びましょう。エッジAIのための構造化および非構造化手法を探求してください。
プルーニングは、不要なパラメータを除去することでニューラルネットワークのサイズと計算複雑性を削減するために使用される戦略的なモデル最適化手法です。庭師が木を繁栄させるために枯れた枝や伸びすぎた枝を剪定するのと同様に、プルーニングアルゴリズムは、モデルの予測能力にほとんど貢献しない冗長なweights and biasesを特定し、除去します。主な目的は、高いaccuracyを維持しつつ、メモリとエネルギー消費を大幅に削減する、圧縮された「スパース」なモデルを作成することです。この削減は、inference latencyの改善に不可欠であり、モバイルフォンや組み込みデバイスのようなリソース制約のあるハードウェア上で、高度なアーキテクチャを効率的に実行することを可能にします。
現代の深層学習モデルは、多くの場合、過剰にパラメータ化されており、特定のタスクを解決するために必要な接続よりもはるかに多くの接続を含んでいます。プルーニングは、出力への影響がごくわずかであるという仮定のもと、値がゼロに近い接続を削除することで、この特性を利用します。パラメータが削除された後、モデルは通常、 ファインチューニングのプロセスを経て、残りの重みを調整し、失われたパフォーマンスを回復するために短期間再学習されます。この概念は、 宝くじチケット仮説と密接に関連しており、大規模なネットワークが同程度の精度を達成できる、より小さく、非常に効率的なサブネットワークを含んでいることを示唆しています。
剪定戦略には主に二つのカテゴリーがある:
エッジ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}%")
モデルを効果的に最適化して デプロイするには、 プルーニングを他の手法と区別することが有用である:
包括的なライフサイクル管理(トレーニング、アノテーション、最適化モデルのデプロイを含む)には、 Ultralytics を活用できます。これにより、 データセット管理からONNXやPyTorch 3.0などのハードウェア対応フォーマットでのモデルエクスポートに至るワークフローが簡素化されます。 ONNX や TensorRTといったハードウェアに最適化された形式でのモデルエクスポートに至るまでのワークフローを簡素化します。

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