『宮本定跡2020』の公開 | 宮本憲一メール | 2020年 1月 1日(水)08時29分55秒
|
一二三羽生善治の大逆転将棋2020 羽生ひふ... | おせら | 2020年 1月 4日(土)12時58分42秒
|
山下様へのお願い | 宮本憲一メール | 2020年 1月11日(土)15時21分45秒
|
Self attention | zakki | 2020年 1月14日(火)21時57分27秒
|
Re: Self Attention | ohto | 2020年 1月15日(水)20時30分14秒
|
Re: Self Attention | zakki | 2020年 1月16日(木)12時28分31秒
|
(無題) | 最新weightファイル | 2020年 1月26日(日)19時58分13秒
|
Re: 最新weightファイル | 山下 | 2020年 1月27日(月)19時33分51秒
|
コンピュータ将棋選手権の締め切りは1月3... | 山下 | 2020年 1月30日(木)23時22分21秒
|
LZのデータセットを50万棋譜毎にスライド... | oubeika | 2020年 2月 1日(土)08時28分55秒
|
最新weightファイル | 匿名 | 2020年 2月 1日(土)17時40分18秒
|
Re: LZのデータセットを50万棋譜毎にスラ... | 山下 | 2020年 2月 1日(土)20時56分14秒
|
Re: 最新weightファイル | 山下 | 2020年 2月 1日(土)20時58分32秒
|
Re: LZのデータセットを50万棋譜毎にスラ... | oubeika | 2020年 2月 3日(月)21時01分34秒
|
Re: LZのデータセットを50万棋譜毎にスラ... | zakki | 2020年 2月 3日(月)22時37分0秒
|
Re: LZのデータセットを50万棋譜毎にスラ... | 山下 | 2020年 2月 3日(月)23時37分2秒
|
Re: LZのデータセットを50万棋譜毎にスラ... | zakki | 2020年 2月 4日(火)00時48分48秒
|
Re: LZのデータセットを50万棋譜毎にスラ... | 山下 | 2020年 2月 4日(火)01時39分37秒
|
(無題) | zakki | 2020年 2月 4日(火)08時36分15秒
|
LZの学習率 | 山下 | 2020年 2月 4日(火)11時11分29秒
|
Re: LZの学習率 | zakki | 2020年 2月 4日(火)13時32分52秒
|
Re: LZの学習率 | oubeika | 2020年 2月 4日(火)17時49分54秒
|
Re: LZの学習率 | 山下 | 2020年 2月 5日(水)00時23分41秒
|
Re: LZの学習率 | 山下 | 2020年 2月 5日(水)22時18分3秒
|
(無題) | 48 | 2020年 2月10日(月)15時56分45秒
|
LZのLCB | 山下 | 2020年 2月11日(火)04時05分47秒
|
Re: LZの学習率 | 山下 | 2020年 2月11日(火)05時08分28秒
|
(無題) | 48 | 2020年 2月11日(火)06時53分51秒
|
Stochastic Weight Averaging(SWA) | 山下 | 2020年 2月11日(火)07時59分15秒
|
囲碁でのplayoutとValueの精度 | 山下 | 2020年 2月11日(火)08時27分58秒
|
囲碁の将棋のPolicy,Valueのloss | 山下 | 2020年 2月11日(火)08時28分45秒
|
valueのターゲット | ohto | 2020年 2月13日(木)08時31分39秒
|
Re: valueのターゲット | 山下 | 2020年 2月13日(木)20時50分0秒
|
Re: Re: valueのターゲット | ohto | 2020年 2月14日(金)14時28分18秒
|
KataGo 1.3.2 対 Leela Zero 263 | 山下 | 2020年 2月25日(火)22時19分56秒
|
floodgateの256手引き分け | 山下 | 2020年 3月 6日(金)03時09分0秒
|
(無題) | 48 | 2020年 3月 6日(金)15時28分46秒
|
宣言勝ちが上手くなってる? | 山下 | 2020年 3月 6日(金)20時54分41秒
|
yss-aya.comが見えない場合 | 山下 | 2020年 3月 8日(日)08時22分47秒
|
Re: Stochastic Weight Averaging(SWA) | 山下 | 2020年 3月16日(月)09時01分29秒
|
次期ver | tns | 2020年 3月18日(水)10時09分32秒
|
Re: 次期ver | 山下 | 2020年 3月19日(木)05時37分51秒
|
ネットワークの有効数字は2桁でも十分? | 山下 | 2020年 3月20日(金)18時15分24秒
|
絶芸がシチョウを逃げて勝った碁 | 山下 | 2020年 3月20日(金)20時08分36秒
|
Re: ネットワークの有効数字は2桁でも十分? | 48 | 2020年 3月25日(水)13時05分35秒
|
Re: ネットワークの有効数字は2桁でも十分? | 山下 | 2020年 3月25日(水)16時14分21秒
|
fp16 | zakki | 2020年 4月10日(金)18時57分29秒
|
Re: fp16 | 山下 | 2020年 4月11日(土)02時12分58秒
|
Re: fp16 | zakki | 2020年 4月11日(土)09時06分52秒
|
Re: fp16 | 山下 | 2020年 4月11日(土)13時51分1秒
|
CGOSの9路でGnugo-3.7.10-a1だけCross-Ta... | 山下 | 2020年 4月23日(木)22時16分43秒
|
コンピュータ将棋のオンライン大会 | 山下 | 2020年 5月 2日(土)21時41分0秒
|
1日目の結果 | 山下 | 2020年 5月 4日(月)04時43分21秒
|
2日目の結果 | 山下 | 2020年 5月 5日(火)05時59分39秒
|
AobaZeroは去年より+955ほど強く | 山下 | 2020年 5月 5日(火)06時33分44秒
|
GLOBIS-AQZが公開 | 山下 | 2020年 5月11日(月)22時44分43秒
|
AobaZeroは将棋は点数で勝つゲームと思っ... | 山下 | 2020年 5月14日(木)10時33分36秒
|
宣言勝ち | 伊和 | 2020年 5月15日(金)20時16分14秒
|
Re: 宣言勝ち | 山下 | 2020年 5月16日(土)02時29分45秒
|
Re: AobaZeroは将棋は点数で勝つゲームと... | 山下 | 2020年 5月16日(土)05時13分58秒
|
(無題) | 48 | 2020年 5月18日(月)13時29分51秒
|
Re: AobaZeroは将棋は点数で勝つゲームと... | 山下 | 2020年 5月19日(火)23時27分36秒
|
(無題) | 48 | 2020年 5月21日(木)11時18分51秒
|
ポーカーAIが人間のプロと対戦したログ | 山下 | 2020年 6月11日(木)08時16分31秒
|
CGOSのELFv2を二人目のアンカーに | 山下 | 2020年 6月12日(金)14時10分55秒
|
スターティングハンドによるレイズの割合 | 山下 | 2020年 6月24日(水)10時38分57秒
|
AobaZeroのColabが5倍ほど速く | 山下 | 2020年 6月29日(月)17時47分39秒
|
Re: AobaZeroのColabが5倍ほど速く | 48 | 2020年 6月30日(火)13時13分47秒
|
Re: AobaZeroのColabが5倍ほど速く | 山下 | 2020年 6月30日(火)14時38分26秒
|
宣言勝ち | 48 | 2020年 7月 1日(水)13時03分57秒
|
Re: 宣言勝ち | 山下 | 2020年 7月 1日(水)15時06分35秒
|
Lcbとは何ですか? | 灰色猫メール | 2020年 7月 3日(金)12時31分16秒
|
(無題) | 48 | 2020年 7月 3日(金)12時46分36秒
|
Re: Lcbとは何ですか? | 山下 | 2020年 7月 3日(金)16時59分58秒
|
CGOSの最高レーティングの推移 | 山下 | 2020年 7月 3日(金)17時18分32秒
|
有難うございます | 灰色猫メール | 2020年 7月 3日(金)20時29分41秒
|
CGOS9路 | zakki | 2020年 7月 3日(金)23時28分11秒
|
Re: CGOS9路 | 山下 | 2020年 7月 4日(土)03時12分43秒
|
Re: CGOS9路 | zakki | 2020年 7月 4日(土)08時06分23秒
|
CGOS 9路の互角相手の黒の勝率と持碁の割合 | 山下 | 2020年 7月 4日(土)11時44分38秒
|
AobaZeroの学習率を0.00002に下げました | 山下 | 2020年 7月 8日(水)11時06分2秒
|
電竜戦 第2回予行演習 | 山下 | 2020年 7月21日(火)22時53分46秒
|
Synchronized Batch Normalization | 48 | 2020年 7月29日(水)18時42分40秒
|
Re: Synchronized Batch Normalization | 山下 | 2020年 7月29日(水)21時36分22秒
|
(無題) | 48 | 2020年 8月 3日(月)06時42分56秒
|
AobaZeroの学習 | 山下 | 2020年 8月 3日(月)19時40分7秒
|
△91馬(19)と馬をタダで取られる | 山下 | 2020年 8月 3日(月)20時04分27秒
|
(無題) | nn | 2020年 8月 3日(月)22時40分10秒
|
(無題) | 48 | 2020年 8月 4日(火)08時03分24秒
|
Re: △91馬(19)と馬をタダで取られる | 山下 | 2020年 8月 4日(火)20時20分6秒
|
宣言勝ちは先手の方が簡単? | 山下 | 2020年 8月 4日(火)20時28分21秒
|
10000棋譜ごとの自己対戦での宣言勝ちの棋... | 山下 | 2020年 8月13日(木)12時50分46秒
|
Re: 10000棋譜ごとの自己対戦での宣言勝ち... | 山下 | 2020年 8月16日(日)22時28分47秒
|
18の角でも | 48 | 2020年 8月17日(月)00時37分34秒
|
Re: 18の角でも | 山下 | 2020年 8月17日(月)06時41分51秒
|
Re: 10000棋譜ごとの自己対戦での宣言勝ち... | 48 | 2020年 8月18日(火)17時23分29秒
|
Re: 10000棋譜ごとの自己対戦での宣言勝ち... | 山下 | 2020年 8月20日(木)00時07分30秒
|
(無題) | 48 | 2020年 8月20日(木)15時06分19秒
|
KataGoが1.6.0になってCPU版に対応 | 山下 | 2020年 8月24日(月)15時58分7秒
|
AobaZeroの紹介記事 | 山下 | 2020年 8月24日(月)16時05分23秒
|
value net 再挑戦 | HiraBot | 2020年 8月26日(水)15時37分12秒
|
CGFオープンが10月10日(土)、11日(日)に開催 | 山下 | 2020年 8月30日(日)12時06分23秒
|
KataGoのKataは日本語の「型」 | 山下 | 2020年 9月 8日(火)19時42分4秒
|
自己対戦と、対Kristallweizenとの宣言勝... | 山下 | 2020年 9月11日(金)13時00分0秒
|
技巧2を基準にしたAobaZeroのレート | 山下 | 2020年 9月11日(金)20時07分47秒
|
AlphaZeroは思考時間が長いと先手勝率が高い | 山下 | 2020年 9月11日(金)20時09分7秒
|
AWAKEの映画 | 山下 | 2020年 9月15日(火)22時33分29秒
|
互角局面集を使うとAobaZeroは +150 ELOほ... | 山下 | 2020年 9月18日(金)19時25分46秒
|
プロ棋士とfloodgateのレート | 山下 | 2020年 9月27日(日)22時00分30秒
|
(無題) | 48 | 2020年 9月28日(月)11時54分22秒
|
Re: プロ棋士とfloodgateのレート | 山下 | 2020年 9月28日(月)23時04分46秒
|
2020 World Artificial Intelligence Go ... | 山下 | 2020年 9月30日(水)03時35分39秒
|
Re: CGFオープンが10月10日(土)、11日(日... | 山下 | 2020年10月 1日(木)16時12分12秒
|
CGFオープンの結果 | 山下 | 2020年10月12日(月)06時55分17秒
|
Re: CGFオープンの結果 | zakki | 2020年10月13日(火)21時08分48秒
|
Re: CGFオープンの結果 | 山下 | 2020年10月14日(水)08時43分58秒
|
KataGoの自己対戦の学習棋譜 | 山下 | 2020年10月14日(水)08時46分3秒
|
Re: CGFオープンの結果 | zakki | 2020年10月14日(水)12時26分28秒
|
Re: CGFオープンの結果 | 山下 | 2020年10月14日(水)15時00分18秒
|
LeelaZeroのshuffle buffer | 山下 | 2020年10月14日(水)15時01分45秒
|
AobaZeroの棋譜で | 48 | 2020年10月18日(日)14時26分55秒
|
Re: AobaZeroの棋譜で | 山下 | 2020年10月18日(日)16時13分29秒
|
(無題) | 48 | 2020年10月18日(日)22時52分18秒
|
LeelaZero | zakki | 2020年10月20日(火)21時51分15秒
|
Re: LeelaZero | 山下 | 2020年10月20日(火)22時43分16秒
|
(無題) | 48 | 2020年10月21日(水)14時52分13秒
|
KataGo vs Golaxy | 山下 | 2020年10月21日(水)20時40分59秒
|
AobaZeroのWindows版が5倍程速く | 山下 | 2020年10月23日(金)08時38分43秒
|
AobaZeroの自己対戦で投了するように | 山下 | 2020年10月24日(土)10時12分9秒
|
SAI、20x256への移行をあきらめる | 山下 | 2020年10月25日(日)10時29分35秒
|
Re: SAI、20x256への移行をあきらめる | zakki | 2020年10月26日(月)20時16分22秒
|
Re: SAI、20x256への移行をあきらめる | 山下 | 2020年10月27日(火)10時04分9秒
|
アナザーストーリーズ「名人がAIに負け... | 山下 | 2020年11月10日(火)14時33分8秒
|
GPW2020の論文が公開されています | 山下 | 2020年11月10日(火)17時57分46秒
|
Re: GPW2020の論文が公開されています | zakki | 2020年11月10日(火)21時54分51秒
|
Re: GPW2020の論文が公開されています | 山下 | 2020年11月11日(水)10時26分46秒
|
KataGoの論文が微修正 | 山下 | 2020年11月12日(木)13時15分24秒
|
Re: GPW2020の論文が公開されています | zakki | 2020年11月13日(金)18時16分33秒
|
電竜戦の締め切りは15日まで | 山下 | 2020年11月13日(金)21時42分50秒
|
KataGo独自の手法の解説 | 山下 | 2020年11月16日(月)13時16分38秒
|
Re: KataGoの論文が微修正 | zakki | 2020年11月16日(月)13時22分53秒
|
Re:電竜戦の締め切りは15日まで | うさぴょんの育ての親 | 2020年11月16日(月)13時23分33秒
|
Re:電竜戦の締め切りは15日まで | 山下 | 2020年11月16日(月)15時24分38秒
|
SkipInit | zakki | 2020年11月20日(金)10時35分24秒
|
Re: SkipInit | 山下 | 2020年11月20日(金)17時38分19秒
|
野田さんのGPWのNNUEがstokfishに移植され... | 山下 | 2020年11月20日(金)17時45分22秒
|
Re: SkipInit | zakki | 2020年11月20日(金)22時06分15秒
|
Re: SkipInit | 山下 | 2020年11月20日(金)23時23分5秒
|
Google ColabでAobaZeroがコンパイル失敗 | 山下 | 2020年11月22日(日)08時47分13秒
|
AobaZeroのv1.7をリリース | 山下 | 2020年11月25日(水)10時40分59秒
|
AobaZeroの棋譜の二次配布について | 加納 | 2020年11月25日(水)22時24分49秒
|
Re: AobaZeroの棋譜の二次配布について | 山下 | 2020年11月26日(木)01時16分28秒
|
Re: AobaZeroの棋譜の二次配布について | 加納 | 2020年11月26日(木)01時28分54秒
|
Re: AobaZeroの棋譜の二次配布について | 加納 | 2020年11月26日(木)20時43分37秒
|
2020 World Artificial Intelligence Go ... | 山下 | 2020年12月 1日(火)13時08分2秒
|
現在のAobaZeroの対elmoの勝率 | 山下 | 2020年12月 3日(木)22時17分46秒
|
詰みの局面で、評価値が反転? | nn | 2020年12月 6日(日)05時03分35秒
|
詰みの局面で、評価値が反転? | 山下 | 2020年12月 7日(月)01時57分7秒
|
マルチGPU | 48 | 2020年12月11日(金)17時15分0秒
|
Re: マルチGPU | 山下 | 2020年12月11日(金)17時50分31秒
|
w800とSWA | nn | 2020年12月13日(日)02時02分18秒
|
Re: w800とSWA | 山下 | 2020年12月13日(日)11時54分37秒
|
KataGoのユーザ参加版 | 山下 | 2020年12月23日(水)19時20分54秒
|
AobaZeroのweightの更新を10000棋譜から3... | 山下 | 2020年12月28日(月)10時38分28秒
|
DeepMind’s MuZero picks up the rules ... | おせら | 2020年12月30日(水)15時24分36秒
|
皆様、明けましておめでとうございます。
1998年から、ほとんど男性プロ棋士の指した棋譜のみを登録した、無料柿木将棋用定跡ファイル
『宮本定跡』の2020年版が106万手を超えました。
「一般型」と「従来型」がありますが、多くの方が「一般型」を面白いと感じる見込みです。
ご意見、ご感想等、お寄せください。
http://jyouseki.g1.xrea.com/
私的検討してみました。著作権等問題あるようでしたら消してください。
一二三羽生善治の大逆転将棋2020
羽生ひふみん三番勝負 第3ラウンドオセロ
羽生善治53-11加藤一二三(敬称略)
f5f4e3d6e6g5g6f6c4b4e7h7g3f3h4e8h6h5h8h3g4g7h2e2f2g2c5c6g8f7f8d7d8c7c8b5b6h1g1d3c3f1e1d2d1a6a5b8a7b3c2c1b2a1b1a3a2b7a8a4
##:羽生善治 ():加藤一二三
一手目: ##
a b c d e f g h
1 |54|55|52|45|43|42|39|38| 1
2 |57|53|51|44|24|25|26|23| 2
3 |56|50|41|40| 3|14|13|20| 3
4 |60|10| 9|()|##| 2|21|15| 4
5 |47|36|27|##|()| 1| 6|18| 5
6 |46|37|28| 4| 5| 8| 7|17| 6
7 |49|58|34|32|11|30|22|12| 7
8 |59|48|35|33|16|31|29|19| 8
a b c d e f g h
白 2手目f4:緩手
黒 5手目e6:緩手 互角。 黒f3がbetter。
白 6手目g5:白f6も有力
黒 7手目g6:黒g4、黒c5も有力
黒 9手目c4:黒e7が有力 やや白よし
白10手目b4:敗着 白f3から行きたい。 以降形勢は終局まで黒よし
黒11手目e7:?どこへ打っても黒よしだが、黒d3あるいは黒g4では?
白12手目h7:悪手。白d3、白f7、白d7、白f3 どこへ打っても本譜よりはよい。
黒13手目g3:緩手。f5の白石を消したい。黒h5がbetter。
白14手目f3:悪手。黒がf5を消さなかったので白f7で黒e6を消し、黒g4を防ぐのが筋。
黒15手目h4:緩手。黒g4で黒f5に種石を作り黒d3を狙うのが筋。
白16手目e8:大悪手。白f7の1手で黒h6も黒g4も同時に防がなくてはならないが黒h6を放置した。
黒17手目h6:この1手。
白18手目h5:大悪手。白被害拡大。白1桁になる形勢。
黒19手目h8:この1手。
白20手目h3:悪手。白被害拡大。8か所打てるうちワースト2に入るのでは?64-0 黒+64(白全滅)
白30手目パス
黒36手目b5:4石損の悪手で白全滅回避。62-2 黒+60
白37手目b6:4か所打てる内で4石損の最悪手 64-0 黒+64(白全滅)
黒42手目f1:4石損の悪手で62-2 黒+60。白全滅回避。黒b8あるいは黒a5がbetter。
黒46手目a6:6石損の悪手で59-5 黒+54。ここに来て変調?
白47手目a5:6石損の悪手で62-2 黒+60。白b3がbetter
黒50手目b3:8石損の悪手で58-6 黒+52。黒a3がbetter。
黒52手目c1:18石損の大悪手で49-15 黒+34。黒a3の1手。
白53手目b2:20石損の大悪手で59-5 黒+54。白a2の1手。
黒58手目b7:12石損の大悪手で53-11 黒+42。
山下宏様へ
昔、山下様の棋力はアマチュア5段程度と、雑誌で読んだ記憶があります。
私は22年かけて100万手を超える柿木形式の定跡ファイルを作成しました。
大変おこがましいのですが、柿木将棋\に宮本定跡2020を導入したものと
戦っていただいたら、いい勝負になると思うのですが、やって結果を書き込んで
いただけないでしょうか。
ぜひ、ご検討ください。よろしくお願いします。
http://jyouseki.g1.xrea.com/
盤面上の遠くの情報取ってくるっていうので自然言語で流行ってるattentionを画像処理でも使うという話があるようです。
囲碁や将棋にも使えないでしょうか?
128フィルタの時、3*3畳み込みレイヤーと同じ計算コストで19*19のアテンションレイヤー行けるって言ってますが何故そうなるのかは理解出来てません。
https://arxiv.org/abs/1906.05909
http://jbcordonnier.com/posts/attention-cnn/
どんなゲームでも全てのオブジェクトを固定長ベクトルで表してSelf-Attentionをとれば万能AIができるという考えは正統派だと思いますが、はっきり位置情報があるものに適用して成果が出れば面白いですね。
計算量の件、仮にQKVが全て全結合で作成、single headで相対位置考慮なしとすれば
画像サイズを H x W として一層の計算量が
3x3Conv
3 x 3 x 128 x 128 x H x W = 147456 x H x W
19x19SA
query, key, valueの計算 128 x 128 x 3 x H x W
query, key -> attention 128 x 19 x 19 x H x W
attention, value -> output 128 x 19 x 19 x H x W
計 141568 x H x W
のような比較になるのではないでしょうか。
なるほど、attentionとvalueの次元を勘違いしてました。
3*3畳み込みのスーパーセットにするのに9ヘッド必要って言ってるのはそういうことなんですね。
Relative Positional Encodingのところに囲碁のstringやdragonや将棋の利き情報追加して、幸せにならないですかね。
合計 5196088 棋譜。現在のweight番号= w871。貢献ありがとうございます!
?まだweightファイルがDLできないです。
確認お願い致します。
GPUの一時的なメモリ不足で変換に失敗していました。
手動で更新してweighgt、棋譜配布サーバにアップいたしました。
ご指摘ありがとうございました。
選手権の申し込み締め切りは31日までとなっています。
http://www2.computer-shogi.org/
去年12月のUEC杯で山下さんから「LZはデータセットを50万棋譜毎にスライドしている」といったことをお聞きしましたが、具体的にどのような方法なのかもう一度教えて頂けると嬉しいです。
気になっているのは以下の2つです。
1. 追加棋譜が50万局あることが前提で、まるごと入れ替えるのかどうか
2. そうでないとしたら、testデータはそのままでtrainデ−タだけを新しく追加して、古いtrainデータを後ろから消していくかどうか
よろしくお願いします!
最新weightファイル
現在のweight番号= w876。貢献ありがとうございます!
また最新weight fileが落ちてこない感じです。
最近サバの調子が悪そうですね。大丈夫でしょうか。
すみません、具体的な手順はよく分からないです。
ここだと50万から75万に増やす、とありますが。
https://github.com/leela-zero/leela-zero/issues/2560
AobaZeroだと20分毎に約200棋譜を追加して古い200棋譜を捨てて、合計50万棋譜、という仕様になっています。
1棋譜(約120局面)あたり128mini-bacthだと1回学習させてます。
testは使わずに全部のデータをtrainとして扱っています。
w876を手動で更新しました。
少しGPUを使うプログラムが多すぎたので減らしました。
ご指摘ありがとうございました。
>山下さん
50万から75万に増やすというのは、LZサーバーのネットワーク(例えばLZ258とか)がセルフプレイ棋譜を生成する最大数(window_size?)だと思います。
LZのネットワークを生成する部分の情報少ないですよねー。
> The replay buffer is a ?xed-capacity FIFO queue of game records.
ELF OpenGoだとFIFOキューで実装しててAGZとAZの比較のあたりを見ると50万棋譜単位じゃなくて順次差し替えてるような気がします。
たしかに情報少ないですよね・・・。詳細はコードみてね、というスタンスなのだとは思いますが。
私もLZの棋譜を使ってAobaZeroで使ってるやり方と、LZのtraining/tf/parse.py を使って
二通りで学習させてみました。
LZだとここにある棋譜で
https://leela.online-go.com/training/
例えば train_a8ed7652.zip を
unzipで展開して、(それ以上の*.gzは展開しない)
python3 training/tf/parse.py /home/yss/go/LZ_sgf/gz/train_a8ed7652
としてやれば、この棋譜での学習が開始するようです。
python3 training/tf/parse.py /home/yss/go/LZ_sgf/gz/train_a8ed7652 leelaz-model-184000
で途中の状態から開始できるようです。
githubには
python3 training/tf/parse.py 6 128 /home/yss/go/LZ_sgf/gz/train_f01f55e0
でネットのサイズを指定できる、とありますがこれは古い情報で現在は直接ソースの
tfprocess.py で
self.RESIDUAL_FILTERS = 192
self.RESIDUAL_BLOCKS = 15
を変えないとダメなようです。
AobaZeroのやり方で直近の400万棋譜を2週間ほど192x15bで学習させてみたのですが、
lizzieに付属する192x15bのネットに1playoutで15%しか勝てず、強さを再現するだけでも苦戦しています。
> githubには
> python3 training/tf/parse.py 6 128 /home/yss/go/LZ_sgf/gz/train_f01f55e0
> でネットのサイズを指定できる、とありますがこれは古い情報で現在は直接ソースの
これはたぶんmasterブランチの話だと思いますが、トップページのデフォルトはnextブランチになっていて
python3 training/tf/parse.py 6 128〜もそっちでは指定できます。
ほんとだ、いろいろ追加されていますね。
https://github.com/leela-zero/leela-zero/blob/next/training/tf/parse.py
見るべきはnextブランチでしたか・・・。
あと、複数のファイル群を同時に学習させるには
train_a8ed7652_0.gz
train_a8ed7652_1.gz
...
train_f01f55e0_0.gz
train_f01f55e0_1.gz
...
などを
train_all_0.gz
train_all_1.gz
...
と連番に変換するしか方法ないのでしょうか?
ついでに関係ないですが、Training Dataの仕様上では
「each 361 bits longs」と石の配置は361bit、と書いてあるのですが
実際は最初の360bitは正しいのですが、最後の1bitだけ364bit目に書いてあります。
そのため最初は盤の右隅だけ打たない変な棋譜を作っていました。
学習部の chunkparser.py はこれを補正して読んでいます。
https://github.com/leela-zero/leela-zero/blob/next/training/tf/parse.py#L49
glob.glob(data_prefix + "*.gz")
なので
python training/tf/parse.py 10 128 "train*/"
のような指定は出来ます。
自分では
def get_chunks(data_prefix):
return glob.glob(data_prefix + "*.gz", recursive=True)
にして、
python training/tf/parse.py 10 128 "train*/**/"
のようなことできるようにして使ってます。
強くするの難しいですね。特徴量追加した20x256で同じく20x256の#173に35%程度しか勝ててません。
> python training/tf/parse.py 10 128 "train*/"
なるほど!こういう指定の仕方が出来たのですか。ありがとうございます。
LZのbatch_sizeと学習率は下のような感じらしいです(issueを適当に検索した限りでは)。
去年の年末までの BS=96, LR=0.0001 は結構大きいな、という印象です。
# size games batch_size Learning rate
255 2019-12-20 b12e8925 40x256 17700000 96 0.00001
201 2019-01-13 cacf4cbf 40x256 11913297 96 0.0001
158 2018-07-28 dc011d01 20x256 8728635 128 0.00035
117 2018-04-09 ba748d40 15x192 6642917 256 0.0001 ?
58 2018-01-20 ed002cf3 6x128 2861140 512 ?
ただCaffeで学習させた結果だと 0.0001 より小さくしてもあまり強くならない感じです。
batch_size は96と64で違いますが。
LZ_15b_a4b5に対する勝率(1 playoutで1000局)と学習率
勝率 学習率
5% 0.0004
11% 0.0002
13% 0.0001
13% 0.00005
11% 0.000025
14% 0.0000125
14% 0.00000625
15% 0.000003125
14% 0.0000015625
batch_size : 64
weight_decay: 0.0001
400000 stepごとに学習率を半分に
ここだと正則化いらない、と書いてるので weight_decay は0なのかもしれないですが。
https://github.com/leela-zero/leela-zero/issues/2560#issuecomment-566478053
> I found to help a lot...is to get rid of regularization entirely.
ELFが10^-5で2Mミニバッチ学習しても強くならなかったとか、
#255がミニバッチ2048換算で0.00001/96*2048≒2*10^-4程度と考えると妥当っぽいですね。
40x256の時に
lost = policy x4 +mse x4 +reg にしたり https://github.com/leela-zero/leela-zero/issues/1681#issuecomment-420504901
policy x4 したり https://github.com/leela-zero/leela-zero/issues/1681#issuecomment-431552680
してたの、reg_termの影響は落としてるのかもしれません。
その後、どういうlossで学習してるのか見つけられてません。
BSKは以下のページを参考にして128000stepごとに学習率を変えて128000 × 3 = 384000stepを1つの世代として学習を進めています。
https://github.com/pangafu/LeelaMasterWeight/blob/master/How_to_Training_Yourself_Weight(CN).md
384000stepまで学習したらtraining/tf/net_to_model.pyを使って、txt形式のネットワークを初期値にしてチェックポイントを生成しています。
そして次に新しいチャンクデータを追加して、生成したチェックポイントから2世代目の学習を開始、というサイクルですね。
余談ですが、現在BSKはsaiプロジェクトに移行して最初から学習しています。
自己対戦 + 人間(戦闘狂only)の棋譜数50万弱(train 9 : 1 test)を1178000step学習させて野狐囲碁で8段弱くらいの実力のようです。
lossもpolicyを重視するように変えているのですか。
この辺も試す必要がありますか・・・。
そういえば parse.py に
BATCH_SIZE = 512
RAM_BATCH_SIZE = 128
とありますが、
BATCH_SIZE = 128、など RAM_BATCH_SIZE と同じにされてますか?
AobaZeroだと学習させたときのELOの上昇で比較すると
ミニバッチ 4096, 学習率 0.02, ELO上昇 +83 (mb=128, stepsize=32)
ミニバッチ 128, 学習率 0.0005, ELO上昇 +83
がほぼ同じぐらいでした。0.02 / (4096/128) = 0.000625 なのでだいたい同じでしょうか。
「棋譜番号252万から294万まで43万棋譜を学習(ほぼ棋力が一定の棋譜)」
ミニバッチ 4096, 学習率 0.02, ELO上昇 +83 (mb=128, stepsize=32)
ミニバッチ 4096, 学習率 0.02, ELO上昇 +81 (mb= 64, stepsize=64)
ミニバッチ 180, 学習率 0.001, ELO上昇 +70
ミニバッチ 128, 学習率 0.0002, ELO上昇 +132
ミニバッチ 128, 学習率 0.0005, ELO上昇 +83
ミニバッチ 64, 学習率 0.00001, ELO上昇 +140
ミニバッチ 64, 学習率 0.0001, ELO上昇 +158
ミニバッチ 64, 学習率 0.001, ELO上昇 -18
AlphaZeroだと0.0002まで下げてるので、LZももう少し下げても強くなる気が少しするのですが。
ミニバッチ 4096, 学習率 0.2 (囲碁は最初から0.02)
ミニバッチ 4096, 10万step,学習率 0.02
ミニバッチ 4096, 30万step,学習率 0.002
ミニバッチ 4096, 50万step,学習率 0.0002
そういえば今のLZはLCBで着手を選んでいるので、30手目以降で
打った手と訪問回数(確率)が最大の手が異なる場合は
実際の着手の確率を上げてやる、とかするといいのかもしれません。
素人考えですが,LCBを使うってのは相対的にpolicyよりvalueを信頼しているように思います。
間違ってますでしょうか?
> policyよりvalueを信頼
だと思います。
ソースを見ると2回以上探索してればLCBの値を使っているようです。
昔のMCTSのAyaでは探索回数でなく勝率の高い手を選ぶ、を試すと明らかに弱く、
結局、現在の最大回数と同じ回数まで全敗しても、勝率で上回るなら選ぶ、
で選んでいました。
LZのvalueはMCTSに比べると格段に信頼できるので、LCBが有効に
働くのかもしれません。
https://github.com/leela-zero/leela-zero/blob/next/src/UCTNode.cpp#L257
AlphaZero方式で、
最終的な勝敗でなく、「1手ごとの探索結果の勝率」を教師データに使う、
もしくは「1手ごとの勝率+最終的な勝率」の組み合わせをlossに使う
とか試されてると思うのですがあまり有名になってないところを見ると
うまくいかないのでしょうね・・・。
valueが信頼できるとしたら囲碁の局面評価が難しいと言った古典的難問はクリアされたように感じます。
もちろん相対的なものですが力ずくでカバーするのが今風でしょうか。
うまく言語化できてませんが,囲碁と将棋では探索で保証されるものの質が異なる気がしています。
LeelaZeroのTensorflowの学習コードを見てたら
SWA(Stochastic Weight Averaging)なる手法が使われてました。
ある程度の間隔のweightの平均を取るだけ、という手法らしいので
やってみたらAobaZeroでも効果ありました。
w848からw857までの10個の平均を取ったものが微差ですが今まで一番強くなってます。
勝 分 敗 局数 (宣 千 宣) 先手勝率 勝率 95% ELO
10個の平均 449- 4-347 800 (5- 4-1)(s=424-372,0.533) ,0.564(0.034)( +44)
w855-Kris_200k 412-15-373 800(13-15-3)(s=396-389,0.504) ,0.524(0.034)( +16)
w850-Kris_200k 414-11-375 800(10-11-0)(s=403-386,0.511) ,0.524(0.034)( +16)
w845-Kris_200k 410- 9-381 800 (8- 9-2)(s=378-413,0.478) ,0.518(0.034)( +12)
w840-Kris_200k 392-12-396 800(11-11-1)(s=418-370,0.530) ,0.498(0.034)( -1)
w835-Kris_200k 443- 9-348 800 (9- 9-1)(s=401-390,0.507) ,0.559(0.034)( +41)
w830-Kris_200k 435- 3-362 800 (9- 3-2)(s=416-381,0.522) ,0.546(0.034)( +31)
実際のSWAはBatch Normalizationの平均と分散は出来たweightを使って
再計算させる必要があるようで、LZでも200回バッチを回して計算してます。
w848.txt などの10個の平均を取るだけのコード(BNの再計算なし)
https://github.com/kobanium/aobazero/tree/develop/learn/swa
Stochastic Weight Averaging in PyTorch
https://pytorch.org/blog/stochastic-weight-averaging-in-pytorch/
> 囲碁の局面評価が難しい
今のLZなどは終盤のコウ争いの途中での半目勝負とかを相当正確に判断してると思います。
知識を利用したAyaのplayoutも少し前までは終盤だけは
NNのValueよりも正確だったのですが、今では最終盤でもほとんど負けてる感じです。
万年コウなどの特殊な形が出来たときぐらいでしょうか。
私の学習してる範囲だと囲碁の方がValue、Policyのlossが大きくて
学習が難しいようです。
囲碁の方が手数が長い = 初期局面など勝率0.5近いのが多いのでlossが大きくなる
囲碁の方が平均可能手が多い = やっぱりlossが大きくなる?
なので当然かもしれませんが・・・。
Value Loss Policy Loss
囲碁 0.4005 1.8503 LeelaZeroの直近400万棋譜。学習率0.00005, mini_batch=64, 192x15b
将棋 0.3133 1.3607 AobaZero の直近 50万棋譜。学習率0.0002, mini_batch=64, 256x20b
*Value Lossは2倍したらAlphaZeroのlossと一致します。
valueのターゲットに探索結果を使うのは、データが少ない時には有効だと思われますし、実際にそういう適用の論文を見たことはあります。
ただし、勝敗をターゲットにするのと価値をターゲットにするのではMSEの勾配の値が変わってくるので、それが総合的に見て良くないということはあるのかもしれません。
あと、ルートの探索結果よりは、「ルートの各手の探索結果と、遷移時の選択確率の内積」をターゲットにする方が直感的には自然な気がします。
> 「ルートの各手の探索結果と、遷移時の選択確率の内積」
これは下のような場合に、Valueではなく内積(0.57 * 0.70 = 0.399) を
予測する感じでしょうか?
着手 探索評価値 選択回数 選択回数の割合 内積
A 0.57 700回 0.70 (0.57 * 0.70)
B 0.55 200回 0.20 (0.55 * 0.20)
C 0.52 100回 0.10 (0.52 * 0.10)
個々の手の探索評価値を直接予測する方法とかもありそうですか。
あ、出力のことではなくVの学習ターゲットの話です!
ルートの手は最善手を探すためにノイズやらのexplorationの仕組みを加えているはずで、
最終的に温度0でベストの手を選ぶならばベストな手のQ値を学習ターゲットとする方が勝敗の近似としては自然に思えます。
Q値系の値を学習するのと方策、状態価値を学習するのは強化学習ではある程度等価に近いことだと思うのですが、
確定性のボードゲーム系では状態価値を予測する方が基本有利でしょうね。
プレイアウト数を固定で強さを調べてみました。
playout数/手 KataGo 1.3.2 の勝率
1 0.444 (1000局、どちらも 1スレッド)
10 0.539 (1000局、どちらも 1スレッド)
100 0.679 (1000局、どちらも 4スレッド)
1000 0.686 ( 344局、どちらも 4スレッド)
10000 0.624 ( 157局、どちらも10スレッド)
1手1playoutではLeelaZeroの方が強いのですが、増えるとKataGoが逆転します。
Policyの精度はLeelaZeroの方がまだ少し上なのですがValueの精度はKataGoが
上なのかもしれません。
KataGoはv1.3.2 に付属の s1.91 (256x20b) でLeela Zeroは#263 (256x40b) です。
1局にかかる時間の平均は1手10000の時で下です(2080 Tiで。裏で色々動作中)
LeelaZero 1643秒 (OpenCL版)
KataGo 1365秒 (OpenCL版)
CUDA版より遅いOpenCL版でも短い思考時間で勝ち越しているので
KataGoがLeelaZeroをはっきり抜いたと言っていいと思います。
対戦は序盤10手まではプロの棋譜、500局から選んで先後交代して1000局、としています。
重複している棋譜はないはずです。
KataGoはmaxVisitsをコメントアウトしてmaxPlayoutsを指定しています。
#maxVisits = 800
maxPlayouts = 1000
起動コマンドは下のような感じです。
java -jar ~/go/gogui-twogtp.jar -black "~/go/leelaz17 -p10000 --noponder -r1 -g -t10 -q -d -w ~/networks/0a47677f8247c032f95b83bafff1bfe8ade0accb9eff50ed1c92bf82b1524daf" -white "~/go/katago_1.3.2/cpp/katago gtp -model ~/go/katago_1.3/g170-b20c256x2-s1913382912-d435450331.txt.gz -config ~/go/katago_1.3.2/gtp_p10000.cfg" -games 1000 -size 19 -alternate -sgffile memo -auto -komi 7.5 -openings "~/go/gogui/sgf/openings/19x19_gogod_2014_1000"
序盤10手の棋譜はこちらです。
https://github.com/yssaya/leela-zero-ladder/tree/next/opening/19x19_gogod_2014_1000
選手権は320手目を指して321手目に何か指せれば引き分け、
なのですがfloodgateでは256手で詰んでいても引き分けなのですね。
http://wdoor.c.u-tokyo.ac.jp/shogi/view/2020/03/05/wdoor+floodgate-300-10F+22ndChild+AobaZero_w903_n_p800+20200305210007.csa
先手は128回詰ますチャンスがあるのに後手は127回しかないので
257手で無条件引き分け、にしてもよかった気がします。
w898のAobaZeroから宣言勝ちを内部、rootと入れたのですが
今のソフトは連続王手や駒得無視で敵陣10枚の駒を取りに来て
宣言勝ちを避けますね。しぶとい・・・。
1局だけ宣言勝ちできてるのもありました。
http://wdoor.c.u-tokyo.ac.jp/shogi/view/2020/03/05/wdoor+floodgate-300-10F+AobaZero_w903_n_p800+elmo_WCSC27_479_100k+20200305063003.csa
floodgate初宣言勝ちおめでとうございます。
気づいておりませんでした。
やはり探索中に読んでおくのが重要に思います。
数世代かかると思いますが棋譜生成時にも入れておくと局面評価が変わってくると予想します。
具体的には相手の持ち駒の評価でしょうか。
ありがとうございます。
プロセス間のバッチ処理に対応した次版で同時にこの修正も行う予定です。
下の将棋は先手27点、後手27点の同点なのですが
先手のAobaZero、後手のelmo、ともに勝と思っています。
(先手28点、後手27点で宣言勝ちなのでAobaZeroが正しい。27点法の場合)
入玉模様の宣言勝ちに関してはかなり正確に判断できてる気がします。
先手:elmo、後手:AobaZero、後手27点、先手27点
http://wdoor.c.u-tokyo.ac.jp/shogi/view/2020/02/28/wdoor+floodgate-300-10F+elmo_WCSC27_479_1000k+AobaZero_w898_n_p800+20200228040003.csa
最近はあまり強くなってないのですが
対Kristallweizen相手だと、宣言勝ちが上手くなっている?ようにも見えます。
![]()
ドメイン名を管理しているサイトが落ちている関係で
http://www.yss-aya.com/
が見えないことがあるようです。
IPを直接指定すると見えます。
AobaZero
http://183.181.22.81/aobazero/
CGOS 19路
http://183.181.22.81/cgos/19x19/standings.html
以前は10個のweightの平均を足すだけだったのですが、BNだけは
6000回128mini-batchを回して再計算させてみました。
2400局の1手800playout対Kristallweizen 1手200kだと「BNだけ再計算」が+1 Eloだけ強い、で
ほぼ差は分かりませんでした。
ただ、自分同士で1手10playoutで10000局だと「BNだけ再計算」が+13 Eloだけ有意に強くなるようです。
他の実験でSWAの効果を試すと「BN再計算なし」でも
過去5つのweightの平均を取ったものが強く、はっきり効果があるようです。
5つの平均
実験1 +0 --> +33 Elo (+33 Elo 上昇)
実験2 +87 --> +100 Elo (+13 Elo 上昇)
w848からw857の10個の平均を取っただけ vs Krist 200k。同じ実験を4回
勝 分 敗 局数(宣 千 宣) 先手勝率 勝率 95% ELO
479- 8-313 800(22- 8-6)(s=374-418,0.472) ,0.604(0.034)( +73)
488- 3-309 800(31- 3-2)(s=413-384,0.518) ,0.612(0.034)( +79)
476- 9-315 800(21- 8-0)(s=393-398,0.497) ,0.601(0.034)( +70)
499- 9-292 800(20- 9-0)(s=387-404,0.489) ,0.629(0.033)( +91)
--------------------------------------------------------------
平均( +78)
BNだけ再計算 vs Krist 200k
484- 8-308 800(20- 6-3)(s=378-414,0.477) ,0.610(0.034)( +77)
487-12-301 800(25-12-0)(s=394-394,0.500) ,0.616(0.033)( +82)
475-10-315 800(18- 9-1)(s=388-402,0.491) ,0.600(0.034)( +70)
494- 4-302 800(16- 4-1)(s=386-410,0.485) ,0.620(0.034)( +85)
--------------------------------------------------------------
平均( +79)
BNだけ再計算 vs 平均を取っただけ
4664-1049-4287 10000(25-1049-23)(s=4677-4274,0.523) ,0.519(0.009)( +13)
SWAはAobaZeroでも効果があるようですね。
最近githubで頻繁に更新されていますが、近日中にアップデートがあるのでしょうか?
時期は断言できないのですがアップデートに向けて改良しています。
AobaZeroのネットワークの有効数字をfloatの有効数字6桁から3桁、2桁、1桁と減らした場合の
棋力の低下を調べてみました。
1手10playout、とかなり小さいのですが1万局の自己対戦だと
意外なことに有効数字2桁でもほぼ棋力は変わりませんでした。1桁にするとさすがに弱くなっていますが。
NNの計算は推論だけなら桁数が短くても(charの8bitでも?)精度が落ちにくいみたいです。
LeelaZeroは有効数字3桁にしています。
1手10playoutでの自己対戦、10000局(NNの内部での計算はfp32)
勝 分 敗 局数 (宣 千 宣) 先手勝率 勝率 95% ELO
6桁 vs 3桁 4405-1095-4500 10000 (45-1095-32)(s=4496-4409,0.505) ,0.495(0.009)( -3)
6桁 vs 2桁 4330-1193-4477 10000 (31-1191-28)(s=4420-4387,0.502) ,0.493(0.009)( -5)
6桁 vs 1桁 6732- 567-2701 10000 (16- 567-10)(s=4803-4630,0.509) ,0.702(0.009)(+148)
weightの最初から3番目までの数値はこんな感じです。
*.txt のサイズ
通常 0.00139596 -0.0216267 -0.00781634 268MB
3桁 .0014 -.0216 -.00782 175MB
2桁 .0014 -.022 -.0078 152MB
1桁 .001 -.02 -.008 130MB
以前大橋6段に野狐で絶芸がシチョウを逃げて勝った碁がある、と教えていただきました。
103手目から3回逃げ出して、ちょっと大きくしておいて
下辺の死活に手を戻したタイミングも完璧らしいです。
相手の咆哮さんは多分プロだったと思います。
棋譜再生
https://gokifu.net/t2.php?s=7851584711699386
(;GM[1]SZ[19]
PB[咆哮]
PW[絶芸指導A]
DT[2019-12-30]
RE[W+R]
HA[2]KM[7.5]RU[Chinese]PC[foxgo]
AB[pd][dp]
;W[cd];B[pp];W[fd];B[hc];W[fq];B[cn];W[qn];B[nq];W[jc];B[he]
;W[nc];B[dd];W[cc];B[df];W[dc];B[ff];W[dr];B[qf];W[pb];B[hq]
;W[fo];B[cq];W[qh];B[ho];W[jq];B[jo];W[mp];B[mq];W[kp];B[pn]
;W[pm];B[on];W[qp];B[qm];W[ql];B[qo];W[rm];B[ro];W[ep];B[gr]
;W[do];B[co];W[dq];B[ln];W[cp];B[bp];W[lq];B[kr];W[lr];B[jr]
;W[iq];B[ir];W[hp];B[ip];W[gp];B[lo];W[oe];B[qc];W[qb];B[ph]
;W[pi];B[pg];W[oi];B[od];W[nd];B[ne];W[of];B[me];W[ng];B[qi]
;W[qj];B[rb];W[ld];B[ck];W[gf];B[ge];W[fe];B[gg];W[op];B[pq]
;W[oq];B[or];W[rg];B[ob];W[oc];B[pc];W[nb];B[qa];W[oa];B[rd]
;W[np];B[nr];W[lp];B[mo];W[ko];B[kn];W[jn];B[kq];W[pr];B[qr]
;W[jp];B[io];W[hf];B[if];W[hg];B[hh];W[ig];B[jg];W[nn];B[no]
;W[ih];B[ii];W[lm];B[km];W[kl];B[ll];W[hn])
AlphaZeroの推論(棋譜生成)はINT8ですよね。
棋譜生成には5000個の第1世代のTPUを使ったそうで、
第1世代は8bitの演算だけらしいので、そうだと思います。
最近LeelaZeroをベースに各種特徴量やヒューリスティックを追加して9路の強化学習をしてます。
ところが学習が進むにつれて、生成棋譜での初手の分布とポリシーネットワークの分布がかけ離れてきました。
原因はウェイトの値が大きくなったことでGPUでのhalf float評価で精度が落ちたせいのようで、single floatでのGPU評価やCPUでの評価ではそれっぽい値が得られます。
レートでもsingle float版では同一プレイアウト数の別バージョンやKataGo相手の計測で+100前後改善しました。
フリーランチじゃないので注意が必要ですね。
![]()
![]()
![]()
学習はfp32で行って、できた重みの推論の計算を
fp16で行った結果が一番上の図で2番目がfp32、
3番目がCPUでの計算(fp32)ということでしょうか。
fp16でここまでひどくなるのはビックリです。
weightの個々の数値の絶対値がどんどん大きくなってしまう?のでしょうか。
そういえばLeelaZeroのHALFを有効にすると本家のLZでは
SelfCheck(5%以上の誤差がCPUとの計算であると止まる)で止まることはないのですが
AobaZeroではHALFだと5%のエラーで止まりやすいです。
LZは掛け算も足し算もfp16でやってるのですが
掛け算だけをfp16で足し算はfp32にして将棋専用に最適化したHALFだと
誤差は最大でも2%程度で5%を超えることはないようです。
すみません、half演算自体のせいじゃなくて、half処理の初期化もれでした。
half以外で起きないのと、最近の重みの値が増えてるのと、最近の重み以外では違いが見えないのとで誤解しました。
> 学習はfp32で行って、できた重みの推論の計算をfp16で行った結果が一番上の図で2番目がfp32、3番目がCPUでの計算(fp32)ということでしょうか。
その通りです。
SelfCheckはたまに落ちるので、AobaZeroの実装見てみます。
バグでしたか。
AobaZeroの実装だとLZのOpenCLより1.7倍くらい速く動くようです(fp32で)。
2080Tiのfp16だとさらに1.2倍ぐらい速くなります。
9x9囲碁だとかなり使いまわせるかもしれません。
実装したのは保木さんなので私はちっとも理解していませんが・・・。
ちなみにbatched_play ブランチのこの辺りがそうです。
https://github.com/kobanium/aobazero/blob/batched_play/src/common/nnet-ocl.cpp
ミニバッチの数 * 9 が2^nに収まるのがもっとも効率がいいらしく
ミニバッチ=3 (3*9 < 32)
ミニバッチ=7 (7*9 < 64)
ミニバッチ=14 (14*9 < 128)
ミニバッチ=28 (28*9 < 256)
あたりがお勧めです。
tclkit webmain.tcl ../cgos9.cfg
でgnugoのページの作成が終わった瞬間に下のエラーで落ちるようになったので
gnugoだけ更新を停止してます。調査中です。
sqlite3関連ぽいのですが。
web更新プログラムが不調なだけで対戦サーバは正常に動いています。
*** glibc detected *** tclkit: double free or corruption (out): 0x0000000005969c70 ***
明日の10時からオンラインの将棋大会が開催されます。
http://www2.computer-shogi.org/wcso1.html
棋譜の中継も行われます。
http://live4.computer-shogi.org/wcso1/
特設サイトもあります。
http://sizer.main.jp/wcsoc2020/
上位16チームが今日の2日目に参加します。
シードの12チームを加えて合計28チームでスイス式6回戦〜8回戦ぐらいをやる予定です。
+------------------+----+----+----+----+----+----+----+----+------+----+-----+----+
| 対局者名 |1局|2局|3局|4局|5局|6局|7局|8局|勝敗分|ソル|SB/MD|順位|
+------------------+----+----+----+----+----+----+----+----+------+----+-----+----+
| 1.W@nderER |LOSE|ichb|Argo|koro|Supe|人生|Daig|Fluk| 5-3-0|35.5| 17.0| 9|
| |先○| ×|先○| ○|先×| ○| ×| ○| 5.0| | 11.0| |
| 2.Daigorilla∞ |Easy|山田|Mias|ichb|GCT |Sylw|W@nd|Supe| 7-0-1|40.0| 33.5| 1|
| |先○| ○|先○|先○| ○| =|先○|先○| 7.5| | 25.0| |
| 3.Argo |Sylw|きの|W@nd|TMOQ|CGP |Fluk|人生|たこ| 4-4-0|34.5| 14.0| 13|
| | ×|先○| ×|先○| ○|先×|先○|先×| 4.0| | 7.0| |
| 4.あやめ |SNNS|手抜|GCT |Mias|koro|まっ|Supe|Aoba| 3-4-1|34.0| 7.5| 18|
| |先○| ○|先×| ×|先=|先○| ×|先×| 3.5| | 3.5| |
| 5.たこっと |koro|Mias|LOSE|芝浦|ichb|CGP |山田|Argo| 5-3-0|33.0| 16.5| 10|
| | ×| ×|先○|先○|先×|先○| ○| ○| 5.0| | 12.0| |
| 6.CGP |762a|芝浦|山田|Aoba|Argo|たこ|LOSE|きの| 4-4-0|27.5| 9.5| 16|
| | ○|先×|先○| ×|先×| ×|先○| ○| 4.0| | 5.0| |
| 7.ねね将棋 |隠岐|Aoba|芝浦|Supe|山田|Mias|まっ|koro| 4-4-0|35.0| 14.5| 12|
| | ○| ×|先○|先×| ○| ×|先○|先×| 4.0| | 7.5| |
| 8.AobaZero |Supe|ねね|手抜|CGP |Fluk|GCT |Sylw|あや| 5-3-0|36.5| 19.0| 8|
| | ×|先○|先○|先○| ○| ×|先×| ○| 5.0| | 11.5| |
| 9.芝浦将棋Softmax|Fluk|CGP |ねね|たこ|きふ|きの|koro|手抜| 4-4-0|31.5| 13.0| 14|
| |先×| ○| ×| ×|先○| ○|先×|先○| 4.0| | 6.5| |
|10.Miasis |きふ|たこ|Daig|あや|Sylw|ねね|Fluk|GCT | 5-3-0|39.0| 19.0| 6|
| | ○|先○| ×|先○| ×|先○|先○| ×| 5.0| | 11.5| |
|11.手抜き |まっ|あや|Aoba|きふ|762a|koro|隠岐|芝浦| 3-4-1|29.0| 7.5| 19|
| | =|先×| ×| ○|先○|先×| ○| ×| 3.5| | 2.5| |
|12.きのあ将棋 |GCT |Argo|隠岐|まっ|人生|芝浦|Easy|CGP | 3-5-0|30.0| 9.0| 22|
| |先×| ×|先○| ○| ×|先×| ○|先×| 3.0| | 3.0| |
|13.山田将棋 |人生|Daig|CGP |762a|ねね|隠岐|たこ|きふ| 4-4-0|31.0| 10.5| 15|
| | ○|先×| ×| ○|先×|先○|先×| ○| 4.0| | 5.5| |
|14.ichbinichi |TMOQ|W@nd|koro|Daig|たこ|Supe|GCT |Sylw| 6-2-0|44.5| 30.5| 3|
| | ○|先○|先○| ×| ○| ○|先○| ×| 6.0| | 20.5| |
|15.TMOQ |ichb|LOSE|Sylw|Argo|隠岐|SNNS|762a|人生| 4-4-0|25.5| 6.0| 17|
| |先×| ○|先×| ×|先×| ○| ○|先○| 4.0| | 2.5| |
|16.人生送りバント |山田|Easy|まっ|Sylw|きの|W@nd|Argo|TMOQ| 3-5-0|32.5| 9.0| 21|
| |先×| ○| ○|先×|先○|先×| ×| ×| 3.0| | 3.0| |
|17.GCT |きの|Sylw|あや|Fluk|Daig|Aoba|ichb|Mias| 6-2-0|40.5| 27.0| 4|
| | ○|先○| ○|先○|先×|先○| ×|先○| 6.0| | 17.5| |
|18.まったりゆう |手抜|SNNS|人生|きの|Easy|あや|ねね|762a| 3-4-1|22.0| 5.0| 20|
| |先=| ○|先×|先×| ○| ×| ×|先○| 3.5| | 2.0| |
|19.きふわらべ |Mias|koro|Easy|手抜|芝浦|LOSE|SNNS|山田| 2-5-1|25.5| 1.0| 24|
| |先×| ×| =|先×| ×| ○|先○|先×| 2.5| | 0.0| |
|20.Fluke |芝浦|762a|Supe|GCT |Aoba|Argo|Mias|W@nd| 4-4-0|36.0| 15.0| 11|
| | ○|先○|先○| ×|先×| ○| ×|先×| 4.0| | 8.0| |
|21.Super うさ2X |Aoba|隠岐|Fluk|ねね|W@nd|ichb|あや|Daig| 5-3-0|38.0| 20.5| 7|
| |先○|先○| ×| ○| ○|先×|先○| ×| 5.0| | 12.5| |
|22.隠岐 |ねね|Supe|きの|SNNS|TMOQ|山田|手抜|LOSE| 3-5-0|24.5| 5.0| 23|
| |先×| ×| ×|先○| ○| ×|先×|先○| 3.0| | 0.5| |
|23.762alpha |CGP |Fluk|SNNS|山田|手抜|Easy|TMOQ|まっ| 2-6-0|26.0| 3.0| 26|
| |先×| ×| ○|先×| ×|先○|先×| ×| 2.0| | 0.0| |
|24.koron |たこ|きふ|ichb|W@nd|あや|手抜|芝浦|ねね| 5-2-1|33.5| 19.0| 5|
| |先○|先○| ×|先×| =| ○| ○| ○| 5.5| | 11.5| |
|25.SNNS |あや|まっ|762a|隠岐|LOSE|TMOQ|きふ|Easy| 0-7-1|21.5| 0.0| 28|
| | ×|先×|先×| ×|先=|先×| ×|先×| 0.5| | 0.0| |
|26.Sylwi |Argo|GCT |TMOQ|人生|Mias|Daig|Aoba|ichb| 6-1-1|40.5| 27.0| 2|
| |先○| ×| ○| ○|先○|先=| ○|先○| 6.5| | 18.0| |
|27.EasyShogi |Daig|人生|きふ|LOSE|まっ|762a|きの|SNNS| 2-5-1|22.5| 1.0| 25|
| | ×|先×|先=| ○|先×| ×|先×| ○| 2.5| | 0.0| |
|28.LOSER |W@nd|TMOQ|たこ|Easy|SNNS|きふ|CGP |隠岐| 0-7-1|26.5| 0.0| 27|
| | ×|先×| ×|先×| =|先×| ×| ×| 0.5| | 0.0| |
+------------------+----+----+----+----+----+----+----+----+------+----+-----+----+
○:勝ち ×:負け =:引き分け 先:先手(後手は空白)
No. Program Name 1 2 3 4 5 6 7 8 Pt SOS SB MD
1 Daigorilla∞ 25+ 15+ 6+ 3+ 4+ 2= 9+ 7+ 7.5 40.0 33.5 25.0
2 Sylwi 13+ 4- 17+ 21+ 6+ 1= 8+ 3+ 6.5 40.5 27.0 18.0
3 ichbinichi 17+ 9+ 5+ 1- 10+ 7+ 4+ 2- 6.0 44.5 30.5 20.5
4 GCT 22+ 2+ 18+ 11+ 1- 8+ 3- 6+ 6.0 40.5 27.0 17.5
5 koron 10+ 24+ 3- 9- 18= 19+ 14+ 12+ 5.5 33.5 19.0 11.5
6 Miasis 24+ 10+ 1- 18+ 2- 12+ 11+ 4- 5.0 39.0 19.0 11.5
7 Super うさ2X 8+ 23+ 11- 12+ 9+ 3- 18+ 1- 5.0 38.0 20.5 12.5
8 AobaZero 7- 12+ 19+ 16+ 11+ 4- 2- 18+ 5.0 36.5 19.0 11.5
9 W@nderER 27+ 3- 13+ 5+ 7- 21+ 1- 11+ 5.0 35.5 17.0 11.0
10 たこっと 5- 6- 27+ 14+ 3- 16+ 15+ 13+ 5.0 33.0 16.5 12.0
11 Fluke 14+ 26+ 7+ 4- 8- 13+ 6- 9- 4.0 36.0 15.0 8.0
12 ねね将棋 23+ 8- 14+ 7- 15+ 6- 20+ 5- 4.0 35.0 14.5 7.5
13 Argo 2- 22+ 9- 17+ 16+ 11- 21+ 10- 4.0 34.5 14.0 7.0
14 芝浦将棋Softmax 11- 16+ 12- 10- 24+ 22+ 5- 19+ 4.0 31.5 13.0 6.5
15 山田将棋 21+ 1- 16- 26+ 12- 23+ 10- 24+ 4.0 31.0 10.5 5.5
16 CGP 26+ 14- 15+ 8- 13- 10- 27+ 22+ 4.0 27.5 9.5 5.0
17 TMOQ 3- 27+ 2- 13- 23- 28+ 26+ 21+ 4.0 25.5 6.0 2.5
18 あやめ 28+ 19+ 4- 6- 5= 20+ 7- 8- 3.5 34.0 7.5 3.5
19 手抜き 20= 18- 8- 24+ 26+ 5- 23+ 14- 3.5 29.0 7.5 2.5
20 まったりゆう 19= 28+ 21- 22- 25+ 18- 12- 26+ 3.5 22.0 5.0 2.0
21 人生送りバント 15- 25+ 20+ 2- 22+ 9- 13- 17- 3.0 32.5 9.0 3.0
22 きのあ将棋 4- 13- 23+ 20+ 21- 14- 25+ 16- 3.0 30.0 9.0 3.0
23 隠岐 12- 7- 22- 28+ 17+ 15- 19- 27+ 3.0 24.5 5.0 0.5
24 きふわらべ 6- 5- 25= 19- 14- 27+ 28+ 15- 2.5 25.5 1.0 0.0
25 EasyShogi 1- 21- 24= 27+ 20- 26- 22- 28+ 2.5 22.5 1.0 0.0
26 762alpha 16- 11- 28+ 15- 19- 25+ 17- 20- 2.0 26.0 3.0 0.0
27 LOSER 9- 17- 10- 25- 28= 24- 16- 23- 0.5 26.5 0.0 0.0
28 SNNS 18- 20- 26- 23- 27= 17- 24- 25- 0.5 21.5 0.0 0.0
スイス式8回戦の結果、優勝は水匠でした。
世界コンピュータ将棋オンライン大会 決勝
2020.5.4
+------------------+----+----+----+----+----+----+----+----+------+----+-----+----+
| 対局者名 |1局|2局|3局|4局|5局|6局|7局|8局|勝敗分|ソル|SB/MD|順位|
+------------------+----+----+----+----+----+----+----+----+------+----+-----+----+
| 1.Hefeweizen-2020|CGP |Sylw|Hone|Novi|水匠|elmo|Daig|究極| 6-1-1|38.5| 25.0| 2|
| |先○| ○|先○| ○|先×| =|先○| ○| 6.5| | 17.5| |
| 2.究極タヌポン |山田|Daig|elmo|ichb|nozo|習甦|水匠|Hefe| 4-3-1|39.0| 14.5| 9|
| | ○|先○| ×|先○| =|先○| ×|先×| 4.5| | 9.0| |
| 3.elmo |芝浦|dlsh|究極|水匠|Nine|Hefe|Sylw|Novi| 6-1-1|36.0| 22.5| 3|
| |先○| ○|先○|先×| ○|先=| ○| ○| 6.5| | 17.0| |
| 4.Qhapaq from Neo|Argo|習甦|GCT |Hone|Novi|ichb|dlsh|水匠| 6-2-0|36.5| 26.5| 4|
| |先○| ×| ○| ○|先×|先○| ○|先○| 6.0| | 16.5| |
| 5.水匠 |ねね|nozo|習甦|elmo|Hefe|Novi|究極|Qhap| 7-1-0|41.0| 35.0| 1|
| |先○| ○|先○| ○| ○| ○|先○| ×| 7.0| | 25.5| |
| 6.名人コブラ |Fluk|Hone|Aoba|CGP |習甦|ねね|Nine|dlsh| 5-3-0|30.0| 16.0| 7|
| |先○| ×| ×|先○| ×| ○|先○|先○| 5.0| | 10.0| |
| 7.NineDayFever |たこ|Novi|Mias|dlsh|elmo|Sylw|名人|koro| 4-4-0|33.5| 13.0| 14|
| | ○| ×|先○| ○|先×|先×| ×|先○| 4.0| | 6.0| |
| 8.Novice |W@nd|Nine|ichb|Hefe|Qhap|水匠|Aoba|elmo| 4-3-1|43.0| 19.0| 8|
| | ○|先○| ○|先×| ○|先×| =|先×| 4.5| | 9.0| |
| 9.HoneyWaffle |Aoba|名人|Hefe|Qhap|Fluk|dlsh|Supe|Sylw| 4-3-1|36.0| 15.0| 11|
| | ○|先○| ×|先×| ○| ×|先○|先=| 4.5| | 8.0| |
|10.nozomi |Supe|水匠|koro|W@nd|究極|Daig|習甦|Argo| 4-3-1|35.0| 14.0| 12|
| | ○|先×|先○| ○|先=| ×| ×|先○| 4.5| | 7.0| |
|11.習甦 |Mias|Qhap|水匠|Aoba|名人|究極|nozo|Daig| 5-2-1|38.0| 22.5| 5|
| | ○|先○| ×|先=|先○| ×|先○| ○| 5.5| | 13.5| |
|12.dlshogi |koro|elmo|Supe|Nine|Aoba|Hone|Qhap|名人| 4-4-0|37.0| 15.5| 13|
| | ○|先×| ○|先×| ○|先○|先×| ×| 4.0| | 8.0| |
|13.Daigorilla∞ |GCT |究極|W@nd|芝浦|koro|nozo|Hefe|習甦| 4-4-0|32.0| 11.5| 16|
| |先○| ×| ×| ○|先○|先○| ×|先×| 4.0| | 6.0| |
|14.Sylwi |ichb|Hefe|Argo|ねね|W@nd|Nine|elmo|Hone| 4-3-1|36.5| 14.0| 10|
| | ×|先×| ○|先○|先○| ○|先×| =| 4.5| | 7.0| |
|15.ichbinichi |Sylw|CGP |Novi|究極|Supe|Qhap|GCT |Aoba| 5-3-0|33.5| 18.5| 6|
| |先○| ○|先×| ×| ○| ×|先○|先○| 5.0| | 11.0| |
|16.GCT |Daig|山田|Qhap|koro|Mias|W@nd|ichb|Supe| 3-5-0|29.0| 7.0| 19|
| | ×|先○|先×| ×| ○|先○| ×| ×| 3.0| | 3.0| |
|17.koron |dlsh|芝浦|nozo|GCT |Daig|Supe|たこ|Nine| 3-5-0|27.5| 7.0| 21|
| |先×| ○| ×|先○| ×|先×|先○| ×| 3.0| | 3.0| |
|18.Miasis |習甦|Argo|Nine|Supe|GCT |Fluk|CGP |W@nd| 3-5-0|28.5| 8.0| 20|
| |先×| ○| ×|先×|先×|先○| ○| ×| 3.0| | 3.0| |
|19.Super うさ2X |nozo|ねね|dlsh|Mias|ichb|koro|Hone|GCT | 4-4-0|30.0| 12.0| 17|
| |先×| ○|先×| ○|先×| ○| ×|先○| 4.0| | 6.0| |
|20.AobaZero |Hone|Fluk|名人|習甦|dlsh|たこ|Novi|ichb| 3-3-2|33.5| 10.0| 15|
| |先×| ○|先○| =|先×| ○|先=| ×| 4.0| | 3.0| |
|21.W@nderER |Novi|たこ|Daig|nozo|Sylw|GCT |芝浦|Mias| 4-4-0|27.5| 11.0| 18|
| |先×| ○|先○|先×| ×| ×|先○|先○| 4.0| | 6.0| |
|22.たこっと |Nine|W@nd|ねね|山田|CGP |Aoba|koro|Fluk| 3-5-0|23.0| 5.0| 25|
| |先×|先×| ×| ○| ○|先×| ×|先○| 3.0| | 2.0| |
|23.Fluke |名人|Aoba|CGP |Argo|Hone|Mias|山田|たこ| 2-6-0|25.5| 3.0| 26|
| | ×|先×| ×|先○|先×| ×|先○| ×| 2.0| | 0.0| |
|24.ねね将棋 |水匠|Supe|たこ|Sylw|芝浦|名人|Argo|山田| 3-5-0|27.5| 4.0| 22|
| | ×|先×|先○| ×| ○|先×|先×| ○| 3.0| | 1.0| |
|25.Argo |Qhap|Mias|Sylw|Fluk|山田|芝浦|ねね|nozo| 3-5-0|24.0| 4.0| 24|
| | ×|先×|先×| ×|先○|先○| ○| ×| 3.0| | 1.0| |
|26.芝浦将棋Softmax|elmo|koro|山田|Daig|ねね|Argo|W@nd|CGP | 1-7-0|26.5| 0.0| 27|
| | ×|先×| ○|先×|先×| ×| ×|先×| 1.0| | 0.0| |
|27.山田将棋 |究極|GCT |芝浦|たこ|Argo|CGP |Fluk|ねね| 0-8-0|22.5| 0.0| 28|
| |先×| ×|先×|先×| ×| ×| ×|先×| 0.0| | 0.0| |
|28.CGP |Hefe|ichb|Fluk|名人|たこ|山田|Mias|芝浦| 3-5-0|25.5| 3.0| 23|
| | ×|先×|先○| ×|先×|先○|先×| ○| 3.0| | 1.0| |
+------------------+----+----+----+----+----+----+----+----+------+----+-----+----+
○:勝ち ×:負け =:引き分け 先:先手(後手は空白)
World Computer Shogi Open Swiss Tournament (The Final) 5/4/2020
No. Program Name 1 2 3 4 5 6 7 8 Pt SOS SB MD
1 Suisho 22+ 12+ 5+ 3+ 2+ 8+ 9+ 4- 7.0 41.0 35.0 25.5
2 Hefeweizen-2020 23+ 10+ 11+ 8+ 1- 3= 16+ 9+ 6.5 38.5 25.0 17.5
3 elmo 27+ 13+ 9+ 1- 14+ 2= 10+ 8+ 6.5 36.0 22.5 17.0
4 Qhapaq from Neo 24+ 5- 19+ 11+ 8- 6+ 13+ 1+ 6.0 36.5 26.5 16.5
5 Shueso 20+ 4+ 1- 15= 7+ 9- 12+ 16+ 5.5 38.0 22.5 13.5
6 ichbinichi 10+ 23+ 8- 9- 17+ 4- 19+ 15+ 5.0 33.5 18.5 11.0
7 Meijin Cobra 26+ 11- 15- 23+ 5- 22+ 14+ 13+ 5.0 30.0 16.0 10.0
8 Novice 18+ 14+ 6+ 2- 4+ 1- 15= 3- 4.5 43.0 19.0 9.0
9 Tanuki's bane 28+ 16+ 3- 6+ 12= 5+ 1- 2- 4.5 39.0 14.5 9.0
10 Sylwi 6- 2- 24+ 22+ 18+ 14+ 3- 11= 4.5 36.5 14.0 7.0
11 HoneyWaffle 15+ 7+ 2- 4- 26+ 13- 17+ 10= 4.5 36.0 15.0 8.0
12 nozomi 17+ 1- 21+ 18+ 9= 16- 5- 24+ 4.5 35.0 14.0 7.0
13 dlshogi 21+ 3- 17+ 14- 15+ 11+ 4- 7- 4.0 37.0 15.5 8.0
14 NineDayFever 25+ 8- 20+ 13+ 3- 10- 7- 21+ 4.0 33.5 13.0 6.0
15 AobaZero 11- 26+ 7+ 5= 13- 25+ 8= 6- 4.0 33.5 10.0 3.0
16 DaigorillaInfty 19+ 9- 18- 27+ 21+ 12+ 2- 5- 4.0 32.0 11.5 6.0
17 Super Usapyon2X 12- 22+ 13- 20+ 6- 21+ 11- 19+ 4.0 30.0 12.0 6.0
18 W@nderER 8- 25+ 16+ 12- 10- 19- 27+ 20+ 4.0 27.5 11.0 6.0
19 GCT 16- 28+ 4- 21- 20+ 18+ 6- 17- 3.0 29.0 7.0 3.0
20 Miasis 5- 24+ 14- 17- 19- 26+ 23+ 18- 3.0 28.5 8.0 3.0
21 koron 13- 27+ 12- 19+ 16- 17- 25+ 14- 3.0 27.5 7.0 3.0
22 NENE Shogi 1- 17- 25+ 10- 27+ 7- 24- 28+ 3.0 27.5 4.0 1.0
23 CGP 2- 6- 26+ 7- 25- 28+ 20- 27+ 3.0 25.5 3.0 1.0
24 Argo 4- 20- 10- 26- 28+ 27+ 22+ 12- 3.0 24.0 4.0 1.0
25 takotto 14- 18- 22- 28+ 23+ 15- 21- 26+ 3.0 23.0 5.0 2.0
26 Fluke 7- 15- 23- 24+ 11- 20- 28+ 25- 2.0 25.5 3.0 0.0
27 ShibauraSoftmax 3- 21- 28+ 16- 22- 24- 18- 23- 1.0 26.5 0.0 0.0
28 Yamada Shogi 9- 19- 27- 25- 24- 23- 26- 22- 0.0 22.5 0.0 0.0
AobaZeroは去年と比べてweightが (+465)
w474(+2501) -> w1090相当(+2966)
探索速度が (推定+440、22倍=2^4.4, 2倍で+100として)
550/sec -> 12000/sec (22倍)
予測読みありで (+50)
合計で +955 Elo (465+440+50) ほど強くなっていたのではないかと思います。
速度が上がったのはOpenCLの高速化(1.7倍)、内部でバッチを組む(4倍)、GPU 2080Tiを1枚でなく6枚使う
のおかげでです。GPU 6枚は使い切っていないのであと3倍以上はでるとは思います。
入玉将棋は得意な方だと思うのですが、学習では512手以内に宣言できればいい、と思ってるので
Novice戦で320手引き分けになったのが惜しかったです。
http://live4.computer-shogi.org/wcso1/kifu/WCSO1_F7_ABZ_NVC.html
168手目ぐらいで勝率97%以上で勝てる(寄せる or 宣言)と思っていて
歩を無駄に捨てて28点確保で勝とうしてました。
floodgateでも256手以内に宣言できるのはまれなので、修正してみます。
予選の順位(8位/28チーム)と比べても決勝(15位/28チーム)はかなり運がよかったと思いました。
GLOBIS-AQZが公開されています。
GLOBIS-AQZ
https://github.com/ymgaq/AQ
v4.0.0
https://github.com/ymgaq/AQ/releases
囲碁AI「GLOBIS−AQZ」をオープンソースとしてGitHubに公開しました!
https://twitter.com/ymg_aq/status/1259729010851844097
CGOSでAQ400_p200として動かしています。
GTX 1050Tiだと1手、200playoutで4秒ぐらいのようです(CUDA 10.2, Windows10)。
http://www.yss-aya.com/cgos/19x19/cross/AQ400_p200.html
3月にも宣言勝ちが上手くなってる、と書きましたが、
https://524.teacup.com/yss/bbs/3594
現在、宣言勝ちで勝つ割合が非常に高いです。
勝率は5割前後なのですが、一番多いもので800局で396勝、そのうち80局は宣言勝ちです。勝ち将棋20%は宣言しています。
予想ですが寄せに行くと駒を渡して寄らなかったときの反動(頓死)
が怖いので、優勢なら入玉して点数で勝つ、という方向に進んでる感じです。
これは27点法、という入玉したら必ず勝ち、負けがついて引き分けがない、というルールのせいかもしれません。
24点法だとこうなるかは微妙です。
![]()
今って、Aobazeroは500手くらいまで自己対戦で指してるんでしたっけ?
もしそうならその影響もありそうですね。
320手に到達した時点で引き分けってするとまた指し手の傾向が変わりそうな気がします。
513手目を指せる場合は引き分けにしています。
ですので正しくは「512手目以内で宣言するのが上手くなってる」ですね。
floodgateの255手以内で宣言、にすると+30 Elo程弱くなります(宣言できずに)。
Kristallweizenとの800局だと512手制限での引分は3局ぐらい、から255手制限だと90局ぐらいに増えます。
面白いことに学習で作ってる自己対戦の棋譜では
宣言勝ちは10000棋譜で120局程度(1.2%)程度で安定しています。
つまり自分同士だと点数勝負でなく寄せに行くのですが
Kristallweizen相手だと寄せに行かず、点数勝負に持ち込む、感じです。
下は千日手と宣言勝ちの10000棋譜ごとの局数です。
420万棋譜で学習率を下げて千日手が増えています。
![]()
Kristallweizen相手の棋譜で学習しているわけではないですよね。
そう考えると非常に面白いですね。
手数制限を厳しくした棋譜から学習すると早く入玉するようになるのでしょうか。
それとも寄せに行くのでしょうか。
AobaZeroにとっては点数で勝つ、のは簡単なのかもしれません。
> 手数制限を厳しくした棋譜から学習すると
下は単に手数制限を厳しくした場合の結果ですが、256手だと
ほとんど宣言できないようです(80局 -> 10局)。
なんとなく300手以下の手数制限だと寄せに行くようになる気がします。
引分の手数を変えた場合のAobaZeroの勝率。w1126, Kristallweizen 1手200kと800局
勝 分 敗 局数(宣 千 宣) 先手勝率 勝率 95% ELO
513手で引分 396- 10-394 800 (80-10-2)(s=389-401,0.492) ,0.501(0.034)( +0)
321手で引分 367- 61-372 800 (36-16-0)(s=361-378,0.488) ,0.497(0.033)( -2)
256手で引分 315-104-381 800 (10-10-0)(s=334-362,0.480) ,0.459(0.032)( -28)
*(80-10-2)は「AobaZeroの宣言勝ち」が80局、「千日手で引分」が10局、「Kristallweizenの宣言勝ち」が2局、です。
回答ありがとうございます。
寄せに行くmctsに受けるαβの対戦を見てみたい気がします。
手数どうなるのか興味あります。
ポーカーAIが人間のプロと10000回対戦したログを調べてみました。
プリフロップ(2枚の手札が配られただけの状態)での行動の統計では、AIもプロも行動が似てます。
1. foldする割合は80%ぐらい。
2. SB,BB以外ではfoldしなければ、ほぼraise
3. BBではfoldは50%ぐらい。半分は勝負に行く。
4. 一番最初にbetするUTGから順にfoldする割合は微妙に下がる。
ポーカーではポジションが相当大事なんですね。予想以上でした。
"Pluribus" がAIで "MrBlue" , "MrOrange" は人間のプロです。
MrBlueさんは UTG+1 -> UTG+2 でfold率が80%から68%までガクンと下がり、
明らかに戦略を変えてるのが分かります。
テキサスホールデムではSB,BBは最低賭金を強制的に取られます(SBは半分)。
最初の1周目(プリフロップ)のベットは UTG から始まり、UTG+1,UTG+2,UTG+3,SB,BB, ... と続きます。
2,3,4周目はSBから始まります。
下は参考記事です。
下の記事で木原さんも書かれてますが
単純な合計ではPluribusは負け越し(-70866)ていて、それなのに
人間に勝った、と書いてるのはちょっともやもやします。
AIが6人プレーのポーカーで人間に圧勝--FacebookとCMUの「Pluribus」
https://japan.cnet.com/article/35139838/
ポーカーAIがポーカートッププロに勝ったと宣言するのは時期尚早である
https://kihara-poker.hatenablog.com/entry/2019/07/20/164318
Let's analyze Pluribus's Hands!
http://kevinwang.us/lets-analyze-pluribuss-hands/
「人間5人 vs AI 1人、ポジションによるプリフロップでの行動割合。10000ゲーム」
Pluribus, games=10000,利益合計= -70866 (BB=100)
fold call raise 合計
SB : 1152(70.3%) 262(16.0%) 224(13.7%) / 1638
BB : 800(48.4%) 704(42.6%) 149( 9.0%) / 1653
UTG : 1356(81.5%) 2( 0.1%) 305(18.3%) / 1663
UTG+1 : 1322(79.1%) 11( 0.7%) 339(20.3%) / 1672
UTG+2 : 1285(76.4%) 31( 1.8%) 366(21.8%) / 1682
UTG+3 : 1221(72.2%) 93( 5.5%) 378(22.3%) / 1692
MrBlue, games= 9121,利益合計= 150081 (BB=100)
SB : 970(63.8%) 362(23.8%) 188(12.4%) / 1520
BB : 474(31.2%) 910(59.9%) 135( 8.9%) / 1519
UTG : 1255(81.9%) 0( 0.0%) 278(18.1%) / 1533
UTG+1 : 1218(80.2%) 18( 1.2%) 282(18.6%) / 1518
UTG+2 : 1037(68.1%) 52( 3.4%) 434(28.5%) / 1523
UTG+3 : 1029(68.2%) 80( 5.3%) 399(26.5%) / 1508
MrOrange, games= 7512,利益合計= -91017 (BB=100)
SB : 1012(80.4%) 53( 4.2%) 194(15.4%) / 1259
BB : 625(49.8%) 519(41.3%) 112( 8.9%) / 1256
UTG : 1061(84.3%) 11( 0.9%) 187(14.9%) / 1259
UTG+1 : 1047(84.2%) 24( 1.9%) 173(13.9%) / 1244
UTG+2 : 1014(81.4%) 30( 2.4%) 201(16.1%) / 1245
UTG+3 : 1003(80.3%) 37( 3.0%) 209(16.7%) / 1249
*人間は13人参加。参加上位2人のみ記載。
*最初の1回目の行動のみの統計(レイズされて再度の行動は無視)。
19路の LZ_05db_ELFv2_p800 の点数を3102から3670固定、に変更しました。
3670はBayesEloの点数です。
これはBayesEloとの差が568点も開いて、どんどん大きくなるのを補正するためです。
standingのページではGNU Goを1800に固定してるのですが、
4000を超えるプログラムが多数存在する現在、だんだん上位の点数が圧縮されていきます。
例えばELFv2が3600で最上位に一人だけいて、そこに4000のKataGoを投入すると
ELFv2は3550ぐらいに下がってKataGoは3950で安定します。
これを繰り返して下がっていく感じです。
ポーカーAIと人間プロのログから、
スターティングハンド(最初の2枚)によるレイズの割合を調べてみました。
例えばAIである "Pluribus" の ATs(同じスート)なら79%の割合でレイズ、ATo(違うスート)なら55%でレイズしてます。
AAならほぼ100%レイズしてます。ただ MrBlue さんは80%、と意図的にレイズ率を下げて
安くみせかけて?います。
面白いのは45s、56s、67s など連番で同じスーツだと高確率でレイズしてることです。AIも人間も。
人間のプロの "MrBlue" さんは34sで76%の確率でレイズ。
ランダムな相手でのこれらの勝率は互角程度なのですが。
いい手ばかりでレイズしてると見抜かれるので、ブラフなのかもしれません。
表は下と同じ配置で右上が同じスート(suited),左下が違うスート(off suit)です。
ポーカーのよくある状況別の確率一覧
https://shura-poker.com/holdem-poker-probability-in-several-situations
プリフロップにおけるスターティングカードによるレイズの割合。単位は%
Pluribus games=10000, profit= -70866 (BB=100)
A K Q J T 9 8 7 6 5 4 3 2
A : 98 100 81 66 79 59 71 51 37 68 55 69 57
K : 91 90 67 70 64 85 55 61 63 16 16 12 6
Q : 81 77 89 71 82 55 29 13 28 10 11 17 3
J : 65 47 49 82 63 58 28 18 3 17 15 0 0
T : 55 35 20 33 76 56 37 14 19 12 0 0 0
9 : 17 16 11 5 18 66 48 19 3 10 0 0 0
8 : 23 8 5 1 12 13 63 55 26 13 0 0 0
7 : 13 4 0 1 1 2 3 55 74 17 7 3 0
6 : 16 1 1 2 0 1 0 1 70 69 5 3 0
5 : 11 1 0 0 0 1 0 0 0 60 40 0 0
4 : 9 2 0 1 1 0 0 1 0 0 62 2 0
3 : 10 0 0 0 1 0 0 0 0 0 1 31 0
2 : 2 0 0 0 1 0 0 0 0 0 0 0 20
MrBlue games= 9121, profit= 150081 (BB=100)
A K Q J T 9 8 7 6 5 4 3 2
A : 80 96 64 79 66 55 69 54 45 54 52 61 55
K : 81 91 68 68 56 55 33 37 25 20 9 16 6
Q : 85 51 88 52 66 48 34 24 12 26 19 17 11
J : 57 34 29 63 67 69 45 30 18 5 11 17 3
T : 34 19 26 19 67 64 77 17 17 0 10 3 3
9 : 17 15 12 10 13 63 63 60 17 9 11 6 0
8 : 31 6 8 4 4 8 57 74 48 17 18 0 0
7 : 19 0 2 0 0 0 10 57 51 50 19 9 0
6 : 12 0 0 0 0 0 2 11 50 71 45 21 6
5 : 19 0 0 0 1 3 0 2 6 59 73 33 6
4 : 16 0 0 0 1 0 0 1 0 1 47 76 14
3 : 16 1 1 0 0 2 0 1 3 3 4 65 19
2 : 25 0 0 0 1 3 1 2 2 1 1 3 38
MrOrange games= 7512, profit= -91017 (BB=100)
A K Q J T 9 8 7 6 5 4 3 2
A : 94 76 65 65 68 66 74 55 40 73 65 76 46
K : 96 100 90 77 73 54 19 9 5 6 3 4 4
Q : 77 73 95 57 64 67 11 0 6 5 5 13 0
J : 71 31 19 70 67 43 15 20 0 15 7 5 0
T : 27 21 16 10 70 68 19 0 0 5 0 5 0
9 : 5 8 3 1 5 71 89 37 15 0 4 0 5
8 : 12 0 3 1 1 2 55 53 22 4 0 0 0
7 : 8 3 0 0 0 0 1 57 41 11 0 3 0
6 : 11 1 0 0 0 2 1 0 43 14 0 0 4
5 : 5 1 0 1 0 2 1 1 1 73 25 9 0
4 : 11 1 0 0 1 0 0 2 0 0 59 9 0
3 : 11 1 0 0 0 0 0 0 0 0 0 24 0
2 : 7 1 0 0 0 0 1 0 0 0 0 0 35
*プリフロップで最初の1回目の行動でレイズしたか(レイズされて再度のレイズも含む)。
6人の時のスターティングハンドの勝率。(1/6)=16.6% なら互角の手
ランダムな相手、6人に対して。一番強い手はAAの49.2%で弱い手は27の違うスーツで8.6%
A K Q J T 9 8 7 6 5 4 3 2
A : 49.2 31.1 29.4 27.8 26.7 24.2 23.3 22.5 21.7 22.2 21.6 21.0 20.4
K : 27.9 43.0 28.3 26.9 25.8 23.2 21.3 20.8 20.1 19.5 19.0 18.4 18.1
Q : 25.9 25.1 37.9 26.1 25.2 22.5 20.7 19.2 18.5 18.1 17.6 17.0 16.6
J : 24.4 23.5 22.9 33.6 24.7 22.4 20.5 18.9 17.4 17.0 16.4 16.0 15.6
T : 23.1 22.3 21.6 21.5 30.0 22.5 20.6 19.0 17.4 16.0 15.6 15.1 14.8
9 : 20.3 19.5 19.0 18.7 18.9 26.6 20.2 18.9 17.4 16.0 14.6 14.3 13.9
8 : 19.4 17.4 16.9 16.8 16.9 16.6 24.0 18.9 17.6 16.3 14.8 13.6 13.3
7 : 18.4 16.7 15.1 14.9 15.1 15.1 15.4 21.9 18.0 16.7 15.3 14.0 12.8
6 : 17.5 16.0 14.4 13.2 13.4 13.5 13.9 14.2 20.1 17.0 15.9 14.5 13.3
5 : 18.0 15.4 13.9 12.8 11.9 12.0 12.4 12.8 13.3 18.5 16.5 15.2 14.0
4 : 17.3 14.7 13.3 12.3 11.5 10.5 10.8 11.4 12.0 12.6 17.3 14.7 13.7
3 : 16.7 14.2 12.8 11.7 11.0 10.1 9.5 9.9 10.6 11.4 10.7 16.2 13.0
2 : 16.1 13.7 12.3 11.3 10.6 9.6 9.1 8.6 9.1 10.0 9.5 8.9 15.5
AobaZeroの棋譜をColabで生成する場合に
開発版のブランチ(develop)を使用するようにしました。
http://www.yss-aya.com/aobazero/colab.html
Tesla K80 36.2 棋譜/時
Tesla T4 130.0 棋譜/時
Tesla P100 138.3 棋譜/時
Tesla P4 52.7 棋譜/時
ほどの速度が出ます。T4だと今までの5倍以上速くなってると思います。
これは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
早速試してみました。
表示される指し手(と時間)は以前より随分遅いなぁと思っていたのですが
56プロセス並行とは驚きました。
56本のグラフがでるのがその経過なのですね。Windowsバイナリ楽しみにしております。
序ででもないのですが,ひとつ教えて下さい。
学習のミニバッチを4096にするのを諦めたのはGPUのメモリに乗らないからというのが第一の理由でしょうか。
どこかに最適サイズがあると思いますがAlphaZeroより大きいサイズを試した例がないので気にしています。
動かして頂いてありがとうございます。
developのLinux版でfloodgateでは下のようにすると
96手目からNNに与える手数を実際の手数より大きくして(256手で512手)
3倍くらい宣言勝ちしやすくなっています。棋力の低下はほぼないようです。
AobaZero_w1375_n_p800 からこれを使ってます。
./aobaz -p 25000 -b 7 -t 18 -h -i -drawmove 256 -q -w ./w1083.txt
> 学習のミニバッチを4096にするのを諦めたのは
はい。GPUに載らないのが一番の理由です。Caffeの機能でミニバッチ128のlossを32回足し合わせて
疑似的に4096にする方法があるのですが、これだと個々のミニバッチのBatch Normalizationの
平均と分散は128のまま計算されるので、厳密には正しくない、ので諦めました。
全2895件の内、新着の記事から10件ずつ表示します。
CSA例会で説明されていたものが実装できたのですね。
日に2,3の宣言勝ちが出ているので増えたなぁと思っていました。
バッチサイズはやはり物理的要因でしたか。
以前マルチGPUのマシンで教師データ作られていたと思いますが
Caffeではデータパラレルの学習でミニバッチ大きくできないのでしょうか?
Kristallweizen相手だと宣言勝ちはさらに増えて
最新だと勝ち将棋の半分くらいが宣言になっています(391勝中、176局が宣言)。
自己対戦でもやや増えて全体の3%ぐらいです。
CaffeでもマルチGPUで学習できて、2台でバッチサイズが2倍、になります。
ただ、やっぱりGPU1つで128ミニバッチ、BNの計算も128、なので
BNを使う場合は擬似的にミニバッチが増えてることになります。
AlphaZeroの4096も複数のTPUだったはずで、おそらくBNの計算も4096でなく、
小さいサイズだと思うのですが、確信は持てません。
(BNを4096で計算させようとするとかなり遅くなると思います)
(BNのサイズが128でも4096でも大差はないとは思うのですが・・・)
![]()
囲碁アプリのlizzieを使っていて分からないことがあったので質問させてください。
既出でしたら申し訳ありません。
lizzieの設定項目に「勝率の表示方法」というのがあって、「Lcb」と「Winrate」という2種類が用意されています。
「Lcb」を選択した場合、スコア差が非常に大きくなると勝率が「-1.5%」や「101.5%」などのように上限或いは下限を超えた表示になることがあります。
この「Lcb」とは一体どのような意味なのでしょうか?
モンテカルロ木探索で使われるUCBは分かりますでしょうか?
UCBが信頼区間の上限でLCBが信頼区間の下限です。
計算上マイナスになることはあっても100%超えるの変ですね。
LeelaZeroだと、例えばQ3を10回探索して、勝率の平均が43.16%とします。
この時のLCBは40.86%です。
Q3 -> 10 (V: 43.16%) (LCB: 40.86%)
10回の探索だと43.16%という勝率は上下に2.3%(43.16 - 40.86)ズレる、
つまり真の勝率は下の範囲に入る感じです。
40.86% <= 43.16% <= 45.46%
この小さい方がLCBで、探索回数が増えるほど、ズレは小さくなって、LCBは43.16%に近づきます。
一般的にMCTSではRootで探索回数が最大のものを着手するのですが、LeelaZeroはLCBが最大のものを
選ぶようになってます。こちらの方が+70Eloほど強かったそうです。
Fresh max_lcb_root experiments
https://github.com/leela-zero/leela-zero/issues/2282
下は9路(青)と19路(赤)のCGOSの最高レーティングの推移です。
2006年はモンテカルロ法が登場した時期で緩やかに上昇してますが2012年ぐらいで止まってます。
2016年にDeep Learningが登場してから19路は一気に上昇してます。
9路も上がってますが、緩やかです。
GNU Goの1800点を基準にして、9路は2012年まではコミ7.5、2016年からはコミ7.0です。
持ち時間は2012年まで19路が20分、2016年からは15分。9路はすべて5分です。
BayesELOの値が使えるものは使ってます。
2012年から2015年は休止してたのでデータがないです。
![]()
48様、山下様、有難うございます。
検討でlizzieはよく使っていますが、ディープラーニングや機械学習についてはほとんどわかりません。UCBもMCTSも初耳ですが、せっかく教えて頂いたのでこの機会に理解してみたいと思います。
今回質問させていただいたきっかけとなった経緯を説明します。
lizzieで勝率の表示方法をLcbにして9子局を設定します。
一手目、黒右上隅星、二手目、白パス、三手目、黒左上隅星・・・これで9子局を設定します。
これを勝率グラフで描画させると、2〜3手目以降は黒の勝率ほぼ100%に張り付くはずですが、
実際はギザギザの形になります。
白の手番で白の勝率が0%を下回った時に、グラフは50%ラインで動きません。次の黒の手番で一手前の白の勝率が100%(つまり下に張り付く)であったように描画されます。
コンパイル直後のlizzieではこんなことがなかったのに、どうしたんだろう?と調べた結果、勝率の表示方法をLcbに変更したのが原因だった、というわけです。
CGOS 9路でelo差と勝ち点(勝ち+持碁/2)に持碁/2の占める割合をプロットしてみました。
なんとなくコミ7目の9路は格下には持碁にさせずレーティングを落とさず、格上相手に持碁でレーティングをもぎ取るか戦いで7.5目の時とゲーム性に違いがあるんじゃないかと思えます。
cgosサーバーからの応答を見て、対局相手に応じて布石を変えるような小細工でレーティングをちょっと稼げないですかね。
![]()
このグラフの見方、難しいですね(汗)。
例えば
katab40s37-pda1 3550 だと
CrazyStone-0005 3341 相手に
10 / 8 / 18 77.78
10勝8引分0敗、なので 8*0.5 / (10+8*0.5) = 4/14 = 0.36
レート差は 3550 - 3341 = +209
という感じでしょうか。
http://www.yss-aya.com/cgos/9x9/cross/katab40s37-pda1.html
グラフの1点が1.0とか0.5に張り付いてるのは対局数が1局か2局で
全部引き分けとかで、これは無視してもいい感じですか。
格下はほとんど引き分けに持ち込めずに負けてる。
+200ぐらい格上だと引き分けになりやすい。
これは全部のレートが対象でしょうか?
レート2800以上限定、とかだともう少し違うグラフになりそうな気もします。
> 対局相手に応じて布石を変えるような小細工で
大橋プロが9路でレート差が大きいときは最善は持碁でもあえて
複雑な間違いやすい変化に持ち込んで勝ちに行く、ということを話されてたので
レート差があるときに、持碁を負け扱いにして探索する、とかはありそうですね。
解釈はその通りです。
自己対局の結果見ながら引き分けが多い気がして、プロットしてみてましたが良い分析方法見つけられてません。
双方のレート2600以上で、対局数を円の大きさにするとこんな感じです。
対局数の多いsai_S1_9461_p10k LZ20_128_65_p3000 Aya800e_0721_10kのcrossページだけプロットしています。真面目にやるには全対局のBayesEloを取って対局数で加重平均とかでしょうか?
![]()
> プロットしてみてましたが良い分析方法見つけられてません。
グラフの右側が相手の方が強い場合、ですよね?
レートが200差以上で何かあるような気もします。
2020年1月から6月までの互角の相手に対する黒勝率と持碁の割合を調べてみました。
持碁の割合はレートが高いほど確実に上がってます。
このまま推移すると4500点ぐらいですべての対局が持碁になるのかも?
黒の勝率は微妙ですがレートが高いほど5割を切っていくように見えます。
11万局の中から2900点台同士、3000点同士、・・・の結果のみを集計してます。
1800: 32 =( 18/ 0/ 14), b_win_rate=0.563, d_rate=0.000
1900: 0 =( 0/ 0/ 0), b_win_rate=0.000, d_rate=0.000
2000: 62 =( 28/ 7/ 27), b_win_rate=0.508, d_rate=0.113
2100: 296 =( 132/ 23/ 141), b_win_rate=0.485, d_rate=0.078
2200: 0 =( 0/ 0/ 0), b_win_rate=0.000, d_rate=0.000
2300: 33 =( 14/ 2/ 17), b_win_rate=0.455, d_rate=0.061
2400: 68 =( 30/ 2/ 36), b_win_rate=0.456, d_rate=0.029
2500: 122 =( 54/ 10/ 58), b_win_rate=0.484, d_rate=0.082
2600: 280 =( 98/ 45/ 137), b_win_rate=0.430, d_rate=0.161
2700: 51 =( 23/ 9/ 19), b_win_rate=0.539, d_rate=0.176
2800: 582 =( 245/ 153/ 184), b_win_rate=0.552, d_rate=0.263
2900: 1458 =( 570/ 433/ 455), b_win_rate=0.539, d_rate=0.297
3000: 554 =( 153/ 196/ 205), b_win_rate=0.453, d_rate=0.354
3100: 450 =( 116/ 157/ 177), b_win_rate=0.432, d_rate=0.349
3200: 131 =( 34/ 52/ 45), b_win_rate=0.458, d_rate=0.397
3300: 124 =( 22/ 55/ 47), b_win_rate=0.399, d_rate=0.444
3400: 0 =( 0/ 0/ 0), b_win_rate=0.000, d_rate=0.000
2年前のデータはこちら。
CGOSで持碁になる割合
https://524.teacup.com/yss/bbs/3395
![]()
学習率を
0.0002 から
0.00002
に変更しました。
10980422棋譜、weightは w1450 から新しい学習率となります。
(w1449までが古い学習率での更新)
AlphaZeroは1000万棋譜で2回目の学習率変更なので、約100万棋譜遅い更新となります。
http://www.yss-aya.com/aobazero/index.html
カツ丼将棋の松本さんを中心に「電竜戦」というオンラインのコンピュータ将棋大会が
開催されています。
特徴は形勢グラフが出る、総当たり、繋ぎっぱなしで寝ている間に終わる、などでしょうか。
19日に第2回予行演習が行われ、AobaZeroも2080Tiを6枚で参加しました。
選手権よりは1.5倍ほど高速化されて6枚で18000 局面/秒ほどの速度でした。
AobaZeroは3位でした。
5月のオンライン大会優勝の水匠に勝っていたのがビックリでした。
9回戦 水匠-aobazero 510手目 勝ち宣言
https://golan.sakura.ne.jp/denryusen/dr1_test2/dist/denryusen.php?gi=dr1test1test0+tu-9_suisho_aobazero-300-5F+suisho+aobazero+20200720011011&te=510&mv=%E5%8B%9D%E3%81%A1%E5%AE%A3%E8%A8%80&gn=%E4%BA%88%E8%A1%8C%E6%BC%94%E7%BF%92%209%E5%9B%9E%E6%88%A6%E2%98%97%E6%B0%B4%E5%8C%A0-%E2%98%96aobazero
170手目では右から入玉するのかな、と思ってたのですが、押し戻されて340手目では左側から入玉する、
という気が遠くなる棋譜になってます。水匠はTR3990Xでフルで動いていたそうです。
他にも15勝のうち、3分の1の5局は宣言で勝っています。
1回戦 aobazero-Viper 402手目 勝ち宣言
https://golan.sakura.ne.jp/denryusen/dr1_test2/dist/denryusen.php?gi=dr1test1test0+tu-1_aobazero_viper-300-5F+aobazero+viper+20200719201040&te=402&mv=%E5%8B%9D%E3%81%A1%E5%AE%A3%E8%A8%80&gn=%E4%BA%88%E8%A1%8C%E6%BC%94%E7%BF%92%201%E5%9B%9E%E6%88%A6%E2%98%97aobazero-%E2%98%96Viper
6回戦 Daig振り-aobazero 451手目 勝ち宣言
https://golan.sakura.ne.jp/denryusen/dr1_test2/dist/denryusen.php?gi=dr1test1test0+tu-6_daigorilla_aobazero-300-5F+daigorilla+aobazero+20200719231715&te=451&mv=%E5%8B%9D%E3%81%A1%E5%AE%A3%E8%A8%80&gn=%E4%BA%88%E8%A1%8C%E6%BC%94%E7%BF%92%206%E5%9B%9E%E6%88%A6%E2%98%97Daig%E6%8C%AF%E3%82%8A-%E2%98%96aobazero
11回戦 aobazero-W@ndre 432手目 勝ち宣言
https://golan.sakura.ne.jp/denryusen/dr1_test2/dist/denryusen.php?gi=dr1test1test0+tu-11_aobazero_wandre-300-5F+aobazero+wandre+20200720023229&te=432&mv=%E5%8B%9D%E3%81%A1%E5%AE%A3%E8%A8%80&gn=%E4%BA%88%E8%A1%8C%E6%BC%94%E7%BF%92%2011%E5%9B%9E%E6%88%A6%E2%98%97aobazero-%E2%98%96W%40ndre
13回戦 aobazero-地ビール 416手目 勝ち宣言
https://golan.sakura.ne.jp/denryusen/dr1_test2/dist/denryusen.php?gi=dr1test1test0+tu-13_aobazero_hefeweizen-300-5F+aobazero+hefeweizen+20200720034211&te=416&mv=%E5%8B%9D%E3%81%A1%E5%AE%A3%E8%A8%80&gn=%E4%BA%88%E8%A1%8C%E6%BC%94%E7%BF%92%2013%E5%9B%9E%E6%88%A6%E2%98%97aobazero-%E2%98%96%E5%9C%B0%E3%83%93%E3%83%BC%E3%83%AB
宣言勝ちが増えだしたのは500万棋譜ぐらいからで、1200万棋譜の現在、
Kristallweizenとの棋力測定では勝ち将棋の54%近くは宣言勝ちになっています。
入玉できそうになると、まったく寄せにいかず、ひたすら
点数勝ちを目指す棋風になってるようです。
駒を渡して寄せに行くと王手の連続で要駒を抜かれる、とか難しいので
点数で勝つ方が安全なのかもしれません。
AobaZeroは独自のスクリプトで1局ごとに再起動する設定で動かしていました。
予行演習3は9月5日(土)に開催予定とのことです。
電竜戦
http://denryu-sen.jp/
第二回予行演習
https://golan.sakura.ne.jp/denryusen/dr1_test2/dr1_live.php
以前話題にしていたバッチサイズの件に関してですが
CaffeではSynchronized Batch Normalizationは使えないのでしょうか?
可能ならマルチGPUでバッチサイズは増やせると思うのですが
https://pytorch.org/docs/master/generated/torch.nn.SyncBatchNorm.html
Caffeでは調べた範囲だと独自実装しないと無理そうでした。
5倍ぐらい遅い程度なら運用はできるかもしれません。
バッチサイズの違いと学習率の違いはよく分かってなくて
今回の学習率の変更で+50Eloぐらいしか上がらない、と思っていたのですが
+120ぐらいは上がっていて、本来後1回下げるだけなのですが
後2回ぐらい下げても伸びそうな気もしています。
Caffeを使ったことがないのでソースを読んでも読めていない部分があると思うので
お手数とは思いますが確認させて下さい。
学習は1万棋譜毎に行う。(初期は2000?)
過去10万棋譜からランダムに選んだ128(初期は64)局面のミニバッチ学習を2万ステップ行う。
学習時のロス計算は局面評価値を使わないでAlphaZeroと同じ交差エントロピーと勝敗項の和。
また,Caffeでは内部でstep状に学習率を変化させている?
ロスはレーティング上昇のタイミングで減っているのでしょうか?
つまり学習が進むタイミングで強くなっているんでしょうか?
私の手元では別用途にやねうら王で作った教師データをNNに学習させていますが
バッチサイズは1000くらいにした方が学習が進む感じになっています。
> 学習は1万棋譜毎に行う。(初期は2000?)
20分おきに棋譜サーバから棋譜を取得して学習しています。
現在ですと約1600棋譜ごとです。古い1600棋譜は捨てられます。
そして10000棋譜を学習した時点(ミニバッチ128で、10000回学習)で新しいweightを作ってます。
(1棋譜の手数が128手と仮定しています)。
> 過去10万棋譜からランダムに選んだ128(初期は64)局面のミニバッチ学習を2万ステップ行う。
過去50万棋譜からランダムに選んだ128局面のミニバッチを10000回(ステップ)です。
> 学習時のロス計算は局面評価値を使わないでAlphaZeroと同じ交差エントロピーと勝敗項の和。
はい。
> また,Caffeでは内部でstep状に学習率を変化させている?
学習率は一定です。現在は learning rate = 0.00002 です。
> ロスはレーティング上昇のタイミングで減っているのでしょうか?
上から順に2020年3月28日から学習率を下げる前の7月8日までの
value loss
policy loss
7月8日以降の
value loss
policy loss
です。
valueもpolicyも単調減少でないので何とも言えませんが、
現時点ではpolicyは変化がほぼ同じでvalueは 1.39 -> 1.38 に少し下がってるようにも見えます。
![]()
![]()
48さんが発見されたAobaZeroが初心者レベルの悪手を指す件ですが
バグというよりも着手の出現頻度の低さとpolicy headの構造に依存した問題な気がします。
AobaZeroで遊ぼう13(近況編)
https://bleu48.hatenablog.com/entry/2020/07/23/034057
△91馬(19)と馬を取られる手を読み抜けます。
w1525で試すと△91馬(19)は141手の可能手の中で141番目の最下位でした。
Policyの値も0.000002と極端に低いです。
調べてみると
1. w0001.txt の一番最初から△91馬(19)のPolicyは 0.000000 とほぼ 0
2. 19から91に不成で移動する手、の出現頻度は低い
3. 人間のプロの32000棋譜(3595002手)では2回しか出てこない(駒取り含み全てで)。
最大は 77 -> 76で70618回(後手番は反転で、すべて先手の符号です)。
4. しかし、同じく出現頻度が低い18から81に移動して馬を取る手はPolicyが正常(高い)。
5. 18から81に不成で移動は32000棋譜で0回。
6. 19から91に移動する手、はPolicyの出力が11259通り(139面*9*9)あるうちの
47番目の面にあり、その面で唯一の着手可能な手。残りの80個は不可能
(斜め方向に8マス移動できるのは1か所だけ)
7. ミニバッチ4096で11万棋譜学習したw786でも同じく低い
8. 正則化(wd)を10分の1に下げたものでも同じく低い
9. 左右反転させて99馬(11)としても同じく低い
10. 後手番でなく先手番で▲91馬(19)と馬を取る手も同じく低い
11. 実際の学習だと(681万棋譜から776万棋譜まで。96万棋譜,11733万手)
実際に指した回数
19から91 移動 全部 33回
19から91 移動 (馬を取る) 6回
実際に指さなくてもvisitで出現(Policy分布で学習される。225000万局面)
19から91 移動 全部 2023回
19から91 移動 (馬を取る) 116回
policy headの問題な気がしてます。
91 -> 19 へ不成で移動する動きはchannel=47で表現され、実際に指せる動きの手は1つだけです。
92 -> 29 へ不成で移動する動きはchannel=46で表現され、実際に指せる動きの手は4つです。
channel=47, 右斜め下への8マス移動。不成(91 -> 19 の1つのみ)
O********
*********
********* 「O」が可能な動き。「*」は着手不可能
*********
*********
*********
*********
*********
*********
channel=46, 右斜め下への7マス移動。不成(92 -> 29 など4つ)
OO*******
OO*******
*********
*********
*********
*********
*********
*********
*********
どちらも出現確率が低いのですが、
92->29の方は同じように低い手が4つ集まってるので、このchannelが学習される回数は4倍になります。
なので、学習されやすく、そこまで低い値にならない、のかもしれません。
policy headを全結合にするか、出現確率が低い動きの手を同一channelにまとめる、とかすれば
この問題は解決できるのかもしれません。
下は「91 -> 19」への不成の移動を実際より多く学習させた結果です。
無理やり出現割合を上げると、それなりの値と順位になります。
「91 -> 19」という移動自体の計算がバグっているわけではないようです。
▲19馬(91)のPolicyの値と全141手の中での順位
学習棋譜数 順位 Policyの値
w01073 141 0.000001104 ... 再学習する前のweight
_20000 140 0.000048874
_40000 12 0.010207972
_60000 13 0.006309384
_80000 9 0.018566459
100000 16 0.006096750
120000 17 0.002419752
140000 16 0.003961458
160000 13 0.008528376
* 160000棋譜の学習で 91 ->19 の実際の移動は通常は4回選択される。
* これを714回(馬取り(26回)と竜取り(688回))、と約180倍選択されやすくした場合
* 160000棋譜で学習局面は160000 * 128 = 20480000 局面
dlshogiだと△91馬(19)はPolicyの確率96.2%でした
何かの理由で上手く学習してるようです。
丁寧にグラフまで作成頂きありがとうございます。
参考に学習してみようと思います。
91馬の件,policy headの構造にも一因があるのですね。
自分で作成しているNNの方も確認してみます。
すみません、やっぱりPolicy Headは無関係で、単に出現確率とか
別の問題な気がしています。
4月までの棋譜で作った256x40bの大きなネットワークでも
この現象は改善してませんでした(40bはほとんど20bと同じ強さです)。
AlphaZeroはelmoに対して勝率91.2%(先手番だと98.2%(+700)、後手で84.2%(+290))
と極端に先手での勝率が高いのですが、理由が少し分かったかもしれません。
今までKristallweizen相手の手番での勝率は見てなかったのですが、
800局(AobaZero w1650, 800 playout, vs 500k/move、348勝22分430敗)で
AobaZeroが先手 179勝(投了 50、宣言129)
AobaZeroが後手 169勝(投了115、宣言 54)
で圧倒的に先手番での宣言が多いです。
宣言勝ちは先手番の方が簡単なようです。
先手は28点、後手は27点で、先手の方が宣言は難しい気がするのですが。
AlphaZeroも宣言で勝つのが上手くなるように学習していた気がします。
まだKristallweizen相手の先手勝率はそこまで高くないですですが、今後もっと宣言勝ちの割合が増えると
先手勝率も上がっていくのかもしれません。
AobaZeroの自己対戦の学習の棋譜では宣言勝ちは
全体の4%ほどで対Kristallweizenの54%ほど高くはないのですが
900万棋譜の1%から徐々に増えてきています。
また先手での宣言勝ちもはっきり増えていて、今では先手での
宣言勝ちは後手の倍くらいです。
全体の宣言勝ちの増加はそろそろ止まりそうな気配もあります。
1360万棋譜の時点では10000棋譜で下のような割合です。
投了89%、千日手7%、宣言勝ち4%
![]()
宣言勝ちの増加が止まりそうに見えるのは1100万棋譜から
学習率を下げたせいで、実際はまだまだ上がるのかもしれません。
先日の馬の話と同じですが角換わりで18の角が81に成る筋を読めずに大ポカやってました。これも学習機会の問題でしょうか。
position startpos moves 2g2f 8c8d 2f2e 8d8e 7g7f 4a3b 8h7g 3c3d 7i8h 2b7g+ 8h7g 3a2b 3i3h 2b3c 3g3f 7a6b 3h3g 6c6d 3g4f 6b6c 5i6h 6c5d 6h7h 4c4d 5g5f 6a5b 3f3e 5d4c 6i6h 5a4b 9g9f 9c9d 6g6f 1c1d 4i5h 1d1e 3e3d 4c3d 7h8h 4b3a 6h7h 3a2b 5h6h 7c7d 4f5e 8b6b 6h6g B*4i B*1h P*3h
![]()
これも簡単な手ですが指せないですね・・・。
41個ある可能手の中で81角成は40番目、81角不成は41番目でした。
プロの32000棋譜でも18から81(成)は0回、81(不成)は1回、と
かなり少ないので同じような問題の気がします。
policyの値自体は前回の△91馬ほど低くはないのですが
今回の▲81角成(18) policy=0.000201618
前回の△91馬 (19) policy=0.000001977
ふと思ったのですが現状Google Colabで棋譜生成する説明などで
教師データ生成のエンジンの探索部に入玉判定入っていますよね。
これ,グラフ上でどのタイミングでしょうか。
以前もコメントしたかもしれませんが影響大と想像してます。
探索内部で宣言勝ちと千日手判定を同一局面2回から4回に変えたのは570万棋譜の時点です。
対kristallweizenでの宣言勝ちの増加はそれより少し前の500万棋譜から始まっているので
どのくらいの影響があったかはよく分かりません。
なかなか断定的に話しづらいですね。
探索部に入れると防ぐ側が防げる範囲は邪魔するようになると思いますので
若干減るのかと思うのですが,既に大勢ついていて対応できない状況が多いのでしょうか。
KataGoが1.6.0になってGPUを使わないCPU版が付属しています。
Eigen (CPU) version and Other Improvements
https://github.com/lightvector/KataGo/releases
リリース直前のソースだと、最新の30b、50visit(4スレッド) で ELF の 800 playoutよりやや弱いぐらいの強さです。1手3秒ほど。
http://www.yss-aya.com/cgos/19x19/cross/kata150b30_cpu_v50.html
ubuntu 16で 20 block のベンチは下で、10年前の古いCPUに比べて
AVX2に対応したCPUだとは19路で6スレッド利用で3倍以上速いです。
weight
katago_1.4.5/g170e-b20c256x2-s5303129600-d1228401921.bin.gz
8月23日時点でのmasterのソースを下でビルド
$ cmake . -DUSE_BACKEND=EIGEN -DNO_GIT_REVISION=1 -DCMAKE_CXX_FLAGS='-march=native'
Intel Core i7 980X 3.33GHz (AVX2非対応、6コア12スレッド 2010年発売)
19路
thread visit/sec
1 2.57
4 8.27
6 9.72
9路
thread visit/sec
1 5.9
4 17.1
6 20.5
Intel 8700 3.2GHz (AVX2対応、6コア12スレッド 2017年発売)
19路
thread visit/sec
1 8.6
4 27.8
6 33.2
AobaZeroの紹介記事をライターの藤木さんに書いて頂きました。
AI同士の対局から新たな将棋戦法は生まれるか〜AobaZeroプロジェクト
https://media.dglab.com/2020/08/20-aobazero-01/
【執筆しました】人工知能に将棋のルールを教えて、人工知能同士で戦わせたら、
人間が見つけたように、美濃囲いとか振り飛車とか戦法を編み出すものでしょうか?
https://twitter.com/fujiki_toshiaki/status/1296351141630885888
久しぶりに HiraBot 用の value net の基礎データを取ってみました
2万局面の学習データを使い初めに lr=0.0001 で 200Kiter 学習しました
(lr0.0001 参照の事) このグラフから loss が最小になるのは 100Kiter
位でそれ以上学習すると loss は増大しました自己対戦のデータは下記の通り
1300局自己対戦 500po 勝率 27.8% vNo393-No4204-0.0001-4K.dat
850局自己対戦 500po 勝率 30.1% vNo393-No4204-0.0001-10K.dat
1200局自己対戦 500po 勝率 35.0% vNo393-No4204-0.0001-50K.dat
750局自己対戦 500po 勝率 33.7% vNo393-No4204-0.0001-100K.dat
このデータから 50Kiter が最良で loss 最小の約半分になりました
そこでこれより小さい 20Kiter から lr=0.00001 で fine tuning してみました
(lr0.0001-0.00001 参照の事) とりあえず 150Kiter までのグラフですが
まだまだ loss は低下し続けるように見えます
900局自己対戦 500po 勝率 32.9% 20Kiter 学習後 4Kiter 追加学習
450局自己対戦 500po 勝率 37.6% 20Kiter 学習後 100Kiter 追加学習
このデータから追加学習で勝率が向上する事が分かります
![]()
![]()
CGFオープンが10月10日(土)、11日(日)に開催されます。
今年は新型コロナウイルスの影響で、オンラインでの開催となります。
当日の対局の連絡などはSlack、Zoomで行います。
皆様のご参加をお待ちしております。
参加申し込み締め切り 2020年 10月 5日(月)
大会 2020年 10月10日(土) 10:00-17:00 9路盤のみ
2020年 10月11日(日) 9:30-16:00 19路盤のみ
会場: オンライン開催
CGFオープン2020、大会要綱
http://hp.vector.co.jp/authors/VA012620/cgf2020/cgf2020.html
現在の参加者予定リスト
http://hp.vector.co.jp/authors/VA012620/cgf2020/list2020.html
CGFオープン
http://hp.vector.co.jp/authors/VA012620/
どこの言葉なんだろうと思ったら日本語の武術の「型」から来てるそうです。
強化学習で、自分自身を絶え間なく鍛錬して、独自のフォームを完成させる自己対戦のボット、
からの連想だそうです。
The Name of KataGo
https://github.com/lightvector/KataGo/issues/311
自己対戦と、対Kristallweizenとの宣言勝ちの推移を先手番、後手番で分けて調べてみました。
10000棋譜ごとの自己対戦での宣言勝ちの推移(上のグラフ)
http://www.yss-aya.com/20200911declare.png
1000万棋譜から先手番での宣言勝ちが増えています。
現在もゆるやかに上昇中です。
ただ後手番の宣言勝ちは増加が止まってます。
それでも10000局で合計400局、4%程度が宣言勝ちなだけです。
10000棋譜ごとの自己対戦での引き分けの数(中のグラフ)
http://www.yss-aya.com/20200911draw.png
こちらは引き分けの数です。やや最近は増加傾向です。
800局なので全体の8%程度が引き分けです。
512手超えはほぼなく、99%以上が千日手です。
対Kristallweizenでの宣言勝ちの推移(下のグラフ)
http://www.yss-aya.com/20200911declare_krist.png
対Kristallweizenでもw950(600万棋譜)から先手番での宣言勝ちの
割合が増えています。
w1360(1000万棋譜)ではもうすでに、先手では60%の勝、と
大きく差が出てます。自己対戦では1000万棋譜で
ようやく先手が増えだしたのとは、かなり異なります。
現在では先手の勝ちの75%近くは宣言勝ち、後手では35%、と
大きな差が出ています。
ただ、先手、後手の勝率には差はほぼないです。AlphaZeroは
対elmoでは先手勝率98%、後手84%と大きな差があります。
![]()
![]()
![]()
floodgateだとAobaZeroは max_moves が多くレートが正しく測れていない感じです。
gikou2_1c は悪くなると投げて max_moves にならないので技巧2相手だけでレートを計算すると、
過去30日だと gikou2_1c は w1705 から w1905 までの11個に対し72勝30敗
勝率 0.706 は 152 ELO差。技巧2 が 3300 なので、AobaZeroは 3148 程度で、
現在の3000程度より150ぐらい上かもしれません。![]()
今まで気づかなかったのですが、論文の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 勝率 80.9% (先手勝率 83%、後手勝率 79%) 先手で宣言勝ちは94%の割合
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
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
![]()
2015年電王戦の阿久津8段 vs AWAKEをモチーフにした映画が
今年の12月に公開されるそうです。
主役の吉沢亮さんは2021年のNHK大河の主役を演じる予定の俳優さんです。
CSAも少し手伝っており滝沢さんと私が昨年、撮影現場にお邪魔していました。
吉沢亮、AI将棋のプログラミングにのめり込む! 伝説の将棋電王戦描く「AWAKE」12月公開
https://eiga.com/news/20200812/4/
映画「AWAKE」公式サイト
https://awake-film.com/
AobaZeroは対Kristallweizenとの棋力計測に磯崎氏が作成された互角局面集を使っています。
これを使わずに「やねうら王 標準定跡」を相手側だけつかうようにすると
AobaZero w1650の1手800 playoutは
Kristallweizen 1手500k 相手だと +114 ELO 強く、
elmo 1手346k 相手だと +155 ELO 強くなります。
これは互角局面集にAobaZeroが指さない戦型(穴熊や先手振飛車、対振で船囲いから急戦など)が
含まれてるためと思われます。
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
プロ棋士のfloodgateでのレートを推定してみました。
基準となるのはプロ棋士の千田さんが2015年にAperyと持時間1時間1分で54局対戦して
勝率2割(10勝40敗4千日手)だったことです。
Apery_WCSC25 1時間(2015年6月)
http://blog.livedoor.jp/mizumon_/archives/728040.html
千田さんのマシンは「i7_5960X_8c 16GB」
E5-2687W(3.1GHz, 8コア,16スレッド)で8スレッド使ってfloodgateで apery_WCSC25_E5-2687W_8t で走らせました。
495局対戦して3066点。
http://wdoor.c.u-tokyo.ac.jp/shogi/view/show-player.cgi?event=LATEST&filter=floodgate&show_self_play=1&user=apery_WCSC25_E5-2687W_8t
floodgateは5分10秒。1手15秒として1手60秒は4倍。思考時間10倍で+330とすると、4倍で+199。
3066+199 = 3265
3265のAperyに勝率2割、は 240点差。千田さんの2015年は3025点。
プロ棋士のレートを計算してるページ(棋士別成績一覧)では、千田さんの2015年6月のレートは1683点。
http://kishibetsu.com/2015R/1291.html
このページのレートに 1342点 (3025-1683) 足せば floodgate のレートに一致します。
現在のトップは藤井聡太二冠の1978点(棋士別サイト)なので+1342でfloodgateでは3320点。
藤井聡太二冠 1978点(2020-09-27) floodgate 3320?
千田さん 1837点(2020-09-27) floodgate 3179?
1683点(2015-06-02) floodgate 3025?
思考時間10倍で+330、は下を基準としています。
KristallWeizenが
1手1000k -> 100m で +712 (100倍)。10倍で+356
elmoが
1手1000k -> 10m で +303
レート3100点ぐらいから10倍で+356と+303なので、中間をとって+330としました。
(10倍で+330は2倍で+99です)
Krist_483_473stb_16t_100m 3962 +712 (100倍)
Krist_483_473stb_1000k 3250 +443
Krist_483_473stb_100k 2807
elmo_WCSC27_479_4t_10m 3330 +303
elmo_WCSC27_479_1000k 3027 +372
elmo_WCSC27_479_100k 2655
メモリが16GB程度ではハッシュテーブルが考慮時間分もたない気もしますが
以前から千田先生が言われてるようなgikou2のdepth11か12のレーティングにも近いのですね。
http://blog.livedoor.jp/mizumon_/archives/20452513.html
次はプロ棋士にAobaZeroのp800と対戦して頂きたいです。
千田さん、技巧2のdepth11,12とも50局対戦されていたのですか。
貴重なデータでありがたいです。
以前チェスソフトの開発者のDon Daileyが、
持時間を増やしたときのレートの伸びはソフトより人間の方がはっきり高い、と言われてました。
9月27日から中国で開催されていた
2020 World Artificial Intelligence Go Competition(福建海峡銀行杯)
はスイス式7回戦で予選が行われ上位の8チームが準々決勝に進むそうです。
ネットの問題で70試合のうち、28試合が時間切れや相手が不在、などで終わってます(senseisの結果より)。
LeelaZeroが通過で、より強いKataGoが9位で予選落ちしてる、のも残念な結果です。
上位はKataGoをベースにしたソフトが多数、という話もありました。
https://twitter.com/ohashihirofumi/status/1310943040618532864
勝数 SB 順位
Myrtyle Go 6 30 1
ChoRanGo 6 29 2
Golaxy 5 28 3
Tian Go 5 26 4
YiLeGo 4 30 5
DolBaram 4 29 6
LeelaZero 4 29 7
izisgo 4 25 8
KataGo 4 25 9
Clear Stone 4 19 10
Yixiaotian 3 28 11
AiqiGo 3 25 12
WeiHuGo 3 25 13
FlyingTiger 3 23 14
Handtalk 3 23 15
DaPangGo 3 19 16
BaduGI 3 18 17
XiaofeiGo 2 19 18
Go Sprit 1 21 19
BSK 0 19 20
Result (BSKの作者の神宮司さんのツイッター)
https://twitter.com/oubeika11/status/1310903786483802115
公式?な結果と棋譜(中国語)
http://game.egcode.cn/#/match/7
2020 World Artificial Intelligence Go Competition
https://senseis.xmp.net/?2020WorldArtificialIntelligenceGoCompetition
2020 World Artificial Intelligence Go Competition Rules & Information
https://gameofgo.app/general/world-go-artificial-intelligence-tournament-2020
大会の紹介記事(中国語)
https://sports.sina.com.cn/go/2020-09-08/doc-iivhvpwy5522546.shtml
CGFオープンが10月10日(土)、11日(日)に開催されます。
今年は新型コロナウイルスの影響で、オンラインでの開催となります。
当日の対局の連絡などはSlack、Zoomで行います。
現在の参加予定者は2名となっています。
皆様のご参加をお待ちしております。
参加申し込み締め切り 2020年 10月 5日(月)
大会 2020年 10月10日(土) 10:00-17:00 9路盤のみ
2020年 10月11日(日) 9:30-16:00 19路盤のみ
会場: オンライン開催
CGFオープン2020、大会要綱
http://hp.vector.co.jp/authors/VA012620/cgf2020/cgf2020.html
現在の参加者予定リスト
http://hp.vector.co.jp/authors/VA012620/cgf2020/list2020.html
CGFオープン
http://hp.vector.co.jp/authors/VA012620/
10日、11日にCGFオープンが行われ以下の通りでした。
9路の結果
10月10日(土) 9路 10分切れ負け、中国ルール、コミ7.0目
Ray Rn BSK Koha Aya GNU Pyaq 勝也 勝数 順位
Ray =1 11 11 01 11 11 11 12.5 1
Rn 0= 01 =1 11 11 11 11 11 2
BSK 00 01 == 01 11 11 11 9 3
Kohada 00 0= == 1= 11 11 11 9 4
Aya 01 00 01 =0 11 11 10 7.5 5
GNU Go 00 00 00 00 00 11 11 4 6
PyaqArgo 00 00 00 00 00 00 11 2 7
勝也 00 00 00 00 10 00 00 1 8
* "=1" は黒番で持碁、白番で勝ち、の意味。= は0.5勝計算。
* 1回戦の1局目 Pya(黒)-勝也(白)、は勝也が動作せず時間切れ負け。
* 1回戦の2局目 BSK(白)-Rn (黒)、はRnが持時間30分とサーバから情報が来ていて時間切れ負け。棋譜はその後も打ち続け持碁。
* 2回戦の1局目 Aya(黒)-勝也(白)、は持時間30分で打たれてAyaの時間が10分を過ぎたがAyaの勝とした。
19路結果
10月11日(日) 19路 30分切れ負け、日本ルール、コミ6.5目
順位 Program Name 1 2 3 4 5 6 Pt SOS SB MD
1 Rn 8+ 3+ 2+ 5+ 6+ 4+ 6.0 17.0 17.0 12.0
2 Kohada 5+ 4+ 1- 3+ 7+ 6+ 5.0 19.0 13.0 8.0
3 BSK 6+ 1- 4+ 2- 8+ 7+ 4.0 17.0 6.0 3.0
4 Ray 7+ 2- 3- 8+ 5+ 1- 3.0 19.0 4.0 1.0
5 Aya 2- 7+ 6+ 1- 4- 8+ 3.0 17.0 3.0 1.0
6 GNU Go 3- 8+ 5- 7+ 1- 2- 2.0 19.0 1.0 0.0
7 勝也 4- 5- 8+ 6- 2- 3- 1.0 17.0 0.0 0.0
8 PyaqArgo 1- 6- 7- 4- 3- 5- 0.0 19.0 0.0 0.0
* PyaqArgo - Rn は Argo がWifi回線不調のため時間切れ負け。
* 勝也 - Pyaq は417手で、400手超えで審判裁定
* Rn-BSKは原因不明で対局が停止し、持ち時間を15分で再試合を行った
2020年 CGFオープン結果
http://hp.vector.co.jp/authors/VA012620/cgf2020/result2020.html
棋譜
http://hp.vector.co.jp/authors/VA012620/cgf2020/cgf2020.zip
参考までにCGFオープン版Rnについて。
9路 LeelaZeroをベースにRayの囲碁知識をNNの入力に加え、
また強化学習にKataGo方式をいくつか導入しました。
初期棋譜に一部AyaとCGOSの棋譜を使ってる以外は自己対局棋譜で強化学習しています。
基本的にcgosのrn.6.3.945と同じものですが、
ponderingの再開タイミングはNNGS-GTPブリッジ向けに調整しています。
https://github.com/zakki/leela-zero/tree/9x9-endstate
19路 Ray(8.0)ベースの探索部分とLeelaZeroのNNを使っていました。
CGOSのRLO.0.8と同じでネットワークだけ#278に更新しました。
https://github.com/zakki/Ray/tree/lz
UEC杯に向けては独自の19路ネットワーク作れるくらいに強化学習コストを減らす方法が欲しいところです。
詳細な解説ありがとうございます。
Ayaは19路はLZの棋譜からシチョウなどの情報を追加して
192x15bで学習させたモデルを作ったのですが
LZの 192x15b(a4b5)にPolicyだけで勝率25%程度にしからならず、
これで参加しようと思ったのですが直前に時間をかけるとCaffeが落ちる現象が発生して、前回のUEC杯と同じもので参加しました。
KataGoの棋譜があるのを見つけたので、UEC杯はこれで学習してみようかと思ってます。
> UEC杯に向けては独自の19路ネットワーク作れるくらいに
LZにシチョウだけ追加して強化学習させるには100万棋譜ぐらいで何とかならないですかね・・・。
katago-public/g170/selfplay
https://d3dndmfyhecmj0.cloudfront.net/g170/selfplay/index.html
katago-public
https://d3dndmfyhecmj0.cloudfront.net/index.html
> Ayaは19路はLZの棋譜からシチョウなどの情報を追加して
> 192x15bで学習させたモデルを作ったのですが
> LZの 192x15b(a4b5)にPolicyだけで勝率25%程度にしからならず、
LZの棋譜から学習するのはRnでも前回UEC杯の時に試してたんですが
LZの学習済みウェイトにnet2netで入力特徴追加して学習すると追加した特徴がほとんど使われないし、
完全に新規ネットワークから学習するとLZよりだいぶ弱くなるというので何か課題がありそうです。
今回自己対局からやった9路は普通には強くなっていくので特徴追加自体がまずいってことは
無いとおもうんですがよくわかってません。
> 追加した特徴がほとんど使われない
そうなんですか・・・。ある程度役割が決まってて、もう入る余地がない、という感じなのでしょうか。
> 完全に新規ネットワークから学習するとLZよりだいぶ弱くなる
入力の特徴含めて棋譜がそれに特化されている、とかはあるんでしょうかね?
NNは本当に賢くてバグがあってもそれなりに学習してくれるのでデバッグ難しいです。
AlphaGoZeroの Replay Buffer (window_size) は 50万棋譜なので
本来、50万 * 1棋譜平均220手 = 11000 万局面 ぐらいのshuffle buffer が必要?だと思うのですが。
実際は
shuffle_size=1<<20 (1048576 個、104万個)
で100分の1です。
11000万局面だと230GBくらいメモリを必要とするので多分ほとんどのマシンで動かないですが。
これを緩和するため?に
DOWN_SAMPLE = 16
という値があって、16局面から1つぐらいしか取り出さないです。
ただ、50万棋譜分の局面を指定してAGZに合わせるには100分の1のサイズなので100倍の
DOWN_SAMPLE = 100
ぐらいにしないと釣り合わない気がします。
shuffle bufferはミニバッチに使われたデータは即削除して別の新しいデータをそこに埋め込むようになってます。
LeelaZeroは他にも同時に子プロセスを8個ぐらい起動して、それぞれが最初に
ランダムに局面群(*.gz)をシャッフルして読んで、最初にshuffle bufferを埋める、
という仕様になっています。
コード眺めてつくづく思うのはLZは論文が発表されて1か月くらいでよくこのシステムを
作り上げたなぁ、ということです。感心します。
保木先生にお願いしてAobaZeroの棋譜を大量転送頂きました。
以後はこちらを参考に追加しました。
https://tokumini.hatenablog.com/entry/2020/09/11/140000
pythonだとlzmaライブラリが標準であるので前処理プログラム自体は意外と簡単でした。
GILがあるのでスクリプト8つ同時稼働しましたが1PC一晩でほぼ変換終わりました。
将棋ではやねうら王はじめ多くの教師データがハフマン符号化されてますが
囲碁では圧縮構造は使われてないのでしょうか?
LeelaZeroは内部で棋譜でなく局面(NNへの入力生データ)で持っていて圧縮はしていないです。
Policyの個々の確率は圧縮してもあまり小さくならないかもしれません。
ただそのお陰で汎用性はあると思います。
AobaZeroの学習は棋譜で持っていて、最近だと50万棋譜で9GBくらいで収まってます。
教師データがone-hotじゃないんですね。
うちでは面倒なのでone-hotにしちゃってました。その代わり数億局面メモリに乗ります。
ファイルとしてはgzip圧縮してて、メモリ上でもpack形式にはしてて節約してはいますね。
そうでした。石の配置はbit列で詰まってますね。
AobaZeroをLZの学習コードで動かしてみようと、改造してたのですが
Policyの教師がLZだと19*19+1=362 (* float 4 byte) なのですが
将棋だと9*9*139=11259 と巨大になって思案してます。
その辺,囲碁の方がずっと楽なんですよね。
私は当初から入力は現局面だけにして後は探索任せにしてます。
KataGoとGolaxyをハイスペックで打たせた結果、KataGoが2連勝しています。
KataGoは2080Tiを8枚、Golaxyはwebで利用できる?x24というものです。
持ち時間1時間1分。
Golaxyって50blockだったんですね。
White: Golaxy Pro AI 24x speed - 5.6k playouts per second on 50 block engine
Black: Katago 1.61 with 8 2080ti gpu's - 8 k playouts per second on 40 block engine
Post subject: KataGo Versus Golaxy - Kata's got game
https://lifein19x19.com/viewtopic.php?f=18&t=17820&sid=16a7a000967543f693110cf991aa175e
AobaZeroのWindows版を1年ぶりに更新しました。
GPU使用時に速度が5倍ほど速くなっています。
エンジン登録時に3分ほど時間がかかります。
https://github.com/kobanium/aobazero/releases
現在、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 %)
12x256 で生成した棋譜を 20x256 で学習させて棋力が
追いつけば移行しようとしてましたが
追いつかず移行を断念して 12x256 を続けるそうです。
> Training of 20x256 ended with nets that are no stronger than 12x256.
> They are available, but we will go on doing self-plays on 12x256 to save resources.
なんとなく伸び悩んでるのは意図的に直前手の情報を与えていないのが
大きい気がします。
大きなネットワークで学習させたから必ずしも強くなる、というわけでもないのでしょうか?
AobaZeroも 20b x256 で作った棋譜を 40b x256 で学習させたものは
ほぼ同じ強さにしかなっていないです。
100万棋譜ぐらいの時に、15b x64 で作ったものを 20b x256 で学習させたときはそれだけで
自己対戦だと+100ほどは強くなったのですが(同じplayout数で)。
SAI
http://sai.unich.it/
Rnの9路はネットワーク大きくして以前の教師データで訓練しても若干弱いくらいなのは
なんかそういうものだと思って若干弱いところから強化学習再開してました。
最初から15x192と割と大きいネットワークから初めてからなんでしょうか。
> 以前の教師データで訓練しても若干弱いくらい
それでも大きなネットの方が強くなっていくのは何か不思議な感じです。
今にして思えば、AlphaZeroはStockfishやAGZを抜けなければ
どんどんネットの大きさを倍、倍、にしていくつもりだったのでしょうね。
倍にしたときの速度の低下(1.5倍くらい?)に比べれば
棋力の伸び(2.0倍くらい?)の方が若干大きい気がします。
11月3日にNHKのBSで放送された番組の再放送が12日あります。
コンピュータ将棋の関係者も多数登場します。私も少し出てきます。
アナザーストーリーズ「名人がAIに負けた日 〜人間VS将棋ソフト〜」
[NHKBSプレミアム] 2020年11月12日 午前8:00 ~ 午前9:00 (60分)
https://www.nhk.jp/p/anotherstories/ts/VWRZ1WWNYP/schedule/
GPW(ゲームプログラミングワークショップ)の論文が公開されています。
https://ipsj.ixsq.nii.ac.jp/ej/index.php?action=pages_view_main&active_action=repository_view_main_item_snippet&index_id=10402&pn=1&count=20&order=7&lang=japanese&page_id=13&block_id=8
今年の招待講演はStockfishに移植されたNNUEの野田さんと25周年を記念して松原さんです。
https://www.logos.ic.i.u-tokyo.ac.jp/~tsuruoka/sig-gi/gpw/2020/program.html
リンク先の論文を眺めていて、MC Softmax探索というのを初めて知ったんですが、将棋で有効なんでしょうか?
別手法でMonte-Carlo tree search as regularized policy optimizationのπに基づいた確率的探索を囲碁で試した限りでは探索ノードの選択を確率分布で行うのは、それなりの頻度で1路のような意味のない手を読んで微妙でした。バックアップ側でも確率分布を使ってるのがいいんでしょうか
まだ既存の手法を上回る、という感じではなかったと思います。
11月9日に微修正されてます。
気が付かなったのですが、こまめに修正されていますね。
40bの結果が載ってる、とかではないようで、どこが変わったかはパッと見には分かりません。
Accelerating Self-Play Learning in Go
https://arxiv.org/abs/1902.10565
なるほど。
ちゃんと読んでみると実験結果も選択温度とバックアップ温度を極端に下げると既存手法の挙動に近づき結果として強さも既存手法程度でそれ以外だと弱くなっていますね。
11月21日、22日に電竜戦が行われます。
1日目に10試合で、上位10チームが2日目に総当たり9回戦を行います。
残りの下位チームも9回戦を行います。
優勝賞金は100万円以上、と豪華です。
参加費は5000円です。
すべてオンラインでfloodgateのように繋ぎっぱなしで対戦が進んでいきます。
(囲碁のKGSトーナメントと似ています)
現在30チームのエントリーのようです。
電竜戦
https://www.denryu-sen.jp/
論文には書いてないKataGo独自の手法の解説が公開されてます。
最近試した "subtree value bias correction" という手法で 30-60 Elo ほど強くなったそうです。
Posted a doc describing a few methods in KataGo
https://github.com/lightvector/KataGo/issues/349
論文に書いてない小ネタがgithubにいくつかのってました。
試そうとしてた、バッチ正規化から簡易な正規化への差し替えやPolicy Surprise WeightingのあたりがKataGoに実装済みで流石lightvectorです。
安心して実装できるけどKataGoに勝てる気がしないです…
https://github.com/lightvector/KataGo/blob/master/docs/KataGoMethods.md
賞金『総額』が100万円以上、なので、
優勝にほとんどの賞金を注ぎ込むのでなければ、
優勝賞金は100万円もいかないのではないかと思います。
(たぶん)
ほんとだ、総額、ですね。失礼しました。
KataGoが使ってるFixup Initializationよりさらに簡易化してBatch Normalizationを失くしてResNetブロックの加算の前に0で初期化したスカラー変数を掛けるだけのSkipInitを試してみましたがBNありと同じ学習率で同じように学習進みます。
全体としての強さや強化学習したときの挙動は分かりませんが、それにしてもあの面倒な処理は一体…
https://arxiv.org/abs/2002.10444
あまり理解してませんが、Batch Normalizaionはもういらない感じなんでしょうか。
学習時間が1.6倍くらい速くなる、とのことで既存の棋譜から学習させる場合にはかなり助かりそうですね。
GPWの野田さんの招待講演のスライドが公開されています。
野田さんの初期の版だと1000局に1回しか勝てなかったのが
海外のStockfishコミュニティの努力で +130 Eloまで強くなった理由は
学習させた棋譜の質、なのでしょうかね?
Stockfish NNUEプロジェクト - 第25回ゲームプログラミングワークショップ (GPW-20)
https://www.slideshare.net/HisayoriNoda/stockfish-nnue-25-gpw20
画像認識だとバッチサイズが大きい(1024とか)時はBatch Normalizationのほうが精度が出るらしいです。
チェスのポーンのプロモーションや囲碁のセキのような稀にしか発生しない重要なケースでBNが問題起こすとかなんとかlc0の人々がネットワークのウェイトや計算中の値まで見てデバッグしてるの凄まじい。
Batch Normalizationもまだ有力な場合があるのですね。ありがとうございます。
> 稀にしか発生しない重要なケースでBNが問題起こす
おー。やっぱりこれぐらい気合が入ってないとダメですか。
出現率が低い現象にはBNはいまいち、というのはなんとなく納得いきます。
とりあえず下記のようにすれば棋譜生成されます。
%cd
!git clone -b develop https://github.com/kobanium/aobazero.git
!apt install libboost-dev libboost-program-options-dev
!apt install libboost-filesystem-dev liblzma-dev zlib1g-dev
!apt install opencl-headers ocl-icd-libopencl1 ocl-icd-opencl-dev
%cd aobazero
!sed -i -e "1i #include" src/common/err.hpp
!make -j2
!./bin/autousi
v1.7がリリースされています。
棋譜生成される方は更新をお願いします。
投了勝率が自動調節になりました。間違った投了の割合が5%未満になるようにしています。
現在の投了の勝率は23%とかなり大きな値です。
この影響で投了なしだったときは平均手数が141手だったのが
10%で投了、で105手に
23%で投了、で82手ぐらいまで下がってます。
これに関連して棋譜(*.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
山下さん
電竜戦、お疲れ様でした。
GCTです。
AobaZeroの棋譜を活用させていただき、電竜戦を優勝することができました。
ありがとうございます。
電竜戦モデル、学習に使用したColabと学習データ一式の公開を予定しております。
AobaZeroの棋譜(CSA→hcpe形式に加工済み)を配布させていただいても大丈夫でしょうか。
ご検討をよろしくお願いします。
加納 様、
優勝おめでとうございます!Deep Learningが優勝したことは
大きなマイルストーンだと思うのでビックリでした。
またAobaZeroの棋譜も使っていただいた、とのことでうれしく思います。
変換した棋譜の二次配布、ぜひ自由に行ってください。
電竜戦モデルの公開、楽しみにいたしております。
山下さん
ご快諾ありがとうございます。
電竜戦モデルの方は、公開させていただきました。
「GCT電竜」とdlshogi(NVIDIA GPU非搭載PC対応版)の公開
https://tadaoyamaoka.hatenablog.com/entry/2020/11/25/223328
学習資材についても同様に、山岡さんブログ経由で、
公開させていただきます。
電竜戦の成果が、Deep Learning系の普及と発展の助力になればと考えております。
以下のとおり、公開させていただきました。
ご協力ありがとうございます。
「GCTの学習に使用したデータセットとノートブックを公開します」
https://tadaoyamaoka.hatenablog.com/entry/2020/11/26/203912
9月27日から9月30日に予選が行われていた
2020 World Artificial Intelligence Go Competition(福建海峡銀行杯)の
準々決勝が11月30日に行われ
MyrtleGo, TianGo, Golaxy が 2-0、LeelaZero が 2-1 でベスト4に残ったようです。
LeelaZeroの1敗は回線トラブルのようです。
以下のスケジュールは下記のようです。特定?がよく分かりませんけど。
11月30日 準々決勝(8チーム)
12月1日 準決勝(4チーム)
12月2日 準決勝、決勝
12月3日 決勝
12月4日 決勝(特定)
【2020世界囲碁AI大会・8強戦】LeelaZero勝利
https://okao-golab.com/2020-baduk-ai-world-championship-best8/
海峡銀行杯2020世界人工智能囲碁1/4決勝
https://sports.sina.com.cn/go/2020-11-30/doc-iiznezxs4490912.shtml
World Go AI championship tournament schedule
https://www.reddit.com/r/cbaduk/comments/jzb60d/world_go_ai_championship_tournament_schedule/
2020 World Artificial Intelligence Go Competitionの予選結果
https://524.teacup.com/yss/bbs/3668
論文に近い条件でelmo(WCSC25)対戦させた結果が下です。
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は思考時間が長いと先手勝率が高い
https://524.teacup.com/yss/bbs/3662
AobaZero vs elmo(WCSC25) (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(WCSC25) 251000k /手, 6 threads, HASH 8GB, elmo付属の定跡使用
この120局で、2080Tiの学習の空き時間を使って2か月半かかってます。
aobazero v1.7 w2620の1プレイアウトで対局していたのですが、先手勝ちの一手詰みの局面で評価値が-5000になるみたいです
先手勝ちのゲームで起こるようで、後手勝ちだと反転しないようです
局面
position startpos moves 6i7h 3c3d 7g7f 4a3b 2g2f 8c8d 2f2e 8d8e 2e2d 2c2d 2h2d 8e8f 8g8f 8b8f 2d3d 2b3c 5i5h P*2h 3i2h 8f8b 3d3f P*8f 8h3c+ 2a3c P*8h 8b8d B*6f 8d2d 6f3c+ 3b3c 3f3c+ 2d2h+ G*3h 2h2a P*2c B*5d 3c2d 7a7b N*3d B*5e 5g5f 5e4d 2c2b+ 3a2b 3d2b+ S*5g 5h5g 4d2b P*2c 2b4d S*5e 5a6b 5e5d 5c5d S*3c 4d5c 2c2b+ 2a5a 2b1a 6b7a 5g4h S*6e 6g6f 6e6f P*6g 6f6g+ 7h6g 8f8g+ 8h8g N*2f 3h2h P*3b 3c3b+ 5c4d 8i7g 5d5e 5f5e 5a5e P*5f 5e3e 2d2a 7a8b 3b4b 3e3d P*6b 4d6b S*5b P*2g 2h2g 3d6d P*6e 6a5b 6e6d 5b4b 6d6c+ 7b6c P*6d 6c7b 6d6c+ 7b6c P*6d 6c7b 6d6c+ 7b6c L*6f P*6d 6f6d 6c6d P*6e P*6f 6g6f 6b4d 6f6g S*6f 6g6h 6f7g+ 2g2f 7g6h 7i6h P*6g 6h6g P*6f 6g5h P*5g 4h5g G*6g 5g4h P*5g 5h6g 6f6g+ 4h3h 4d2f 2a2f 6d5c 5f5e S*5h 4i4h 5h5i 4h4i 5g5h+ 4i5i L*8c 5i5h 6g5h 3h2g N*1d 2f2a S*2f 2a2f 1d2f R*2a 5c6b 2a2f+ 5h4h N*7e R*3i G*2h G*7b N*6d 7b7a 5e5d 3i9i+ 5d5c+ 4b5c P*5d 5c5d P*5e 5d6e P*6c P*2e 2f2e 6e6d 6c6b+ 7a6b P*6c 6d6c 7e6c+ P*2f 2e2f 6b6c P*6d 6c6d S*5c 6d6c S*5d 6c5d 5e5d 9i3i S*7a 8b7a G*6b 7a8b
この局面から71角打、92玉、82金打と進むのですが、82金打でcpが-5000になって投了値を設定していると投了してしまいます。
82金打のnet_v=0.979なのに-1.000がおかしい?
先手 71角打
info depth 1 score cp 3504 nodes 1 nps 142 pv B*7a
0( 0) 0071KA, 1, 0.994,bias=0.9101502299
best:0071KA, 1, 99.71%( 0.994),bias= 0.910
+0071KA
0.01 sec, c=219,net_v=0.989,h_use=2,po=1,143/s,ave_ply=1.0/1 (192/0),Noise=0,g=1,mt=1,b=1
後手 92玉
info depth 1 score cp -2713 nodes 1 nps 166 pv 8b9b
0( 0) 8292OU, 1,-0.979,bias=1.0000000000
best:8292OU, 1, 1.07%(-0.979),bias= 1.000
-8292OU
0.01 sec, c=1,net_v=-0.994,h_use=3,po=1,143/s,ave_ply=1.0/1 (193/0),Noise=0,g=1,mt=1,b=1
先手 82金打
info depth 1 score cp -5000 nodes 1 nps 1000 pv G*8b
0( 0) 0082KI, 1,-1.000,bias=0.9898798466
best:0082KI, 1, 0.00%(-1.000),bias= 0.990
+0082KI
0.00 sec, c=219,net_v=0.979,h_use=4,po=1,500/s,ave_ply=1.0/1 (194/0),Noise=0,g=1,mt=1,b=1
追記
この行が影響してそうです
https://github.com/kobanium/aobazero/blob/release/src/usi-engine/bona/ysszero.cpp#L1131
ご指摘ありがとうございます!
ご指摘の通り、その行が間違っていました。
developブランチを修正しました。近日中にリリースも更新いたします。
▲71角を打つ前から探索させると、最初に▲82金の局面に着いた時だけ、
NNを呼ぶ関数が(実際には詰んでるのでNNは呼ばずに)先手勝ち(+1)なのに負け(-1)と間違った値を返していました。
2回目以降は探索内部で可能手がないときは負け、と正しい値を返すため、
探索回数が増えるほど気づきにくかったです。
1手10playoutでw2755同士を互角局面で800局対戦させると
バグ修正の363勝-83分-354敗、勝率=0.506(+3 Elo) とほぼ棋力には変化はないようです。
マルチGPUでautousi.cfgはどのように表記すればいいのでしょうか?
単純にプロセス数を増やした方がいいのでしょうか?
そういえば書いてなかった気がします・・・。失礼しました。
2枚の2080Tiだと下記のように指定します。
Device O0:28:85W O1:28:85W
6枚全部指定だとこちらの環境ではプロセスが多すぎる、とエラーになるので
別のディレクトリのautousiを3つ起動しています。
Linuxの環境だと、
SleepOpenCL 1
にすると若干CPUの使用率が下がるかもしれません。
(Windows環境だと有効にするとかなり遅くなります)
普通に詰ませていたw800をw2821と3-7の割合でSWAしたところ
割とまともに詰ませるようになりました。
強さはw800より強くw2821より弱いという感じです
最新ウエイトの割合を上げるほど元の強さを維持しますが
詰ます能力はあまり上がらないようです。
詰ます手のポリシーがSWAの割合に応じて復活する感じです
面白い情報ありがとうございます。
宣言勝ちが増えだしたのは570万棋譜(w930)ぐらいからですので
それ以前のweightは王を詰ませる傾向が高いのかもしれません。
まだテストのようですが、KataGoをLeelaZeroのように世界中の人の協力で強くするプロジェクトが動いてます。
11月28日に始まって現在は40bの棋譜を作成中のようです。
KataGo Distributed Training
https://katagotraining.org/networks/
上のnetworkを動かすにはv1.7.0では動かず、githubのmasterからコンパイルする必要があります
The weight of kata1 becomes an error in lizzie
https://github.com/lightvector/KataGo/issues/371
9月9日から12月11日までは、3路から15路の大きさまでのすべての長方形サイズの碁盤( 8x7, 13x15 など)で
自己対戦で422万棋譜を作って人間より強いのが出来たそうです。
KataGo Distributed Training Test
https://test.katagodistributed.org/
重みの更新を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回学習されるように棋譜追加時の学習回数も調整しています。
MuZero 参戦希望 (^▽^)
https://venturebeat.com/2020/12/23/deepminds-muzero-picks-up-the-rules-of-games-as-it-plays/