TadaoYamaokaの日記

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

将棋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 …

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

将棋AI用モデルの学習で正則化の有無による精度への影響を測定した。 測定方法 10ブロック、192フィルタのモデル PolicyとValueのマルチタスク学習 Aperyで生成した1.4億局面をシャッフルして2500万局面分を学習 Momentum SGD(lr=0.01) 初期モデルから学習 …

2値分類で中間の値も学習する(続き)

昨日書いた2値分類で中間の値も学習するコードは、損失の計算で計算グラフを構築して、backward()時の微分はChainerに任せていた。しかし、交差エントロピーの微分は、以下のように引き算で表すことができるため、計算グラフを構築しなくてもよい。 交差エン…

2値分類で中間の値も学習する

実験している将棋AIの学習では、今まで価値ネットワークの出力の活性化関数をシグモイドとして、勝ちと負けの2値で分類していた。 しかし、先日の世界コンピュータ将棋選手権に参加して、引き分けや千日手が結果を左右するゲームが多かったため、引き分けも…

ロジットを使ってエントロピーを計算する

方策勾配で強化学習を行う際に、方策が決定論的になっていないか監視するために、ログにエントロピーを出力するようにしたい。エントロピーは、 で計算できるが、確率がほぼ0の場合、が-infになるため、この式のままでは計算できない。の最小値をクリップし…

【iOS開発】Audio Spectrum Monitorバージョンアップアップ

3年半ぶりにiPhoneアプリのAudio Spectrum Monitorをバージョンアップしました。Audio Spectrum MonitorTadao Yamaokaミュージック¥120身に付けた機械学習の知識を使って、解析精度アップを行う予定ですが、その前に要望のあったインポート/エクスポート機能…

強化学習におけるバッチサイズとエントロピー正則化

※ほぼ自分用の実験ノートです。世界コンピュータ将棋選手権の少し前から、自己対局におけるノードの再利用とバッチサイズの変更(1024→2048)を行った。 250万局面の生成と学習を8サイクル行ったところ、技巧2に対して勝率が上がったため、大会には最新のモデ…

wcsc29で負けた対局の分析

2次予選1局のKristallweizenとの対局について、敗因を分析してみた。評価値は以下のようになっており、Kristallweizen側の評価値も124手で先手が優勢となっていた。 125手目の2七桂打が悪手で、一手で後手優勢に傾いた。125手目の局面を、Aperyで分析すると…

Multi Ponderについて

今年の世界コンピュータ将棋選手権はMulti Ponderを採用しているチームが多く関心も高かったようです。dlshogiでも、Multi Ponderの考え方を取り入れていました。 Multi Ponderは、どの手にどれだけのリソースを配分すると誤差を最小化できるかという問題と…

第29回世界コンピュータ将棋選手権の感想

dlshogiは、前回に続いて1次予選を通過し、2次予選まで進むことができました。 2次予選は、2勝できればよいと考えていましたが、結果は4勝5敗と善戦できました。 ただし、1勝は相手チームのサーバダウンによるものなので、実質は3勝と思っています。 順位は2…

dlshogi(wcsc29版)のビルド済みファイル公開

dlshogiの第29回世界コンピュータ将棋選手権バージョンのビルド済みファイルを公開しました。wcsc28版は、詰み探索用にAperyの評価関数が必要でしたが、df-pnによる詰み探索を実装したため、評価関数は不要になりました。 CUDA、cuDNNはライセンス上の問題が…

世界コンピュータ将棋選手権 1次予選の感想

dlshogiは、世界コンピュータ将棋選手権 1次予選、8位でぎりぎり通過できました。3敗したうち、2つはやねうら王ライブラリのソフトでかなり棋力差がある感じでしたが、8戦目のあやめとの対局は去年の2次予選では勝っていたソフトなので、60手であっさり負け…

【iOS開発】フレームレートに合わせて描画する

今まで音声解析の結果を画面に表示する際に、AudioQueueNewInputのコールバックで、UIViewのsetNeedsDisplayを呼ぶようにしていましたが、最新のXcodeだと、メインスレッドで呼ぶように警告がでるようになっていました。元々UIViewの処理は、すべてメインス…

【iOS開発】iCloudにエクスポート/インポートする

しばらく更新していなかったiOSアプリを久しぶりに開発しています。メールで、アプリで保存したファイルを取り出せないのかという質問/要望を何通かもらっていたので、iCloudにエクスポートできるようにしました。 実装方法をメモっておきます。 共通 ViewCo…

将棋AIの進捗 その29(自己対局におけるノードの再利用)

