TadaoYamaokaの日記

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

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

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

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

C#

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

ONNX Runtimeを使ってみる その3(DirectML)

ONNX RuntimeでDirectMLを使ってdlshogiのモデルの推論を行い、処理時間を比較してみた。DirectMLを使えばAMDのGPUでも推論が実行できるようになる。 DirectMLプロバイダの使用 NuGetからビルド済みバイナリが取得できる。 Microsoft.ML.OnnxRuntime.DirectM…

ONNX Runtimeを使ってみる その2(性能測定)

先日、ONNX Runtimeを使って、MNISTの推論を試した。今回は、dlshogiのResnet 10ブロック、192フィルタのモデルを使って、GPUで実行した場合の速度と、CPUで実行した場合の速度を比較した。 測定条件 GPUでのONNXの推論にはTensorRT(FP16)を使用する。 CPUの…

C#からPythonを呼び出す

以前にC#からPythonのディープラーニングフレームワークを呼び出すいくつかの方法を記事にした。 gRPCでC#とPythonを連携する - TadaoYamaokaの日記 SocketでC#とPythonを連携する - TadaoYamaokaの日記 TensorFlowのC#バインディング - TadaoYamaokaの日記 …

dlshogiの学習則

dlshogiを改造して遊びたい方のために、dlshogiの学習則についてちゃんと書いてなかったので書いておく。主に、学習部のソースtrain_rl_policy_with_value_using_hcpe_bootstrap.pyの解説になっている。 AlphaZeroの学習則 AlphaZeroの学習則は、 となってい…

Agent57: Outperforming the Atari Human Benchmarkを読む その15

付録H. 実験結果 H.1. Atari 10:アブレーションのスコア表 H.2. Backpropウィンドウの長さの比較 図12. 難易度の高い10ゲームのセットでの、Backpropウィンドウの長さが短い場合と長い場合のパフォーマンスの比較 H.3. アイデンティティとh変換の組み合わせ…

ONNX Runtimeを使ってみる

dlshogiはCUDAに対応したNvidiaのGPUが必須になっているが、AMDのGPUやCPUのみでも動かせるようにしたいと思っている。Microsoftがオープンソースで公開しているONNX Runtimeを使うと、様々なデバイスでONNXモデルの推論を行うことができる。 TensorRT対応で…

Agent57: Outperforming the Atari Human Benchmarkを読む その14

付録G. ハイパーパラメータ G.1. との値 セットの選択の間の直感は次のとおりです。 については、非常に活用的である方策と探索的である方策を奨励したいので、図11(a)に示すようにシグモイドを選択する。 については、活用方策(の値が小さい)には長期的な…

Agent57: Outperforming the Atari Human Benchmarkを読む その13

付録F. ネットワークアーキテクチャ 図9. Agent57のスケッチ 図10. Agent57の詳細

Agent57: Outperforming the Atari Human Benchmarkを読む その12

付録E. 分散設定の実装の詳細 リプレイバッファー 固定長の遷移のシーケンスと優先度を格納する。 遷移はの形式である。 このような遷移はタイムステップとも呼ばれ、シーケンスHの長さはトレース長と呼ばれる。 さらに、リプレイバッファー内の隣接するシー…

Agent57: Outperforming the Atari Human Benchmarkを読む その11

付録D. マルチアームバンディット形式 この節では、マルチアームバンディット(MAB)パラダイム、上限信頼限界(UCB)アルゴリズム、およびスライディングウィンドウUCBアルゴリズムについて簡潔に説明する。 より完全な説明と分析については、Garivier & Mo…

Agent57: Outperforming the Atari Human Benchmarkを読む その10

付録C.リトレースおよび変換されたリトレース リトレースは、評価または制御のための方策オフのRLアルゴリズムである。 評価設定の目標は、行動方策から引き出された軌跡からターゲット方策の状態行動価値関数を推定することである。 制御設定では、を近似す…

C++の再現性の低いバグを解析する

C++

先日、dlshogiをfloodgateでテストした際に、goコマンドに対して結果を返さずタイムアップするという事象が発生した。再現性が低く、全く同じ局面を手動でコンソールからコマンドを入力して何度も探索させても再現しなかった。 スレッドプールの処理に問題が…

将棋AIの進捗 その48(NPS改善)

ノード再利用の方式見直しを行った後、強くなっているかApery(WCSC28)と1手3秒100局で確認を行った。結果、勝利は62%で、変更前は69%だったので、強くなっていないことがわかった。 考察 理由としては、以下が考えられる。 Ponderなしの秒読みではノード再利…

将棋AIの進捗 その48(PV表示対応)

Qhapaqさんからプルリクをいただいたので、dlshogiをPV表示に対応しました。プルリクにはなかったのですが、USIオプション「PV_Interval」を追加しました。 「0」にするとPV表示なし、0以上にすると、設定したms間隔でPVを表示します。masterブランチに反映…

将棋AIの進捗 その47(Linuxのマルチスレッド排他処理)

