TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

2017-06-01から1ヶ月間の記事一覧

将棋でディープラーニングする その39(ブートストラップ)

前回の日記で、ブートストラップについて少し書いたが、1000万局面では効果がわからなかったので、局面を増やして再度検証した。 ブートストラップ 前回も書いたが、本来の報酬(勝敗)とは別の推定量(探索結果の評価値)を用いてパラメータを更新する手法…

将棋でディープラーニングする その38(学習継続中)

前回の日記で、利きを入力特徴に加えることで精度が上がることを確認したので、利きを追加したモデルで、初期値から学習をやり直した。学習データには、elmo_for_learnで深さ8で生成した、1億5千万局面を使用した。以前に生成したときは、引き分けの局面も出…

WindowsでChainerをGPUを使って動かす(v2.0対応)

Windowsで安定して使用できるv1.24を使用していましたが、Chainer v2.0でパフォーマンスが向上するということなので、アップデートしました。v1.24用のコードに一部修正が発生しましたが、軽微な修正で対応できました。 環境準備 以前の日記を参照してくださ…

将棋でディープラーニングする その37(利き数を入力特徴に追加)

モデルの精度を上げるために、入力特徴を追加して精度が上がるか検証しました。 AlphaGoでは盤面の情報に加えて呼吸点などの情報を入力特徴に加えることで、精度が向上している。 盤面の情報(4個の特徴)のみでは、test accuracyが47.6%だが、48個の特徴とす…

将棋でディープラーニングする その36(PUCTアルゴリズムの実装)

Ray+Rnのソースを元に、policy networkとvalue networkを使った、モンテカルロ木探索を実装しました。 実装方法 以前の日記で書いたPUCTアルゴリズム*1を実装した。以前に考察したように、将棋ではプレイアウトで終局までプレイしても精度が低いため、終局ま…

将棋でディープラーニングする その35(マルチタスク学習(補足))

試している将棋でのディープラーニングについて、PUCTの実装をRay+Rnのソースコードを参考に行っていますが、囲碁部分のコードを将棋に置き換えるのがわりと面倒で、完成にはもうしばらくかかりそうです。その間に、追加でモデル学習の実験を行いました。 今…

仮説検定でプログラムが有意に強くなったか検証する

プログラムで自己対局したときに、その対局数と勝敗の数から何%勝ちなら強くなったといえるのか。 そのような問題に統計的に答える方法として、仮説検定という方法がある。 仮説検定 仮説検定は、帰無仮設と対立仮説を設定し、帰無仮説が定めた有意水準の範…

将棋でディープラーニングする その34(強化学習【成功】)

以前にRL policy networkをelmoの自己対戦でデータを使ってREINFORCE algorithmで学習させたが、うまく学習できなかった。昨日の日記でマルチタスク学習を実装したので、RL policy networkをバリューネットワークと同時に学習させることで、RL policy networ…

将棋でディープラーニングする その33(マルチタスク学習)

SL policy networkとValue networkは、12層までは同じ構成で、出力の数層のみが異なるため、12層まで同じネットワークでそこから2つの出力を行うようにして、SL policy networkとValue networkを同時に学習することを試してみた。複数のタスクを同時に学習す…

将棋でディープラーニングする その32(転移学習)

以前の日記で、バリューネットワークを学習した際、SL policy networkからバリューネットワークに転移学習が可能であることに言及した。転移学習するには、12層まではネットワーク構造が同じであるため、SL policy networkからバリューネットワークにパラメ…

ChainerをC++から使う

ディープラーニングを使った将棋プログラムを試しているが、将棋プログラムは速度が必要なため、開発言語はC++が適している。 しかし、使用しているディープラーニングフレームワークのChainerはPythonにしか対応していない。CaffeやCNTK、TensorFlowなどC++…

将棋でディープラーニングする その31(DNNのスループット)

方策ネットワークを対局中に用いた場合のスループットを計測した。PUCTアルゴリズムで並列で探索をする場合、複数スレッドからGPUを使用するため、複数スレッドから使用する場合を考慮する。まず、それぞれのスレッドからDNNを実行した場合について計測した…

Ray+Rnのソースを調べる

将棋プログラムでPUCTアルゴリズムを試すため、囲碁プログラムのRayを元にCNTKを使って、ディープラーニングに対応させたRnのソースを調べています。 RnはPUCTアルゴリズムを実装しているので、参考になります。以下、Windowsでビルドして、ソースをステップ…

将棋でディープラーニングする その30(探索アルゴリズム)

まだ方策ネットワークもバリューネットワークも精度が低いが、精度を上げるのは一旦保留して、対局時の方法について検討する。以前に考察したように、将棋は読みが重要なゲームであるため、探索を用いず方策ネットワークのみで指しても強くならないと思われ…

将棋でディープラーニングする その29(強化学習【修正版】)

以前にRL policy networkを学習する際の報酬に応じた勾配の実装方法について記述したが、計算方法に誤りがあった。softmax_cross_entroyを修正して、backwardの際の勾配に重みを掛けていたが、lossを計算する際に重みが掛けられていないため、間違ったlossを…

将棋でディープラーニングする その28(学習の高速化その2)

学習の高速化のため先日作成したPythonから使えるC++の将棋ライブラリ(cppshogi)に、RL policy networkも対応させました。以前は将棋ライブラリとしてpython-shogiを使用していましたが、全てcppshogiに置き換えました。 これによって、学習がかなり高速化…