終末 A.I.

Deep Learning を中心に、週末に機械学習するエンジニアのブログ

畳み込みニューラルネットワークが見ている世界を可視化してみる(1)

VISUALIZING DEEP NEURAL NETWORK DECISIONS: PREDICTION DIFFERENCE ANALYSIS など、ニューラルネットワークの内部でいったいどんな処理が行われているのかを調べている論文も多く、アルゴリズムの理論的な解明を考えると、このような論文はまだまだたくさん出てくるであろうなと思われます。

実際、なぜうまくいっているのか、なぜうまくいっていないのかを調べるためには、可能であれば処理の結果や過程を可視化してみることは、機械学習分野では重要になってきます。 ニューラルネットワークの場合は、これがパラメーターやロスの変化で見る以外の方法が基本的にはなく、上記のような研究で学習の状態をなんとなく人間の側で観察できることは、実作業においても役に立ちそうだなと思います。

畳み込みニューラルネットワークは、その名前の通り画像処理における線形フィルタリングを多層に適用して画像から特徴量を抽出するわけですが、どういったフィルターを適用してどういった特徴量を使用しているのかは、基本的には特に気にせずに使用していることが多いかなと思います。

今回は、このフィルターを適用した結果、どんな風に画像が変換されるかを可視化してみます。

tensorflow/models に含まれるInception v3の学習済みモデルを使用して、このモデルの畳み込み層の一番最初の層のパラメーターで画像を変換してみます。

Inception v3 の最初の層は、3x3 の32個のカーネルを使用します。このフィルターを利用してそれぞれ一つのカーネルをカラー画像に適用したモノクロ画像を生成してみます。対象の画像は以下のくまの画像を使用しました。

f:id:KSKSKSKS2:20170806205426j:plain:w300

結果を見てみますと、セグメンテーションをしようとしているようなものや、ネガポジ反転を行おうとしているものや、元の画像をただぼかしたような画像が生成されます。

f:id:KSKSKSKS2:20170806210205j:plain:w300 f:id:KSKSKSKS2:20170806210346j:plain:w300 f:id:KSKSKSKS2:20170806210452j:plain:w300 f:id:KSKSKSKS2:20170806210613j:plain:w300

畳み込みニューラルネットワークの肝はここからで、生成された複数のチャネルにさらにカーネルを適用する事により、多様な特徴量を自動抽出することにあります。

今回は、単純に二つのカーネルの生成結果を合成したものを可視化してみました。

結果としては、単一のカーネルだけではぼやっとしていた特徴がより鮮明に浮かび上がっているようなものが見られました。

例えば、下記はの画像は上記の画像の1番目と2番目の画像、1番目と3番目の画像の合成になりますが、より画像内の線が浮かび上がるような画像が見られました。

f:id:KSKSKSKS2:20170806211017j:plain:w300 f:id:KSKSKSKS2:20170806211426j:plain:w300

実際の畳み込みニューラルネットワークでは、より複雑な演算になりますが、基本的には上記に挙げた結果をより強調したような結果が出力されるのであろうなということが予測されます。

次回は、学習によってこの可視化結果がどのように変化するかを見てみたいと思います。