TadaoYamaokaの日記

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

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

モデルの精度を上げるために、入力特徴を追加して精度が上がるか検証しました。


AlphaGoでは盤面の情報に加えて呼吸点などの情報を入力特徴に加えることで、精度が向上している。
盤面の情報(4個の特徴)のみでは、test accuracyが47.6%だが、48個の特徴とすることで、55.4%となっている。

一方、私が作成した将棋用のWide Resnetのモデルでは、盤面+王手のみを入力特徴とした場合、1億3千万局面でtest accuracyが43.4%まで学習できたが、それ以上は精度が上がらなくなっている。

そこで、入力特徴を追加して精度が上がるか検証する。

追加する入力特徴は、ShogiNet(GAN将棋)のアピール文章を参考にした。

入力特徴を一つずつ追加して、精度を測定し効果があった場合、その特徴を採用して次の特徴を検証した。

elmo_for_learnで深さ8で生成した20万局面で初期値から学習を行い、テストデータ2万局面で比較を行う。
勝敗データを報酬の重みとして、バリューネットワークも同時に学習を行う。

成りゾーン

成りゾーンを追加した場合、以下のようになった。

train loss test accuracy(policy) test accuracy(value)
成りゾーンなし 1.7554 0.2984 0.7947
成りゾーンあり 1.7620 0.2954 0.7980

効果が見られなかったので、不採用とする。
成りゾーンの位置の情報はすでに表現できていたと思われる。

各マスの利き数

利き数とは、座標ごとにいくつの利きがあるかを表す。
8方向と桂馬を含めて最大10となるが、上限値を設ける。
上限値を1,2,3,4とした場合で比較した。

利き数上限 train loss test accuracy(policy) test accuracy(value)
利き数なし 1.7554 0.2984 0.7947
1 1.7307 0.3024 0.7936
2 1.7022 0.3128 0.8160
3 1.6939 0.3143 0.8158
4 1.6833 0.3147 0.8005

利き数上限2にすると、test accuracy(policy)が1.44%、test accuracy(value)が2.13%上がった。
利き数上限3にすると、test accuracy(policy)はさらに上がり1.59%となり、test accuracy(value)はほぼ同じである。
利き数上限4にすると、test accuracy(policy)はさらに上がっているが、test accuracy(value)は下がっている。

利き数は守備が弱い箇所、強い箇所を測る指標になるので、囲碁における呼吸点のような意味を持つ。
policy、valueともに精度が上昇しており、効果的な特徴のようだ。
利き数上限3を採用することにする。

駒の利き

駒の種類ごとに、どのマスに利いているかを表す。

train loss test accuracy(policy) test accuracy(value)
駒の利きなし 1.6939 0.3143 0.8158
駒の利きあり 1.6628 0.3222 0.7950

policyの精度は上がったが、valueは下がった。
policyはモンテカルロ木探索で補完できるので、valueを重視し不採用とする。

王手情報

aperyのCheckInfoのdcBBとpinnedを使用する。
それぞれ、間の駒を動かした場合に王手になる駒と、動かすと王手にされる駒を表す。

train loss test accuracy(policy) test accuracy(value)
王手情報なし 1.6939 0.3143 0.8158
王手情報あり 1.6869 0.3199 0.8029

policyはほぼ変わらず、valueが下がった。
不採用とする。

歩のある筋

train loss test accuracy(policy) test accuracy(value)
歩のある筋なし 1.6939 0.3143 0.8158
歩のある筋あり 1.6977 0.3143 0.8071

policyはほぼ変わらず、valueが下がった。
不採用とする。


明らかに効果があったのは、利きの数のみであった。
利き数(上限3)を採用することで、policyが1.59%、valueが2.11%向上した。

修正したモデルを使用して、一から学習し直す予定。

追記

初期値と学習データの並びによって、value networkはぶれることがあるようなので、駒の利きと王手情報は採用してもよいかもしれない。
学習データを増やして追試を行う予定。

同じ条件で再度、駒の利きを追加して学習した。

train loss test accuracy(policy) test accuracy(value)
駒の利きなし 1.6939 0.3143 0.8158
駒の利きあり 1.6576 0.3246 0.8095

policyの精度は1.03%上がって、valueはほぼ同じになった。
valueは毎回1~2%ぶれるので、採用することにする。

王手情報も駒の利きを採用した状態で再度学習した。

train loss test accuracy(policy) test accuracy(value)
王手情報なし 1.6576 0.3246 0.8095
王手情報あり 1.6533 0.3256 0.8224

policyはほとんど変わっていない。
valueは増えているが誤差と思われる。
不採用とする。

駒の利きがない場合とある場合で、1000万局面を学習し、テストデータ10万局面で評価した結果、以下の通りとなった。

train loss test accuracy(policy) test accuracy(value)
駒の利きなし 1.4483 0.3655 0.8210
駒の利きあり 1.4370 0.3723 0.8210

駒の利きはpolicyの精度に効果があることが確かめられた。