Closed RyotaUshio closed 3 years ago
学習曲線(learning curve)というと思ってたのとはちょっと違うのを指すらしい
minibatch_iterでshuffle=Falseとすると、損失のグラフが異様に滑らかになるのがわかる。
Dropoutエグすぎる。dropout=[0.2, 0.5, 0.5] Dropoutなしで計算した検証用データに対する損失は、訓練中の部分ネットワークで計算した訓練データの損失を下回った Accuracyは訓練データで99%以上、テストデータでも98%以上
Dropout使用時は荷重減衰を使わないほうがいいっぽい。
自己符号化器(autoencoder)の実験。積層の場合、Encoder側の活性化関数にReLUを多段で重ねると信号の値がかなり大きくなり、 Decoder側を全部sigmoidにしたりすると、(sigmoidは原点から遠いほど平らになるので)内側のsimple autoencoderの出力はほとんど二値化のようになってしまった。sigmoidを出力層だけにするとうまくいった。
MLPの最後の隠れ層の出力は線形分離可能、またはいくつかの超平面でほぼ分離可能になっているはずなので、それを特徴抽出・クラスタリングに使えないか?と思った。結果は鮮やかだった!(mlp3d.py, fig/mlp3d_[123].png) 1,2はReLU、3はtanh
テストデータ集合を同じようにプロットするとfig/mlp3d_test.pngのようになった。訓練データでは1つのクラスがシュッとまとまってクラス間が分離しており、その間の領域はスカスカになっていてすばらしかった。が、テストデータではそうはいかないこともわかった。過学習との関係でこれを調べても面白そう(過学習対策しないときは訓練データの分離がすばらしいがテストデータはそうでもない、対策すると訓練データはそこそこだがテストデータもそんなに悪くならない、などありえそう)。
PCAは団子みたいになってカス。
クラスタリングにおける正規化(~白色化)の意義 参考:https://www.kamishima.net/archive/clustering.pdf のp.41
mlp3d.pyの訓練結果。
aic.py
中間層のニューロン数を5, 10, 20, 50, 100, 200, 500, 1000, 2000と変えて MNISTを学習させ、それぞれについてAIC・BICを計算し、過学習との関係を調べた。学習条件:
観察
次実験するときは、毎回netを上書きしてしまわないでlistにでもappendして残しておこうと思う。 また、正則化の影響も調べたい。