昨日の記事で、dlshogiのゲーム木の管理をロックレス方式に見直しを行った。Windowsでは、ノード単位の排他制御をmutexを用いずに、atomic_flag (TAS機能)で実現することで10%NPSが向上したが、Linuxで測定すると800NPSくらいしかでないという悲惨な結果にな…

将棋AIの進捗 その46(ノード再利用の見直し)

世界コンピュータ将棋オンライン大会でノード再利用の処理に問題があることがわかったので、見直した。先日の記事で、Leela Chess Zeroのゲーム木の管理方法を調査して、合流を処理しないでC++のヒープ管理を利用してツリー状にノードを管理していることが分…

Leela Chess Zeroのノード再利用の方法

世界コンピュータ将棋オンライン大会で、dlshogiのノード再利用の方法に問題があることが明らかになったので、見直すことにする。 現在のハッシュ管理 dlshogiのハッシュ管理は、Ray+Rnのゾブリストハッシュの実装を参考にしていた。 Ray+Rnのノード再利用の…

dlshogiの環境構築手順

世界コンピュータ将棋オンライン大会でdlshogiライブラリを使用していたGCTは、AWSのWindows Serverで環境構築されていました。構築手順を共有いただいたので、参考にしてください。AWSでのGPU環境の構築手順について · Issue #12 · TadaoYamaoka/DeepLearni…

dlshogi(wcsoc2020)のWindows版ビルド済みファイル公開

dlshogiの世界コンピュータ将棋オンライン大会バージョンのWindows版ビルド済みファイルを公開します。Release 世界コンピュータ将棋オンライン大会バージョン · TadaoYamaoka/DeepLearningShogi · GitHub実行には、CUDA 10.2に対応したGPUが必要です。 イン…

世界コンピュータ将棋オンライン大会 結果報告

昨日、本日、世界コンピュータ将棋オンライン大会が開催されました。 dlshogiはシードのため2日目からの参加でした。結果は、4勝4敗で、2日目に進んだ28チームの内13位でした。 floodgateでのテストからR4000くらいと見積もっていたので、順当な結果だと思い…

将棋AIの進捗 その45(大会直前の性能改善)

いよいよ本日から世界コンピュータ将棋オンライン大会が始まりました。概要 http://www2.computer-shogi.org/wcso1.html 参加チーム https://www.apply.computer-shogi.org/wcsoc/team.html 棋譜中継 http://live4.computer-shogi.org/wcso1/ 特設サイト htt…

将棋AIの進捗 その44(大会直前の調整)

世界コンピュータ将棋オンライン大会はいよいよ明日から開催です。今日は、直前に簡単に変更できる部分をいくつか調整を行っていました。 探索延長の条件変更 今までは、ルートの訪問数が1番目の手と2番目の手の差が1.2倍未満の場合に、1.5倍探索を延長して…

将棋AIの進捗 その43(探索パラメータ調整)

未訪問ノードのQの初期値の変更と、FPU reductionを導入してから、探索パラメータの再調整を行っていなかったので、Optunaで最適化を行った。FPU reductionはKataGoを参考に、ルートノードは0としていたが、パラメータにして調整するようにした。 また、Leel…

usiToCsa.rbのdlshogi対応

世界コンピュータ将棋オンライン大会の対戦環境をテストしていて、クライアントの将棋所からssh経由でサーバでdlshogiを実行していたが、回線が不安定なため途中で切れることがあったので、サーバから直接接続する方式に変更することにした。dlshogiは標準入…

Agent57: Outperforming the Atari Human Benchmarkを読む その9

付録B B.外発的-内発的分解 内発的に動機付けられたエージェントの場合、報酬関数は、固有の報酬と外部の報酬の線形結合である。 価値の反復スキームを使用して、最適な状態行動価値関数を計算できる。 ここで、は任意に初期化できる。 ここで、別々の内発的…

Agent57: Outperforming the Atari Human Benchmarkを読む その8

付録も読んでいきます。数式多めです。ほぼ自分のメモのために訳しています。 付録A MDPの背景 マルコフ決定プロセス(MDP)はタプルであり、Xは状態空間、Aは行動空間、Pは各状態行動タプルを状態上の確率分布(行動aを選択してxから状態yに遷移する確率を…

将棋AIの進捗 その42(TensorRT対応)

TensorRTがdlshogiのDNNの推論においても効果があることがわかったので、TensorRTをdlshogiに組み込んだ。 Tensorコアを搭載したGPUでは、以前のcuDNN版に比べて推論が大幅に高速化される。 実装 ONNXから読み込んだネットワークのビルドには数十秒近く時間…

Agent57: Outperforming the Atari Human Benchmarkを読む その7

結論 57のすべてのAtariゲームで、人間のベンチマークを超えるパフォーマンスを持つ最初の深層強化学習エージェントを紹介した。 エージェントは、そのような多様なゲームセット(探索と活用、および長期的な信用割り当て)でパフォーマンスを発揮するために…