2009年9月アーカイブ

なんとか収束して、ガボールに見えなくもない基底ベクトルが得られました。

多項式カーネルを使っていたのですが、優ガウスの場合にはシグモイドカーネルを使うほうがよいらしく、カーネル関数にtanhを使うようにしたのがよかったです。

g(y) = tanh(y)

に変更して、学習係数を1.0e-4から1.0e-2にしました。
いままでバタついていたのが、嘘のように静まりました。

また、毎回のWの更新後に、行列演算により正規直交化をしていなかったという痛恨のミスもあり、これを入れたところ、うまく収束するようになりました。

tica_tanh.jpg

▲学習中の様子です。

今回はアニメのセル画っぽい画像からのパッチを使用しました。(森林の画像の場合、コントラストが悪く、初期のランダムなWからの収束が悪いかったです) 5,000枚から生成しています。PCAによる白色化をせず、生データを使っています。

位相や位置、方向、周波数に局所的な基底に分解されはじめているのが見えます。また、周波数の低い基底のまわりにトポロジが若干見えていると思います。それぞれの基底にまだ従属性がかなり残っているのと、マップが狭いので見えずらくなっています。

--

追記。 もう少し規模を拡大して実行してみました。

tica_5x5.jpg

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

A Hyvärinenの超有名かつMUST論文「トポグラフィ独立成分分析」を読んでみた。かなり1次視覚野の方位選択性コラムの分布が再現できている気がして、やってみることに。

論文を読みながら自分のSOM実装に拡張する形で組んでみたけれど、どうにもうまく基底ベクトルを学習してくれない。どうしたものだろう。

TICA_BASE.jpg

この結果については次の通り。10x8の80ユニットを2次元に並べて、それぞれが16x16ピクセル(256次元の基底ベクトル)を持っている。学習係数は0.2、半径は3.0ユニット。更新のための非線形関数gは以下の通り。

g(y) = -1.0 * Math.sqrt( 0.0001 + energy ) + 1.0

元の画像は以下の森林の画像。 16x16のパッチを10024個取り出している。もちろん、グレースケール。平均値を差し引いているので直流(DC)成分は打ち消してある。

test.jpg

面倒だからPCAで白色化していないのが一番問題な気がしているけれど、それにしてもマップっぽく順序付けもされていなさそう。

このアーカイブについて

このページには、2009年9月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2009年8月です。

次のアーカイブは2010年2月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。