GithubHelp home page GithubHelp logo

aobazero's People

Contributors

kobanium avatar kunihitohoki avatar yssaya avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

aobazero's Issues

AobaZeroの自己対戦で投了するように

現在、developブランチで勝率10%以下で棋譜生成の自己対戦を投了するようにしています。
ただし、投了の間違い(最後まで指せば勝つのに投げてしまった)の割合が5%以下なのを確認するために
対戦の10%の棋譜では投了しないようにしています。
勝率10%で投了させることで間違う割合は1.23%ほどです。
投了させることで、囲碁の9路では棋力の向上があった、とのRayの小林さんの報告があります。
勝敗に影響のない局面(26%ほど)が減り、より重要な局面を学習できるためかもしれません。
この影響で平均手数も141手から132手に減ってます。aobazのバージョン13から適用されてます。、
Colabで動かすと投了が適用されます。近日中にv1.6にリリースも更新します。

投了勝率  全棋譜数  勝率で投げた数  間違った投了 割合  全手数    減る手数 割合
 1%      2926        2526              1( 0.04 %)  408681    57413( 14.0 %)
 2%      2926        2580              4( 0.15 %)  408681    64262( 15.7 %)
 5%      2926        2655              9( 0.33 %)  408681    79470( 19.4 %)
10%      2926        2668             33( 1.23 %)  408681   107107( 26.2 %)
15%      2926        2670             77( 2.88 %)  408681   132870( 32.5 %)
20%      2926        2677            152( 5.67 %)  408681   159443( 39.0 %)
25%      2926        2687            279(10.38 %)  408681   189917( 46.4 %)
30%      2926        2704            443(16.38 %)  408681   220909( 54.0 %)
35%      2926        2726            659(24.17 %)  408681   256285( 62.7 %)

sfen(ShogiGUI)に対応したAobaZero

48さんがsfen方式に対応したAobaZeroを公開されています。

ShogiGUIで動作する
駒落ちにも対応している

とのことです。
将棋所はUSIでの局面指定を平手の場合、
position startpos moves 7g7f 8c8d
といった形式で送ってくるのですが、ShogiGUIは
position sfen lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL b - 1
といったsfenと呼ばれる形式で送ってきます。AobaZeroは上の形式にしか対応して
いなかったのでShogiGUIで動作しませんでした。
ニューラルネットワークの入力としてAobaZeroは過去7局面の配置も必要とするのですが
それは与えていないとのことです。

sfen対応
https://bleu48.hatenablog.com/entry/2020/01/01/014730
sfen対応(Windowsバイナリ)
https://github.com/bleu48/aobazero/releases

Program crashed

About an hour ago I started "click_me.bat" and left for a shower. When I came back, I saw that the program has crashed... However, it seems that the current program doesn't have a function that can record the crash information and save it as a log, so it might be hard to find out why it crashed...
The screenshot below is the only information I can get from the crash.
The number of weight it used before crashing is 558.
Did the program crash because of the conflict of multithread? Or did it crash because of this specific game position?
Crashed

自己対戦と、対Kristallweizenとの宣言勝ちの推移を先手番、後手番で

自己対戦と、対Kristallweizenとの宣言勝ちの推移を先手番、後手番で分けて調べてみました。

10000棋譜ごとの自己対戦での宣言勝ちの推移
20200911declare

1000万棋譜から先手番での宣言勝ちが増えています。
現在もゆるやかに上昇中です。
ただ後手番の宣言勝ちは増加が止まってます。
それでも10000局で合計400局、4%程度が宣言勝ちなだけです。

10000棋譜ごとの自己対戦での引き分けの数
20200911draw

こちらは引き分けの数です。やや最近は増加傾向です。
800局なので全体の8%程度が引き分けです。
512手超えはほぼなく、99%以上が千日手です。

対Kristallweizenでの宣言勝ちの推移
20200911declare_krist

対Kristallweizenでもw950(600万棋譜)から先手番での宣言勝ちの
割合が増えています。
w1360(1000万棋譜)ではもうすでに、先手では60%の勝、と
大きく差が出てます。自己対戦では1000万棋譜で
ようやく先手が増えだしたのとは、かなり異なります。

現在では先手の勝ちの75%近くは宣言勝ち、後手では35%、と
大きな差が出ています。
ただ、先手、後手の勝率には差はほぼないです。AlphaZeroは
対elmoでは先手勝率98%、後手84%と大きな差があります。

BNZ_NAME を変更したい

有用な成果物を公開していただき、ありがとうございます。

AobaZero v1.9 なのに将棋所では「AobaZero 15」と認識され、私は最初混乱しました。

src/usi-engine/bona/shogi.h の122-123行目辺りで定義されているので version ではない何らかの意味があるのだろうと推測しますが、これを aobaz.bat からの起動 option で変更できるようにできませんでしょうか。具体的には以下のような感じです。

bin\aobaz --name=AobaZero_1.9_w2184 -q -i -p 100 -w weight-save\w000000002184.txt

将棋所上で AobaZero 同士の対局を行わせたいので、表示名を手軽に変更できると助かります。

互角局面集を使うとAobaZeroは +150 ELOほど弱くなる

AobaZeroは対Kristallweizenとの棋力計測に磯崎氏が作成された互角局面集を使っています。
これを使わずに「やねうら王 標準定跡」を相手側だけつかうようにすると

AobaZero w1650の1手800 playoutは

Kristallweizen 1手500k 相手だと +114 ELO 強く、
elmo 1手346k 相手だと +155 ELO 強くなります。

これは互角局面集にAobaZeroが指さない戦型(穴熊や先手振飛車、対振で船囲いから急戦など)が
含まれてるためと思われます。
Kristallweizenやelmoも自分の評価関数が得意な戦型だけを選ぶように調整すれば強くなるでしょうし、
双方に公平な条件での勝率の測定は難しそうです。

AobaZero(w1650)の1手800playout 対 Kristallweizen、elmoで互角局面集、standard_book.dbを使った場合。
AobaZeroは一切乱数性なし。

Kristallweizen 1手500k           勝 分 敗 局数 (宣 千 宣) 先手勝率          勝率   95%    ELO
互角局面集                      348-22-430 800 (183-14-4)(397-381,0.510), 0.449(0.034)( -35)
standard_book.db, 同一棋譜 3局, 482-15-303 800 (268- 9-1)(401-384,0.511), 0.612(0.033)(  79) +114差

elmo           1手346k
互角局面集                      580-11-209 800 (338- 9-0)(412-377,0.522), 0.732(0.030)( 174)
standard_book.db, 同一棋譜 5局, 693- 5-102 800 (423- 3-2)(403-392,0.507), 0.869(0.023)( 329) +155差

※1 standard_book.db は v4.73_book の「standard_book.zip : やねうら王 標準定跡」
※2 elmoは「elmo WCSC25版」に付属の standard_book.db を使うと800局で同一棋譜が5局から75局に増えます。
AobaZero側で最初30手までは勝率2%以内ならsoftmax samplingで選ぶようにすると75局が5局程度に減ります。
最終的な勝率も0.879程度とあまり変わらないです。

