TadaoYamaokaの日記

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

「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なの…

cshogiをPYPIに登録

cshogiは、今までPYPIに登録していなかったので、GitHubのReleaseのWheelファイルのURLを指定してインストールする必要があった。 PYPIに登録することで、以下のコマンドで簡単にインストールできるようにした。 pip install cshogiPython用の将棋ライブラリ…

【勉強ノート】不完全情報ゲームのアルゴリズム 2

前回はじゃんけんを例にして後悔の最小化アルゴリズムを試した。 今回は、クーンポーカーを例にして反事実的後悔(Counterfactual Regret(CFR))最小化アルゴリズムを試す。 ※Counterfactual Regretに訳語を当てている日本語の論文は見つからなかったので…

【勉強ノート】不完全情報ゲームのアルゴリズム

不完全情報ゲームのアルゴリズムについて詳しくなりたいと思い、不完全情報ゲームの基本的なアルゴリズムであるCFRについて調べた。不完全情報ゲームのアルゴリズムは比較的新しいということもあり、日本語の書籍はないため、こちらの大学の講義の資料を参照…

dlshogiのINT8対応

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

TensorRTでINT8を試す

Turing世代以降のTensorCoreは、INT8に対応している。 GeForce 2080TiでもINT8が利用できるため、試してみた。なお、V100のTensorCoreは、INT8には対応していないため、dlshogiでは、INT8対応は行っていなかったが、AWSのG4インスタンスでは、NVIDIA T4 Tens…

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

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

Likelihood of superiorityについて

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

cshogiにElo rating測定機能を追加

Cythonを使った高速なPythonの将棋ライブラリcshogiに、Elo rating測定機能を追加した。 誤差とLOS 連続対局を行い、Elo ratingと誤差(95%信頼区間)をレポートする。 何%の確率で強いと言えるかを表すLOS(Likelihood of superiority)も表示する。 LOSが95%を…

将棋AIの実験ノート:Mask-AttentionでAIの着目点を可視化する

深層強化学習でAIが着目している箇所を可視化するという以下の論文の手法(Mask-Attention)を、将棋AIでも試してみたい。 http://mprg.jp/data/MPRG/F_group/F20200610_itaya.pdf Mask-Attention 方策ヘッドに、位置情報をAttentionとして乗算する。 Attent…

dlshogiにおける思考時間と強さの関係 更新

先日記事にしたdlshogiにおける思考時間と強さの関係について、思考時間8秒、16秒の結果と、水匠2のスレッド数を8にした場合の結果が測定できたので記事にする。測定条件は前回と同じである。 dlshogi vs 水匠2(1000万ノード固定)の測定結果 思考時間(秒) 勝…

将棋AIの実験ノート:活性化関数Swishを試す 続き

先日試したSwishについて、推論速度がどれくら低下するのかと、精度が上がった代わりに速度が低下した場合に強さにどう影響するのかが気になったので調べてみた。 精度 先日は、8サイクル分学習した時点の結果を記したが、今回は16サイクル分学習したモデル…

将棋AIの実験ノート:活性化関数Swishを試す

画像認識で高い精度を達成しているEfficientNetで使われている活性化関数Swishが将棋AIでも効果があるか試してみた。EfficientNetでは、残差ブロックにMBConvというアーキテクチャが使用されており、その中の活性化関数にSwishが使用されている。 MBConvにつ…

dlshogiのautomatic mixed precision対応

48先生から頂いたautomatic mixed precision対応のプルリクに対応しました。 Pytorch 1.6 の Automatic Mixed Precision対応 by bleu48 · Pull Request #18 · TadaoYamaoka/DeepLearningShogi · GitHubautomatic mixed precisionは、PyTorch 1.6で追加された…

dlshogiのgo nodes対応

少し前にQhapaqさんからもらったプルリクに対応しました。 add go protocol by qhapaq-49 · Pull Request #17 · TadaoYamaoka/DeepLearningShogi · GitHubgo byoyomiで、探索を打ち切らずに時間いっぱいまで探索するようになりました。 go nodesで、固定ノー…

