MorphNet:学習済みニューラルネットワークをより速くより小さく改良(1/2)

  • 2019.04.21
  • AI
MorphNet:学習済みニューラルネットワークをより速くより小さく改良(1/2)

1.MorphNet:学習済みニューラルネットワークをより速くより小さく改良(1/2)まとめ

・AutoMLのようなニューラルネットワークサーチは思った以上に時間とお金がかかる可能性がある
・既に存在する学習済みニューラルネットワークを特定の作業に最適化する方が手っ取り早く実現できる
・MorphNetはサイズ削減や計算量削減など作業によって異なるニーズを満たすように最適化が可能

2.MorphNetとは?

以下、ai.googleblog.comより「MorphNet: Towards Faster and Smaller Neural Networks」の意訳です。元記事は2019年4月17日、Andrew PoonさんとDhyanesh Narayananさんによる投稿です。MorphNetはJeff Dean2018年のGoogleのAI関連成果の振り返り記事でも言及されていた学習済みニューラルネットワークの最適化技術ですが、Google製品に実際に適用され、TensorFlow実装として公開された事で改めて記事が公開されたようです。

ディープニューラルネットワーク(DNN)は、画像分類、テキスト認識および音声筆記などの実用的で困難な問題を解決することにおいて顕著な有効性を実証しました。

ただし、特定の問題に対して適切なDNNアーキテクチャを設計することは、依然として困難な作業です。 可能なアーキテクチャの探索スペースが大きいため、特定のアプリケーションに合わせてネットワークを最初から設計することは、計算リソースと時間の点で法外なほど高価になる可能性があります。
(訳注:要はAutoMLのように自動でニューラルネットワークを設計するのはお金と時間がかなりかかる場合があると言っています)

Neural Architecture SearchやAdaNetなどのアプローチでは、改良されたアーキテクチャを見つけるために機械学習を使用してデザインスペースを検索しています。別の方法には、同様の問題に対して既存のアーキテクチャを採用し、それを作業内容に合わせて最適化することです。

ここでは、後者のアプローチを採用したニューラルネットワークのモデルを改良するための洗練された手法であるMorphNetについて説明します。元々は、私たちの論文、「MorphNet: Fast & Simple Resource-Constrained Structure Learning of Deep Networks」で発表されました。

MorphNetは既存のニューラルネットワークを入力として取り、より小さく、より速く、そして新しい問題に適応可能な優れた性能を生み出す新しいニューラルネットワークを作り出します。

この手法をGoogle規模の巨大な問題に適用し、従来よりサイズが小さいにも関わらず正確な。業務使用に耐えるネットワークを設計しました。そして今、私達はあなたのモデルをより効率的にするためにそれを使うことができるようにMorphNetのTensorFlow実装をコミュニティに公開しました。

MorphNetはどのように動作するのか?
MorphNetは縮小と拡大のフェーズを繰り返してニューラルネットワークを最適化します。縮小フェーズでは、MorphNetは効率の悪いニューロンを識別して削除します。ネットワークの総損失関数に各ニューロンのコストが含まれるようにsparsifying regularizerを実施する事で、効率の悪いニューロンを識別実現します。

しかし、ニューロンごとに均一なコストを適用するのではなく、MorphNetは目標とするリソースに関してニューロンコストを計算します。オプティマイザは、勾配を計算するときにリソースコストを認識しているため、どのニューロンがリソース効率に優れており、どれを削除できるかをトレーニングが進むにつれて学習します。

一例として、MorphNetがニューラルネットワークの計算コスト(例えば、FLOP)をどのように計算するかを考えてみましょう。簡単にするために、行列の乗算として表されるニューラルネットワーク層を考えてみます。以下では、レイヤには2つの入力(Xn)、6つの重み(a,b,…f)および3つの出力(Yn;ニューロン)があります。

行と列を乗算する標準的な教科書通りの解法を使用すると、このレイヤーの計算を完了するには6回の乗算が必要であることがわかります。


ニューロンの計算コスト

MorphNetはこれを入力数と出力数の積として計算します。一番左の例では、重みのうち2つが0の、まばらな重み(weight sparsity)ですが、このレイヤを評価するためには、全ての乗算を実行する必要があります。

それに対して、中央の例は、ニューロンYnに全ての重みが0である行が存在し、まばらな構造(structured sparsity)を示しています。MorphNetは、このレイヤの新しい出力数が2で、このレイヤの乗算数が6から4に減少する事を認識します。このアイデアを応用して、MorphNetはネットワーク内の全てのニューロンの増分コストを決定して、ニューロンY3を削除してより効率的なモデル(右)を作成する事ができます。

拡大フェーズでは、width multiplierと言うパラメータを導入して全てのレイヤーサイズを均一に拡大します。例えば、100個のニューロンからなるレイヤーを50%拡大するケースでは、下記のようにニューロンを増減してリソースを有効活用します。

・非効率的なレイヤーは100のニューロンが10に削減小された後、50%増の15に拡大し、最終的に85のニューロンが削減される
・縮小する余地があまりない重要なレイヤーは100が80に縮小された後、50%増の120に拡大し、最終的に20のニューロンが増える

これにより、ネットワークの効率の悪いレイヤーからより有用な可能性が高いレイヤーに計算リソースの再割り当てができます。

より厳しいリソース制限を満たすために単純にネットワークを縮小するために縮小フェーズを実行した後にMorphNetを停止することもできます。これにより、コスト削減の観点ではネットワークの効率性が高まりますが、精度が低下することがあります。

あるいは、ユーザは拡大フェーズだけを完了することもでき、これは元のネットワークとリソースコストは変わりませんが精度は向上します。この実装の完全な例については後で説明します。

 

3.MorphNet:学習済みニューラルネットワークをより速くより小さく改良(1/2)関連リンク

1)ai.googleblog.com
MorphNet: Towards Faster and Smaller Neural Networks

2)arxiv.org
MorphNet: Fast & Simple Resource-Constrained Structure Learning of Deep Networks

3)github.com
google-research/morph-net