TadaoYamaokaの日記

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

将棋でディープラーニングする その47(全結合)

AlphaGo Zeroでは、policy networkの出力ラベルを石の色×座標+passで表しており、全結合層で出力を行っている。 Fan Hui版AlphaGoでは1×1フィルターの畳み込み層を出力層としていた。 出力層を全結合にした理由は、論文では説明されていないが、精度が上がる…

将棋でディープラーニングする その46(出力ラベルの表現方法)

開発してるdlshogiでは、出力ラベルを(駒の種類×移動方向+持ち駒の種類)×座標で表現し、出力層にAlphaGoを参考に1×1の畳み込み層を使用している。 AlphaGo Zeroでは、出力ラベルを石の色×座標+passで表しており、全結合層で出力を行っている。 1×1の畳み込み…

dlshogiのバグ報告

電王トーナメントバージョンを公開しましたが、致命的なバグがありました。移動を表すラベルにバグがあり、いくつかの異なるラベルが同じラベルに割り振られていました。 このバグのため学習の精度がかなり落ちていたと思われます。モデルの学習からやり直し…

将棋でディープラーニングする その45(高速化)

現在のdlshogiの実装では、NPSが2500程度しかでていないため、高速化できる箇所がないかを検討している。モンテカルロ木探索でpolicyとvalueをGPUで計算すると、GPUの実行時間が処理時間のほとんどを占めているため、CPUの論理コア数以上のスレッドで並列に…

dlshogiのビルド済みファイル公開

dlshogiの第5回将棋電王トーナメントバージョンのビルド済みファイルを公開しました。elmoで生成した35.8億局面を学習済みモデルと、モンテカルロ木探索で事前探索した定跡も含んでいます。CUDA、Pythonの環境構築が必要になるので、なるだけ丁寧に説明を記…

第5回将棋電王トーナメント 出場結果

第5回将棋電王トーナメントに参加しました。本日は予選が行われ、dlshogiは3勝5敗という結果で、予選落ちとなりました。 3回戦と6回戦は、秒読みに入ってから将棋所のinfo stringの出力に時間がかかり、優勢にかかわらず時間切れ負けとなってしまうという残…

将棋でディープラーニングする その44(L2正則化)

将棋AIのPolicy NetworkとValue Networkのマルチタスク学習でのL2正則化の効果を測定してみた。 正則化なし loss policy accuracy value accuracy L2正則化係数 loss policy accuracy value accuracy 考察 正則化なしでも、trainとlossにそれほど差がないが…

将棋でディープラーニングする その43(ValueNetの出力をtanhにする2)

前回、Value Networkの出力をtanhにした場合とsigmoidにした場合で比較を行ったが、マルチタスク学習を行っているため、はっきりした結果がわからなかった。今回は、Value Networkのみの学習で比較を行った。 以下の2パターンで比較した。 出力関数 損失関数…

tanh vs sigmoid

AlphaGoのValue Networkの出力にはtanhが使用されている。 一方、将棋AIでは評価関数から勝率に変換する際、sigmoidが使われている。tanhとsigmoidのどちらがよいか、dlshogiの学習で検証してみたが、Policy NetworkとValue Networkのマルチタスク学習を行っ…

将棋でディープラーニングする その42(ValueNetの出力をtanhにする)

将棋AIでは、評価関数をsigmoid関数で[0,1]の範囲で勝率にすることが行われている。 elmoの損失関数には、勝率の交差エントロピーと、浅い探索と深い探索の評価値から求めた勝率の交差エントロピーの和が使われている。一方、AlphaGoでは報酬に[-1,1]が使用…

将棋でディープラーニングする その41(モーメントありSGD)

AlphaGo Zeroのニューラルネットワークの学習の最適化に使用されているモーメントありSGDを将棋AIで試してみた。以前に、最適化手法を比較した際、Adamのような学習率を自動で調整する手法よりSGDの方が学習効率が高かった。 AlphaGo FanバージョンでもSGDが…

将棋でディープラーニングする その40(入力特徴に履歴追加)

その39からずいぶん期間が空きましたが、AlphaGo Zeroの論文を読んで試したいことができたので、AlphaGo Zeroの論文の方法が将棋AIに応用が可能か少しずつ試していこうと思います。AlphaGo Zeroの特徴については、別の記事に記載していますので、参照してく…

WindowsにChainer v3+CUDA9+cuDNN7をインストールする

Chainer v3(cupy v2)がCUDA9に対応したので、バージョンアップしました。 Chainer v3はcuDNNも最新のバージョン7に対応しているので、cuDNNも7にしました。インストール手順は、以前のバージョンと同様です。chainerをバージョンアップする際は、chainerとcu…

WindowsにAnaconda3でPython 3.6をインストールする

以前はChainerとTensorflowがPython3.6に対応していなかったため、Anaconda3のPython3.5系を使用していた。 現在は、ChainerもTensorflowもPython3.6に対応しているため、Python3.6に入れ替えを行った。Downloads | Anaconda から、Python 3.6 version(Anaco…

Chainerで計算グラフの可視化

Chainerの計算グラフの可視化機能を使ったことなかったので使ってみた。将棋AIのPolicy networkとValue networkを結合したWide ResNetを可視化してみた。 dotファイル出力 Visualization of Computational Graph — Chainer 3.0.0 documentation このページの…

AlphaGo Zeroの論文を読む その5(ドメイン知識)

前回までで、実装に必要な内容についてほぼ解説しました。今回は、補足的な内容です。 ドメイン知識 論文には以下の一文が記載されている。 Our primary contribution is to demonstrate that superhuman performance can be achieved without human domain …

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台買ってしまいました…