TadaoYamaokaの日記

山岡忠夫Homeで公開しているプログラムの開発ネタを中心に書いていきます。

コンピュータ将棋

cshogiにリーグ戦モードを追加

プログラムの修正やモデルを学習した後の強さの計測に変更前後の自己対戦のみだと、系統が違うソフトに対して強くなっていないことがあるため、基準となるソフトを加えたリーグ戦で確認を行っている。連続対局には、cshogiを使用して、PGNファイルを出力して…

将棋AIの実験ノート:方策の分布を学習すると探索パラメータの調整が必要になる

以前に方策の分布を学習することで、Actor-Criticで学習するよりも精度が上がることを確かめた。 dlshogiの強化学習でも、方策の分布を学習するように移行した。しかし、テストデータに対する精度は上がるが、実際に対局すると弱くなっているという問題が発…

将棋AIの実験ノート:AVX対応

コンピュータチェスのCeresでは、PUCTによるノード選択の処理をAVXを使って高速化している。 これは、Ceres独自の「parallelized descent algorithm」(並列降下アルゴリズム)と合わせて使用することで、効果を発揮するもののようだ。Ceresで実際にどれくら…

将棋AIの実験ノート:方策の分布を学習 その3

前回の続き。 dlshogiの強化学習で、方策の分布を含む棋譜を生成し、そのデータを用いてモデルの学習を行い、方策の分布の有無による精度の違いを検証した。 棋譜生成 dlshogiの自己対局で、200万局面(29315棋譜)を生成した。 学習条件 Resnet10ブロック、活…

将棋AIの実験ノート:方策の分布を学習 その2

以前に、指し手を学習するより、方策の分布を学習した方が、方策の精度が上がるということを書いた。 しかし、現在、dlshogiの強化学習で生成している教師局面フォーマット(hcpe)では、方策の分布を記録していない。そこで、方策の分布を出力できるように、…

将棋AIの進捗 その56(データローダーの並列化)

dlshogiのモデルの訓練に使用しているPythonスクリプトは、ベタなforループで記述しており、ミニバッチ作成部分と、ニューラルネットワークの学習の処理をシーケンシャルに実行しており並列化は行っていなかった。ミニバッチデータの作成は、盤面から入力特…

AobaZeroの棋譜の統計情報

AobaZeroの棋譜を利用するにあたり、統計的な傾向を把握しておきたいと思い調べてみた。 調査範囲 arch000012000000.csa.xz ~ arch000026050000.csa.xzの棋譜を調べた。 1ファイル当たり1万棋譜含まれ、棋譜数は合計で14,050,000になる。 手数 手数を10手間…

将棋AIの実験ノート:初期局面集の優先順位付きサンプリング

深層強化学習の手法に、Prioritized experience replay (PER)(優先順位付き経験再生)という方法がある。 リプレイバッファに蓄積した経験データに優先順位を付けて、優先順位が高いほどより多くサンプリングする手法だ。優先順位の尺度には、TD誤差が用い…

将棋AIの実験ノート:Fixup Initialization

深いResNetの訓練では、勾配爆発が起きる。そのため、Batch Normalizationを使用するのが一般的である。Leela Chess Zeroでは、Batch Normalizationの統計情報に関連する問題が報告されている。 Pawn promotion issues in T40 · Issue #784 · LeelaChessZero…

将棋AIの実験ノート:最大手数で引き分けの局面を除外