先日の記事に書いたが、AlphaZeroは自己対局時にノードの再利用を行っている。 dlshogiでは、先手が探索した結果を後手が利用することになるため(逆も同様)、先手と後手の探索のバランスが崩れるため、ノード再利用を行わず各手番でハッシュをクリアしてい…

ビルド済みChainerからソースビルド版に戻す

Chainer/CupyはWindowsは正式にサポートされていないが、問題なく動作する。 最近のバージョンでは、Windows向けにもビルド済みパッケージも提供されているので、以前は必要だったVisual Studioがなくてもインストールできる。先日、開発環境をVisual Studio…

WindowsでLeela Chess Zeroをビルドしてデバッグする

人の書いたソースを調べる際、動かせるようにしてからデバッガでステップ実行すると理解しやすい。Leela Chess Zeroのソースをたまに参照していたが、詳細に実装を調べるために、デバッガで動かせるようにした。 公式のビルドの説明の通りだが、手順をメモし…

技術書典6の報告と委託販売のお知らせ

技術書典6無事終了しました。 来てくださった方、ありがとうございました。 コンピュータ将棋将棋選手権、応援してますと声をかけてくださったりしてうれしかったです。新刊は150部用意していったのですが、用意した部数はちょうどでした。 数部残ったので世…

【お知らせ】技術書典6

すでに当ブログで告知していますが、技術書典6で「ディープラーニングを使った将棋AIの作り方~強化学習編~」という本を出します。 内容は、AlphaZero Shogiの仕組みと実装についてです。 電子版のコードも付属します。価格は500円です。チェック数が印刷部…

PythonでAlphaZero Shogiを実装する その4

迫田さんのブログで、AlphaZeroは自己対局時にノードを再利用しているという根拠のリンクが貼られていて、確認したことろ確かにDeepMindの中の人がノードを再利用していると答えていました。 Accelerating Self-Play Learning in Goを読んだ - 水たまりAlpha…

【書籍】囲碁ディープラーニングプログラミング(翻訳)

マイナビ出版から「囲碁ディープラーニングプログラミング」という本が出版されます。 私は翻訳者として関わらせてもらいました。 PythonとKerasを使って、AlphaGo、AlphaGo Zeroの仕組みを一つずつ実装しながらディープラーニングを学べる入門書になってい…

将棋AIの進捗 その28(探索時のノイズの効果)

世界コンピュータ選手権まで残り1ヵ月もなくなったので、強化学習で強くするのはあまり望めないので探索部の調整を行っている。以前のdlshogiでは、Policyの読み漏れによって、受けを間違えて数手先で詰まされる状況がよく起きていたため、Policyにノイズを…

Python環境をVisual Studio 2017に移行

Python3.5はVisual Studio 2015でビルドされているため、余計なトラブルを避けるためVisual Studio 2015を使い続けてきた。最近、Visual Studio 2015が起動して数分後に30秒くらい固まる現象が起きて、再インストールしたりしたが直らないので、しばらく我慢…

PythonでAlphaZero Shogiを実装する その4

AlphaZeroでは、訓練と自己対局は並列で行われ、チェックポイントで自己対局で使用するネットワークが最新のネットワークに更新される。 チェックポイントは、ミニバッチサイズ4,096で、1,000ステップ間隔だが、チェックポイントの間に何ゲーム行われるかを…

【告知】技術書典6で「ディープラーニングを使った将棋AIの作り方~強化学習編~」という本を頒布します

日記で何回かふれていますが、改めて、技術書典6で「ディープラーニングを使った将棋AIの作り方~強化学習編~」という本を頒布します。 techbookfest.orgシリーズ3冊目になります。今回は、AlphaZero Shogiの仕組みの解説と、AlphaZero Shogiを忠実にコピー…

将棋AIの進捗 その28(弱点の克服)

前回、自己対局の報酬を詰み探索の結果に変更したことで、valueの精度向上したことを書いた。詰み探索結果を報酬にしたのは、評価値が2000近くある局面から、詰みが見つかり一気に負ける局面があるためだが、そのような局面をより積極的に是正することにした…

PythonでAlphaZero Shogiを実装する その3

技術書典6の本を執筆しながらAlphaZero Shogiを実装したPythonプログラムの修正も行っている。 プログラムの方はほぼ完成しているが、自己対局を数時間実行すると途中で評価済みのはずのノードが未評価になっているため例外になる問題が発生している。 原因…

PythonでAlphaZero Shogiを実装する その2

前回の日記の時点で、自己対局と学習を実装したが、学習したモデルを使って対局できるUSIエンジンを実装した。 dlshogi-zero/mcts_player.py at master · TadaoYamaoka/dlshogi-zero · GitHub 将棋ライブラリにcshogiを使用して、探索方法をdlshogiと同じ方…