GPGPUのプログラムの書き方とか、高速化のテクニックの基礎を学んだところで、いろいろ挑戦するために、まずは何をすればいいだろう。 そういえば昔こんな本を買ってみたんだったなということで、GPU Proの最初の章で登場している、自己組織化マップについて挑戦してみた。
GPU Pro: Advanced Rendering Techniques
- 作者: Wolfgang Engel
- 出版社/メーカー: A K Peters/CRC Press
- 発売日: 2010/06/14
- メディア: ハードカバー
- 購入: 1人 クリック: 17回
- この商品を含むブログ (5件) を見る
最初の章で、SOM(Self Organization Map: 自己組織化マップ)について、簡単に説明してある。人工知能とかニューラルネットワークははっきり言ってど素人なので、これを読みながら勉強してみたが、よく分からない。とりあえずアルゴリズムが載っているので、それを眺めてみよう。
[定義1.1] コードベクタciは、2つのベクトルviとvi'から構成されるならば、そのグラフはマージされる
[定義1.2] ciとci'の距離は、グラフg内の最小パスによって表現される。
[定義1.3] 2つのコードベクタの距離がuよりも小さいときに、コードベクタciの隣接ci'で、u-サイズの隣接であると定義する。
[定義1.4] コードベクタciにおいて、I_i(u)とは、隣接するベクタにおいて、サイズがuであるベクタのインデックスの集合である。
SOMのアルゴリズムは以下のように記述されていた。
- T回以下のループを繰替えす。隣接ベクタとのサイズは0からT/8までの間は2,T/8からT/2までの間は1、それ以降は0とする。
- M個の空集合Mを作成する。
- 各トレーニングベクタx_jに対して、近傍のコードベクタc_i(t)を探索する。 I_i(t)となるインデックスi'の集合に対して、x_jを挿入する。これにより、該当するコードベクタにおいて、距離がu_tよりも小さいコードベクタを挿入していることになる。
- コードベクタの平均を取って、コードベクタを更新する。
- ステップ2にもどって繰替えす
うーん、こうすると、例に載っている2次元のメッシュ構造を使って学習すると、最初の平均を算出することで、コードベクタが平均化しない? そうすると、それ以降全然学習してくれないような。。。とりあえず、今の自分で作ってしまった実装はそのようになっている。
もうちょっと勉強が必要だな。また分かったことがあったら更新しよう。ってか、第1章を読むのにこんなに時間がかかるなんて...