TadaoYamaokaの開発日記

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

2019-01-01から1年間の記事一覧

WindowsでPyTorchをC++(Visual C++)で動かす

WindowsでPyTorchをC++のサンプル(MNIST)をVisual Studio 2017でビルドして動かす手順のメモです。 LibTorchのインストール https://pytorch.orgのQUICK START LOCALLYから、Stable/Windows/LibTorch/C++/10.0(CUDAのバージョンが10.0の場合)を選んでlibtorc…

将棋AIの進捗 その32(MCTSの探索にAND/OR木を導入する)

Leela Chess Zeroの状況を定期的にウォッチしないとなと思って、issueを眺めていたら"Exact-Win Strategy for Overcoming AlphaZero" #799という投稿がされていた。 Leela Zeroのissue#2276にも同様の投稿がある。 ざっくり説明すると、子ノードが勝ちの場合…

AlphaStarについて

次回の技術書典に、参加している強化学習の勉強会のメンバで合同誌として頒布を行うべく執筆を行っている。 自分は、ネタとしてAlphaStarについて選んだのだが、書く内容がまとまらないのでブログにもアウトプットすることにする。 AlphaStarについて Google…

Visual Studioを使わずにNuGetのパッケージを検索する

Microsoft系のプログラミング言語では、NuGetを使用するとパッケージインストールが楽にできる。 しかし、NuGetは基本的にVisual Studioから使うことが前提になっている。 .NET Coreは、Visual Studioを前提としていないため、Visual Studio使わずにNuGetの…

gRPCでC#とPythonを連携する

C#のプログラムから機械学習などの処理をPythonで実装したい場合がある。 C#とPythonの連携方法について調べたところいくつか方法があったが、gRPCが良さそうだったので試してみた。 調べた方法 Python for .NET C#とPythonを直接連携させるには、「Python f…

Visual Studio 2017に.NET Core 2.1を追加する

ほぼ自分用のメモです。Visual Studio 2017がサポートしている.NET Coreのバージョンは2.1.508だが、先により新しいバージョン2.1.801をインストールしていたため、アンインストールしてから、Visual Studio Installerから「.NET Core クロスプラットフォー…

BERTで日本語の単語埋め込みを試す

京都大学が公開している日本語のWikipediaから学習したBERTのモデルを使って、単語の埋め込みを試した。Googleが公開しているBERTのextract_features.pyを使って、Juman++v2を使って文を分かち書きして入力すると、文中の単語の埋め込みベクトルが得られる。…

Juman++v2をWindowsでビルドする

BERTの日本語Pretrainedモデルを試してみたくなったので、その準備として、Juman++v2のWindowsでのビルドを行った。 ほぼ公式通りなので、あまり記事にする意味はないが手順をメモしておく。Juman++v1はWindowsに対応していなかったが、v2は公式でWindowsに…

将棋AIの進捗 その31(cuDNNによるSENetの推論処理の実装)

dlshogiの10ブロックのWideResnetの自己対局による強化学習を続けていましたが、230サイクルほどでほぼ頭打ちになりました。訓練損失は下がり続けていますが、floodgateの棋譜に対する損失が上昇傾向になっており、技巧2のとの勝利も上がらないため、このモ…

【書籍】将棋AIで学ぶディープラーニングのJupyter Notebookを公開

【書籍】将棋AIで学ぶディープラーニングのJupyter NotebookをGoogle Colabで公開しました。 train_mnist.ipynb(第6章) python-dlshogi.ipynb(第7~12章) Google Colab上で学習を実行して、ssh経由で将棋所から実行できます。ssh経由で実行する方法は、Noteb…

Google Colabに鍵ペアを使用してsshでログインする

Google Colabは、基本的にJupyter Notebookから使用します。しかし、ngrokというサービスを使用することで、sshで接続する方法が知られています。 How can I ssh to google colaboratory VM? - Stack Overflow上記サイトの方法では、sshでログインする際にパ…

学習中と並列で自己対局

