2020-01-01から1年間の記事一覧
ここ数週間、探索部の細かい改良をしては測定していた。 小さなレーティング差を計測するには多くの対局数が必要になるので、一つの改良の確認に時間がかかるのがつらいところである。 1手1秒と1手3秒で結果が異なることもあるため、長時間思考で強くしたい…
dlshogiの現在の実装では、長時間思考して探索ノード数が大きくなった場合に、ノードにバックアップされる価値の合計がfloat型になっているため、誤差が許容できないという指摘をやねうらお氏から頂いた。floatに[0,1]の価値の値を足し合わせていく場合に、…
dlshogiは、1ノードにつき平均2KBのメモリを消費する(局面の平均合法手を80とした場合)。 通常GPU 1枚で探索した場合、NVIDIA RTX 3090で最大4.5万NPS程度なので、5分探索したとすると、探索ノード数は1350万ノードで、約27GBのメモリを消費する。複数枚GP…
dlshogiでは、複数GPUを使用して並列化した場合に、ノードの衝突が発生しやすくなりNPSが1/3近くになる場合がある。例として、電竜戦でA100×8使用した時、以下の局面でNPSが初期局面に対して1/3近くなっていた。 局面 NPS 初期局面 342985 position startpos…
ほぼ個人的なメモです。電竜戦で、dlshogiで作成した定跡で序盤に先手の評価値が異常に高い局面が登録されていた。例)7手目の評価値が238と高い 定跡作成時は、5000万ノード探索を行っており、探索ノード数が増えた場合に発生することが分かった。 当該局面…
GCTでは、AobaZeroの棋譜を、事前学習に使用し、また、dlshogiの強化学習データに混ぜて使用している。 アンサンブル効果の仮説 dlshogiの強化学習データと混ぜて使用したという部分が強さに影響しているのではないかという仮説を立てている。dlshogiは、デ…
電竜戦の決勝リーグに進んだ、dlshogiを使用している3ソフト(GCT, dlshogi, 二番絞りプレミアム生)の比較を行った。 「二番絞りプレミアム生」(以下、二番絞り)は、48先生からモデルファイルを提供いただいて、探索部には最新のdlshogiを使用して測定した…
GCTの学習に使用したデータセットと、Google Colabのノートブックを公開します。colab.research.google.com データセットについて データセットには、以下を含みます。 floodgateの棋譜からhcpe形式に変換したもの elmo_for_learnで生成したデータ AobaZero…
「GCT電竜」とdlshogi(NVIDIA GPU非搭載PC対応版)を公開します。 ダウンロード Release 世界将棋AI 電竜戦バージョン(「GCT電竜」同梱) · TadaoYamaoka/DeepLearningShogi · GitHubNVIDIA GPUに対応したTensorRT版と、NVIDIA GPU非搭載のWindows PCでも動…
本日開催されたコンピュータ将棋の大会「電竜戦」で、チームdlshogiのGCTが決勝リーグで優勝しました!コンピュータ将棋の大会でディープラーニングを使用したソフトが優勝するのは初です。 2017年からdlshogiの開発を始めてやっと優勝までたどり着きました…
本日、コンピュータ将棋のオンライン大会「電竜戦」の1日目が開催されました。私が開発しているdlshogiは、56チーム中10位で、2日目のA級リーグ(決勝)に進出します。 他にもdlshogiライブラリを使用しているソフトが合計で3チーム決勝リーグ進出します!第…
AWSのEC2に、NVIDIA A100のインスタンスが追加されたので、dlshogiでどれくらNPSが向上するか測定してみた。個人としてはAWSを使っていなかったので、AWSのアカウントを作成して、vCPUの上限緩和申請するところから行った。 P4dインスタンスは、vCPUが96なの…
cshogiは、今までPYPIに登録していなかったので、GitHubのReleaseのWheelファイルのURLを指定してインストールする必要があった。 PYPIに登録することで、以下のコマンドで簡単にインストールできるようにした。 pip install cshogiPython用の将棋ライブラリ…
前回はじゃんけんを例にして後悔の最小化アルゴリズムを試した。 今回は、クーンポーカーを例にして反事実的後悔(Counterfactual Regret(CFR))最小化アルゴリズムを試す。 ※Counterfactual Regretに訳語を当てている日本語の論文は見つからなかったので…
不完全情報ゲームのアルゴリズムについて詳しくなりたいと思い、不完全情報ゲームの基本的なアルゴリズムであるCFRについて調べた。不完全情報ゲームのアルゴリズムは比較的新しいということもあり、日本語の書籍はないため、こちらの大学の講義の資料を参照…
前回の記事にも書いたが、dlshogiは、V100のTensorCoreがINT8に対応していないため、INT8対応を行っていなかった。 しかし、AWSのG4インスタンスでは、NVIDIA T4 Tensor Core GPUが利用できるため、INT8に対応することにした。 また、今後クラウドでA100が提…
Turing世代以降のTensorCoreは、INT8に対応している。 GeForce 2080TiでもINT8が利用できるため、試してみた。なお、V100のTensorCoreは、INT8には対応していないため、dlshogiでは、INT8対応は行っていなかったが、AWSのG4インスタンスでは、NVIDIA T4 Tens…
昨日開催された電竜戦(予行演習3)にdlshogiも参加し、結果は34チーム中4位でした。 第1回コンピュータ将棋オンライン 電竜戦予行演習3 勝敗表 DL勢同士の対局 CrazyShogi CrazyShogiのとの対局は、危なげなく勝ちました。 第1回電竜戦 棋譜中継(単一棋譜) Ao…
昨日の記事でcshogiに、2つのプログラム間の連続結果からLOS(Likelihood of superiority)の算出を実装したことを書いたが、その計算式は、チェスで使用されている式をそのまま適用した。 LOSについて 測定された勝率がどれくらい確からしいかを表したのがLOS…
Cythonを使った高速なPythonの将棋ライブラリcshogiに、Elo rating測定機能を追加した。 誤差とLOS 連続対局を行い、Elo ratingと誤差(95%信頼区間)をレポートする。 何%の確率で強いと言えるかを表すLOS(Likelihood of superiority)も表示する。 LOSが95%を…
深層強化学習でAIが着目している箇所を可視化するという以下の論文の手法(Mask-Attention)を、将棋AIでも試してみたい。 http://mprg.jp/data/MPRG/F_group/F20200610_itaya.pdf Mask-Attention 方策ヘッドに、位置情報をAttentionとして乗算する。 Attent…
先日記事にしたdlshogiにおける思考時間と強さの関係について、思考時間8秒、16秒の結果と、水匠2のスレッド数を8にした場合の結果が測定できたので記事にする。測定条件は前回と同じである。 dlshogi vs 水匠2(1000万ノード固定)の測定結果 思考時間(秒) 勝…
先日試したSwishについて、推論速度がどれくら低下するのかと、精度が上がった代わりに速度が低下した場合に強さにどう影響するのかが気になったので調べてみた。 精度 先日は、8サイクル分学習した時点の結果を記したが、今回は16サイクル分学習したモデル…
画像認識で高い精度を達成しているEfficientNetで使われている活性化関数Swishが将棋AIでも効果があるか試してみた。EfficientNetでは、残差ブロックにMBConvというアーキテクチャが使用されており、その中の活性化関数にSwishが使用されている。 MBConvにつ…
48先生から頂いたautomatic mixed precision対応のプルリクに対応しました。 Pytorch 1.6 の Automatic Mixed Precision対応 by bleu48 · Pull Request #18 · TadaoYamaoka/DeepLearningShogi · GitHubautomatic mixed precisionは、PyTorch 1.6で追加された…
少し前にQhapaqさんからもらったプルリクに対応しました。 add go protocol by qhapaq-49 · Pull Request #17 · TadaoYamaoka/DeepLearningShogi · GitHubgo byoyomiで、探索を打ち切らずに時間いっぱいまで探索するようになりました。 go nodesで、固定ノー…
MCTSと思考時間と強さの関係について、dlshogiのデータが知りたいという要望があったので測定してみた。 測定条件 対戦相手は、最新のやねうら王をUbuntu 18.04のclangでビルドしたもの+水匠2の評価関数で、1000万ノード固定とする。dlshogiは、最新のソース…
C#からPythonへポインタ渡しするとは逆に、Python for .NETを使ってPythonからC#へポインタ渡しする方法について紹介する。 Python for .NET Python for .NETを使用すると、PythonからC#のコードを呼び出すことができる。 Pythonと同じプロセスで、.NETのラ…
dlshogiのdf-pnだけを動かす手順を書いておきます。 テスト局面追加 testプロジェクトのtest.cppの 「// DfPnテスト」と書いてあるところのmain()の vector<string> sfens = { // 詰み "9/9/+N8/p1p4p1/6p1p/1P7/3k3PP/2+p5L/6+rGK w R2B2G3Sgs3n3l9p 1", "1n1g3+Pl/</string>…
TLでdf-pnの話が上がっていたので、以前書いた記事のリンクをまとめておきます。局面ループ周りの処理はガチで発狂するレベルで面倒でdf-pnが凄いと言い張ってる人が本当にこの問題を解決できてるのかを少し疑うレベルで面倒なんすよね orz— Ryoto_Sawada⛅Qh…