TadaoYamaokaの開発日記

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

2021-02-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の実験ノート:オフポリシー補正

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