2025-03-01から1ヶ月間の記事一覧
ちょっと前に将棋AI開発者のDiscordチャンネルで、電卓アプリを作るのは難しいという話題があった。話のネタはこの記事: 電卓アプリを作るのはなぜ難しいのか、Androidの「電卓」に施された工夫とは? - GIGAZINEDecimal使えば簡単でしょと思ったのでチャン…
GPS将棋(OpenShogiLib)のdf-pnのソースの全体像を調べた。 df-pnアルゴリズムの概要 df-pn(Depth-First Proof-Number Search)とは、将棋の詰将棋問題において「詰むか否か」を効率的に証明するための探索アルゴリズムである。 各局面において証明数(Proof…
dlshogiは、詰み探索にdf-pnを実装しているが、ループ局面が正しく判定できない場合があり、解けない問題がある。 実戦では、ほぼ現れないので、実用上は問題になっていない。 実戦では、35手くらいまでの詰みは数秒で解ける。 それ以上長い詰みは、時間がか…
前回、軽量価値ネットワークの推論をStockfishの探索に組み込んで、モデルサイズ相当のNPSで探索できることを確認した。前回は、36,819,741局面を8エポック学習しただけで、Lesserkaiに勝てるがGPSFishには勝てなかった。今回は、dlshogiの学習で使用した約3…
AndroidとiOSでリリースしている「Vocal Pitch Monitor」では、自己相関関数と決定木のアルゴリズムで基本周波数(ピッチ)の測定を行っている。Vocal Pitch Monitor - Apps on Google Play「VocalPitchMonitor」をApp Storeで自己相関関数は、ノイズに強く比…
前回、軽量価値ネットワークのモデル全体の推論をC++でSIMDを使用して実装した。 今回は、推論を探索に組み込む。 ネットワーク構成見直し 推論を組み込む前にネットワーク構成で気になる箇所があったので見直した。埋め込み層を実装した際に、permuteを忘れ…
前回までで、軽量価値ネットワークの推論のビルディングブロックがすべてそろったので、それらを組み合わせてモデル全体の推論処理を実装する。 実装 以下の通りモデル全体の推論処理を実装した。 処理を順番に呼び出すだけなので、特に工夫点はない。複数ス…
前回までで、層ごとの推論処理が実装できたので、今回は、PyTorchで学習したモデルをレイヤー融合して、推論用にパラメータを保存する処理を実装する。 レイヤー融合 畳み込み層の直後のBatchNorm2dは、畳み込み層のパラメータに融合できる。PyTorchでは、fu…
日曜日にたややんCh.で配信された「将棋AI頂上決戦2025 氷彗 vs dlshogi」で使用したモデルについての補足です。【#将棋AI頂上決戦2025 】⏰本日3/9, 20:00~、将棋AIの頂点が決まる!❄氷彗 vs ⛲dlshogi公開されている将棋AIと今ほど棋力差がある時代は久しぶ…
前回は、軽量価値ネットワークの連結と活性化関数の推論をSIMDで実装した。今回は、埋め込み層の推論処理を実装する。 埋め込み層 軽量価値ネットワークの def __init__(self, dims=(16, 4, 32), activation=nn.ReLU()): self.l1_1 = nn.Embedding(NUM_EMBED…
前回、軽量価値ネットワークの畳み込みの層をSIMDで実装した。今回は、9x1と1x9の畳み込みの層の出力を連結して活性化関数ReLUを適用する処理をSIMDで実装する。 連結と活性化関数 軽量価値ネットワークの h2 = self.act(torch.cat((h2_1.view(-1, self.dims…
前回に引き続き軽量価値ネットワークの推論処理をSIMDで実装する。前回は全結合の推論処理を実装したが、今回は畳み込み層を実装する。 畳み込み層 実装中の軽量価値ネットワークは、9x1と1x9のカーネルを並列で適用を行う。入力サイズは9x9で固定のため、片…
前回、LibTorchで推論処理を実装してStockfishの探索に組み込んだが、NPSが1スレッド2万程度で、Stockfish系の探索エンジンとしては遅すぎることがわかった。 LibTorchは推論が別スレッドで実行されるため、オーバーヘッドが大きく、軽量のモデルをバッチサ…