自己対局用に互角の局面集を公開しました
http://yaneuraou.yaneu.com/2016/08/24/%E8%87%AA%E5%B7%B1%E5%AF%BE%E5%B1%80%E7%94%A8%E3%81%AB%E4%BA%92%E8%A7%92%E3%81%AE%E5%B1%80%E9%9D%A2%E9%9B%86%E3%82%92%E5%85%AC%E9%96%8B%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F/
やねうら王 定跡ファイル詰め合わせ
https://github.com/yaneurao/YaneuraOu/releases/tag/v4.73_book

Compilation error `openblas`

Hello,

I am trying to compile the source on Manjaro (Arch) with following errors:

Network.cpp:524:5: error: ‘openblas_set_num_threads’ was not declared in this scope
524 |     openblas_set_num_threads(1);
    |     ^~~~~~~~~~~~~~~~~~~~~~~~
Network.cpp:525:33: error: ‘openblas_get_corename’ was not declared in this scope
525 |     myprintf("BLAS Core: %s\n", openblas_get_corename());
    |                                 ^~~~~~~~~~~~~~~~~~~~~
make[2]: *** [Makefile:82: Network.o] Error 1
make[2]: Leaving directory '/.../aobazero/src/usi-engine'
make[1]: *** [Makefile:8: default] Error 2
make[1]: Leaving directory '/.../aobazero/src/usi-engine'
make: *** [Makefile:55: src/usi-engine/aobaz] Error 2

I have identified cblas, openblas to be dependencies, but it would be very nice to mention the dependencies in the README.

I am willing to provide a package for the AUR (Arch User Repository) for other users to install it comfortably.

AobaZeroの詰まで投了しない棋譜

投了の棋譜ですが、現在も投了の閾値を自動調節するために全体の10%の棋譜で投了を禁止しています。

2212万棋譜以降で、棋譜の3行目に "-r 0.0" がついている棋譜のみを対象とした場合、
'-q -r 0.0

棋譜の最後が下のいずれかで終わっているのが閾値で投了した棋譜で
%TORYO,'autousi
%TORYO,'autousi,resign-th=

何もついていない下の形式が投了を禁止して詰み上がりまで指した棋譜になります。
%TORYO

棋譜数は減ってしまいますが、この形式の棋譜だけを学習対象とすれば長手数の棋譜も以前と
ほぼ同じ割合で含まれていると思われます。

下はKristallweizenと1手800playoutで対戦させた場合の宣言勝ちの割合です。
現在は先手では60%、後手では25%が宣言となっています。
一番多かったときは先手で80%で、w2770付近から急に減少しています。
ほぼweight_decayを小さくした時期(w2750)と一致しますが、それより少し前の
投了10%(w2250)、投了自動調整(w2564)の影響かもしれません。

20210312dec_krist

GPU使用率について

こんにちは。rtx2080tiで動作させたところ、GPU使用率が58%止まりになります。使用率を上げることはできますか?また、Averageが1650msくらいです。この速度は正常でしょうか?

停電のため9月7日の朝8時から24時間、棋譜サーバが停止します

停電のため、weightの配布、棋譜の収集をするサーバが9月7日の午前8時から9月8日の午前8時まで停止します。
ご不便おかけしますがよろしくお願いします。

Due to a power outage, the server that distributes weights and collects games will stop from 8 am on September 7 to 8 am on September 8(JST).
Thank you for your inconvenience.

A question about the current progress

Hi!

It is nearly two months since v1.2 came out, and more than 100 weights (No.537~No.645) were generated after that.

(1) During these days, the strength of AobaZero fluctuates very much. According to the FloodGate, the strength from No.537 to No.573 fluctuates and didn't have much improvement. No.578, which was produced one month ago, gained about 100 elos strength. But during the latest one month (No.578 to No.643), the strength fluctuates again and improves little.
How do you assess the progress now?

(2) Also, the strange phenomenon that the weight files getting gradually smaller is still keeping. Are the weight files still affected by the decrease of the root node candidates that you stated before? Is there any possibility that an unknown mistake (like losing parameters/losing decimal digits) in the training process causes this strange phenomenon?
WEIGHT1
WEIGHT2

ノイズを含まないAobaZero同士の棋譜

序盤の変遷が分かって面白いです。
http://www.yss-aya.com/aobazero/no_noise/sample.html

大まかな傾向は
・先手は居飛車しかしない。振ってきたら右四間か腰掛け銀で攻める。左美濃が好き。
・後手は雁木か四間飛車。美濃囲いに落ち着く。
(ただ、これは一番なりやすい変化、というだけで、学習棋譜では相掛かりの乱戦などがよく出てきます)

最近の最初の4手は
▲26歩△34歩▲76歩△44歩、この形が本線のようです。
最近先手勝率が0.542から0.538に下がってきたのは後手が△84歩から
横歩を取らせる変化を指すようになったせいかもしれません。

1手800plyaoutで乱数の要素がないので、常に同じ手を再現します。

w765 ▲26歩△34歩▲76歩△44歩、後手は雁木。▲78金▲77銀。
w755 ▲26歩△34歩▲76歩△84歩、先手だけ横歩を取る。横歩取33角。▲68玉△52玉。
w750 ▲26歩△34歩▲76歩△44歩、後手は雁木。▲78銀、先手は早繰銀。
w735 ▲26歩△34歩▲76歩△32金、先手だけ横歩を取る。横歩取33角。▲68玉△52玉。△24飛とぶつける。
w720 ▲26歩△34歩▲76歩△44歩、後手は四間飛車。美濃囲い△52金。先手は腰掛け銀。左美濃。
w710 ▲26歩△34歩▲76歩△44歩、後手は雁木。先手は▲36歩から棒銀。左美濃。
w690 ▲26歩△34歩▲76歩△44歩、後手は四間飛車。美濃囲い△52金。先手は右四間。左美濃。
w660 ▲26歩△34歩▲76歩△44歩、後手は四間飛車。美濃囲い△52金。先手は右四間。銀冠を目指す?
w630 ▲26歩△34歩▲76歩△44歩、後手は四間飛車。後手から仕掛ける。
w610 ▲26歩△34歩▲76歩△44歩、後手は四間飛車。美濃囲い△52金。先手は右四間。
w595 ▲26歩△34歩▲76歩△44歩、後手は四間飛車。美濃囲い△32金。先手は右四間。
w520 ▲26歩△34歩▲76歩△44歩、後手は雁木。先手は右四間。▲78銀
w490 ▲26歩△34歩▲76歩△44歩、後手は四間飛車。△62銀の簡易。△32金。先手は右四間。
w420 ▲26歩△34歩▲76歩△44歩、後手は四間飛車。△62銀△52金、△32金。先手は右四間。
w390 ▲26歩△34歩▲25歩△33角、後手は四間飛車。△62銀△52金、△32金。先手は右四間。
w300 ▲26歩△32金▲25歩△84歩、角換わり相早繰銀。
w250 ▲26歩△84歩▲25歩△32金、先手だけ飛車先を交換
w235 ▲26歩△34歩▲76歩△32金、相掛かり。角を交換せずに相腰掛け銀。
w150 ▲26歩△34歩▲25歩△33角、いきなり▲45桂の仕掛け。
w135 ▲26歩△34歩▲25歩△33角、角交換から後手向かい飛車。先手後手とも美濃に。
w110 ▲48飛△84歩▲76歩△85歩、先手いきなり右四間。いきなり飛車先突き捨て。角不成。
w100 ▲76歩△34歩▲26歩△88角成、先手が横歩を取る。大駒の価値が怪しい。
w090 ▲96歩△62金▲26歩△14歩、簡単に香損する。
w080 ▲78飛△32飛▲68飛△42飛、まだ序盤の手の価値が怪しい。金銀ばらばら。駒は取り返すが価値が怪しい。
w070 ▲78金△62飛▲68王△42飛、大駒の価値が怪しい。
w060 ▲68飛△42飛▲28飛△82飛、千日手。
w050 ▲48飛△62飛▲56歩△42飛、王を囲う、という概念はないようだ。王を詰ましやすい形を目指す?
w040 ▲38飛△72飛▲48飛△62飛、千日手
w025 ▲38飛△72飛▲58飛△52飛、ひたすら飛車だけを動かす。千日手は打開。歩が前進すると負けと思ってる?駒の価値、成る価値が分かってない。