dlshogiの強化学習では、最大手数(320手)に達した局面の価値を0.5として学習対象としている。補助タスクの学習の際に、教師データを調べていた際に、あと数手で詰みの局面で引き分けになっている局面が含まれていることに気付いた(これまであまりチェックし…

将棋AIの進捗 その55(勾配クリッピング)

dlshogiを初期値から学習を開始すると、lossがinfやnanになる場合がある。 初期値からの学習以外でも勾配爆発を防ぐために、勾配クリッピングのオプションを追加した。KataGoでも勾配クリッピングを追加している。学習が安定してからは特に効果はないようだ…

将棋AIの実験ノート:方策の分布を学習

一般的な方策勾配法では、選択した行動aに対して、損失を計算するが、 AlphaZeroでは、方策の損失は、探索から求めた方策の確率分布を使用している。 dlshogiでは、前者をベースにしたActor-Criticで更新を行っている。 後者の確率分布を学習する場合と、ど…

将棋AIの実験ノート:オフポリシー補正

強化学習において、サンプル効率が低いという課題の対処として、リプレイバッファを使用して過去の方策で生成したデータも学習に使用するということが行われている。 一般的に挙動方策(経験を蓄積する際の方策)と推定方策(学習する方策)が異なる場合をオ…

将棋AIの実験ノート:Attention Branch Network

以前に、Mask-Attentionについて記事にしたが、同様の手法にAttention Branch Network(ABN)がある。 ABNは、Attention Branchの損失も計算して訓練する点がMask-Attentionと異なる。 ここでは、ABNをdlshogiのネットワークに適用して、AIが注視している座標…

【dlshogi】Multi PV対応版の実行ファイル公開

dlshogiのMulti PV対応版の実行ファイルを公開します。 Release Multi PV対応版 · TadaoYamaoka/DeepLearningShogi · GitHub実行ファイルのみの公開ですので、世界将棋AI 電竜戦バージョン(「GCT電竜」同梱)に上書きしてください。また、探索部の改良によ…

将棋AIの進捗 その53(MultiPVの実装)

Qhapaqさんからのプルリクエストをもらっておきながら対応していなかったMultiPVに遅ればせながら対応しました。 MultiPVを使わない際の速度には一切影響しない形で実装したかったので、リファクタリングしてから取り込もうと思いつつ、探索部の改良を行って…

将棋AIの進捗 その52(探索部の改良)

ここ数週間、探索部の細かい改良をしては測定していた。 小さなレーティング差を計測するには多くの対局数が必要になるので、一つの改良の確認に時間がかかるのがつらいところである。 1手1秒と1手3秒で結果が異なることもあるため、長時間思考で強くしたい…

将棋AIの進捗 その51(floatの桁落ち)

dlshogiの現在の実装では、長時間思考して探索ノード数が大きくなった場合に、ノードにバックアップされる価値の合計がfloat型になっているため、誤差が許容できないという指摘をやねうらお氏から頂いた。floatに[0,1]の価値の値を足し合わせていく場合に、…

将棋AIの進捗 その50(メモリ使用量削減)

dlshogiは、1ノードにつき平均2KBのメモリを消費する(局面の平均合法手を80とした場合)。 通常GPU 1枚で探索した場合、NVIDIA RTX 3090で最大4.5万NPS程度なので、5分探索したとすると、探索ノード数は1350万ノードで、約27GBのメモリを消費する。複数枚GP…

将棋AIの進捗 その49(並列化の課題)

dlshogiでは、複数GPUを使用して並列化した場合に、ノードの衝突が発生しやすくなりNPSが1/3近くになる場合がある。例として、電竜戦でA100×8使用した時、以下の局面でNPSが初期局面に対して1/3近くなっていた。 局面 NPS 初期局面 342985 position startpos…

AobaZeroの棋譜の加工

GCTでは、AobaZeroの棋譜を、事前学習に使用し、また、dlshogiの強化学習データに混ぜて使用している。 アンサンブル効果の仮説 dlshogiの強化学習データと混ぜて使用したという部分が強さに影響しているのではないかという仮説を立てている。dlshogiは、デ…

GCT、dlshogi、二番絞りの比較

電竜戦の決勝リーグに進んだ、dlshogiを使用している3ソフト(GCT, dlshogi, 二番絞りプレミアム生)の比較を行った。 「二番絞りプレミアム生」(以下、二番絞り)は、48先生からモデルファイルを提供いただいて、探索部には最新のdlshogiを使用して測定した…

GCTの学習に使用したデータセットとノートブックを公開します

GCTの学習に使用したデータセットと、Google Colabのノートブックを公開します。colab.research.google.com データセットについて データセットには、以下を含みます。 floodgateの棋譜からhcpe形式に変換したもの elmo_for_learnで生成したデータ AobaZero…

「GCT電竜」とdlshogi(NVIDIA GPU非搭載PC対応版)の公開

「GCT電竜」とdlshogi(NVIDIA GPU非搭載PC対応版)を公開します。 ダウンロード Release 世界将棋AI 電竜戦バージョン(「GCT電竜」同梱) · TadaoYamaoka/DeepLearningShogi · GitHubNVIDIA GPUに対応したTensorRT版と、NVIDIA GPU非搭載のWindows PCでも動…

【電竜戦】チームdlshogiのGCTが決勝リーグで優勝しました

本日開催されたコンピュータ将棋の大会「電竜戦」で、チームdlshogiのGCTが決勝リーグで優勝しました!コンピュータ将棋の大会でディープラーニングを使用したソフトが優勝するのは初です。 2017年からdlshogiの開発を始めてやっと優勝までたどり着きました…

【電竜戦】dlshogiライブラリ使用の3ソフトが2日目決勝リーグに進出します

本日、コンピュータ将棋のオンライン大会「電竜戦」の1日目が開催されました。私が開発しているdlshogiは、56チーム中10位で、2日目のA級リーグ(決勝)に進出します。 他にもdlshogiライブラリを使用しているソフトが合計で3チーム決勝リーグ進出します!第…

dlshogiをAWSのNVIDIA A100インスタンスで動かす

AWSのEC2に、NVIDIA A100のインスタンスが追加されたので、dlshogiでどれくらNPSが向上するか測定してみた。個人としてはAWSを使っていなかったので、AWSのアカウントを作成して、vCPUの上限緩和申請するところから行った。 P4dインスタンスは、vCPUが96なの…

dlshogiのINT8対応

前回の記事にも書いたが、dlshogiは、V100のTensorCoreがINT8に対応していないため、INT8対応を行っていなかった。 しかし、AWSのG4インスタンスでは、NVIDIA T4 Tensor Core GPUが利用できるため、INT8に対応することにした。 また、今後クラウドでA100が提…

電竜戦(予行演習3)の結果報告

昨日開催された電竜戦(予行演習3)にdlshogiも参加し、結果は34チーム中4位でした。 第1回コンピュータ将棋オンライン 電竜戦予行演習3 勝敗表 DL勢同士の対局 CrazyShogi CrazyShogiのとの対局は、危なげなく勝ちました。 第1回電竜戦 棋譜中継(単一棋譜) Ao…

Likelihood of superiorityについて

昨日の記事でcshogiに、2つのプログラム間の連続結果からLOS(Likelihood of superiority)の算出を実装したことを書いたが、その計算式は、チェスで使用されている式をそのまま適用した。 LOSについて 測定された勝率がどれくらい確からしいかを表したのがLOS…