TadaoYamaokaの開発日記

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

2025-03-01から1ヶ月間の記事一覧

【小ネタ】電卓アプリを作るのは難しい?

ちょっと前に将棋AI開発者のDiscordチャンネルで、電卓アプリを作るのは難しいという話題があった。話のネタはこの記事: 電卓アプリを作るのはなぜ難しいのか、Androidの「電卓」に施された工夫とは? - GIGAZINEDecimal使えば簡単でしょと思ったのでチャン…

GPS将棋(OpenShogiLib)のdf-pnの移植 その2(ソース全体像)

GPS将棋(OpenShogiLib)のdf-pnのソースの全体像を調べた。 df-pnアルゴリズムの概要 df-pn(Depth-First Proof-Number Search)とは、将棋の詰将棋問題において「詰むか否か」を効率的に証明するための探索アルゴリズムである。 各局面において証明数(Proof…

GPS将棋(OpenShogiLib)のdf-pnの移植

dlshogiは、詰み探索にdf-pnを実装しているが、ループ局面が正しく判定できない場合があり、解けない問題がある。 実戦では、ほぼ現れないので、実用上は問題になっていない。 実戦では、35手くらいまでの詰みは数秒で解ける。 それ以上長い詰みは、時間がか…

【dlshogi】軽量価値ネットワーク その13(学習結果)

前回、軽量価値ネットワークの推論をStockfishの探索に組み込んで、モデルサイズ相当のNPSで探索できることを確認した。前回は、36,819,741局面を8エポック学習しただけで、Lesserkaiに勝てるがGPSFishには勝てなかった。今回は、dlshogiの学習で使用した約3…

MPMによる基本周波数の測定

AndroidとiOSでリリースしている「Vocal Pitch Monitor」では、自己相関関数と決定木のアルゴリズムで基本周波数(ピッチ)の測定を行っている。Vocal Pitch Monitor - Apps on Google Play‎「VocalPitchMonitor」をApp Storeで自己相関関数は、ノイズに強く比…

【dlshogi】軽量価値ネットワーク その12(探索に組み込み)

前回、軽量価値ネットワークのモデル全体の推論をC++でSIMDを使用して実装した。 今回は、推論を探索に組み込む。 ネットワーク構成見直し 推論を組み込む前にネットワーク構成で気になる箇所があったので見直した。埋め込み層を実装した際に、permuteを忘れ…

【dlshogi】軽量価値ネットワーク その11(モデル全体の推論)

前回までで、軽量価値ネットワークの推論のビルディングブロックがすべてそろったので、それらを組み合わせてモデル全体の推論処理を実装する。 実装 以下の通りモデル全体の推論処理を実装した。 処理を順番に呼び出すだけなので、特に工夫点はない。複数ス…

【dlshogi】軽量価値ネットワーク その10(レイヤー融合とパラメータ保存)

前回までで、層ごとの推論処理が実装できたので、今回は、PyTorchで学習したモデルをレイヤー融合して、推論用にパラメータを保存する処理を実装する。 レイヤー融合 畳み込み層の直後のBatchNorm2dは、畳み込み層のパラメータに融合できる。PyTorchでは、fu…

将棋AI頂上決戦2025 氷彗 vs dlshogi で使用したモデル

日曜日にたややんCh.で配信された「将棋AI頂上決戦2025 氷彗 vs dlshogi」で使用したモデルについての補足です。【#将棋AI頂上決戦2025 】⏰本日3/9, 20:00~、将棋AIの頂点が決まる!❄氷彗 vs ⛲dlshogi公開されている将棋AIと今ほど棋力差がある時代は久しぶ…

【dlshogi】軽量価値ネットワーク その9(埋め込み層)

前回は、軽量価値ネットワークの連結と活性化関数の推論をSIMDで実装した。今回は、埋め込み層の推論処理を実装する。 埋め込み層 軽量価値ネットワークの def __init__(self, dims=(16, 4, 32), activation=nn.ReLU()): self.l1_1 = nn.Embedding(NUM_EMBED…

【dlshogi】軽量価値ネットワーク その8(連結と活性化関数)

前回、軽量価値ネットワークの畳み込みの層をSIMDで実装した。今回は、9x1と1x9の畳み込みの層の出力を連結して活性化関数ReLUを適用する処理をSIMDで実装する。 連結と活性化関数 軽量価値ネットワークの h2 = self.act(torch.cat((h2_1.view(-1, self.dims…

【dlshogi】軽量価値ネットワーク その7(畳み込み層をSIMDで実装)

前回に引き続き軽量価値ネットワークの推論処理をSIMDで実装する。前回は全結合の推論処理を実装したが、今回は畳み込み層を実装する。 畳み込み層 実装中の軽量価値ネットワークは、9x1と1x9のカーネルを並列で適用を行う。入力サイズは9x9で固定のため、片…

【dlshogi】軽量価値ネットワーク その6(全結合層をSIMDで実装)

前回、LibTorchで推論処理を実装してStockfishの探索に組み込んだが、NPSが1スレッド2万程度で、Stockfish系の探索エンジンとしては遅すぎることがわかった。 LibTorchは推論が別スレッドで実行されるため、オーバーヘッドが大きく、軽量のモデルをバッチサ…