2012/01/29
■[開発日記]光さす庭で 
丁度一年ほど前に自然方策勾配法、無理かもという記事を書きましたが、改めてパラメータ数を数えてみると行けそう。
現状の評価項目で進行度無しだと、パラメータ保存用に確保している領域が33,513個。ただ、この内2/3〜3/4は使ってないデッドスペースなんで、実際の個数は多分1万前後です。
そうすると、パラメータ数×パラメータ数の行列はfloat型だと400MBで収まりますので、主記憶に載ります。
という訳で、とりあえずは正確なパラメータ数を調べるコードを書いて、その後自然方策勾配法の勉強をしてみます。
方策勾配法で学習が停滞しているらしいのが学習エージェント側の問題なら、自然方策勾配法で解決するかもしれませんし、いっちょ気合入れてやってみます。ひょっとしたら選手権までに化けるかも!!!
■[開発日記]光さす庭で Zwei 
えーっと、パラメータ数をカウントするコードを調べてみたら、デッドスペースの大半を除いて33,513個でした。実際には後ちょっとデッドスペースがあるんで数%は減るでしょうが、3万前後ってのが最終的な個数になりそうです。
そうすると、パラメータ数×パラメータ数の行列が約3.6GBになるんで、評価関数1〜2個分は主記憶に確保出来ますね。
行列自体はパラメータ修正時に一時的に必要なだけなんで、パラメータ修正ルーチンの同時実行数をセマフォとかで制御してやればOKっポイです。
残る問題は3.6GB分の逆行列を求める必要があるって事なんですが、まぁ実装してプロファイルとってから速度の事を考えましょう。
トラックバック - http://d.hatena.ne.jp/Gasyou/20120129

行列演算ならclapackが便利だと思います。あるいは
近似でよいなら反復演算で逆行列を求めるタイプもあると思います。
はじめまして。3万×3万だと17時間弱かかりました(汗
clapackというのはライブラリみたいですね。はじめて知りました。
逆行列を近似するのも、探してみるといくつかアルゴリズムがあるみたいですね。
情報有難う御座います。とても助かりました。
# floodgateにいたkumaの作者の方だったんですね。
# 今年の選手権には参加されるんですか?
>>かず@なのはさん
少女革命ウテナのパクリですw
初参加です。よろしくお願いします。今はsimkで投入しています。
fv.binをそのまま使っている割には弱いです。
clapackは数値計算では有名で20年の実績があるライブラリで
matlabも内部で使ってます。行列サイズが大きいと数値誤差も
馬鹿にならないのでdoubleが安全かと思います。
うーん、やっぱりdouble使うべきですか。
ただ、それだと行列1つだけでメモリを使いきっちゃうんで…
これは、メモリ増設すべきですかね。