重要でない重みを除く

このドキュメントでは、モデルのプルーニングについて概説します。プルーニングを行うことで、ユースケースとの適合性について判断できるようになります。コードの詳細については、Keras によるプルーニングのチュートリアルと API ドキュメントをご覧ください。Keras API の使用方法、プルーニングの詳細、より高度な使用パターンに関するドキュメントについては、スパースモデルのトレーニング ガイドをご覧ください。

概要

重要度に基づいて重みのプルーニングを行い、トレーニング プロセスの過程でモデル内の複数の重みを徐々にゼロに指定することで、モデルのスパース性を実現します。スパースモデルは圧縮しやすく、ゼロの部分については推論の際にスキップできるため、レイテンシを改善できます。

この手法では、モデルの圧縮により改善が行われます。将来的には、フレームワークでこの手法をサポートすることで、レイテンシを改善する予定です。モデル圧縮により、精度の低下を最小限に抑えながら、最大で 6 倍の改善が確認されました。

この手法は、音声認識やテキスト読み上げなど、さまざまな音声アプリケーションで評価されており、さまざまなビジョンモデルと翻訳モデルで試験されています。

API 互換性マトリックス

ユーザーは、次の API でプルーニングを適用できます。

  • モデル構築: tf.keras(Sequential モデルと Functional モデルのみ)
  • TensorFlow の各バージョン: TF 1.x(バージョン 1.14 以降)と 2.x
    • TF 2.X パッケージの tf.compat.v1 と TF 1.X パッケージの tf.compat.v2 はサポートされていません。
  • TensorFlow 実行モード: グラフモードおよび eager モード
  • 分散トレーニング: tf.distribute(グラフ実行のみ)

ロードマップでは、次の領域でサポートを追加する予定です。

結果

画像分類

モデル スパースでない最上位の精度 スパース精度 スパース性
InceptionV3 78.1% 78.0% 50%
76.1%75%
74.6%87.5%
MobilenetV1 22471.04%70.84%50%

モデルは Imagenet でテストされました。

翻訳

モデル 非スパース BLEU スパース BLEU スパース性
GNMT EN-DE 26.77 26.86 80%
26.5285%
26.1990%
GNMT DE-EN 29.47 29.50 80%
29.2485%
28.8190%

モデルでは WMT16 のドイツ語と英語のデータセットが使用されました。開発セットとして news-test2013、テストセットとして news-test2015 が使用されています。

Keras によるプルーニングのチュートリアルに加えて、次の例をご覧ください。

  • MNIST の手書き数字の分類タスクについて、プルーニングを使用して CNN モデルをトレーニングする: コード
  • IMDB のセンチメント分類タスクについて、プルーニングを使用して LSTM をトレーニングする: コード

ヒント

  1. 可能であれば、事前トレーニング済みのモデルまたは重みから開始します。できない場合は、プルーニングなしで作成してから開始します。
  2. モデルが復元するまでの時間を確保するために、あまり頻繁にプルーニングしないでください。ツールキットにはデフォルトの頻度が用意されています。
  3. 開始前のステップ 0 として、事前トレーニング済みのモデルを最終的なスパース性までプルーニングする実験を行ってみます。
  4. モデルをプルーニングする際の学習率を、高すぎたり低すぎたりしないようにします。プルーニング スケジュールは、ハイパーパラメータとします。

学術的な背景については、「To prune, or not to prune:expluning of pruning for model compression」論文)をご覧ください。