現在のAobaZeroの対elmoの勝率

論文に近い条件でelmo(WCSC27)対戦させた結果が下です。

AlphaZeroはelmoに対して

勝率91.2%(+410)(先手番だと98.2%(+695)、後手で84.2%(+291))  持時間3時間15秒。1手3分?

AobaZeroはelmoに対して

勝率73.8%(+179)(先手番だと78.3%(+223)、後手で69.1%(+140))  1手10秒相当

ですので、+231 ほどまだ差があります。
w1650 と少し古いweightの結果で最新は +40 ほど強いので差は +191 ほどかもしれません。

先手番の差は +472(695 - 223)
後手番の差は +151(291 - 140)

と、先手番での差が大きいです。
気になる要因としてはAlphaZeroは思考時間が長いほど先手勝率が高く、
1手10秒相当のAobaZeroもその傾向が出ています。1手3分相当で今の20倍ほど
時間をかければレート差は小さくなるのかもしれません。

AlphaZeroは思考時間が長いと先手勝率が高い
#36

AobaZero vs elmo(WCSC27) (AlphaZeroの論文の1手10秒相当)

全体勝率 0.738 (86勝5分29敗)           +179 Elo
先手勝率 0.783 (46勝2分12敗) 宣言45勝  +223 Elo  (後手との差 +83 Elo)
後手勝率 0.691 (40勝3分17敗) 宣言25勝  +140 Elo

AobaZero,    w1650, 580000 playout/手, 最初の30手までは勝率2%以下ならSoftmaxで選択。
elmo(WCSC27)        251000k       /手, 6 threads, HASH 8GB, elmo付属の定跡使用

この120局で、2080Tiの学習の空き時間を使って2か月半かかってます。

学習率を0.02と小さくしました

学習率を今までの
learning rate = 0.001, mini_batch = 64 (mini_batch = 64, iter_size = 1)
から
learning rate = 0.02, mini_batch = 4096 (mini_batch = 128, iter_size = 32)

に変更しました。
次のw775.txtから新しい学習率になります。
見かけの学習率は 0.001 -> 0.02 と大きくなっていますが、ミニバッチが 64 -> 4096 と大きくなっているため
実際の学習率は下がっています。

iter_size = 32、というのは内部でgradientsを32回足し合わせ、仮想的にミニバッチ4096を実現させる
Caffe独自の機能です。

AlphaZeroの論文では
learning rate = 0.2, mini_batch = 4096
から
learning rate = 0.02, mini_batch = 4096
に340万棋譜の時点で変更しています。
AobaZeroは420万棋譜なので、やや遅い変更になります。

論文ではこの後、
learning rate = 0.002 1000万棋譜
learning rate = 0.0002 1700万棋譜
と学習率を下げています。学習は2400万棋譜で終わっています。

2017_2018_alphazero_elo_w668

AobaZeroの追試(AlphaZeroの追試)を終了しました。

2019年3月に開始して2年2か月で3980万棋譜を作成しました(AlphaZeroは2400万棋譜)。
これまで棋譜作成に協力していただいた皆様、バグを報告したり遊んで下さった方々に感謝いたします。

AlphaZeroには推定で154 Elo(後手番では86 Elo、先手番で377 Elo)負けています(後述)。

将棋のルールだけを教えて「勝ちやすい」という条件だけで一般的に指されてる囲い、戦型の大部分を再発見することができました。

確認された囲い:雁木、矢倉、美濃囲い、高美濃、銀冠、左美濃、中住まい、右玉、矢倉穴熊
確認された戦型:相掛かり、横歩取り、横歩取り青野流、角換わり棒銀、角換わり早繰り銀、角換わり腰掛け銀、
            後手四間飛車、矢倉脇システム、ひねり飛車

先手番では振飛車は指しませんが、後手番では四間飛車を好んで指していました。
穴熊も矢倉から穴熊に組み替える矢倉穴熊は指します(▲78金▲67金型)。
▲78金▲79金の正統な?穴熊は見つけていません。

半面、一目散に穴熊を目指す指し方や、多彩な振飛車(中飛車、三間飛車)などは見つけていません。
人間によって長く指されている指し方を一部発見できていないのはこの手法が万能ではないことも示していると思います。

最終的な棋風は相掛かりや角換わりを好むすぐ殴り掛かる居飛車党でこれはAlphaZeroの公開されている棋譜と似ています。
序盤の微妙な駒組の評価や、王が三段目以上に上がったときの形勢判断、入玉できるか、の見切りの力などが優れていると思います。
半面、終盤での読み抜け、飛角の長い利きをうっかり、などが弱点です。

この後は40blockに移行します。
w3459.txt が最後の20blockで
w3460.txt からが 40blockとなります。

39825686棋譜以降は40blockと20blockが混在します。
40blockは1974万棋譜までは20blockと同様に、そこから3970万棋譜までは1局面平均1回、でなく(1/8)回学習するように8倍速で学習したものをベースにしています。強化学習前で +70 Eloほど 20 blockより強いです。有効数字を6桁から3桁に変更することでweightの*.xzのサイズは76MBから80MB、と少し増えただけになっています。有効数字は2桁でも最新のw3435でも棋力に変化はありませんでした。

ネットワークの有効数字は2桁でも十分?
http://www.yss-aya.com/bbs_log/bbs2020.html#bbs43

以下は棋力の推定です。
AlphaZeroの1手10秒換算でのAobaZeroの対elmo(WCSC27)との330局だと

勝率     0.688 (219勝16分95敗)                差137
先手勝率 0.748 (120勝 7分38敗) 宣言116勝(97%)  差189
後手勝率 0.627 ( 99勝 9分57敗) 宣言 56勝(57%)  差 90

