TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

2021-01-01から1年間の記事一覧

将棋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誤差が用い…

MineRLをWindowsで動かす

MinecraftのOpenAI Gym環境 MineRLをWindowsで動かすための環境構築方法について。 ほぼ個人用メモ。インストール方法は、公式ドキュメントを元にしている。 OpenJDKインストール Chocolateyを使用してインストールする。 PowerShellを管理者権限で起動し、 …

将棋AIの実験ノート:Normalizer-Free Networks

ちょうどFixup Initializationを試したタイミングで、DeepMindからBatch Normalizerを削除してSOTAを達成したという論文が発表された。Introducing NFNets, a family of image classification models that are:*SOTA on ImageNet (86.5% top-1 w/o extra dat…

将棋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で更新を行っている。 後者の確率分布を学習する場合と、ど…

BoostでZlib Filtersを有効にしてビルドする

C++で、gzipの圧縮解凍を標準ストリームで行いたかったので、ライブラリを調べたところ、Boost.IostreamsにZlib Filtersを追加することで対応できることがわかった。しかし、Windowsではデフォルトでは有効になっておらず、「conda install -c conda-forge b…

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

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

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

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

Jupyter QtConsoleを起動するとコマンドプロンプトが起動する問題の対策

Pythonを対話的に使用する際は、Jupyter QtConsoleを好んで使用している。Jupyter Notebookを使っている人の方が多いと思うが、Jupyter QtConsoleは起動が速く、Jupyter NotebookをブラウザやVS Codeなどから使用するよりも手軽に使用できる。 また、入力の…

将棋AIの進捗 その54(補助ターゲット)

深層強化学習では、メインの学習タスクに加えて、補助タスクを同時学習することで、パフォーマンスを改善するということが行われている。 [1611.05397] Reinforcement Learning with Unsupervised Auxiliary Tasks 囲碁AIの例 囲碁AIのKataGoでは、 占領した…

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

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

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

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

iOS版ボーカル音程モニター(Vocal Pitch Monitor)をバージョンアップ 1.3.0

正月は将棋AIの開発をちょっとお休みして、iPhoneアプリのVocal Pitch Monitorのバージョンアップを行った。 Android版と機能差分が開いていたり、ノッチに対応していなかったりだったので、改修せねばと思いつつ、将棋AIの開発ばかりしていたので4年以上バ…