ニューラルネットの重みの可視化巡回セールスマン問題に帰着させて解く話。

これは多層パーセプトロンの8次元の入力層から32次元の中間層に対する投射の重みを可視化したもの。なんか構造がありそうに見える。しかしわかりにくい。そもそも横軸は中間層のIDで、中間層のIDは順番に意味がないので、シャッフルされたものを見ているからだ。これを「似たものが隣接するように並び替え」て観察したい。それは巡回セールスマン問題に帰着できる。 image というわけで並び替えたものがこちら。中間層が半分ずつに分担して、入力の半分だけに注目してることがわかる。 image

python

from matplotlib import pyplot as plt
from ortoolpy import tsp
M = m.coefs_[0]
N = M.shape[1]
dist = {(i, j): np.linalg.norm(M[:, i] - M[:, j])
        for i in range(N)
        for j in range(N)
        if i != j}
_, result = tsp(range(N), dist)
plt.imshow(M[:,	result])
plt.show()

先日、数理最適化を使った問題解決のすすめ - Qiitaの著者による講演で、シュレッダーにかけた画像を隣接するものがなるべく似ているように巡回セールスマン問題で並び替えて復元する例が紹介されていたのでこういう応用を思いついた。