剪定Pruning

使われない接続を切り落としモデルを軽くすること

ポイント
  • 剪定はモデルの中でほとんど使われない接続をまるごと無くす作業です。残すものと捨てるものを分けます。
  • 学習が終わったモデルには値が0に近い接続がとても多くあります。あってもなくても同じようなもので、消しても答えはあまり変わりません。
  • 一度にごっそり切りません。少し切っては学び直すことを何度も繰り返すほうが性能の落ち込みが小さくなります。
  • あちこちに散らばった接続を消す方式と列やまとまりを丸ごと取り除く方式があります。実際に速くなるのはたいてい丸ごと取り除くほうです。
  • 目盛りを粗くする量子化とは別の作業です。剪定は個数そのものを減らします。
目次

1たとえで理解する

大衆食堂のメニュー表に八十種類ほどのメニューが載っています。ところが注文票を一年分集めて数えてみると、半分は一度も出たことがありません。名前だけ掲げてあり、材料は冷蔵庫の中で傷んでいくメニューです。

そこで注文の入らないメニューをメニュー表から消します。材料の枠が空き、厨房の動線が短くなり、注文が入ったときに手が迷うことも減ります。客が受け取る料理はほとんど変わりません。もともと注文されていたものだけを注文していたのですから。

ただし一度に四十種類消すと困ったことになります。たまにしか頼まれなかったメニューまで消えて常連が離れてしまいます。十種類ほど消して一か月様子を見て、また十種類消すほうが安全です。剪定はこうして使われないものを取り除く作業です。

2くわしく

なぜ使われない接続がそんなに多いのでしょう

モデルは最初からぴったりの大きさで作られるわけではありません。余裕を持って大きめに作っておいて学習させます。大きく作ったほうが学習がうまく進むからです。そのため学習が終わると、実際に答えに力を貸す接続と、値が0付近をさまよっているだけの接続が混ざり合っています。

値が0に近い接続は、何を掛けても結果にほとんど寄与しません。それでも計算のときは同じように場所を占め、同じように掛け算を一回させます。こうした接続が全体の半分を超えることも珍しくありません。

剪定はこの接続を選んで切ります。切られた場所は0のまま残り、計算のときに丸ごと飛ばせる印になります。

何を取り除くかどう選ぶのでしょう

最もよくある基準は値の大きさです。0に近い順に並べて下のほうを切ります。手間が少なく、それなりによく通用します。

値だけを見ると見落とすこともあります。値が小さくても運悪く重要な要所にあると、切った瞬間に後ろが崩れます。そのためこの接続を消したとき答えがどれだけ揺らぐかを実際に測って選ぶこともあります。層ごとに切ってよい量が違う点も重要です。前のほうの層はたいてい余裕がなく、後ろのほうの層は余裕がある傾向にあります。

少し切っては学び直します

一度に大きく切ると答えが目に見えて悪くなります。そこで少し切り、残った接続で短く学び直させて空いた場所を埋めさせます。この二段階を何度も繰り返します。

同じ量を切っても、この方式なら性能の落ち込みがずっと小さくなります。残った接続が消えた接続の分担を少しずつ引き受けるからです。逆に学び直しなしに切って終わりにすると、切った量に比例して答えが崩れます。

散らばった剪定と丸ごとの剪定

接続を一つ一つ選んで切ると、残った接続は表のあちこちに散らばります。消された升目が多くても表の形はそのままなので、普通の計算装置は依然として表全体を確認します。容量は減っても速度は期待ほど上がらないことがよくあります。

そこで列やまとまりを丸ごと取り除く方式も一緒に使います。使われないニューロン一つを丸ごと抜くか、画像モデルでほとんど反応しないフィルターを丸ごと抜くといった具合です。表が実際に小さくなるので計算も本当に減ります。代わりに丸ごと取り除く分だけ性能が大きく揺らぐので、切る量はより慎重になります。

量子化と何が違うのでしょう

どちらもモデルを軽くしますが、手を付ける場所が違います。量子化は数字を一つも捨てず、書き込む目盛りだけを粗くします。剪定は目盛りをそのままにして、数字の個数を減らします。

メニュー表で見るとこう分かれます。量子化はすべてのメニューをそのまま残して値段表を百円単位に丸めて書く作業で、剪定は出ないメニューを表から消す作業です。互いに邪魔をしないので、先に消してから残ったものを丸めるというように一緒に使うこともあります。

3もう少し正確に

剪定は学習が終わったニューラルネットワークから寄与度の低い重みやニューロンを取り除き、疎な構造に変える技法です。個々の重みを消す非構造的な方式と、チャンネルや層の単位で無くす構造的な方式に分かれ、後者のほうが実際の速度向上につながりやすいです。大きなモデルの中には最初からよく学習される小さな骨組みが入っているという見方も広く議論されています。

たとえがずれる点もあります。メニュー表から消したメニューは客が注文できないので確実に消えますが、散らばった方式で切った接続は表の中に0のまま残るので、保存容量を本当に減らすには別途整理が必要です。また大衆食堂は注文の記録がそのまま人気ですが、モデルの接続はどれだけ頻繁に使われたかではなく、どれだけ結果を揺らすかで判断します。ほとんど使われなくても、一度使われるときに決定的な接続もあります。どちらの方法で切っても、切ったあとは評価をやり直して確かめる必要があります。

4やってみる

5よくある誤解

  • 剪定はモデルを無造作に減らすことだと思われがちですが、実際には寄与度の低いものから選んで少しずつ切り、学び直させる緻密な過程です。

  • 接続を消せばそれだけすぐ速くなると考えられがちですが、実際には散らばったまま消すと表の形が変わらないため速度はほとんど上がりません。

  • 剪定と量子化は同じことだと思われがちですが、実際には一方は個数を減らし、もう一方は書き込む目盛りを粗くする別の作業です。

7ひとこと要約

つまり剪定は答えにほとんど寄与しない接続を選んで取り除き、残ったもので学び直しながらモデルを軽くする作業です。

誤りや、もっと良いたとえがありますか? 修正を提案する · 最終更新2026-09-02