*AobaZeroは 1手580k playout/手、elmoは 1手251000k/手 (6スレッド)

AlphaZeroは持ち時間3時間で対elmo(WCSC27)に1000局で

勝率     0.918                                差420
先手勝率 0.982                                 差695
後手勝率 0.853                                 差305

*AlphaZeroは第1世代TPUを4つ(探索速度 58k/秒)。elmoはXeon 2.2GHz 44CPU、44スレッド(25100k/秒)

AobaZeroの重みがw1650と現在より40ほど弱い、
elmoを1手25100k固定とした場合、44スレッドは6スレッドより89弱い、を考慮して
(対Kristallweizenの16スレッド、1手5500kノードとの比較で)

(平均) 154 (420 - 137 - 89 - 40 より)
(先手) 377 (695 - 189 - 89 - 40 より)
(後手)  86 (305 -  90 - 89 - 40 より)

学習率を0.00002に下げました

学習率を
0.0002 から
0.00002
に変更しました。

10980422棋譜、weightは w1450 から新しい学習率となります。
(w1449までが古い学習率での更新)

AlphaZeroは1000万棋譜で2回目の学習率変更なので、約100万棋譜遅い更新となります。

またGoogle Colabで開発版を使うことで13倍速く(Tesla T4)棋譜を生成できるようになりました。
http://www.yss-aya.com/aobazero/colab.html

Tesla K80    36.2 棋譜/時
Tesla T4    130.0 棋譜/時   (9.9棋譜/時)  (は以前の速度) 
Tesla P100  138.3 棋譜/時  (15.5棋譜/時)
Tesla P4     52.7 棋譜/時   (8.1棋譜/時)

ほどの速度が出ます。T4だと今までの13倍速くなってると思います。
これはaobazのプロセスを65個同時に起動して バッチサイズ28でネットワークの計算をするようにしたためです。
OpenCLの将棋盤向けの高速化や2080TiではHALFを使った高速化にも対応しています。
Windows版への対応はもうしばらくかかると思います。

    Core  Memory
Tesla K80  4992  24GB
Tesla T4   2560  16GB  Tensor 320
Tesla P4   2560   8GB
Tesla P100 3584  16GB

v1.7で投了勝率の自動調整に対応

棋譜生成される方は更新をお願いします。
投了勝率が自動調節になりました。間違った投了の割合が5%未満になるようにしています。

現在の投了の勝率は23%とかなり大きな値です。
この影響で投了なしだったときは平均手数が141手だったのが
10%で投了、で105手に
23%で投了、で82手ぐらいまで下がってます。

閾値の確認のために全体の10%の棋譜では投了せず、その棋譜の直近1000局(正確には0.999の指数移動平均)

新しい推定値 = 古い推定値 * 0.999 + 0.001

で間違った投了が5%未満になるようにしています。

これに関連して棋譜(*.csa)のフォーマットが変更になってます。

+6978KI,'v=0.545,800,6978KI, ...

のように "v=" でMCTSで探索して最大回数の手の勝率、を追加しています。(実際に着手した手ではないです)。
勝率は自分の手番から見た勝率でv=1.0で自分が勝ち、v=0.0で負けです。

https://github.com/kobanium/aobazero/releases

また2225万棋譜まで公開されています。
https://drive.google.com/drive/folders/1dbE5xWGQLsduR00oxEGPpZQJtQr_EQ75

水たまりさんが、一括してダウンロードできるスクリプトを公開されてます。

AobaZeroの棋譜をコマンドラインからダウンロードする
https://tokumini.hatenablog.com/entry/2020/09/11/140000

2019年11月1日時点での先手勝率や千日手の局数など

  1. 平均手数
    図1は1万棋譜ごとの平均手数です。
    最初の12万棋譜はNNを使わずにPolicy、Valueともにプログラムで乱数を割り当てて作った棋譜で、200手程度で一定です。
    現在の平均手数は125手でゆるやかな下降傾向にあります。

20191101moves_ave

  1. 先手勝率
    図2は1万棋譜ごとの先手の勝率です。
    80万棋譜で勝率が0.60からだと0.52まで急落してます。
    これは後手が△44歩と角道を止めて振飛車を指しだした時期と一致します。
    角道を止めずに単純に殴り合うと先手が勝ちやすく、それを避けたのかもしれません。
    振飛車とはいっても△32金と上がる振飛車で△52金型の振飛車を指すのは260万棋譜とかなり後です。
    この頃の棋力はアマ3段ほどと思われます。

190万棋譜で勝率が0.60から0.52に急落したのはMCTSの勝率の初期値を引き分け(0)から負け(-1)に
変更したためです。それまではこのバグのため勝率が悪い局面ではpUCTが多くの手を展開するようになり、
結果として「勝率が悪い後手がさらに多くの手を探索」 → 「もっと形勢が悪くなる」
と後手の勝率をさらに押し下げる結果となっていました。
現在の先手勝率は0.546でゆるやかな上昇傾向にあります。

20191101sente_winrate

  1. 千日手と512手超え(持将棋)の数
    図3は1万棋譜ごとの千日手と512手を超えた局数でsy。この2つはともに引き分け、として扱われます。
    持将棋の扱いが512手超えともいえます。
    学習開始直後は512手超えが全体の半分近くになるほどでした。
    これは1手詰の形を学習してそれを避けるようになり手数が伸びたと思われます。
    プログラムで乱数を与えた初期の棋譜では探索もしているのである程度の確率で王を詰ませてました。
    それ以降、急激に512手超えは減り、引き分けはほぼ千日手です。
    これはCSA選手権が採用している27点法で勝宣言を行っているため、入玉模様になった将棋はどちらかが
    確実に宣言勝ちをしているためと思われます。
    なお、点数による勝宣言はUSIエンジン(aobaz)では行わずautousiが行ってます。
    そのため探索中には評価関数であるNNが27点での勝ちを認識しています。
    千日手はUSIエンジンが探索中に同型になった場合にも判定しているので、NNがどの程度千日手の局面を
    引き分けと判定しているかは不明です。
    千日手は徐々に上昇傾向にあります。現在は1万棋譜で414局、約4%が千日手です。

20191101draw512

  1. 勝宣言の局数
    図4は1万棋譜ごとの勝宣言の局数です。先手と後手の両方の合計で割合はほぼ半分で一定です。
    勝宣言も徐々に上昇傾向にあります。平均手数は下降傾向なので、入玉模様になったときの
    宣言勝ちが上手くなっていると思われます。
    20191101declare

AobaZeroのweightの更新を10000棋譜から34285棋譜ごとに

重みの更新を10000棋譜から34285棋譜に変更しました。
これはAlphaZeroが2400万棋譜、70万回学習、mini-batch=4096、1000回学習ごとに重み更新、なので
3.4285万棋譜(=2400/(700000/1000))に合わせたためです。

今までは1万棋譜ごとで直近の50万棋譜からサンプリング、なので50世代、 3.4285万棋譜だと15世代が含まれます。

