電竜戦予行2

昨日(今朝まで)電竜戦の第二回予行演習が行われました。

第一回予行演習と同様に2ソフトエントリーいたしました。

あの叡王戦に並行して行われており非常に疲れました。

 

golan.sakura.ne.jp

 

エントリー名は白ビール1,白ビール2から地ビール,二番絞りとチェンジ。

 

地ビールは以前からゆるゆる改造しているGo言語でスクラッチ作成のプログラムです。

選手権用のクラスタ部の流用による副産物で,最近1000行超えました。

最新版のfloodgateレートはこんな感じです。いにしえの多くのスクラッチ勢と良い勝負ができそうな感じには仕上がっています。

f:id:the48:20200720113520p:plain

正直言ったところGo言語に向いていない部分があるのでこのまま進めるのはあまり意味がありません。具体的にはCPUの拡張命令を叩けない(叩くにはCGO経由ですがあまりにもオーバーヘッドが大きすぎる),小さなforループが遅いなど速度面がどうしようもありません。

それでも250knpsくらいまでは確保していたのですが先日バグをひとつ潰した際にまた一割ほどもどして220~230npsと言ったところです。

千日手判定ルーチンも入玉判定ルーチンも未搭載です。

ということで極稀に残念なことになります。

 

二番絞りは選手権用に準備していた機械学習用の教師データを流用して一部dlshogiを改造した深層学習モデルに食わせる実験です。前回は学習が思うように進まずへろへろに弱いままでしたが,一か月近く追加学習した今回は地ビールよりも強かったかもしれません。

夜中に通信が切れてましたが,もしかすると不戦勝3連戦と通信がない時間が長かったためにどこかの機能で切られたのかもしれません。floodgate接続でも稀にあるので原因の断定は無理かなぁと考えています。

 

今回の目玉はAobaZeroが6GPU搭載機で登場したことでしょうか。

春のオンライン大会優勝の水匠を完封し,完全に電竜戦の優勝候補と言っていいと思います。

今回電竜戦の特徴として512手を上限としているところで入玉形将棋が得意なAobaZeroに優位に働いたと思われます。しかしながら長手数まで指せるということは負けてないということですので決して通常の対局でも弱くはないのです。ただ,棋譜を見ていただければ詰めに行ってないことも分かります。

 

とうとう機械学習は将棋の意味を人間と違うように学習しはじめたのでしょうか。

今後の展開が楽しみです。

---

以上に加えてAobaZeroは地味な点ですが朝まで21戦エラー無く戦い続けたことです。安定感があることは優勝に必須条件ですのできっちり準備された成果と思われます。実際予行演習ではあるのですが不戦敗が多いのは楽しくないですからね。

ちなみに私は電王トーナメントで放送ブースに呼ばれている間に不自然な接続切れを起こした一件以外に公式戦での通信エラーや接続切れなどのトラブルはありません。準備は大切ですよ。

 

AbemaのAI雑感

今日は棋聖戦を見ていたところAbemaのAIの挙動に合わせて色々試したところ2コアのノートPCよりは遅いだろうと見当がついた。

 

  

概ね推察は一致しており,各方面で不評のようだ。

また,たまにAbemaTVのコメント欄を開くと白ビールとなのる読み筋と評価値の書き込みが行われておりAbemaAIが役に立たないことを前提に信頼を受けているようである。

 

とくに貶したいという意図はなく,可能なら改善してほしいということだ。恐らく視聴者の多くに加えて,普段AIを使われている解説のプロ棋士もそう思っているのではないだろうか。

 

以前もAIが示した最善手を指したのに評価が二転三転することがあり非常に残念な思いをした。

外部から見て推測できる範囲で,大きく問題点は二つあるように思う。

1.マシンが致命的に遅い。

2.評価値が変。

 

マシンが遅いのは実は意図的に行われている可能性はある。というのは普通に一般家庭にあるようなPCより遅いからだ。ニュースでも「藤井さんのAI越え」とかの方がウケるからだろうか。

 

