メカ女子将棋、評価関数を機械学習することにしました。
ただ、とりあえず大雑把にやってみたところ、失敗こきました(T_T)
ただ、学習のiterationをまだ一回廻しただけなので、まだまだ成功する
可能性は少しあります(^^)
ここにやり方を一通り書きますので、もしよろしければ、識者の方の意見を
賜りたいと思います(たしかコメント可能になっていると思います)
1. liblinearを準備する
liblinearについてはlibsvmの親戚で速いやつ、くらいに思っていただければ
いいと思います。今回はclassify(二値分類)ではなく、regression(回帰)
を使ってみることにしました。これは二値分類の場合に0か1が答えとして出てくる
代わりに、関数値がdouble型で返ってきます。この学習の種類は、trainのsパラメータとして
-s 11を使用した場合に相当します(L2-regularized L2-loss support vector regression (primal))。
今回はtrainとpredictを使うほか、評価関数内でライブラリとしてliblinearの
内部の関数を利用します。
学習のためのファイルは次のようなレコードの並びです。
regressionの場合、1か0ではなく、関数値を与えます。
関数値 素性インデックス1:素性値1 素性インデックス2:素性値2.............
この構造はlibsvmで使われるファイルと同一のものです。
2. 棋譜
色々やってみたのですが、trainで学習できる棋譜の数はon memoryでいける
最大値が大体300局くらいでした。CSA形式に準じた形の棋譜を準備します。
3. 素性抽出
まず、棋譜のすべての局面において、すべての可能手を列挙するプログラムを
書きます。そして、各局面のすべての可能手によって生じる可能性のある兄弟
局面を求めます。
その兄弟局面において、まず深さ1で探索して探索の値を求めます。
棋譜にあった局面は、歩1つぶん(100くらい)を加算します。
棋譜にあった局面よりも大きい値を持つ兄弟局面については、棋譜にあった局面
から100を引いた値を設定します。
これで、棋譜にあった局面が突出している状態になります。
次に素性を求めます。すべての兄弟局面について、素性ベクトルを求め、先ほど求めた
探索値を付与します。
今回は2駒の関係を用いました。具体的には駒の位置(100通り)と駒の種類(16通り)の
二乗になりますので、 2560000種類の素性インデックスが可能性としてあることになります。
この各素性インデックスに大して、素性値を求めます。すべての2駒の関係について、
王手を含む効きの種類が細かく分類して10通りくらいあるのですが、それを1--10で
数値化します。効きがある関係だけ素性を用意します。
こうして、1局面について、可能手の数だけレコードができます。
これをファイルに落としていきます。1局を1ファイルとしました。
4.学習
3.で作ったファイルのうち、300局をcatで固めます(kifu300.txtとします)。
その結果から、学習を行います。
$ ./train -s 11 kifu300.txt kifu300.model
膨大なメモリを使い、10分くらいでkifu300.modelファイルが出来上がります。
5. 利用
liblinearをメカ女子将棋に組み込みます。
面倒だったので、blasのライブラリと一緒に.aファイルをリンクして
しまいました。
諸般の事情で、メカ女子将棋のエンジンはshared libraryなので、
このshared libraryに対してblasとliblinearを結合します。
インクルードファイルはlinear.hになります。
まず、対局開始時にmodelファイルを読み込むように改良します。
そして評価関数をpredict関数の出力値に置き換えます。
関数出力(predict)の結果は、いい忘れましたが、-10000から10000
にクランプした上で、
-1から+1にスケールしてありますので、predictの結果に10000.0を
掛けて乱数を載せて評価関数の値として返します。
6. 結果
predictの時間が長くかかれば成り立たないなと危惧していたのですが、
大丈夫でした、predict自体の時間は短いようです。ただ、素性ベクトルを
局面に対して求めるのに時間が掛かっているようです。
結果としては、大変弱い評価関数が出来上がりました。
ただ、出来たmodelファイルからさらに、2から5を繰り替えしていけば、
強化学習ができるのではないかと思っています。
すみません、長くなりました。以上です。
Mecha Lady Shogi (GPGPU/NonGPGPU based japanese chess playing program), and the twitter bot @mechawooser
2013年1月28日月曜日
2013年1月5日土曜日
メカ女子将棋出陣!!
あけましておめでとう御座います。
今年も宜しくお願い致します。
旧メカウーサー将棋(及び旧メカ将棋)はまたしても新たに改名いたしまして、
「メカ女子将棋」という名前で第23回世界コンピュータ将棋選手権に出場
することになりました。ぱちぱち!
(まだお金払ってないので、月曜日に郵便局行ってきます☆)
今回出場に際して、豪華メンバーによる「メカ女子将棋部」を編成しましたー。うおー。
なんと、女流棋士の方がお二人joinされましたー。(@_@)
メカ女子将棋部:
現在のところ、竹部さんと渡辺さんには棋譜のチェックや、評価関数のチェックを
お願いしたいと思っています。T.R.さんには広報をお願いしています。
メカ女子将棋部のTwitterアカウントも併せて新設されました。
@mechajyo になります。
https://twitter.com/mechajyo
今年はNPSをもっと増やしたいと思います。また女流棋士の方の助けを得て、
より強い定跡部や評価関数を目指したいと思います。
長年の課題となっております、GPGPU対応なのですが、今年は後手に廻り
そうです。でもいつかはGPGPUで思考する将棋プログラムを完成させたいです☆
声援宜しくお願い致します。
(文責:kimrin)
今年も宜しくお願い致します。
旧メカウーサー将棋(及び旧メカ将棋)はまたしても新たに改名いたしまして、
「メカ女子将棋」という名前で第23回世界コンピュータ将棋選手権に出場
することになりました。ぱちぱち!
(まだお金払ってないので、月曜日に郵便局行ってきます☆)
今回出場に際して、豪華メンバーによる「メカ女子将棋部」を編成しましたー。うおー。
なんと、女流棋士の方がお二人joinされましたー。(@_@)
メカ女子将棋部:
- 竹部 さゆり(女流三段)様
- メカさゆりん
- 渡辺 弥生(女流一級)様
- メカみおたん
- T.R. (女子大学院生)様
- メカりえぽん
- 木村 健(メカウーサーメカ担当、実装責任者)
- メカきむりん、プロジェクトリーダー
現在のところ、竹部さんと渡辺さんには棋譜のチェックや、評価関数のチェックを
お願いしたいと思っています。T.R.さんには広報をお願いしています。
メカ女子将棋部のTwitterアカウントも併せて新設されました。
@mechajyo になります。
https://twitter.com/mechajyo
今年はNPSをもっと増やしたいと思います。また女流棋士の方の助けを得て、
より強い定跡部や評価関数を目指したいと思います。
長年の課題となっております、GPGPU対応なのですが、今年は後手に廻り
そうです。でもいつかはGPGPUで思考する将棋プログラムを完成させたいです☆
声援宜しくお願い致します。
(文責:kimrin)
登録:
投稿 (Atom)