なんとか収束して、ガボールに見えなくもない基底ベクトルが得られました。
多項式カーネルを使っていたのですが、優ガウスの場合にはシグモイドカーネルを使うほうがよいらしく、カーネル関数にtanhを使うようにしたのがよかったです。
g(y) = tanh(y)
に変更して、学習係数を1.0e-4から1.0e-2にしました。
いままでバタついていたのが、嘘のように静まりました。
また、毎回のWの更新後に、行列演算により正規直交化をしていなかったという痛恨のミスもあり、これを入れたところ、うまく収束するようになりました。

▲学習中の様子です。
今回はアニメのセル画っぽい画像からのパッチを使用しました。(森林の画像の場合、コントラストが悪く、初期のランダムなWからの収束が悪いかったです) 5,000枚から生成しています。PCAによる白色化をせず、生データを使っています。
位相や位置、方向、周波数に局所的な基底に分解されはじめているのが見えます。また、周波数の低い基底のまわりにトポロジが若干見えていると思います。それぞれの基底にまだ従属性がかなり残っているのと、マップが狭いので見えずらくなっています。
--
追記。 もう少し規模を拡大して実行してみました。

Core2Duo 2.2GHz の1CPUで8時間実行した結果です。まだまだ位置の局所成分が従属しています。これを綺麗にするには、あとサンプルを1万パッチにして、2,3日放っておかないと駄目そうです。すごい計算量ですね。

コメントする