TadaoYamaokaの開発日記

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

囲碁

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

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

アタリから逃げる手

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

囲碁プログラムの高速化 その2(root並列化)

前回高速化した囲碁プログラムを並列化してさらに高速化した。並列化の手法は、rootノードとその直下の枝のみ各スレッドで共有して、それから下の枝はそれぞれスレッドごとに別に実行する方法とした。rootノードの直下の枝のプレイアウト回数、勝利数の更新…

囲碁プログラムの高速化

前回作成した囲碁プログラムにパターンを適用すると余りにも遅かったので、以下のようにボードの構成を変更して高速化を行った。 前回 ボードを各目の石の色で構成 高速化版 ボードを連の集合で構成 各連ごとの呼吸点の位置の情報(ビットボード)を保持 各目…

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

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

囲碁プログラム

Pythonで作った囲碁プログラムをC++で書き直しました。github.com GTPに対応させたので、GnuGoと対戦させてみましたが、 デフォルトのレベルではまったく勝てませんでしたorzレベルを5まで落としてようやく勝てることがある程度。プレイアウト回数を10000ま…

PythonでGo

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