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

前回

ニューラルネットワークで囲碁の終局を判定 - 超ウィザード級ハッカーのたのしみ

何パターンか試してみた。

入力値は、終局図から黒石を取り除いたものと白石を取り除いたものを並べたものである。石がある点を1.0、石がない点を0.0としている。黒石が1.0で白石が-1.0、石なしが0.0とすると石なしが白と黒の間という意味になってしまうので、冗長になってしまうがこうしている。

出力値は、活きている黒石および黒の地を1.0、そうでないところ(つまり白)を0.0とする。

教師データは1000局の終局状態とそれを回転させてたり反転させたりして得た7000のデータを合わせた8000点のデータである。

  1. 隠れ層の数が1でユニット数361
  2. 隠れ層の数が1でユニット数722
  3. 隠れ層の数が2でユニット数がそれぞれ361
  4. 隠れ層の数が3でユニット数がそれぞれ361 (2015-01-18追加)

4パターンを試した。

どこまで収束させるかはあんまり考えず時間が許す限りとした。1は500回、2は500回、3は1700回学習させた。

パターン1の結果

教師データに含んでいない1000局のデータをテストデータとした。

教師データ テストデータ
raw territory error rms 4.48 7.66
discretized territory error rms 4.84 8.57
raw error rms 23.06 65.47
discretized error mean 22.50 75.40

rawの意味は出力値そのままの値、discretizedの意味は出力値が0.5以上なら1.0、0.5未満なら0.0とした値である。territoryは出力値を足しあわせた値である。学習させるのは各点が黒か白かであるが気になるのは、その合計なので計算している。territoryとついていないのは各点の値である。

パターン2の結果

教師データ テストデータ
raw territory error rms 3.12 6.84
discretized territory error rms 3.08 7.43
raw error rms 10.01 50.08
discretized error mean 9.24 55.39

パターン3の結果

教師データ テストデータ
raw territory error rms 5.23 8.55
discretized territory error rms 6.08 9.81
raw error rms 35.13 96.11
discretized error mean 39.52 110.13

どれも過学習の傾向にある。特にパターン2はダメだ。パターン3は層が多いためか、学習が遅くて困る。データ点数が少ないのかそもそも無理なのか。

データ数を増やして、もう少し他のパターンを試して見ようと思う。

PyBrainというライブラリを使ったが遅いので、FANNを使ってみる。*1しかし、FANNをPythonから使うライブラリがいけていないので、自分で作っているところ。


2014-01-18 追記

パターン4の結果

教師データ テストデータ
raw territory error rms 5.81 7.64
discretized territory error rms 8.00 10.35
raw error rms 57.18 106.81
discretized error mean 68.60 130.49

隠れ層の数を増やしたら、過学習の傾向は少なくなったように見える。しかし、計算資源の都合上、これ以上に隠れ層は増やせそうにない。

パターン認識と機械学習 上

パターン認識と機械学習 上

*1:PyBrainをC化したライブラリもあるみたいだが、怪しそうなので使わない