ニューラルネットワークで囲碁の終局を判定

ニューラルネットワーク囲碁の終局を判定する.終局したかどうかではなくて,終局状態でどこが自分の地かどうかを判定する.

これだけなら,わざわざニューラルネットワークを使わずに,手続き的にプログラミングしたほうがいい.しかし,これが出来ないとニューラルネットワークで大局を判断なんて無理なので,最初のステップとして.

まだ,途上段階だが,経過を.

教師信号は前回の方法で,GnuGOを用いて終局からさらに局面を進めて得る.

入力信号の例(Xが黒石,Oが白石):

 +---------------------------------------+
 | . . . O . O X . X O O . . . . . O . . |
 | O O . X O O X X . X O O X . O O O . O |
 | X O O O . O O X X X O . O O . O X O O |
 | X X O O O X X X . X O . O . O X X O . |
 | X O O O . O O X . X X O . O X X O O O |
 | X X X O O O O O X X O O O X . X X O O |
 | O X X X O X X X X O O X X X . X O X O |
 | . X O O O O X X O O X O O X . . O X X |
 | O X X O O X X O O . X O X X . . O X . |
 | . X X X X . X X O O O O O O X X X . X |
 | . X O O X . . O X O X O O O X O X X . |
 | X X X O X X . X X X X X X O X O O X O |
 | O X O O X X X O X X . X O O O O O O X |
 | O O O O O O O O X O X X X X O O X X X |
 | . . O . O O X O X O O O X X X O O X . |
 | . . . O X X X O X X O O X X O O X . X |
 | . . O O O X X X X . X O O O O X X X . |
 | . O . O X X O O . X . X O O X X X . . |
 | O . O X X . . . . X . X O O O X . . . |
 +---------------------------------------+

出力の目標値が以下のような感じ.黒地のみ表示している.黒字以外は白地である.

 +---------------------------------------+
 | . . . . . . X X X . . . . . . . . . . |
 | . . . . . . X X X X . . . . . . . . . |
 | X . . . . . . X X X . . . . . . X . . |
 | X X . . . X X X X X . . . . . X X . . |
 | X . . . . . . X X X X . . . X X . . . |
 | X X X . . . . . X X . . . X X X X . . |
 | X X X X . X X X X . . X X X X X X X . |
 | X X . . . . X X . . . . . X X X X X X |
 | X X X . . X X . . . . . X X X X X X X |
 | X X X X X X X X . . . . . . X X X X X |
 | X X . . X X X X X . X . . . X . X X X |
 | X X X . X X X X X X X X X . X . . X X |
 | . X . . X X X . X X X X . . . . . . X |
 | . . . . . . . . X . X X X X . . X X X |
 | . . . . . . X . X . . . X X X . . X X |
 | . . . . X X X . X X . . X X . . X X X |
 | . . . . . X X X X X X . . . . X X X X |
 | . . . . X X X X X X X X . . X X X X X |
 | . . . X X X X X X X X X . . . X X X X |
 +---------------------------------------+

こういうサンプルを500集めて学習させた結果の出力.

 +---------------------------------------+
 | . . . . . . X X X X . . . . . . . . . |
 | . . . . . . X X X X . . . . . . . . . |
 | X . . . . . . X . X . . . . . . X . . |
 | X X . . . X X X X X . . . . . X X . . |
 | X . . . . . . X X X . . X . . X . X . |
 | X X X . . . . . X X . . . X X X X . . |
 | X X X X . X X . X . . . . X X X X X X |
 | X X . X . . X X . . . . X . X X X X X |
 | X X X X . X X . . . . . . X X X X X X |
 | X X X X X X X X . . . . . . X X X X X |
 | X X . . X X X X X . X . . . X . X X X |
 | X X X X X X X X X X X X X . X . . X X |
 | . X . X X X X X X X X X . . . . . . X |
 | . . . X . . . . X . X X X X . . X X X |
 | . . X . . . X . X . . . X X X . . X X |
 | . . . . X X X X X X . . . X . . X X X |
 | . . . . . X X X X X X . . . . X X X X |
 | X . . . X X X X X X X X . . X X X X X |
 | . . . X X X X X X X X X . . . X X X X |
 +---------------------------------------+

統計値を確認する必要あるが傾向はいい感じだ.計算が非常に重いので収束させきれていないが,それでも良さ気に見える.

ただ,ポツンの一石だけの地のような,ルール上絶対ありえない点が存在しているのが気になる. どうしても消せないならもう一レイヤ重ねるしかないか?学習させなくても手入力で対応できる処理だ.

しかし,学習用のデータに含めなかったものに対しては,上が目標で下が結果だが,あんまりうまくいっていないように見える.

 +---------------------------------------+
 | . . . . . . . . . . X X X X X X X X X |
 | . . . . . . . . . . . X . X . . X X X |
 | . . X X . X . . . . . X . . . X X X X |
 | . X X X X X . . X . . X X . . . X X X |
 | X X X X . . . X X X X X . . . . . X . |
 | X X X X . X X X X X . X . . . . . X . |
 | X X X X X X X X X X . . . . . . . . . |
 | X X X X X X X . X X . . . . . . . . . |
 | X X X X . X X . X . . . . . . . . . . |
 | X X X . . . . . . . . . . . . . . . . |
 | X X X . X . . . . . . . . . . . . . . |
 | X X X X X X . X X X X . . . . . . . . |
 | X X X X X . . X X X X X X X . . . . . |
 | X X X X X X X X X X X X X X X . . . . |
 | X X X X X X X X X X X X X X . . . . . |
 | X X X X X X X X X X X X X X X . . . . |
 | X X X X X X X X X X . X . X . . . . . |
 | X X X X X X X X X X . . . . . . . . . |
 | X X X X X X X X X . . . . . . . . . . |
 +---------------------------------------+

 +---------------------------------------+
 | X . . . X . X . . . . X X X X X X X X |
 | . X X . . . . . . . X X X X . X X X X |
 | . . X X . . . . . . X X X X X X X X X |
 | . X X X X X . . X X . X X . . . X X X |
 | X X X X . . X X X X . X . . . . . X X |
 | X X X X . X X X X X X X X X . X . X X |
 | X . X X . X X X . X X X . . . . . X . |
 | . . X X . X X X X X X . X . . . . . . |
 | . X X . . . . . . X X . . . . X . . . |
 | . . X X . . . . . . . . . . . . X X . |
 | X X X X X . X . . . . . X . . . . . . |
 | . . . X X . . X X X X X . . X X . X X |
 | X . . X X . . X X X X X X X X . . X X |
 | . . . X X . X X X X X . X X . . . . X |
 | . . . . . X . X X X X X X X . . . . . |
 | . . . X X X X X . . X X . X X . . . X |
 | X X X X X X X X . . . X . . . . . . . |
 | X X X X X X X X . . . . . . . . . . . |
 | X X X X X X X X X . . . . . . . . . . |
 +---------------------------------------+

過学習の傾向にあるのかもしらない.学習用データのサンプル数を増やしてみる.計算重すぎて終わらない. やっぱし,PyBrainを使うのはいまいちかもな.ある程度,やり方のめどがついたらもっと高速なフレームワークを採用したい.