先日の日記で、学習中にも自己対局を行うようにしたことを書いたが、現在dlshogiでは自己対局で生成した局面は過去10サイクル分をすべて学習に使うようにしている。 (AlphaZeroのようにサンプリングしないですべての局面を使うのは、Actor-Criticで敗着とな…

WindowsでプロセスにSIGINTを送る

将棋AIの自己対局のプログラムで途中で中断(Ctrl+C)した場合に、それまでに生成した局面を安全にファイルに書き出すためにSIGINTをハンドリングしている。 ただし、今までは、基本的に途中で中断しないで、生成する局面の数を引数として、自己対局完了→学習…

VSCodeでMarkdownの編集

今までMarkdownをテキストエディタで手書きしていましたが、Visual Studio Codeは標準でMarkdownのプレビューに対応しているので、Markdownのエディタとして使い始めた。 拡張機能をインストールすると表のフォーマットも自動で行ってくれる。「Markdown Ext…

【Android開発】実行時のパーミッションリクエスト

先日バージョンアップしたボーカル音程モニターで、起動できないというレビュー(評価★1)が多く付いたので、一旦リバートしました。 段階的な公開で10%にしていたので影響は抑えられましたが、テスト不足と反省しています。手元のテスト機では動作しており…

WSLでOpenAI Gymを動かしてVSCodeでデバッグする

OpenAI Gymのサンプルコードを調べたくてWSLで環境構築した際のメモです。OpenAI GymはWindowsには対応していないため、Windowsで動かすにはWSL上のLinuxで動かす必要があります。 また、PythonコードをGUIでデバッグしたい場合、Visual Studio Codeでデバッ…

将棋AIの進捗 その30(NNキャッシュ)

先日、Leela Chess Zeroのソースを流用して、LRUキャッシュを実装したが、これを自己対局プログラムに組み込んだ。はじめ、LRUキャッシュを1つにしてすべての探索スレッドで共有するようにしたが、ゲーム木の展開済みノードのNN計算結果が、他のスレッドの探…

NNの計算結果をキャッシュする

自己対局でノードの再利用しないようにしたが、NNの計算結果は再利用した方が効率がよいため、キャッシュの仕組みを導入したい。並列で実行しているゲームすべてについて1ゲーム分のNNの結果を保持するにはメモリ容量が不足するため、使用されなくなった局面…

将棋AIの実験ノート(入力特徴量の数値の表現方法)

AlphaZeroでは入力特徴量として持ち駒の枚数、手数をそのまま数値として与えている。一方、Alpha Goでは、呼吸点などの数は、ont-hotエンコーディングして与えている。 例)上限が3で2の場合、010。dlshogiでは、持ち駒の枚数、利きの数を、数値の分だけ1に…

将棋AIの実験ノート(自己対局時のノード再利用)

以前に自己対局時にノードを再利用することで一時的に精度が上がったが、その後学習を続けるとpolicyのテスト損失が上昇する現象が起きた。ノード再利用とバッチサイズの変更(1024→2048)を同時に行ったので、どちらが原因で発生したのかわからなかったため、…

将棋AIの実験ノート(初期値とシャッフルの影響)

各種条件を変更して比較実験を行っているが、初期値とシャッフルにランダム性があるので、測定結果は毎回ばらつきがある。 ランダムシードを固定すると結果が同じになるが、そのシード値での比較にしかならないので、固定しないで測定している。 複数回測定…

Jupyter Qt ConsoleでPandasを見やすくする

個人的な備忘録です。Pythonを対話的に使う際、Jupyter Qt Consoleを主に使っている。 デフォルトだとウィンドウサイズの幅が81文字分しかないため、Pandasでhead()やdescribe()をすると、途中で改行されて見づらい。 Jupyter Qt Consoleのウィンドウの幅を…

将棋AIの実験ノート(重みの初期値)

dlshogiでは、ニューラネットワークの重みの初期化はChainerのデフォルト(LeCunNormal)を使用している。 モデルをSEResnetに変える予定なので、どの初期化が良いか実験してみた。すべてデフォルトの場合と、活性化関数がReLUの場合はHeNormalが良いとされて…

将棋AIの実験ノート(入力特徴に手番は必要か)

dlshogiでは入力特徴に手番を加えていない。 将棋では先手と後手で同一局面の価値は変わらないためだ。 ある局面が与えられば、先手か後手かによらず最善手は同じはずである。一方、AlphaZeroでは、手番が入力特徴に加えられている。 局面を180度回転せずに…

【Androidアプリ開発】ボーカル音程モニター(Vocal Pitch Monitor)のバージョンアップ

しばらく更新できていなかったAndroidアプリのボーカル音程モニター(Vocal Pitch Monitor)をバージョンアップしました。play.google.com今回は、要望が多かったインポート機能を実装しました。 インテント経由でGoogleドライブなどからwavファイルをインポー…

将棋AIのモデルでSENetを試す その2

前回将棋AIのモデルでSENetを組み込むと精度が上がることが確かめられた。 今回は、SENetなしで層を増やした場合と比較を行ってみた。 また、SENetのreduction rateを16から8、4にした場合とも比較を行った。測定方法は前回と同じ。 比較条件 SENetなしでブ…

将棋AIのモデルでSENetを試す

先日Chainerで実装したSENetを将棋AIのモデルで試してみた。dlshogiで使用している10ブロック、192フィルタのWideResNetにSENetを組み込んで、SENet有無による精度を比較した。 SENetの実装 DeepLearningShogi/policy_value_network.py at 7820661597f380b17…

将棋AIの実験ノート(引き分け有無の比較)

教師データ引き分けを加えた場合と、加えない場合の精度の比較を行った。 引き分けの学習には、ChainerのカスタムFunctionを使用した。測定方法は前回の正則化の効果の測定と同じ。 測定方法 10ブロック、192フィルタのモデル PolicyとValueのマルチタスク学…

将棋AIの実験ノート(正則化の影響の再測定)

先日、将棋AIのモデルにおけるエントロピー正則化とL2正則化の効果を測定したが、正しく測定できていなかったので再測定した。前回の測定結果のtest accuacyが低いので、原因を調べていたら、ChainerのV5から追加されたstatic_graphを使っていたことが原因だ…

ChainerでSENetを実装する

ILSVRC 2017で優勝したSqueeze-and-Excitation Networks (SENet)を、こちらのPyTorchの実装を参考にChainerで実装した。GitHub - TadaoYamaoka/senet.chainer 実装したのは、SE-ResNet20/Cifar10のみ。 結果 通常のResNet >python cifar.py --batch_size 64 …