モデルの枝刈りにより、機械学習モデルを最適化します。リソースが限られた環境でのデプロイメントにおいて、推論の高速化、メモリ使用量の削減、エネルギー効率の向上を実現します。
モデル刈り込みは モデル最適化手法 ニューラルネットワークのサイズと計算の複雑さを軽減するために設計された。 不要なパラメータを削除することで パラメータを削除することによって人工知能モデルは、より高い性能を達成するために大きくなるにつれて、しばしば次のようになる。 最終的な出力にはほとんど寄与しない多くの接続やニューロンを含む、過剰なパラメータになりがちです。このような冗長なコンポーネントを 開発者は、このような冗長なコンポーネントを特定し削除することで、より少ないメモリとエネルギーで動作する無駄のないモデルを作成することができます。 より高速なリアルタイム推論を実現することができる。 このプロセスは、次のような洗練されたアーキテクチャを導入する際に特に重要である。 YOLO11のような洗練されたアーキテクチャを 携帯電話や組み込みセンサーなど、リソースが乏しいハードウェア上にYOLO11のような高度なアーキテクチャを展開するためには、このプロセスは特に不可欠である。
剪定のプロセスには、通常、トレーニング、剪定、微調整の3つの段階がある。 微調整である。最初に、複雑な特徴を捉えるために、大規模なモデルが 収束させ、複雑な特徴を捉える。プルーニングの段階では、アルゴリズムが特定のパラメータ-通常 通常 weights and biases-の重要性を評価する。 の重要性を評価する。重要でないと判断されたパラメータは、ゼロに設定されるか、完全に削除される。
しかし、単にネットワークの一部を切り取るだけでは、その精度は低下する。 精度が落ちてしまう。これを打ち消すために、モデルは微調整と呼ばれる再学習を行う。 ファインチューニングと呼ばれる再トレーニングを行う。このステップにより、残りのパラメータが調整され、失われた接続を補うことができる。 このステップにより、残りのパラメータが調整され、失われた接続を補うことができる。このアプローチの有効性は このアプローチの有効性は ロッタリーチケット仮説(Lottery Ticket Hypothesis)によって支持されている。 この仮説は、密なネットワークには、単独で訓練したときに同等の精度を達成できる、より小さなサブネットワークが含まれていることを示唆している。
刈り込み戦略は一般的に、除去されるコンポーネントの構造によって分類される:
どちらもよく使われる最適化手法ですが、プルーニングとモデル量子化を区別することが重要です。 モデル量子化と区別することが重要です。プルーニングは プルーニングは、パラメータ(接続やニューロン)の数を減らすことに焦点を当て、モデルのアーキテクチャを効果的に変更します。これに対し これとは対照的に、量子化はパラメータの精度を下げます。 浮動小数点数を8ビット整数に変換する。これらの方法はしばしば相補的である。 開発者は、まずモデルを剪定して冗長性を排除し、次にそれを量子化することで、配備時のメモリフットプリントをさらに最小化することができる。 デプロイメント
プルーニングは、高度なコンピュータビジョンを実用化する上で重要な役割を果たす。 プルーニングは 重要な役割を果たす:
以下のようなフレームワーク PyTorchのようなフレームワークは を提供しています。次の例では、畳み込み層に非構造化プルーニングを適用する方法を示します。 のような最適化されたフォーマットにモデルをエクスポートする前の一般的な操作です。 ONNX.
import torch
import torch.nn.utils.prune as prune
# Initialize a standard convolutional layer
layer = torch.nn.Conv2d(in_channels=3, out_channels=64, kernel_size=3)
# Apply L1 unstructured pruning to remove 30% of the connections
# This sets the smallest 30% of weights (by absolute value) to zero
prune.l1_unstructured(layer, name="weight", amount=0.3)
# Verify sparsity: calculate the percentage of zero parameters
sparsity = float(torch.sum(layer.weight == 0)) / layer.weight.nelement()
print(f"Layer sparsity: {sparsity:.2%}")


