TadaoYamaokaの開発日記

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

2019-02-01から1ヶ月間の記事一覧

AlphaZero方式における入力の正規化

前回AlphaZero方式で訓練データを作成する際のデータの格納方式をSQLiteに決めたので、テストのためにfloodgateの棋譜から訓練データの作成して、学習を行ってみた。 floodgateの棋譜から訓練データ作成 cshogiを使って2018年分のfloodgateのCSAファイルから…

SQLiteによる教師データの管理

先日AlphaZero方式で教師データを生成する際に、データを固定サイズにすることを検討した。 しかし、指し手の確率分布を保存するには、合法手500手近くの領域が必要となるため、1回の訓練ステップ全てのデータをメモリに載せるのは厳しいことがわかった。 Al…

レイヤー融合を将棋AIの推論で試してみる

先日試したレイヤー融合をdlshogiのニューラルネットワークで試してみた。dlshogiはWideResNetを採用しているので、conv->bnのレイヤー融合を適用できるのは、残差ブロックの2つ目の畳み込み層とBatchNormになる。 推論比較 レイヤー融合前後で推論時間を比…

畳み込み層とBatchNormalizationのレイヤー融合をChainerで試してみた

畳み込み層のフィルタは行列で表すことができる。 BatchNormalizationも、入力の要素ごとに適用するスカラーの式だが、カーネルサイズ1×1の畳み込みで表すことができる。推論のフェーズでは、BatchNormalizationの平均と分散は、学習時の統計情報を使うこと…

将棋の合法手の数の統計

AlphaZero方式の強化学習では、指し手の確率分布を教師データとするため、局面の合法手の数の分だけ確率の値を保存しておく必要がある。 将棋の合法手の最大数は593であることが証明されているが、実際の対局ではそのような局面は現れない。 教師データを保…

Google ColabでAlphaZero Shogiのモデルを教師あり学習する

Google ColabでAlphaZero Shogiのモデルを論文に通り定義して、テストのために教師ありで学習してみました。 TPUでも学習して学習時間の比較もしてみました。教師データには、elmoで生成したhcpe形式のデータを使用し、入力特徴量と正解ラベルの加工には、先…

NHWC vs NCHW on Google Colab

畳み込みの入力データの形式には、NHWCとNCHW があるが、どちらがTPUに最適か実験してみた。TensorFlowのデフォルトはNHWCで、ChainerのデフォルトはNCHWになっている。cuDNNはNCHWに最適化されている。 https://www.tensorflow.org/guide/performance/overv…

Google ColabでTPUを使ってみる

ほぼ自分用のメモです。Google Colabで、Kerasを使ってTPUでMNISTの学習を試してみた。TPUを有効にするには、「ランタイムのタイプを変更」からハードウェアアクセラレータを「TPU」に変更する必要がある。KerasでTPUでMNISTを学習するには以下のように記述…

Kerasでクラス分類モデルの出力をlogitsにする

Google ColabでTPUを使うには、今のところフレームワークにTesorFlow(Keras)を使う必要がある。 Kerasで将棋AI用のモデル定義を行っていて、ChainerではできてKerasでは簡単にできない問題にぶつかった。Kerasでクラス分類のモデルを定義して学習する際、通…

高速なPythonの将棋ライブラリを作る

python-shogiは、Pythonで扱える非常に役立つ将棋ライブラリですが、速度が遅いのが用途によっては欠点になります。 公式サイトにも記述されていますが、速度よりもシンプルに抽象的に扱えることが目的となっています。しかし、機械学習の用途に使用しようと…

将棋AIの進捗 その26(自己対局による強化学習の経過2)

前回から時間が空いたが、自己対局による強化学習を続けている。10ブロック、192フィルタのモデルの自己対局による学習が、79サイクル※回したところで飽和気味になったため、10ブロックのモデルからパラメータを転移して15ブロックのモデルで強化学習を行う…