【もでるぷるーにんぐ】

モデルプルーニング とは?

最終更新:
💡 削る部分を選び、品質と実行環境を確かめる

ニューラルネットワークの重みをゼロにしたり、チャネルなどのまとまりを取り除いたりして、軽量化を目指す技術。品質への影響を確認し、保存形式と実行環境に合わせて効果を測る。

📌 このページのポイント
プルーニング:効果を確かめる 刈り込み前 一部の重みを0 非構造化:接続の一部を使わない 0にするだけでは効果は決まらない 保存形式・対応した計算処理を確認 品質・サイズ・機器上の速度を比べる
非構造化の模式例で、一部の重みを0として接続を省いて描く。ニューロンの数は同じ。構造化ではチャネルなどのまとまりを対象にする。線の本数は削減率や品質の保証ではなく、実験値として95%維持・50%削減などを示す図ではない。
ひよこ ひよこ
プルーニングって、学習したモデルの一部を削っちゃうってこと?
ペンギン先生 ペンギン先生
そうだよ。重みの一部をゼロにしたり、チャネルなどのまとまりを減らしたりする。刈り込みという意味の名前だね。ただし、どのモデルにも削って問題ない部分が同じ割合であるわけではないんだ。
ひよこ ひよこ
どうやって削る部分を選ぶの?
ペンギン先生 ペンギン先生
例えば重みの絶対値が小さいものを対象にする方法があるよ。個別の重みを選ぶ非構造化と、チャネルなどのまとまりを選ぶ構造化がある。選ぶ規則と削る割合を決め、結果への影響を確かめるんだ。
ひよこ ひよこ
削ったら精度は落ちる?
ペンギン先生 ペンギン先生
影響はモデルや削り方によるよ。追加学習で調整し、同じ評価条件で元のモデルと比べよう。精度95%維持やサイズ半減などは、条件のある実験結果として示すべきで、どんなモデルでも得られる数値ではないんだ。
ひよこ ひよこ
重みをゼロにすれば、すぐ小さくて速くなる?
ペンギン先生 ペンギン先生
普通の密な配列のまま保存すれば、ゼロも場所を使うよ。圧縮や疎な保存形式が必要な場合がある。計算でもゼロの部分を省ける実装でなければ速くならない。構造化も、ゼロのマスクを付けるだけか、実際に小さな構造へ作り直すかを区別しよう。
ひよこ ひよこ
スマホで動かすときにも使える?
ペンギン先生 ペンギン先生
選択肢の一つだよ。例えばTensorFlowの例では、XNNPACKの対応条件に合うモデルを刈り込み、変換後に機器上で速度を測る。量子化などを組み合わせる場合も、品質・保存サイズ・速度を別々に確認する。プルーニングだけで大きなモデルが必ず動くとは限らないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「モデルプルーニング」って出てきたら「モデルの一部を削り、品質を確かめながら軽量化を目指す技術」と思えばだいたいOK!
📖 おまけ:英語の意味
「Model Pruning」 = モデルの剪定・刈り込み
💬 pruning は園芸用語で「剪定(せんてい)」のこと。木の不要な枝を切るイメージだよ

参考資料

← 用語集にもどる