枝刈り(Pruning)

Pruning

枝刈りとは

枝刈り(Pruning)は、ニューラルネットワークから重要度の低いパラメータや接続を除去することでモデルを軽量化する技術です。人間の脳の神経回路が発達過程で不要なシナプスを刈り込む仕組みに着想を得ています。モデルのサイズと計算コストを削減しながら、性能をできるだけ維持することを目的としています。

枝刈りの種類

非構造的枝刈り(Unstructured Pruning)は、個々の重みを対象にゼロに設定する手法で、高い圧縮率を達成できますが、スパース行列の効率的な演算にはハードウェアサポートが必要です。構造的枝刈り(Structured Pruning)は、フィルタ、チャネル、アテンションヘッドなどの構造単位で除去する手法で、標準的なハードウェアでも高速化が得られます。

重要度の評価方法

枝刈りの鍵は、どのパラメータが重要でないかを判断する基準です。重みの絶対値に基づく手法(Magnitude Pruning)が最もシンプルで広く使用されています。その他、勾配情報を利用する手法、テイラー展開に基づく手法、「宝くじ仮説」(Lottery Ticket Hypothesis)に基づいて初期化時点から重要な部分ネットワークを見つける手法など、さまざまなアプローチが研究されています。

枝刈りの実践

実践的には、学習済みモデルを枝刈りした後に再学習(Fine-tuning)するアプローチが一般的です。段階的に枝刈り率を上げていく反復的枝刈りは、一度に大幅に枝刈りするよりも性能の維持に効果的です。近年では、SparseGPTやWandaなど、大規模言語モデルに特化した枝刈り手法も開発されています。