mini-batch=128 だと32000回学習((4096/128)*1000)ごとに重み更新、なので
3.4285万棋譜で32000回学習になるように 1棋譜あたり1.07142回学習されるように
棋譜追加時の学習回数も調整しています。
今までは1棋譜あたり1回の学習でした。
1回で128局面を学習するので現在の平均手数85手だと1局面あたり1.41回ほど学習することになります。

学習率を再度変更しました

学習率を
learning rate = 0.02, mini_batch = 4096 (mini_batch = 128, iter_size = 32)
から
learning rate = 0.0002, mini_batch = 128 (mini_batch = 128, iter_size = 1)
に変更しました。w787から新しい学習率となります。

これはiter_sizeを使った場合、個々のmini_batchにおけるBatch Normalizationの
平均と分散を計算する個数が128となり、mini_batch=4096, iter_size = 1 とは一致しないためです。

新しい学習率は過去の棋譜を使った学習でのレートの上昇で比較すると
learning rate = 0.001, mini_batch = 64 (mini_batch = 64, iter_size = 1)
を10分の1にしたものに近く、今までの
learning rate = 0.02, mini_batch = 4096 (mini_batch = 128, iter_size = 32)

learning rate = 0.0005, mini_batch = 128 (mini_batch = 128, iter_size = 1)
に近いです。
今の状態はさらに学習率を0.4(0.0002/0.0005)倍したものに近いかもしれません。

2520000棋譜から2948000棋譜まで。43万棋譜を学習。初期weightは w600。vs Krist 100k

勝率          ELO  学習率     補足
0.469(0.035)( -21) lr=0.001,  mb= 64  比較基準(w650)
----------------------------------------------------------------------
0.682(0.032)(+132) lr=0.0002, mb=128  今回のデータ
0.616(0.034)( +81) lr=0.0005, mb=128  今回のデータ

0.615(0.034)( +81) lr=0.02,   mb=4096,(mb=64, is=64)
0.618(0.034)( +83) lr=0.02,   mb=4096,(mb=128,is=32)

0.713(0.031)(+158) lr=0.0001, mb=  64
0.600(0.034)( +70) lr=0.001,  mb= 180  "cross_entroy_scale"がmb64のまま
0.692(0.032)(+140) lr=0.00001,mb=  64,(lr=0.0001,mb=64 を再度学習)
0.632(0.033)( +93) lr=0.00001,mb=  64
0.613(0.034)( +79) lr=0.02,   mb=4096,(mb=64, is=64)
0.581(0.034)( +56) lr=0.0005, mb=  64
0.473(0.035)( -18) lr=0.001,  mb=  64
0.354(0.033)(-104) lr=0.1,    mb=4096,(mb=64, is=64)
0.546(0.034)( +32) lr=0.05,   mb=4096,(mb=64, is=64)

プロセス間バッチの実装を進めています

autousiが同時に21個程度のプロセス(aobaz)を起動して、
aobazが計算するニューラルネットを同時にミニバッチ、7個程度、まとめて
計算するテストをしています。
この効果で1日7000棋譜程度だったのが50000棋譜程度と7倍ほど高速になっています。
これはバッチを組む高速化とともに、開発側でGPUを10枚ほど一時的に増やしたことにもよります。
計算はOpenCLですが、今までのLeelaZeroのOpenCLの流用をやめて
将棋盤の9x9で高速に動くように最適化しなおしたものを使っています。
バッチを組むことで4倍程度、OpenCLの改良で1.7倍程度高速化されてます。
Windows版の対応を含めての公開はもう少し先になると思います。

floodgateではweightを5つごとに試していましたが、今のペースだと
1日で5つ出来てしまい、50局程度しか試せないので
AobaZero_w938_n_p800
からweightを10ごとにする予定です(次はw948)。

入玉宣言絡みの不具合について

やねうら王(自作評価関数)と対局させていた際、気になることがありましたので報告します。

次の対局では、AobaZero勝勢(評価値は-5000で後手勝ち)で千日手になってしまいました。

position startpos moves 2g2f 8c8d 2f2e 8d8e 7g7f 4a3b 8h7g 3c3d 7i8h 2b7g+ 8h7g 3a2b 6i7h 2b3c 3i3h 7a7b 3g3f 7c7d 5i6h 7b7c 2i3g 7c6d 4g4f 5a4b 3h4g 7d7e 7f7e 6d7e P*7f 8e8f 8g8f 7e8f 7g8f 8b8f P*8g 8f7f B*8c 6a5b 8c6e+ 7f7a 6e6f 6c6d 4i5h 8a7c 3f3e 7c6e 3e3d 3c3d P*7b 7a8a 2e2d 2c2d 2h2d 3b2c 2d2i P*2g 3g4e P*7f 6f7f 4c4d P*3e 3d3e P*3f 3e2f 6g6f P*7g 8i7g 6e7g+ 7f7g 4d4e 4f4e P*4c 4e4d 4c4d P*4c 4b3b 7g7f B*5d 7f5d 5c5d B*9f P*8e 7b7a+ 8a7a 9f8e S*7d P*7b 7a7b 8e6g N*5e S*4a 3b4a 6g2c+ 4a5a 4g5f P*7g 7h7g N*8e P*7h 8e7g+ 7h7g P*7f 7g7f 7d8e 5f5e 8e7f 4c4b+ 5b4b 5e5d B*9e N*8f 7f8g+ N*7d 7b7d P*4c 7d7g+ 6h6i 4b5b P*7c S*7h 6i5i 7g7c G*4b 5b4b 4c4b+ 5a6a 2c3d 6a7a 3d4d P*5c P*7b 7a8a G*3h 9e8f 5i4h N*4f 4d2f 4f5h+ 4h3g N*3d 7b7a+ 8a8b 2f3e 5c5d 3e3d G*1e P*2f S*2h 2i2h 2g2h+ 3g2h P*3g 3h3g P*2g 2h2g 8f5i+ S*3h P*2e 3d2e 1e2e N*9e 5i9e 2f2e P*2f 3g2f 8b8c 7a7b 7c7b P*8h 8g8h P*7c 7b7c P*8e 9e8e 4b4a 8c7d S*9f 8e7f P*7i 8h7i 2e2d 7d7e N*8h 7e6f 8h7f 6f5g 4a3a 5g6h B*9e P*7g 9e7c+ R*3i 7c6d 3i3h+ 2g3h G*4h 3h2h B*4i R*2g 4i3h+ 2h1h S*2i 2g2i 3h2i 1h2i R*3i 2i1h 3i3h+ G*2h 3h4i 3a2a 4h3h 2h3h 4i3h G*2h 3h4i S*3h 4i5i 1h2g P*4g 2a1a 4g4h+ 2d2c+ 4h3h 2h3h N*3d B*3e P*4f 3e1c+ 5i2i N*2h P*2b 2c2d P*1e L*3i P*3g 3f3e 3g3h+ 2g3f 3d2f R*6b 2i3i 3f2e 3h2h 6d5d 7h6g 6b4b+ L*2c 1c2b 2c2d 2e2d N*4a 4b4a G*1d 2d1d 3i3e 4a4d S*2e 1d1c G*1d 1c1b G*3a 4d3e 3a2b 1b2b B*1c 2b3b 1c3e 5d4e G*3d 4e3e 3d3e 3b3a 6g7f+ 1g1f 1e1f 1i1f 2e1f R*6a R*6g 6a4a+ 6g3g+ B*3b 7f6g 3b1d+ 7g7h+ G*3b 2f3h+ P*4b 1f2g 4a9a 7i8i 9f8g 8i9i 8g7h 6g7h 9a9c 3e3f 1d2c S*8h 9g9f 4f4g+ 9c6c 6h7i 2c2b 3g4h G*8g 3f3g 8g8h 7h8h S*7g P*8g 7g8h 8g8h+ N*1i G*7h 1i2g 2h2g S*6g S*6i 6g7h 6i7h+ S*6g S*6i 6g7h 6i7h+ S*6g S*6i 6g7h 6i7h+ S*6g S*6i 6g7h draw

