2016-04-01から1ヶ月間の記事一覧
ここの記事に、_BitScanForward64を使う場合、ヒットしたビットを0にするのに、 n &= n - 1; とするとよいと書かれていたので試してみた。現在、ビットを0にするのに、 _bittestandreset64(&n, i); を使用している。記事では、下記のように1をシフトして演算…
前回のプログラムにシチョウの判定を入れてみた。シチョウを判定するには、アタリを助けた後の呼吸点が2の場合、数手先まで読んで呼吸点が1になるか、3以上になるか確認する必要がある。数手先まで読む際、ボードのコピーを行うと処理時間がかかるので、手を…
オープンソースで強豪の囲碁プログラムであるPachiをWindowsでビルドして動かすことができたので、備忘録を兼ねて手順を記します。 PachiはWindowsのバイナリが配布されていますが、プログラムを開発する上ではソースコードをステップ実行して調べたいので、…
前回の囲碁プログラムにノード選択とプレイアウト時にアタリから逃げる手が選ばれやすくなるように修正を行った。ランダムプレイアウトとの対戦とGnuGoとの対戦では勝率が上がったが、自分で対戦してみると簡単にシチョウにはまるので弱くなったと感じる。理…
前回高速化した囲碁プログラムを並列化してさらに高速化した。並列化の手法は、rootノードとその直下の枝のみ各スレッドで共有して、それから下の枝はそれぞれスレッドごとに別に実行する方法とした。rootノードの直下の枝のプレイアウト回数、勝利数の更新…
前回作成した囲碁プログラムにパターンを適用すると余りにも遅かったので、以下のようにボードの構成を変更して高速化を行った。 前回 ボードを各目の石の色で構成 高速化版 ボードを連の集合で構成 各連ごとの呼吸点の位置の情報(ビットボード)を保持 各目…
前回作った囲碁プログラムのプレイアウトで、プロの棋譜から学習したパターンの確率に応じて手を選択するようにしてみた。はじめ局面全体の合法手について3×3パターンを適用してみたが、まったく強くならない上に、30倍くらい遅くなってしまった。そこで、直…
前回の記事で、numpyを使って行列演算で3層パーセプトロンを実装しましたが、同じことをChainerを使って実装してみます。 import numpy as np import chainer from chainer import Function, Variable, optimizers from chainer import Link, Chain import c…
入力層、隠れ層、出力層で構成される単純なニューラルネットワークで、 誤差逆伝播を計算します。隠れ層の活性化関数はsigmoid、 出力層の活性化関数はsoftmaxとします。誤差関数(損失関数)は、交差エントロピーを使用します。それぞれの式は以下の通りです…
Pythonで作った囲碁プログラムをC++で書き直しました。github.com GTPに対応させたので、GnuGoと対戦させてみましたが、 デフォルトのレベルではまったく勝てませんでしたorzレベルを5まで落としてようやく勝てることがある程度。プレイアウト回数を10000ま…
AlphaGoとイ・セドルとの対局を観てから、AlphaGoの仕組みについて調べています。Natureの論文を読んで少しずつ理解しているところですが、 そのうちまとめたいと思っています。AlphaGoは、ディープラーニングを使用しているといっても ベースになっているの…