読者です 読者をやめる 読者になる 読者になる

TadaoYamaokaの日記

山岡忠夫 Home で公開しているプログラムの開発ネタを中心に書いていきます。

コンピュータ将棋

将棋でディープラーニングする その23(バリューネットワークの実装)

前々回の日記に書いたバリューネットワークの実装を行った。elmoで生成した教師データのフォーマットで教師データを読み込むようにした。前々回の日記で書いたAlphaGoの手法を参考にして、ネットワーク構成は、SL policy networkの出力層に全結合層を繋げてt…

将棋でディープラーニングする その22(評価値と勝率の関係)

前回の日記で書いたようにバリューネットワークの学習データとして、elmoの教師データを使用する予定である。elmoの教師データは自己対戦の勝敗だけでなく、深さ6で探索した評価値も同時に出力される。 そこで、学習がうまくいっているかの検証用として、elm…

将棋でディープラーニングする その21(elmoの学習データ)

バリューネットワークを実装する前に、検証に使用する学習データの仕様を決めておきたい。バリューネットワークの入力は、局面と勝敗のセットになる。AlphaGoの論文ではRL policy networkで終局まで打った際の勝敗データを使用しているが、私の検証しているR…

将棋でディープラーニングする その20(バリューネットワーク)

週末は電王戦の第2局を観戦していました。 人間のプロとコンピュータの対局はこれで最後となりましたが、コンピュータ同士の電王戦は継続されるということで、今後も楽しみです。検証しているディープラーニングによるコンピュータ将棋ですが、入力層のフィ…

将棋でディープラーニングする その19(報酬に応じた勾配 その2)

前回の日記でChainerでミニバッチの要素を1件ずつ処理することで報酬に応じた勾配の計算を実装したが、softmax_cross_entropyのbackwardの処理で、誤差逆の後続に伝えるデルタの値に重みを掛けることで実装できることがわかった。Chainerのリポジトリからsof…

将棋でディープラーニングする その18(報酬に応じた勾配)

前回の日記で、RL policy networkの勾配を求める際に、対数尤度の偏微分に報酬に応じた重み(勝敗の報酬から状態価値を引いた値)を掛ける計算の実装が、Chainerでは難しいということを書いた。Chainerでは損失関数のbackwardを行うと、ミニバッチで1つの勾…

将棋でディープラーニングする その16(対局できるようにする)

教師ありで方策ネットワークを学習できたので、次に強化学習を試す予定であるが、強化学習を行うには自己対戦ができる必要がある。そこで、動作確認も兼ねてUSIエンジンとして動かせるようにした。 USIエンジン化 GUIとして将棋所を使用しようとしたが、USI…

将棋でディープラーニングする その15(強化学習)

前回まで棋譜を用いた教師あり学習で、将棋の方策ニューラルネットワークを学習した。今回から、強化学習で方策改善を行う。 強化学習の手法は、AlphaGoの論文と同じREINFORCE algorithm*1を試す。AlphaGoの論文の強化学習の手法は以下の通りである。 AlphaG…

将棋でディープラーニングする その14(floodgateの棋譜で学習)

前回までに調整したニューラルネットワークを、floodgateの棋譜を使って学習した。 floodgateの棋譜の入手 floodgateの棋譜は、コンピュータ将棋対局場の「情報収集」→「棋譜倉庫: 圧縮CSAファイル(7z形式)」から1年単位でアーカイブが入手できる。 とりあえ…

将棋でディープラーニングする その13(ハイパーパラメータの調整)

ディープラーニング将棋のニューラルネットワーク構成もだいぶ固まってきたので、そろそろ本格的に学習させてみたいが、その前にハイパーパラメータを調整を行った。ハイパーパラメータはベイズ推定など使って調整するのが本当は良いが、そんなに試行数もこ…

将棋でディープラーニングする その12(Wide ResNetを試す)

AlphaGoの論文ではSL policy networkは13層のCNNとなっているが、画像認識の分野では単純なDCNNよりGoogLeNet(Inception)やResidual Network(ResNet)が高い精度を上げている。 ResNetで層を増やすのが最も精度が上がるが、層が増えるほど学習時間も増える。R…

