重要でない重みを除く

TensorFlow モデル最適化により管理

このドキュメントでは、モデル プルーニングがユースケースにどの程度適しているかを判断できるよう、その概要について説明します。

概要

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

この手法では、モデルの圧縮により改善が行われます。将来的には、フレームワークでこの手法をサポートすることで、レイテンシを改善する予定です。モデル圧縮により、精度の低下を最小限に抑えながら、最大で 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 をトレーニングする: コード

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