GA将?開発日記~王理のその先へ~

ネタ勢最強を目指して絶賛開発中。

ログの可視化ツールを大幅アップデート

qiita.com

 上記サイトを参考に、ログファイルの更新を監視してグラフ作成&Webサイトにアップロードする様にしてみました。(更新ごとだと10秒に1回とかになっちゃうんで、前回処理から一定時間以上は待つ作りになっています。)

 
qiita.com


 それから、ログファイルコピー→グラフ作成→アップロードって流れは学習ルーチン変えても共通なので、抽象クラス*1を作って、継承先でグラフ作成だけオーバーライドする様に変更。これで、ツールのメンテが大分楽になりました。

 最後に、描画したグラフ&HTMLファイルと、元になるCSVファイルを自動バックアップする機能も追加。これは、on_created()の中で日時のディレクトリを作っといて、処理のたびにコピーするだけなので割りかし簡単でした。

 てな事をやって、使える言語が4つになりました。

  • Java:コアの部分はほぼほぼ書ける。ただし最新事情には疎い。
  • C++:コンピュータ将棋なら一通り書ける。GUIとかは作れない。
  • Python:ほんのチョットだけ、簡単なツールをググりながら作れるレベル。
  • Perl:20年近く前に卒論でちょっと書いた。かなり忘れた。

 うん、我ながらビミョーなラインナップ&スキルレベルですね。何したいのか良く分かんない。

*1:って呼び方で合ってるのかな、Pythonの場合?

方策πのエントロピーにもとづく内発的報酬

 が、もうちょっとで定式化出来そうな気がする。

動機

 自己対局を通じた、コンピュータ将棋/コンピュータ5五将棋の評価関数の強化学習において、より良い報酬を設計したい。

大雑把な考え方

 方策πのエントロピーが、行動選択の前後でどう変化したかをベースに、(勝敗にもとづく)基本報酬とは別にエントロピー変化に応じた内発的報酬をエージェントに与える。

方針

  • エントロピーが減少した → ほぼ一本道のルートに入った → 学習が進んでいる局面だと判断し、(追加で学習する価値が低いので)内発的報酬を少な目にする。
  • エントロピーが増加した → どう指せば良いか良く分からないルートに入った → 学習する価値が高いと判断し、内発的報酬を多目にする。

計算式(案)

 r_b(s,s')が局面sからs'へ遷移した際の内発的報酬、H(s)は局面sのエントロピー

案1:単純に差分を取る。

  r_b(s_t,s_{t+1}) = H(s_{t+1}) - H(s_t)

案2:比率を取る。

  r_b(s_t,s_{t+1}) = \frac{H(s_{t+1})}{H(s_t)}

使い方

 局面s_tからs_{t+1}へ遷移した際に、上記r_b(s_t,s_{t+1})を即時与える。

あけましておめでとうございます。

 新年ももう2日になってしまいましたが、今年もよろしくおねがいします。

 昨年を振り返ると、3月のUEC5五将棋大会で準優勝したのがピークで、以降はGA将の開発はほぼ進展無しでした。

 昨年末に一つちょっとしたアイデアを思い付いて、現在は三目並べモードでの予備実験が終わった所です。詳細は後日書きますが、上手く行けばそれなりに棋力向上してくれそうです。

 んで、Twitterで呟きましたが、今年はコンピュータ5五将棋大会で1回は優勝したいですね。

 3月にあるはずのUEC杯は参加が厳しそうなので、GPW杯(多分あるはず)を目標に開発していこうと思います。

 という訳で、改めてよろしくおねがいします&ご期待ください!

GAN、お勉強中

 とりあえずこの本買って、コードを写経してみました。

 んで、1Epochと100Epochで生成される画像の質にどの程度差が出るのか検証。こういう↓結果になりました。

1Epoch


100Epoch

 初期はほぼデタラメですが、100Epochだと何となくそれらしい画像が出来ていますね。

 GeForce GTX 960使うと1時間で30Epoch程度進むので、今度は500Epoch程度やらせてみますか。

 んで、それと並行して将棋の局面を生成する為のネットワーク構造も検討してみます。

今更GANなるものに手を出そうとしています

qiita.com

 こういうのをチョット弄って、Generatorが学習初期局面を生成し、そこからPGLeaf等で自己対局・強化学習する感じで検討中。

 Generatorの出力は「本将棋5五将棋で有り得そうな局面」にすると何の意味もないので*1、Discriminatorに相当する自己対局部分で「形勢判断を間違えた局面」を多く生成する様にしてみようと思います。

 具体的には、「生成された局面ではDiscriminatorが優勢(OR 劣勢)と判断したが、対局してみたら負けた(OR 勝った)」場合を「正例」としてはどうかと考えています。

 こうすれば、Discriminator(≒評価関数)の穴を効率良く埋められないかなぁ、と。

 そう言えばGAN将棋さんもGANを使う予定だったらしいけど、どういう風に使ってたんでしょうねぇ。気になります。

*1:そんな事するなら、既存の棋譜から局面引っ張ってこりゃ良いだけの話

2in1の存在意義がよくわからん

 例えばこんなの。

www.lenovo.com

 キーボード欲しいならノートPCで良くない? タッチスクリーン搭載モデルもあるし。

 キーボード不要ならタブレットで良くない? 軽いし。

 なんてーか、凄く中途半端感があって、いまいちどういう層が購入しているのか分からん。

PGLeaf Vier再実装中

 まず、学習方策と挙動方策を分けて、学習方策の方は重点サンプリングを用いてOff-Policyで学習する様にした。

 挙動方策の報酬は「基本報酬は勝敗に応じて+1/-1/0」「サブ報酬として対局中の予測勝率と実際の勝敗に応じたボーナス」としてみた。

 サブ報酬の方は、予測勝率と勝敗の差が大きいほど大きな値を与える様にしたので、逆転勝ち・負けの場合はサブ報酬が大きくなるはず。

 んで、例によって三目並べモードで実験してみたら、正しく収束する時は数秒で済むけど、そうでない場合は1分かけてもNG。

 困った…