TadaoYamaokaの日記

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

AlphaGo Zeroの論文を読む その4(自己対局)

その3の続き 自己対局パイプライン 自己対局パイプラインは、3つの主要な部分から構成される。 最適化 評価 自己対局 これらは並行で実行される。 最適化 ミニバッチサイズ:2,048 (32バッチずつ別々のGPUで実行) ミニバッチデータは直近50万の自己対局のす…

AlphaGo Zeroの論文を読む その3(探索アルゴリズム)

その2の続き今回は対局時の探索アルゴリズムについてです。 探索アルゴリズム 対局時はpolicyとvalueを使ったモンテカルロ木探索(APV-MCTS)を使用する。 探索は複数スレッドで並列に行う。探索木の各ノードsは以下の情報を持つ。 N(s,a) 行動aの訪問回数 W(s…

コマンドプロンプトのカラースキーム変更

18日から提供開始されたWindows 10 Fall Creators Updateを適用しました。今バージョンからコマンドプロンプトのカラースキーム変更になるということです。 今までコマンドプロンプトの青の文字が非常に読みづらく、Bash on Windowsを使うようになってから特…

AlphaGo Zeroの論文を読む その2(ネットワーク構成)

前回に続いてAlphaGo Zeroの論文についてです。 ネットワーク構成 入力特徴 19×19の2値画像を17枚 8枚は現在のプレイヤーの石の座標を示す2値画像、8手分 8枚は相手のプレイヤーの石の座標を示す2値画像、8手分 1枚は現在のプレイヤーの石の色を示す全て0か1…

AlphaGo Zeroの論文を読む

今日のAlphaGo Zeroのニュースは衝撃でした。将棋AIで方策勾配で強化学習を行ったときは、発散してうまくいかなかったので 教師データで最初に訓練が必要と思っていました。 それが、自己対局のみで強くできるとは驚きです。論文が公開されたので、使われた…

将棋AIの進捗 その8(ponder対応)

電王トーナメントの出場ソフトが公開されました。 私のソフトは「dlshogi」です。 denou.jpディープラーニングを使ったソフトがいくつか出場するようです。 対局できるのが楽しみです。 電王トーナメントに向けて、時間制御まわりを改善しています。 ひとま…

技術書典3の告知

10/22(日)に秋葉原で開催される技術書典3にサークル参加します。 サークル名は「dlshogi」、配置は「か19」です。 頒布するのは、「ディープラーニングを使った将棋AIの作り方」です。 Policy Networkの作り方についての解説本になります。あと、お隣のサー…

将棋AIの進捗 その7(詰み探索の有効性)

df-pnの検証のために、詰みの局面でテストしていたが、やねうら王では詰みと出る局面で不詰みの判定になる局面があった。調べてみると、次のような王手でない局面で、相手がどんな手を指しても次の王手で詰みとなる局面だった。 df-pnの指し手生成に王手のみ…

将棋AIの進捗 その6(df-pn)

前回の日記で書いた通り、df-pnの実装を行いました。実装の参考にしたのは、以下の論文です。 CiNii 論文 - df-pnアルゴリズムの詰将棋を解くプログラムへの応用 コンピュータ詰碁の探索戦略の改良 上記の論文にはほぼ同じ疑似コードが掲載されていますが、A…

将棋AIの進捗 その5(王手の指し手生成)

前回の日記で、Aperyに王手の指し手生成がないという話を書いたが、仕方がないので自分で実装した。やねうら王には王手の指し手生成が実装されていたので、実装方法を参考にさせてもらった。 YaneuraOu/movegen.cpp at master · yaneurao/YaneuraOu · GitHub…

将棋AIの進捗 その4(詰みの探索)

前回の日記で、末端ノードで詰みの探索を行う予定と書いた通り、詰みの探索をするようにしました。ディープラーニングは詰みの探索が苦手なので、ディープラーニングと詰み探索を組み合わせるのは有効だと思っています。 Policy Network、Value Networkの計…

将棋AIの進捗 その3

以前の日記で、電王トーナメントに出るつもりと書いていましたが、申し込みをしました。 予選通過も厳しそうですがとりあえず頑張ります。 さて、前回からの進捗ですが、35億局面の学習が3エポック回したところで飽和しました。 一致率は、Policy Networkが4…

将棋AIの進捗 その2

elmo_for_learnを使ってdepth8で35億局面の生成ができたので、DNNの学習を開始しました。前に7.5億局面を学習したときは、4日と20.5時間かかったので、35億局面を学習するには22日15.6時間かかる見込みです。elmo_for_learnで生成した局面には重複局面が4%程…

将棋AIの進捗

検証しているディープラーニングを使った将棋AIは、学習データを増やさないと精度が上げられないため、elmo_for_leanを使ってひたすら学習データを生成中です。現在、ようやく20億局面くらい。 PCを占有されると困るので、10コアのPCを1台買ってしまいました…

音声スペクトルモニター(Audio Spectrum Monitor)のバージョンアップ

Androidアプリの音声スペクトルモニター(Audio Spectrum Monitor)をバージョンアップしました。要望のあったピークホールドの機能を追加しました。ドラムのチューニングに使いたいという方がいて、瞬間のピッチを保持したいという要望をもらっています。 実…

音声スペクトルモニター(Audio Spectrum Monitor)のバージョンアップ

Androidアプリの音声スペクトルモニター(Audio Spectrum Monitor)をバージョンアップしました。しばらく将棋AIばかり作っていたので、アプリの開発が止まっていましたm(_ _)mもらっていた要望のうち、とりあえずGoogleドライブに転送する機能を追加しました…

ディープラーニングを使った将棋AIの作り方

tadaoyamaoka.hatenablog.com ブログの記事はこちらから tadaoyamaoka.hatenablog.com

将棋でディープラーニングする その39(ブートストラップ)

前回の日記で、ブートストラップについて少し書いたが、1000万局面では効果がわからなかったので、局面を増やして再度検証した。 ブートストラップ 前回も書いたが、本来の報酬(勝敗)とは別の推定量(探索結果の評価値)を用いてパラメータを更新する手法…

将棋でディープラーニングする その38(学習継続中)

前回の日記で、利きを入力特徴に加えることで精度が上がることを確認したので、利きを追加したモデルで、初期値から学習をやり直した。学習データには、elmo_for_learnで深さ8で生成した、1億5千万局面を使用した。以前に生成したときは、引き分けの局面も出…

WindowsでChainerをGPUを使って動かす(v2.0対応)

Windowsで安定して使用できるv1.24を使用していましたが、Chainer v2.0でパフォーマンスが向上するということなので、アップデートしました。v1.24用のコードに一部修正が発生しましたが、軽微な修正で対応できました。 環境準備 以前の日記を参照してくださ…

将棋でディープラーニングする その37(利き数を入力特徴に追加)

モデルの精度を上げるために、入力特徴を追加して精度が上がるか検証しました。 AlphaGoでは盤面の情報に加えて呼吸点などの情報を入力特徴に加えることで、精度が向上している。 盤面の情報(4個の特徴)のみでは、test accuracyが47.6%だが、48個の特徴とす…

将棋でディープラーニングする その36(PUCTアルゴリズムの実装)

Ray+Rnのソースを元に、policy networkとvalue networkを使った、モンテカルロ木探索を実装しました。 実装方法 以前の日記で書いたPUCTアルゴリズム*1を実装した。以前に考察したように、将棋ではプレイアウトで終局までプレイしても精度が低いため、終局ま…

将棋でディープラーニングする その35(マルチタスク学習(補足))

試している将棋でのディープラーニングについて、PUCTの実装をRay+Rnのソースコードを参考に行っていますが、囲碁部分のコードを将棋に置き換えるのがわりと面倒で、完成にはもうしばらくかかりそうです。その間に、追加でモデル学習の実験を行いました。 今…

仮説検定でプログラムが有意に強くなったか検証する

プログラムで自己対局したときに、その対局数と勝敗の数から何%勝ちなら強くなったといえるのか。 そのような問題に統計的に答える方法として、仮説検定という方法がある。 仮説検定 仮説検定は、帰無仮設と対立仮説を設定し、帰無仮説が定めた有意水準の範…

将棋でディープラーニングする その34(強化学習【成功】)

以前にRL policy networkをelmoの自己対戦でデータを使ってREINFORCE algorithmで学習させたが、うまく学習できなかった。昨日の日記でマルチタスク学習を実装したので、RL policy networkをバリューネットワークと同時に学習させることで、RL policy networ…

将棋でディープラーニングする その33(マルチタスク学習)

SL policy networkとValue networkは、12層までは同じ構成で、出力の数層のみが異なるため、12層まで同じネットワークでそこから2つの出力を行うようにして、SL policy networkとValue networkを同時に学習することを試してみた。複数のタスクを同時に学習す…

将棋でディープラーニングする その32(転移学習)

以前の日記で、バリューネットワークを学習した際、SL policy networkからバリューネットワークに転移学習が可能であることに言及した。転移学習するには、12層まではネットワーク構造が同じであるため、SL policy networkからバリューネットワークにパラメ…

ChainerをC++から使う

ディープラーニングを使った将棋プログラムを試しているが、将棋プログラムは速度が必要なため、開発言語はC++が適している。 しかし、使用しているディープラーニングフレームワークのChainerはPythonにしか対応していない。CaffeやCNTK、TensorFlowなどC++…

将棋でディープラーニングする その31(DNNのスループット)

方策ネットワークを対局中に用いた場合のスループットを計測した。PUCTアルゴリズムで並列で探索をする場合、複数スレッドからGPUを使用するため、複数スレッドから使用する場合を考慮する。まず、それぞれのスレッドからDNNを実行した場合について計測した…

Ray+Rnのソースを調べる

将棋プログラムでPUCTアルゴリズムを試すため、囲碁プログラムのRayを元にCNTKを使って、ディープラーニングに対応させたRnのソースを調べています。 RnはPUCTアルゴリズムを実装しているので、参考になります。以下、Windowsでビルドして、ソースをステップ…