評価値が変なのは言うまでもなく読み筋に妙なものが出る時がある。解説のプロ棋士(今日は特に森内永世名人)が訝しむレベルである。今日は特に普段から研究で使われていることを隠さず話されていたので微細な言葉遣いが興味深かった。(正直今日の収穫はここです。)

 

バックギャモンの方でも上級者がAIを使ったトレーニングをすることは一般化しているので,恐らく高速な計算機の意味についても理解されていると思う。

 

今日致命的だったのは秒読みに入ってからである。計算速度が遅いために秒読みに入ってから全くの役立たずである。これはニコ生のAIと段違いと言っていい。

個人的によくネタにする,天気予報のシミュレーションに一日かかる計算機はゴミだと言う話と類似している。もうちょいマシな計算機使えばいいのにね。

 

(明日早いので今日はここらで寝ます)

 

劣等局面と優越局面の話

某所で挙がっていた局面です。

f:id:the48:20200621081719p:plain

 

startpos moves 2g2f 3c3d 7g7f 8c8d 2f2e 8d8e 6i7h 8e8f 8g8f 8b8f 2e2d 2c2d 2h2d 2b8h+ 7i8h B*3c 2d2h P*2g 2h6h 8f7f 8i7g 7f2f 4i3h P*8g 8h8g P*8f 8g9h 7c7d 6h6i 7d7e 7g6e 5a5b 1g1f 3a4b B*8c 2f7f P*7g 3c7g+ 7h7g 7f7g+ B*5e 7g7h 6i6h 7h7i 6h6i G*6h 5i4h 7i6i 3g3f 6h6g 5e9a+ 7a7b 8c7d+ 2a3c 4h3g R*2d P*2f 3d3e P*6d 3e3f 3g2g P*2e P*7c 2e2f 2g1h 6i3i 3h3i S*2g 1h1g

 

▲2六歩 △3四歩 ▲7六歩 △8四歩 ▲2五歩 △8五歩
▲7八金 △8六歩 ▲同 歩 △同 飛 ▲2四歩 △同 歩
▲同 飛 △8八角成 ▲同 銀 △3三角 ▲2八飛 △2七歩
▲6八飛 △7六飛 ▲7七桂 △2六飛 ▲3八金 △8七歩
▲同 銀 △8六歩 ▲9八銀 △7四歩 ▲6九飛 △7五歩
▲6五桂 △5二玉 ▲1六歩 △4二銀 ▲8三角 △7六飛
▲7七歩 △同角成 ▲同 金 △同飛成 ▲5五角 △7八龍
▲6八飛 △7九龍 ▲6九飛 △6八金 ▲4八玉 △6九龍
▲3六歩 △6七金 ▲9一角成 △7二銀 ▲7四角成 △3三桂
▲3七玉 △2四飛 ▲2六歩 △3五歩 ▲6四歩 △3六歩
▲2七玉 △2五歩 ▲7三歩 △2六歩 ▲1八玉 △3九龍
▲同 金 △2七銀 ▲1七玉

 

後手27銀に先手17玉と逃げたところです。

賢明な方なら27銀が悪手で単に歩を成れば詰みとなるはずだったことが読めるでしょう。ということで27の銀を18に成り捨てる簡単な3手詰めの局面なのですがこれが読めない将棋エンジンが二種類あって技巧とやねうら王です。

確認用に棋譜をsfenとKI2で貼ってありますのでコマンドラインなら前者,ShogiGUIや将棋所などのGUIなら後者で試してみて下さい。

 

ShogiGUIと将棋所で挙動が異なります。まぁ確認している開発者は多いと思いますが,検討モードでShogiGUIは以下の局面を送ってきます。

sfen +Bn1g1g2l/2s1ks3/p1Ppppn1p/2+BP3r1/2pN5/1p4ppP/P2gPP1sK/S8/L5GNL w RL3p 1

