Yolo 深圳
深セン
今すぐ参加
用語集

モデルの枝刈り

エッジAI向けに、モデルプルーニングがニューラルネットワークのサイズと複雑さを削減する方法を学びましょう。モバイル端末での推論高速化に向け、Ultralytics 最適化する戦略を探求します。

モデルプルーニングは、機械学習における手法であり、不要なパラメータを体系的に除去することで、 ニューラルネットワークのサイズと計算上の複雑さを削減するために用いられる。 庭師が枯れた枝や伸びすぎた枝を剪定して樹木の成長を促すように、開発者は人工ネットワークを剪定することで、より高速で小型、かつエネルギー効率の高いネットワークを実現します。このプロセスは、スマートフォン、組み込みセンサー、エッジコンピューティングハードウェアなど、リソースが限られたデバイス上で現代的な深層学習アーキテクチャを展開するために不可欠です。

モデル剪定の仕組み

剪定の核心的な考え方は、深層ニューラルネットワークがしばしば「過パラメータ化」されているという点にある。つまり、それらは weights and biases が 特定の課題を解決するために厳密に必要な量よりもはるかに多い状態を指します。学習過程において、モデルは膨大な数の 接続を学習しますが、それら全てが最終出力に等しく寄与するわけではありません。プルーニングアルゴリズムは学習済みモデルを分析し、 こうした冗長または非情報的な接続(典型的には重みがゼロに近いもの)を特定して除去します。

剪定済みモデルのライフサイクルは、一般的に以下の手順に従います:

  1. トレーニング:大規模モデルを収束するまで訓練し、複雑な特徴を捕捉する。
  2. 剪定:重要度の低いパラメータはゼロに設定されるか、ネットワーク構造から物理的に除去される。
  3. 微調整:モデルは二次的な微調整ラウンドを経て、 残りのパラメータが調整され、 剪定フェーズで失われた精度を回復できるようにする。

この手法はしばしば宝くじ仮説と関連付けられる。 この仮説によれば、密なネットワークには孤立した小さな部分ネットワーク(当選券)が含まれており、 それらが単独で学習された場合、元のモデルと同等の精度を達成し得る。

剪定戦略の種類

剪定方法は、一般的に除去対象の構成要素の構造に基づいて分類される。

  • 非構造化プルーニング:この手法は、しきい値(例:絶対値)に基づいてモデル内の任意の個々の重みを削除する。これによりパラメータ数は効果的に削減されるが、疎行列が生成され、標準的なハードウェアでは効率的な処理が困難となる。専用のソフトウェアやハードウェアアクセラレータがなければ、非構造化プルーニングでは大幅な速度向上は期待できない。
  • 構造化剪定:この手法は、畳み込みニューラルネットワーク(CNN)内のチャネル、フィルタ、レイヤなどの幾何学的構造全体を削除します。密な行列構造を保持することで、剪定後のモデルは標準的な GPUCPU 、 推論レイテンシとスループットの 直接的な改善につながります。

実際のアプリケーション

エッジAIにとって、プルーニングは重要な実現手段であり、 クラウド接続が利用できない、または遅すぎる環境でも高度なモデルを実行可能にする。

  • モバイル物体検出:モバイルデバイス上のアプリケーション(リアルタイム言語翻訳や拡張現実など)は、バッテリー寿命の維持とメモリ使用量の削減のために剪定モデルを利用する。YOLO26のような最適化されたアーキテクチャは、その本質的な効率性から、こうしたタスクの基盤として好まれることが多い。
  • 自動車の安全性:自動運転車と自律走行車両は瞬時の意思決定を必要とする。 剪定済みモデルにより、車載コンピューターは高解像度カメラ映像を処理し、 データをサーバーに送信する際に生じる遅延なしに歩行者を検知できる。
  • 産業用IoT:製造現場では、組立ラインの視覚検査システムが軽量モデルを用いてdetect 。 プルーニングにより、これらのシステムは高価なサーバーラックではなく、コスト効率の良いマイクロコントローラー上で動作可能となる。

剪定 vs 関連最適化手法

モデル剪定は強力な手法ではあるものの、他のモデル最適化技術と混同されたり併用されたりすることが多い。

  • 剪定と量子化:剪定はモデル内のパラメータ(接続)数を削減する。一方、モデル量子化はそれらのパラメータの精度を低下させる。例えば32ビット浮動小数点数を8ビット整数に変換する。両者はモデル展開の効率を最大化するため、しばしば組み合わせて用いられる。
  • 剪定と知識蒸留の比較:剪定は元のモデルの一部を切り取ることで修正する 知識蒸留は、より大きな「教師」モデルの挙動を模倣する、 完全に新しい小型の「生徒」モデルを訓練する手法である。

実施例

Python 、PyTorchを使用して畳み込み層に非構造化プルーニングを適用する方法を示しています。 PyTorch。これは、モデルを ONNX 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 合理化されたインターフェースを提供します。YOLO26のような高度に最適化されたモデルの作成プロセスを簡素化し、TensorRTなどのハードウェア対応フォーマットへのエクスポートを可能にします。 TensorRT やCoreMLMLといったハードウェア対応フォーマットへのエクスポートを簡素化します。

Ultralytics コミュニティに参加する

AIの未来を共に切り開きましょう。グローバルなイノベーターと繋がり、協力し、成長を。

今すぐ参加