TadaoYamaokaの開発日記

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

AlphaGo

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

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

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

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

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…

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

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

AlphaGo Zeroの論文を読む

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

コンピュータ将棋におけるディープラーニングの考察

先日の日記で、コンピュータ将棋とAlphaGoについて言及したが、次のPonanzaがディープラーニングに成功したということで、どのように適用しているのかが気になっている。そこで適当に考察してみる。電王戦のインタビューでもプロの棋譜との一致率について言…

SL policy networkの囲碁プログラムへの適用

以前に学習したSL policy networkを囲碁プログラムに適用してみた。特徴を4つに絞って、学習を160万局面で行ったものなので、棋譜との一致度は30%くらいの状態だが、そこそこ効果はあるのではないかと思って試してみた。 学習している棋譜は19路盤なので、19…

rollout policyの学習(やり直し)

以前にrollout/tree policyをAdaGradで学習させたが、学習データとは別のテストデータを使った評価を行っていなかったので、学習をやり直した。学習に使用させてもらっていた棋譜サイトが閉鎖してしまったので、今回からGoGoDという有料の棋譜を購入して使用…

cuDNNでAlphaGoのSL policy networkの順伝播を実装する

Chainerを使って学習したAlphaGoのSL policy networkのモデルを使用して、C++のプログラムからcuDNNを使用して順伝播を実装してみた。SL policy networkを囲碁のプログラムに組み込んで使おうとすると、PythonとChainerが必要になるのでは実行環境の敷居が高…

CaffeでSL policy networkを学習

前回の日記で定義した、AlphaGoのSL policy networkをCaffeで学習してみた。以前にChainerを使って学習した結果と速度、精度を比較するため、条件を合わせている。 インターネットから入手したプロの棋譜を使用 特徴はAlphaGoの論文のExtended Data Table 2…

CaffeでAlphaGoのSL policy networkを定義する

以前にChainerを使って、AlphaGoのSL policy networkを定義しましたが、Caffeでも定義してみました。Caffeでのモデル定義は、prototxt形式で記述します。SL policy networkは以下のように定義できます。 sl_policy_network.prototxt name: "SLPolicyNetwork"…

学習アルゴリズム変更

前回の日記で、SGDでSL policy networkを学習し、学習が成功していることが確かめられた。学習アルゴリズムをSGDにしたのは、AlphaGoの論文で採用されていたからだ。収束に非常に時間がかかるので、別の方法だともっと収束が早くならないか試してみた。 また…

SL policy networkの学習

前回の日記でChainerで作成したAlphaGoのSL policy networkをプロの棋譜を使って学習させてみた。棋譜は、以前と同様、インターネットの棋譜サイトから入手したプロの棋譜を使用した。まずは、学習がうまくいくか様子をみるため、特徴はAlphaGoの論文のExten…

Chainerで位置ごとに異なるバイアスを定義する

前回の日記で、AlphaGoのSL policy networkをChainerで定義した際に、layer13の位置ごとに異なるバイアスを、(19*19)次元のベクトルとして、Convolution2Dを1次元にreshapeした後、足し合わせていたが、ミニバッチにした場合うまくいかないことが分かった。V…

ChainerでAlphaGoのSL policy networkを定義

AlphaGoのSL policy networkをとりあえず定義だけ作ってみました。AlphaGoの論文から、SL policy networkは以下のようになると理解しています。 layer1は、5*5のフィルターk枚、ReLU関数 layer2~12は、3*3のフィルターk枚、ReLU関数 layer13は1*1のフィルタ…

【囲碁プログラム】 rollout/tree policyをAdaGradで学習

※学習のやり直しを行った記事はこちらプロの棋譜からrollout/tree policyを学習してもGnuGoに対して勝率が30%程度であまり高くなっていない。学習に確率的勾配降下法(SGD)を固定の学習係数(0.001)とL1正則化係数(0.0000001)を使っていたので、 学習方法を変…

【囲碁プログラム】 tree policyの学習

AlphaGoの論文にあるtree policyをプロの棋譜から学習を行った。rollout plicyから追加される特徴は以下の3つ。 Self-atari … 次に取られる手 Last move distance … 直前の2手からのマンハッタン距離 Non-response patter … 12point diamondパターン Last mo…

【囲碁プログラム】 プレイアウトにパターン適用

昨日はhttp://www.computer-shogi.org/wcsc26/を中継で観ていました。 コンピュータ将棋はまだまだ進化しているようで熱くなりますね。 チェスのStockfishの技術が将棋にも応用されているみたいです。さて、AlphaGoとイセドルの対局を観てから作り始めた囲碁…

アタリから逃げる手

前回の囲碁プログラムにノード選択とプレイアウト時にアタリから逃げる手が選ばれやすくなるように修正を行った。ランダムプレイアウトとの対戦とGnuGoとの対戦では勝率が上がったが、自分で対戦してみると簡単にシチョウにはまるので弱くなったと感じる。理…

囲碁プログラムのプレイアウトにパターンを適用

前回作った囲碁プログラムのプレイアウトで、プロの棋譜から学習したパターンの確率に応じて手を選択するようにしてみた。はじめ局面全体の合法手について3×3パターンを適用してみたが、まったく強くならない上に、30倍くらい遅くなってしまった。そこで、直…

PythonでGo

AlphaGoとイ・セドルとの対局を観てから、AlphaGoの仕組みについて調べています。Natureの論文を読んで少しずつ理解しているところですが、 そのうちまとめたいと思っています。AlphaGoは、ディープラーニングを使用しているといっても ベースになっているの…