やねうら王5.00+水匠2の評価値は後手勝勢(319手目時点)であり、
△6九銀打ではなく△7七歩打とすることで、千日手にはならないはずです。

(やねうら王5.00+水匠2の画像)
yaneuraou

AobaZeroの評価値が-5000なので、
320手目△6九銀打の後、▲7八銀で駒を取られることを考慮しておらず、
次の手番で入玉宣言できると認識しているように思えます。

また、AobaZero 13(w2371)にplayout 100万で思考させましたが、
△6九銀打/評価値-5000で変わらないので思考時間の影響ではなさそうです。

(AobaZeroの画像)
aobazero

よろしくお願いいたします。

AlphaZeroは思考時間が長いと先手勝率が高い

今まで気づかなかったのですが、論文のFig 2をよく見ると
AlphaZeroはelmoに対して思考時間が長いほど、先手での勝率が上がっています。

下はグラフから読み取ったAlphaZeroの対elmoの勝率です。
グラフに合わせて、AlphaZeroが後手のとき、先手のとき、の勝と引き分けの値、
そして先手と後手での勝率の差です。

思考時間が1/100の時は、先手と後手の差は+30 ELO、勝率で0.54程度の差で、
これなら通常の将棋の勝率に近いです。
しかし、思考時間を増やすごとに先手と後手の差は広がり、
same time(持時間3時間)では +390 ELO もの差になっています。

AlphaZeroは探索速度は4TPUで 58000回/秒 なので持時間3時間の100分の1、108秒だと
1手1秒程度かと思います。elmoは 44 threadで 25100k /秒 です。

現在のAobaZero(w1650)の勝率は

 1手  800 playout 対 elmoの1手   346k   勝率 87.9%  (先手勝率 89%、後手勝率 87%)
 1手 8000 playout 対 elmoの1手  3462k   勝率 78.9%  (先手勝率 81%、後手勝率 77%) 先手で宣言勝ちは95%の割合
 1手58000 playout 対 elmoの1手 25100k   勝率 計測中

まだ先手勝率が上がっていく気配はないです。
1手1秒の再現実験でも20日間かかり、持時間3時間で1000局の再現実験は3年ぐらいで厳しそうです。

AlphaZeroの対elmoでの思考時間を変えた時の勝率(グラフから読み取った数値)

     勝  引分  勝率    ELO   先手と後手の差(ELO)
1/100
  42.8%, 5.6% (45.6%   -31 )
  49.6%, 0.5% (49.9%    -1 )  +30
1/30
  68.0%  2.1% (69.1%  +140 )
  79.1%  0.9% (79.6%  +237 )  +97
1/10
  69.9%  2.8% (71.3%  +158 )
  91.2%  0  % (91.2%  +406 ) +248
1/3
  80.0%  1.6% (80.8%  +250 )
  95.2%  0.8% (95.6%  +535 ) +285
same time
  84.2%  2.2% (85.3%  +305 )
  98.2%  0  % (98.2%  +695 ) +390

20200911fig2b

A general reinforcement learning algorithm that masters chess,shogi,and Go through self-play
https://science.sciencemag.org/content/sci/362/6419/1140.full.pdf

AobaZero (AlphaZero Shogi test) has finished.

Since March 2019, we have generated 39.8 million games for 2 years and 2 months (AlphaZero has generated 24 million games).
We would like to thank everyone who has cooperated in generating games, and those who have reported bugs and played with.

AobaZero is estimated to be 154 Elo weaker than AlphaZero (377 Elo in Sente(Black), 86 Elo in Gote(White), see below).

From only Shogi rule, it has rediscovered most of the Castles and Openings that Shogi players often use.

Confirmed Castles  : Yagura, Gangi, Mino, High Mino, Silver Crown, Left Mino,
                     Central House, Right King, Yagura Anaguma
Confirmed Openings : Double Wing Attack, Side Pawn Capture, Side Pawn Capture Aono Style,
                     Bishop Exchange Climbing Silver, Bishop Exchange Rushing Silver,
                     Bishop Exchange Reclining Silver, Gote 4th File Rook,
                     Yagura Waki System, Twisting Rook

In Sente, it does not play Ranging Rook. But in Gote, it preferred to play 4th File Rook.
It does not play orthodox Anaguma(78 Gold, 79 Gold), but plays Yagura Anaguma(78 Gold, 67 Gold).
It haven't found a variety of Ranging Rook(Central Rook, 3rd File Rook, etc).

The latest playing style is the immediately hitting static Rook party, which prefers Double Wing Attack and Bishop Exchange, which are similar to AlphaZero's published 100 games.

The advantages are an evaluation of the delicate arrangement of pieces in the early stages, and an evaluation of the possibility of Entering King.
Especially with other software opponents, there are many declaration wins by Entering King. For example, against elmo(WCSC27), 97% of Sente wins are declaration wins.
The weaknesses are missing some tactical moves in end-game, and overlooking long distance Rook and Bishop control.

AobaZero winrate against elmo(WCSC27), 330 games, AlphaZero 10 seconds/move (Equivalent)
Winrate       0.688 (219 wins 16 draws 95 losses)                        diff 137 Elo
Sente winrate 0.748 (120 wins  7 draws 38 losses) 116 declare wins(97%)  diff 189 Elo
Gote  winrate 0.627 ( 99 wins  9 draws 57 losses)  56 declare wins(57%)  diff  90 Elo

*AobaZero 580k playouts/move, elmo 251000k nodes/move (6 threads)

AlphaZero winrate against elmo(WCSC27), 1000 games, 3 hours per each.
Winrate       0.918                                                      diff 420 Elo
Sente winrate 0.982                                                      diff 695 Elo
Gote  winrate 0.853                                                      diff 305 Elo

*AlphaZero uses four 1st generatrion TPUs(58k playouts/second), elmo uses on Xeon 2.2GHz 44CPU, 44 threads(25100k/second).