過去の差し手を飛ばした現局面ですね。するとすべてのエンジンで3手詰めが読めます。

 

タイトルにも書いてますので気づいている方も多いと思いますが,これが読めない理由は劣等局面検索が原因です。

銀を成り捨てで同玉と取った局面が,銀を打つ前の局面と盤面と手番が完全一致しており持ち駒が銀一枚減っている状況です。(詳しくは以下リンク)

連載やねうら王miniを強くしよう!6日目 | やねうら王 公式サイト

 

こういった状況を劣等局面と表現して前の局面より確実に悪いと判断します。この時に局面に対して悪い評価値を絶対的な数値として与えるのが劣等局面評価値でやねうら王では-28000とかだったと思います。ただ,今回どちらでも即詰みが存在しておりこの劣等局面の判定が邪魔になったケースです。

技巧では劣等局面評価値で評価しており,最新のやねうら王では読み筋に劣等局面ですが評価はMate3が一瞬出ます。ちょっとしたアルゴリズムの差です。

 

詰みを見逃した局面をソフト検討することは稀でしょうからこの程度のバグ(まぁ本来考えられにくい用途ですが代打ちエンジンとしては欠陥かもしれませんので)は私は目をつぶりますが修正は簡単だと思います。

 

劣等評価をしていない場合はどうなるかというと先月のオンライン対局でAobaZeroだったと思いますが,歩を打って成り捨てる無駄な手がでるケースがあります。もちろん手詰まりの局面ですが打開後のことを考えると持ち歩は持っておいた方が良いに決まっています。

 

さて,本件は自分が指していない劣等局面に引かれて即詰みができないエンジンの話でしたが,本件逆もありそうです。簡単には劣等局面の逆,優越局面に引かれて最善手が指せないケースもfloodgate上の棋譜(対AobaZero)では多く見られます。打った歩を成り捨てた場合取れば優越局面なのでこれを絶対値として高評価値をつけているので優先的に取りますが,これを取らずに普通に相手玉に迫る手があるケースも結構あります。

 

もちろん手数が伸びるレベルの話で勝敗が逆転するようなことは今のところ見つけてはいません。ありうるのかどうか分かりませんが,見つかったら教えていただきたいくらいですね。

似たような話は千日手でもあるのですが,まもなく叡王戦も始まりますのでその辺はまた後日

 

Go言語でプロファイラ

Go言語もつらつらと使ってきているが,用途を限ってきたので速度を気にしているのは大量の計算をさせているときくらいになった。

以前からforのループが致命的に遅くその辺はあきらめていたが今回確認してみた。

 

christina04.hatenablog.com

 

参考にしたのは上記の記事。

使ったのは数値解析コードでなく自作の将棋エンジン(笑)

結果分かったのは指し手生成部分より局面評価関数が重いってこと。

 

単純なループを回しているだけなんだがGo言語だと一度内部にリストを作ってからループが回るらしく単純なループほどCやC++に差をつけられる。

ちょっとだけループ展開と演算順序の入れ替えをしたが一応計測できるレベルの高速化ができた。

といっても,ループが遅くSIMD演算も使えないようじゃボチボチ限界だなぁ。

 

Arduino不具合(1.8.12)

2020年6月10日,本日Arduino IDEが全世界的に不具合を起こしている。

状況を簡単に言うとIDEが起動しない。

 

起動時にパッケージのアップデートが行われており,その際にちょっとマズいファイルが落ちてくるらしく,そこでヌルポが出るそうである。

ちょっとマズいファイルもマズいが,パッケージチェックでパーサーがヌルポ出す方も出す方である。もちろんArduino IDEJavaVMで動いている。

 

で,環境ファイルがインストールの仕方によって変わってるらしい。

 

Windows EXEインストーラ

Userフォルダ/AppData/Local/Arduino15

 

