各ニューロンが学習した特徴の可視化

3,206 views
Skip to first unread message

Takayuki Muranushi

unread,
Jun 24, 2015, 10:05:25 AM6/24/15
to cha...@googlegroups.com
たびたび質問してすみません。

少し前に話題になった「最も猫らしい画像」や
(たぶんcatというラベルが最も強く反応する画像)

「Chainerで学習させた一層目を可視化」
https://twitter.com/kotone_nyt/status/609285993049407489

みたいな、各ニューロンが学習した特徴の可視化ってどうやるんですか?

いろんなところで見かけるので、何か深層学習の分野では基本的な手続きがあるものと思います。
基礎的なことすら分かっていなくて申し訳ありませんが、Chainerユーザーの裾野を拡げると思って、よろしくお願いいたします。


Seiya Tokui

unread,
Jun 24, 2015, 8:48:25 PM6/24/15
to cha...@googlegroups.com, mura...@gmail.com
ご質問ありがとうございます。

学習されたモデルの可視化には大きく分けて2通りがあります。
挙げていただいた例の2番目(一層目の可視化)は、単に1層目の重みをニューロンごとにプロットしたものかと思います。
1層目の重みは入力画像の各ピクセルに対応しているので、単純に重みをプロットするだけで人間可読な結果が出ます。

1番目の例(Googleの猫)は、より深い層の可視化をしていて、重みをプロットしても何がなんだかわかりません。
この場合にもっとも簡単な手法として、入力画像を変数として、あるニューロンの活性を最大化する問題を勾配法などで解くことがあります。
上のGoogleの猫の論文ではこれをやっています(http://static.googleusercontent.com/media/research.google.com/ja//archive/unsupervised_icml2012.pdf)。
Chainer の場合、chainer.functions.Parameter を使うことで簡単に実装することができると思います。

2015年6月24日水曜日 23時05分25秒 UTC+9 Takayuki Muranushi:

Takayuki Muranushi

unread,
Jun 27, 2015, 10:02:23 PM6/27/15
to cha...@googlegroups.com, mura...@gmail.com
得居さま、

さっそくのお返事ありがとうございます!なるほど、二通りの方法があるんですね。

一層目を可視化するのは確かに、重みをそのまま表示してやればよいですね。
また、多層になった場合は、なんとなく最適化問題を解いているんじゃないかとは思っていましたが、ご提示いただいた参考文献のおかげで、やはり最適化問題を解いていること、その拘束条件や、欠点なども含めて明らかになりました。とりあえずこれで書けるようになりました。

ありがとうございます。


2015年6月24日水曜日 23時05分25秒 UTC+9 Takayuki Muranushi:
たびたび質問してすみません。

Kou

unread,
Oct 29, 2015, 3:25:12 AM10/29/15
to Chainer User Group
同じ疑問なので便乗で質問させてください。

> 1層目の重みは入力画像の各ピクセルに対応しているので、単純に重みをプロットするだけで人間可読な結果が出ます。

とのことなのですが、Chainerのimagenetの例を参考にConvolutional Neural Networkを構成し、
1層目の重み(フィルタ)を可視化してみたのですが

http://nghiaho.com/?p=1913 のサイトや「深層学習」にあるようなガボールフィルタやカラーのフィルタが描画できません。

たとえば、5x5のフィルタで入力はカラー画像、1層目のconvの出力は32枚にしています。
20エポックほど学習したモデル(ほぼ精度は収束しているようです)から

n1, n2, h, w = model.conv1.W.shape  # modelは学習済みモデル
print n1, n2, h, w     # 32 x 3 x 5 x 5
img = model.conv1.W[0].transpose(1, 2, 0)  # (h, w, channel)に変換
plt.imshow(img)

で描画してみたのですがどぎつい色になり、上のサイトや教科書とはまったく違う結果でした。
重みは負の値なども入っていますが何か正規化してから描画するとよいのでしょうか?

ご存知でしたらアドバイスお願い致します。


Kou

unread,
Oct 29, 2015, 5:07:30 AM10/29/15
to Chainer User Group

ちなみに上のコードではW[0]だけですが32枚の特徴マップをすべて描画するとこんな感じになります・・・

Reply all
Reply to author
Forward
0 new messages