AobaZero's weight is w1650.txt, it is about 40 Elo weaker than latest.
elmo(44 threads) is 89 Elo weaker than elmo(6 threads), when it searches fixed 25100k nodes.
(Comparing against Kristallweizen(16 threads) fixed 5500 nodes per move.)

Average  154 Elo (420 - 137 - 89 - 40)
Sente    377 Elo (695 - 189 - 89 - 40)
gote      86 Elo (305 -  90 - 89 - 40)

Elo graph, game records and weights.
http://www.yss-aya.com/aobazero/index_e.html
Sample games without noise.
http://www.yss-aya.com/aobazero/no_noise/sample.html

"server closed connection"

Hi.
I am willing to contribute my hardware to this project, however i don't have a good network connection to the remote server... When I download the weight file, the speed is only 1MB/min.
Though the speed is slow, I can wait until it finishes downloading. However I find that the server always close and restart the connection every 10 minutes, and the weight file would never be downloaded with this period...
Any measure could help?
reconnect

マルチスレッドのNUMA対応について

実用的な意味ではほぼジョークIssueです。(削除頂いて構いません)
手持ちの40コア80スレッドのマシンで1.5 cpu onlyバイナリで対戦させてみたところ
NUMAをまたぐCPUを使えていません。
CPUで100npsを超えてみたいのですが(笑)

棋譜生成は80スレッドに負荷が入りました。

レートの計測を自己対戦からKristallweizenに

レートの計測を自己対戦からKristallweizenとの対戦に変更しました。

今までは一つ前のweightとの自己対戦で棋力を測っていたのですが
w580から2019年CSA選手権準優勝のKristallweizenの1手50kノード固定、との結果に変更しました。

これは1つ前のweightとの対戦ではKristallweizen相手の棋力の向上を認識できていないためです。
1日でレートが大きく上昇していた初期ならともかく、これだけ上昇が遅いと厳しい感じです。
自己対戦だと3つどもえ(AがBに勝ち、BがCに勝ち、CはAに勝つ)の心配もあります。
Krsitallweizenとだけ、も相性問題はあるとは思いますが。
勝率が7割を超えれば100k,200k,と上げていきます。w585、w590、と5万棋譜追加ごとに調べます。

グラフの緑色の「vs Kristallweizen 50k」がそれです。
ELOの数値は右側の軸になります。
floodgateと同じ基準です。「Kristallweizen 50k」を2600点と仮定してます。

「self-play」「vs Kristallweizen 50k」はweightの強さのみのグラフで、
「floodgate」は探索部も含めた強さです。
w537からfloodgateがポンと+300ほど上がっているのはMCTSで初期値を負け(-1)にしたことと探索木の再利用を
したことによる上昇です。探索木の再利用をすると Krist_100k 相手だと +57 Elo程度強くなるようです。
再利用はまだaobaz9(v1.2)には入ってないです。
floodgateは毎回全体が動く、対局数が80局ぐらいで誤差が大きい、その時の対戦相手で大きく変わる、
ので小さな変動は分からないとは思います。

「vs Kristallweizen 50k」のレートは600局から800局の結果です。
やねうら王の互角定跡集を使って、24手まで進め1つの局面を先後交互、で
600局ほどで測っています。定跡は毎回シャッフルしています。
KristallweizenはYaneuraOu-4.83との組み合わせで、下のオプションです。

setoption name BookMoves value 0
setoption NodesLimit value 50000

w595-Kris_50k 676-3-320 999 (0-3-2)(s=496-500,0.498) ,0.678(0.029)(+129)
w590-Kris_50k 518-7-305 830 (1-6-2)(s=417-406,0.507) ,0.628(0.033)( +91)( +91)
w585-Kris_50k 483-2-318 803 (1-2-0)(s=398-403,0.497) ,0.603(0.034)( +72)( +72)
w580-Kris_50k 512-6-294 812 (1-6-0)(s=403-403,0.500) ,0.634(0.033)( +95)( +95)
w574-Kris_50k 390-8-204 602 (1-7-5)(s=300-294,0.505) ,0.654(0.037)(+111)(+111)
w564-Kris_50k 354-3-250 607 (0-3-3)(s=294-310,0.486) ,0.585( )( +60)( +60)
w554-Kris_50k 341-3-267 611 (0-3-2)(s=298-310,0.490) ,0.560(0.039)( +42)( +42)
w544-Kris_50k 341-4-257 602 (0-4-1)(s=300-298,0.501) ,0.569 ( +48)( +48) w538からaobaz9
w534-Kris_50k 307-4-291 602 (0-4-5)(s=297-301,0.497) ,0.513(0.040)( +9)( +9)
w524-Kris_50k 318-3-308 629 (2-3-1)(s=319-307,0.510) ,0.508(0.039)( +5)( +5)
w514-Kris_50k 331-7-374 712 (0-6-4)(s=352-353,0.499) ,0.470(0.037)( -21)( -21)
w504-Kris_50k 261-2-366 629 (0-2-4)(s=296-331,0.472) ,0.417(0.039)( -58)( -58)
w494-Kris_50k 199-5-397 601 (1-5-1)(s=304-292,0.510) ,0.335(0.038)(-118)(-118)
w484-Kris_50k 204-5-399 608 (0-5-4)(s=308-295,0.511) ,0.340(0.038)(-115)(-115)
w474-Kris_50k 232-3-413 648 (0-3-3)(s=317-328,0.491) ,0.360(0.037)( -99)( -99)
w474-Kris_20k 582-1-228 811 (1-1-3)(s=405-405,0.500) ,0.718(0.031)(+162) 20kだと w474とw464は +330差
w474-Kris_10k 650-2- 92 744 (0-2-0)(s=371-371,0.500) ,0.875(0.024)(+338)
w464-Kris_50k 40-0-572 612 (0-0-0)(s=302-310,0.493) ,0.065(0.020)(-462) w465から0.001, 50k だと +363差
w464-Kris_20k 168-2-444 614 (0-1-3)(s=315-297,0.515) ,0.275(0.035)(-168)(-429)
w464-Kris_10k 362-1-282 645 (0-1-0)(s=330-314,0.512) ,0.562(0.038)( +43)
w464-Kris_1k 16-0- 0 16 (0-0-0)(s= 8- 8,0.500) ,1.000(0.000)( )
w454-Kris_10k 300-2-331 633 (0-2-0)(s=328-303,0.520) ,0.476(0.039)( -17)(-489)
w444-Kris_50k 89-1-540 630 (0-1-0)(s=310-319,0.493) ,0.142(0.027)(-312) w448までは2000棋譜ごとに更新。10万棋譜だと50飛ぶ
w444-Kris_10k 498-0-244 742 (0-0-2)(s=359-383,0.484) ,0.671(0.034)(+123)(-349)
w434-Kris_10k 508-3-225 736 (0-3-1)(s=374-359,0.510) ,0.692(0.033)(+140)(-332)
w424-Kris_10k 475-5-242 722 (0-5-1)(s=341-376,0.476) ,0.661(0.035)(+116)(-356)
w400-Kris_10k 454-2-216 672 (0-2-1)(s=330-340,0.493) ,0.677(0.035)(+128)(-344)
w350-Kris_10k 505-2-363 870 (0-2-3)(s=430-438,0.495) ,0.582(0.033)( +57)(-415)
w300-Kris_10k 1003-9-778 1790(0-9-4)(s=923-858,0.518) ,0.563(0.023)( +43)(-429)
w250-Kris_10k 831-7-944 1782(0-7-2)(s=883-892,0.497) ,0.468(0.023)( -22)(-494)
w200-Kris_10k 320-0-395 715 (0-0-4)(s=351-364,0.491) ,0.448(0.036)( -36)(-508)
w150-Kris_10k 84-0-684 768 (0-0-2)(s=390-378,0.508) ,0.109(0.022)(-364)(-836)
w150-Kris_5k 303-1-608 912 (0-0-1)(s=447-464,0.491) ,0.333(0.031)(-120)
w150-Kris_1k 725-2-272 999 (0-1-5)(s=499-498,0.501) ,0.727(0.028)(+169)
w100-Kris_10k 34-0-965 999 (0-0-0)(s=497-502,0.497) ,0.034(0.011)(-581)
w100-Kris_5k 100-0-880 980 (0-0-0)(s=484-496,0.494) ,0.102(0.019)(-377)
w100-Kris_5k 95-1-764 860 (0-1-0)(s=421-438,0.490) ,0.111(0.021)(-361)
w100-Kris_1k 437-1-561 999 (0-1-1)(s=503-495,0.504) ,0.438(0.031)( -43)