Windows Storeアプリ

ドキュメントフォルダ/ArduinoData

 

Windowsポータブル版

実行ファイルの場所/portable

 

Mac

ユーザホーム/Library/Arduino15

 

問題のファイルを削除した上で

初期設定ファイルで起動時ネットワーク更新を切ればとりあえず起動するらしい。

意味が分からない人はこれを管理者権限でエディットするのはお勧めできない。

 

他にも一時的にポータブル版のフリをする。(portableフォルダを作る)

十分古いIDE(1.6以前)を使う。β版のIDEを使う。

ネットワークを切る。

などと対処法がネット上で散見される。

 

まぁ,原因が概ね分かったので近いうちに公式に対応されるだろう。

 

 

上座問題

昨今騒がれている将棋の藤井君が棋聖戦タイトル挑戦らしいです。

無茶なスケジュールで関係者大変だろうと思いますが,それも最年少記録のためと思えば仕方ないでしょう。

 

で,先日ハッシーこと橋本八段が解説で言われていたのがちょっと面白かったので取り上げます。

「藤井君と対戦したいですか?」

「正直対戦したくないです」

 

ただ,もう対戦が決まっているんですね。

決まっているから言う上記のコメントです。

第79期名人戦・順位戦 B級2組

と言っても棋聖戦第三局が7月9日とか発表されていますのでこの順位戦(7月8日)は後ろに押される可能性があります。(さすがに前倒しは無いと思ってます。)

 

で,別の中堅棋士

「藤井君と対戦したいですか?」

「今のうちに対戦したいです」

「今のうちとは?」

「今なら僕の方が上座なんです。もしタイトルでも獲ろうものなら初対面の高校生に上座に座られることになるんですよ。これは耐えられません。」

 

そうなんですよね。プロ棋士界序列があります。

プロ棋士界の序列について - 48's diary

タイトルは絶対的なので若かろうが上座です。中堅棋士になると数年後に負けることになっても初手合わせで上座ってのはちょっとメンタルがつらいでしょう。

前振りで藤井君凄いと言っておくのが心理的なクッションなのかもしれません。

 

で,ハッシーの件です。

ハッシーの初手合い前に棋聖戦第三局が行われるとしたら,もちろん可能性レベルの話ですがタイトル保持者になっているかもしれません。

もちろん上記の序列ルールでは順位戦順位戦のルールで上座に座ることができますが心境はいかほどのものか。

 

ね,ハッシー複雑な心境でしょ。

 

ご存じない方がいらっしゃれば「羽生 上座事件」でググってみてください。

再来かもしれないです。

浅漬けの元

 皆さん,在宅で手抜き料理作ってますか。

私は今日久しぶりに八宝菜を試みましたが市販調味材の関係で四人前生成してしまったために昼からお腹が・・・

 

本題に戻ります。

昨年から将棋の局面評価用に教師データを大量に生成しておりました。しかしながら,昨年を明確に上回るものを作れなかったために無駄になろうかとしています。

もったいないので深層学習を始めてみました。

 

今回はdlshogiをベースにオリジナルよりちょっと層が多いものを0から学習させてみます。現状数億局面ですが

 

  

探索部はLCB採択に改造しているのですが,評価値がこれでは裏目かな。

成功するか諦めるかするまでもうちょい頑張ります。

---

追記:

昨日は電竜戦のテスト対局でした。

www.golan.sakura.ne.jp

 

戯れに人間の指し手が出るそうなのと対戦者が奇数ということで,ほどよく弱い上記の浅漬け君もエントリーしました。

白ビール1がフルスクラッチエンジン,白ビール2が上記の浅漬け君です。

両者指し筋は見ていたので人間強豪には負けると読んでいたのですが時間切れ含めて負けませんでした。Sugarさんが白ビール1にやや優勢局面まで押していたので切れなければ勝ってたかもしれません。

賑わいにほどよい勝ち星数でしょうか。