dlshogiにおける思考時間と強さの関係

MCTSと思考時間と強さの関係について、dlshogiのデータが知りたいという要望があったので測定してみた。 測定条件 対戦相手は、最新のやねうら王をUbuntu 18.04のclangでビルドしたもの+水匠2の評価関数で、1000万ノード固定とする。dlshogiは、最新のソース…

PythonからC#へポインタ渡しする

C#からPythonへポインタ渡しするとは逆に、Python for .NETを使ってPythonからC#へポインタ渡しする方法について紹介する。 Python for .NET Python for .NETを使用すると、PythonからC#のコードを呼び出すことができる。 Pythonと同じプロセスで、.NETのラ…

dlshogiのdf-pnのテスト方法

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>…

df-pnの関連記事

TLでdf-pnの話が上がっていたので、以前書いた記事のリンクをまとめておきます。局面ループ周りの処理はガチで発狂するレベルで面倒でdf-pnが凄いと言い張ってる人が本当にこの問題を解決できてるのかを少し疑うレベルで面倒なんすよね orz— Ryoto_SawadaQha…

dlshogiでMagic Bitboardを有効にする

やねうら王が飛車と角の利きに、PEXTの代わりにMagic Bitboardを使用することで、Threadripperで高速化できたとのことなので、dlshogiでも高速化できるか試してみた。dlshogiは合法手生成にAperyのソースを使用しており、AperyはMagic Bitboardを実装してい…

C#からPythonへポインタ渡しする

以前に、Python for .NETを使用することで、C#とPythonを同一プロセスで動かせることを紹介した。C#からPythonへの呼び出し時に、引数と戻り値は、自動的にマーシャリングが行われる。 ここで、C#の型からPythonのネイティブな型に変換されるのは、スカラ型…

【将棋AI】N駒関係をMulti-Head Self-Attentionで学習する 続き3

前回、入力特徴量の与え方でMulti-Head Self-Attentionの精度を向上できることを確認したが、DCNN(Resnet 10ブロック)に比べて精度がでないことが分かった。今回は、Multi-Head Self-Attentionの出力をDCNNに入力して、Multi-Head Self-AttentionとDCNNを組…

【将棋AI】N駒関係をMulti-Head Self-Attentionで学習する 続き2

前回に引き続き、将棋AIへのMulti-Head Self-Attentionの適用を試してみた。前回は、dlshogiと同じ入力特徴量を使用したが、Multi-Head Self-Attentionに合わせて以下の変更を行った。 各位置の特徴ベクトルに位置の情報を入力する 持ち駒の枚数の特徴ベクト…

【将棋AI】N駒関係をMulti-Head Self-Attentionで学習する 続き

前回考察した将棋AIへのMulti-Head Self-Attentionの適用を試してみた。実装を簡単するために、dlshogiで使用している入力特徴量と出力をそのまま使用した。 入力特徴量 各駒の配置 持ち駒の枚数 駒の種類ごとの利き マスごとの効き数 ※王手の特徴量は除いた…

【将棋AI】N駒関係をMulti-Head Self-Attentionで学習する

こないだ参加したハースストーンのAIコンペの関連論文を読んでいて、個人的に興味深い論文があった。Helping AI to Play Hearthstone using Neural Networksこの論文では、ハースストーンのゲーム状態からニューラルネットワークを使って勝率を予測する方法…

ハースストーンのAIコンペ

不完全情報ゲームのAIの論文を調べていて、たまたまハースストーンのAIコンペがあることを知ったので、試したいこともあったのでさくっとMCTSのプログラムを作って提出してみた。ハースストーンは、相手の手札や山札は見ることができない不完全情報ゲームで…

C#のオブジェクトをダンプする

C#

C#のオブジェクトに格納されている値を調べたいときに、VS Codeなどのデバッガを使えば確認することができるが、オブジェクトの階層が深い場合は、テキストファイルにダンプして確認したくなる。 ObjectDumper.NET 方法がないか調べたところ、「ObjectDumper…