v1.2への修正に伴う変化

今回の修正で棋譜の特性がかなり変わりました。1万局ぐらいの平均です。

          aobaz8 aobaz9
勝率         0.610 0.528
Rootで試した手の数   42.8   13.5
平均手数        115.5  132.6
引き分け(1000局中)   11.2  23.7

目立つのは勝率で0.610から0.528まで急激に互角に近づきました。
0.52程度は現在の棋力(アマ5段)では正しい数値だと思います。
やはり以前のは30手後の局面が先手有利に増幅されていたのでしょう。

Rootで試した手の数も42手から13手と激減しています。
cINITが倍になってるので、より多くの手を試すようになってる
はずですが、それよりも初期値-1による効果が大きそうです。

平均手数も115手から132手に上がってます。
直観的には「-m 30」でばらける時に、ひどい悪手が選ばれにくくなったせいかと思います。

引き分けが11局から23局に増えてるのは互角の展開が増えたことによる512手超え
かと思われます。棋力が上がったことによる千日手が増えてせいかもしれません。
(どちらの要因かは未確認)。
AobaZeroでは27点法(同点は後手勝)を採用してるので通常の将棋(持将棋は0.3%程度)
より、もっと出現率が少ないはずなのですが。23局全部だと、2%が引き分けです。

floodgate では AobaZero_w537_n_p800 からv1.2を使っています。
また探索木の再利用もしています(これは現在テスト中で近日中に組み込みます)。
v1.2の変更で+240、探索木の再利用で+130、合計+370ほど自己対戦では強くなる計算です。
floodgateでは +368 ほど強くなったように見えます。これはネットワークよりも
ほぼ探索部の変更によるものです。

AobaZero_w537_n_p800 2910
AobaZero_w529_n_p800 2542

AobaZero_w537_n_p800
http://wdoor.c.u-tokyo.ac.jp/shogi/view/show-player.cgi?user=AobaZero_w537_n_p800

強くなっていますが、「-n」オプションをつけたことによるRootでのノイズの影響が
かなり小さくなって、同一の棋譜になってしまうケースが多いようです。
floodgateでは
「aobaz -p 800 -n -q -w weight_save/w000000000537.txt」
というオプションで動かしています。

評価値は勝率をponanzaの山本さんの式を元に変換しています。

Ponanzaは評価値と勝率に以下の式の関係があると仮定して学習しています。
大体300点くらいで勝率6割、800点で勝率8割くらいです。
https://twitter.com/issei_y/status/589642166818877440

今回のMCTSの勝率の初期値の変更はMiacisさんのブログで言及されていたのが
気づいた理由です(山岡さんのブログでも書かれていた気がします)。

Policyの教師信号を分布にする (選手権参加のMiacisさんのブログ)

AlphaZeroはValueを[0, 1]の範囲に直して探索している
AlphaZeroの0初期化は負けの値だという気になる言及あり
https://tokumini.hatenablog.com/entry/2019/05/22/180000
https://tokumini.hatenablog.com/entry/2019/04/08/180000

pcutにおける、未展開の手の勝率(value)の値は 0(引き分け)ではなく -1(負け)らしいです。

Yes, all values are initialized to loss value.
http://talkchess.com/forum3/viewtopic.php?f=2&t=69175&start=70#p781765
投稿者の matthewlai さんはAlphaZeroの一員です(Matthew Lai)。

LCZeroのブログでも初期値は負け(-1)の記述があります。

First Play Urgency value is known now. It's -1!
https://blog.lczero.org/2018/12/alphazero-paper-and-lc0-v0191.html

pseudocode.py にも下の記述があります(AlphaZeroは探索内部では +1,0,-1 でなく 0,+1 らしいです)
if self.visit_count == 0: return 0

2016年のAlphaGo論文では下記の記述から [-1, +1] なので
2018年論文も [-1, +1] じゃないか?と判断していました。

Mastering the Game of Go with Deep Neural Networks and Tree Search(2016年 AlphaGo)

AlphaGo resigns when its overall evaluation drops below an estimated 10%
probability of winning the game, i.e. max Q(s,a) < -0.8

ただ、2017年10月のAlphaGoZero論文では下記の記述があり、

"The value v is a scalar evaluation, estimating the probability of the current player winning from positions."

おそらく2016年の論文では [-1 <= x <= +1] だったのが2017年の論文では [0 <= x <= +1] に
変更になったようです。

2018年12月に公開された pseudocode.py が正しい、と判断しました。
pseudocode.py 内部は [0, +1] で AobaZeroでは [-1, +1] なので
それに応じて cINIT の値(1.25)も2倍にしています。

A general reinforcement learning algorithm that masters chess, shogi, and Go through self-play
に含まれるSupplementary Materials
https://science.sciencemag.org/content/suppl/2018/12/05/362.6419.1140.DC1
pseudocode.py が含まれるzip
https://science.sciencemag.org/highwire/filestream/719481/field_highwire_adjunct_files/1/aar6404_DataS1.zip

A question about the opening move in the self-play games of v1.3

Hi!
After v1.3 released, I generated 28 self-play games and when I observe the .csa files, I found that for the 1st move, 2726FU has the highest playouts in all the 28 games. However, AobaZero selects 7776FU in 4 games and 3938GI in other 24 games --- 2726FU is never selected when it always has the highest playouts. This phenomenon is totally different from v1.2.
Is this a feature caused by the recently implemented tree-reuse?
csa.zip

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.