将棋でディープラーニングする その11(Kerasの実装)

将棋でのディープラーニングをChainerを使って検証していたが、Kerasでも試してみた。13層のDCNNを学習するには、少なくとも全パラメータ数の数倍の訓練データで学習する必要がある。 保存したmodelファイルをzipで解凍したファイルの合計サイズが約25MB(nu…

将棋でディープラーニングする その10(入力特徴から盤面の空の位置を削除)

GitHubに公開していたソースにバグがあり、Pull requestを頂きました。github.comバグの内容は、入力特徴である盤面の空の位置に先手の駒の位置が混ざっていました。 Pull requestをマージして測定し直しました。 train loss test accuracy 修正前 2.19 0.42…

将棋でディープラーニングする その7(最適化手法の変更)

前回に続き、学習の改善を試します。 今回は、最適化手法を変えて収束性、精度を測定します。最適化手法は、はじめAdamではうまく学習できなかったためAdaGradとしていました。 Batch Normalizationを入れたことで、Adamを含めた他の手法でも学習できるよう…

elmoのアピール文書を読む

世界コンピュータ将棋選手権で優勝したelmoのアピール文書を読んでいますが、結構難しいです。 勝率が二項分布に従う場合、評価値はロジスティック分布に従う(※1)だろう、 ということでロジスティック回帰を適用しています(※2)。 この部分は、ある局面の勝敗…

将棋でディープラーニングする その6(BatchNormalizationを追加)

前回は、手番を入力特徴に加えても効果がないことを確認した。今回は、ニューラルネットワークの畳み込み層の後にBatch Normalizationを追加して精度への影響を確認する。Batch Normalizationを適用することで以下のメリットがある。 学習を速く進行させるこ…

将棋でディープラーニングする その5(入力特徴に手番を追加)

世界コンピュータ将棋選手権を参加者の生放送の方で見ていました。 開発者の話が聞けて、大変面白かったです。Ponanza Chainerの手法については、後日公開予定ということなので、公開されたら拝見させていただきたいと思います。 生放送でもだいぶ中身につい…

将棋でディープラーニングする その4(ネットワーク構成の変更)

本日から世界コンピュータ将棋選手権が始まりましたね。 一次予選を参加者の方の生放送で見ていました。今回からPonanza Chainer以外にもディープラーニングを取り入れて参加している方がちらほらいるようです。 こちらの方のアピール文章に、ネットワーク構…

将棋でディープラーニングする その3(棋譜から学習)

プロの棋譜を使って前回の日記で作成したニューラルネットワークの学習を行った。棋譜サイトにあった竜王戦の棋譜を使用した。訓練データとテストデータの数は以下の通り。 訓練データ テストデータ 局数 3744 417 局面数 422852 47242 学習には非常に時間が…

将棋でディープラーニングする その2(ニューラルネットワークの構成)

先日の日記に続き、将棋でのディープラーニングの実装を試す。今回は、ニューラルネットワークの構成を検討する。 ネットワーク構成 ネットワーク構成は、AlphaGoのネットワーク構成を参考にし、13層の畳み込みニューラルネットワーク(DCNN)とする。 位置に…

将棋でディープラーニングする

先日の日記で1行もコードを書かずに、将棋におけるディープラーニングについて考察した。コードを書いて実験しないとただの机上の空論になるのでコードを書いて検証してみたいと思う。 といっても、将棋のプログラムの実装は行ったことがない。 一からコード…

コンピュータ将棋におけるディープラーニングの考察

先日の日記で、コンピュータ将棋とAlphaGoについて言及したが、次のPonanzaがディープラーニングに成功したということで、どのように適用しているのかが気になっている。そこで適当に考察してみる。電王戦のインタビューでもプロの棋譜との一致率について言…

Bonanzaメソッドの解説

昨日、電王戦 Ponanza×佐藤天彦名人の第1局をニコニコ生放送で見ていました。コンピュータ将棋には以前より興味があり、初めの頃から電王戦はウォッチしていました。名人に勝ったPonanzaは、次はディープラーニングを使うということですが、昨日の対戦で使わ…