TadaoYamaokaの開発日記

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

【dlshogi】Muonオプティマイザ対応

Kimi K2やDeepSeek V4では、AdamWに代わりMuonオプティマイザが採用されている。Muonオプティマイザは、勾配のモメンタム行列を直交化することで、特定の方向に更新が集中するのを防ぎ、各方向の更新の強さを均等化することができる。AdamWと比較して、少な…

【dlshogi】skew変換で角の利きを捉える

dlshogiは、Ryfamateが採用している9x1と1x9の畳み込みに、1x1の畳み込みブランチを加えたブロックを採用している。9x1と1x9の畳み込みは、縦1列と横1行、それぞれの要約を作成して、元のマスにブロードキャストしている。 それにより、飛車や香車の長い利き…

CQT+GBDTで和音構成音を解析する その5

前回の記事「CQT+GBDTで和音構成音を解析する その4」では、表示用に切り詰める前のCQTパワーと、過去100 msの時間情報を比較した。全体F1とオクターブ誤検出は改善したが、上側オクターブの実音Recallを維持できず、処理時間にも課題があったため、運用モ…

【dlshogi】QK RMSNormモデルの学習

来月の電竜戦に向けてQKNormを追加したモデルの学習を行った。モデルアーキテクチャとサイズは、世界コンピュータ将棋選手権と同じで、モデルの差分はQKNormを追加しただけである。訓練データは、終盤の精度を改善するため、終盤局面からNNUE系(氷彗)の自己…

wslcでdlshogiを動かす

WSL コンテナーがリリースされたので、dlshogiをWSL コンテナーで動かして、ShogiGUIから使えるか試した。 WSL コンテナー WSLにdockerをインストールしなくても、Windowsから直接コンテナを起動できるコマンドである。 wslcコマンドは、dockerと同じ引数が…

CQT+GBDTで和音構成音を解析する その4

前回の記事「CQT+GBDTで和音構成音を解析する その3」では、ピアノ・弦楽器・ギターの合成和音を一つの分類器で解析するため、弦楽器の音域に沿うボイシングとギターのオクターブ重複を学習データに加えた。最終テスト840フレームで全体F1は0.796、上側オク…

CQT+GBDTで和音構成音を解析する その3

前回の記事「CQT+GBDTで和音構成音を解析する その2」では、ピアノ・弦楽器・ギターを一つのモデルで扱い、合成データで全体F1=0.810を得た。一方、実際の和音を模したミックスを時系列で解析すると、弦楽器の高音やギターの最上声を見逃した。今回は、CQT…

CQT+GBDTで和音構成音を解析する その2

前回、CQTを特徴量として、GBDTで和音の構成音を判定する処理を実装し、ピアノの単音色で倍音誤検知することなく構成音を判定できることを確かめた。 今回は、Kontakt5に含まれる、弦楽器(バイオリン、ビオラ、チェロ、コントラバス)とギター(エレキ、ジャズ…

【dlshogi】ASR: Attention-alike Structural Re-parameterizationを試す

前回、RepVGG型のStructural Re-parameterization(SRP)を試した。 精度がわずかに向上するが、学習時間が1.38倍になるという結果だった。今回は、SEブロックを、入力に依存しない学習可能パラメータにして、推論時に直前の畳み込み層に再パラメータ化する手…

Lean4で将棋の合法手を生成する

最近、AIを用いた数学研究とLeanによる形式検証のニュースが相次いでいる。 ナビエ–ストークスのミレニアム懸賞問題について | OpenAI Formalizing Fermat's Last Theorem \ Anthropic OpenAIは、未解決問題であったナビエ–ストークス方程式の存在と滑らかさ…

CQT+GBDTで和音構成音を解析する

以前に、FFTを使用した高速CQTと、NNLSを組み合わせて和音構成音の解析を行った。しかし、NNLSでは、基音が強調されるが倍音も残るため、構成音を識別するのが難しかった。今回は、CQTを特徴量として、機械学習モデルで構成音を判定できるか試した。 パイプ…

【cshogi】入玉宣言法の24点法に対応

cshogiを入玉宣言法の24点法に対応させた。 >>> from cshogi import * >>> board = Board("ln1+R5/1P1+L+PK+P+P+P/pp2+B+PG2/9/2p6/2s6/3s+r4/1+nk+l1+p3/3b3NL b 2G2S6Pgn2p 1") >>> board.nyugyoku_result() # デフォルト: LAW_24 2 >>> NYUGYOKU_DRAW 2 >…

【cshogi】王手生成機能を追加

cshogiに、王手生成を追加した。 from cshogi import * board = Board(sfen="9/4k4/9/4P4/9/9/9/9/4K4 b - 1") [move_to_usi(m) for m in board.check_moves] のようにして使用できる。 王手生成の高速化 やねうら王から移植した王手生成の高速化も行った。P…

【dlshogi】Structural Re-parameterizationを試す

RepVGG: Making VGG-style ConvNets Great Againで提案されているStructural Re-parameterization(SRP)をdlshogiでも試してみた。 Structural Re-parameterization(SRP) 3x3の畳み込みを、学習時のみ3x3, 1x1, identiryの3つのブランチにして学習し、推論時…

【cshogi】mateMoveの性能改善

cshogiの短手数の詰めルーチン(mateMove)の性能を改善した。 1手詰めルーチンの改善 やねうら王から移植した遠隔王手の1手詰めルーチンに非効率な処理があったので改善した。 捕縛が発生しない場合に不要なdiscoveredCheckBB()を削減 Aperyの1手詰めルーチン…

【dlshogi】Gatherを直列にしたらR+37.2になった件

前回、NNキャッシュにより強くなった理由として、即時バックアップされる効果があることを確かめた。これは、並列で探索する際には、探索の幅が広がると効率は悪くなることを示唆している。 TensorRT並列化の弊害 以前に、TensorRTのIExecutionContextを利用…

【dlshogi】NN Cacheを実装したらR+37になった件 その4

前々回の記事で、NNキャッシュで強くなるのは、NPS向上よりも、即時バックアップされる効果ではないかという仮設を立てた。 NNキャッシュで強くなるのは、探索速度よりも、即時バックアップされて、次のプレイアウトに反映されることによる効果が大きいのか…

【dlshogi】NN Cacheを実装したらR+37になった件 その3

前回の続き。NNキャッシュを使う場合、現在のdlshogiのデフォルトのバッチサイズ128が最適でない可能性があるため、バッチサイズを変えて、強さを計測した。NN Cacheなし版と、NNUE系(氷彗)を加えたリーグで棋力を測定した。 条件 バッチサイズ128から16ずつ…

【dlshogi】NN Cacheを実装したらR+37になった件 その2

前回の続き。 レーティング差 その後、連続対局を続けたところ、CFS(優越確率) 100%で、R+43.5となった。 # PLAYER : RATING ERROR POINTS PLAYED (%) CFS(%) W D L D(%) 1 hayabusa-8th : 46.7 16.5 469.5 801 59 100 439 61 301 8 2 pre68_40x512_nncahe :…

【dlshogi】NN Cacheを実装したらR+37になった件

やねうら王では、最近Stockfishのfinny tablesという手法を取り入れたところ、NPSが15%向上している。 dlshogiの探索部にも、まだ工夫の余地が残っていると考える。 今回、以前から試そうと思って、実装が面倒で試していなかった、NN Cacheを試してみた。 コ…

cshogiにGPS将棋のdf-pnを移植(その3 ソース解説)

GPS将棋のdf-pnを1つのソースファイルに移植したことで、LLMにコード全体をコンテキストとして与え、解説させられるようになった。 GPS将棋のdf-pnは、詰将棋探索アルゴリズムの知見が数多く詰め込まれた非常に価値の高いコードである。しかし、前々回の記事…

cshogiにGPS将棋のdf-pnを移植(その2 攻め方に玉がない局面に対応)

前回、cshogiに移植したGPS将棋のdf-pnを、攻め方に玉がない局面に対応した。 対応内容 既存のPositionクラスのcheckerBBを玉がない場合、空にする findCheckers()、hiddenCheckers()を玉なしの場合、空にする isOSのassertを玉がない場合に対応 探索アルゴ…

cshogiにGPS将棋のdf-pnを移植

以前に、GPS将棋(OpenShogiLib)のdf-pnをdlshogiのAperyベースに移植することを試みたが、変更が多すぎて途中で挫折したことを書いた。今回は、Codex(GPT-5.4とGPT-5.5)を使って、移植できるか試した。 移植の難しさ GPS将棋は、盤面管理、合法手生成が、Ape…

dropless MoE(Mixture of Experts)を試す その6(推論速度比較)

MoE

前回、C++で実装したTensorRTプラグインを使ったMoEの推論処理の推論速度を比較する。 比較対象は、 Dense MoE Sparse MoE (自前実装CUDAカーネル) Sparse MoE (CUTLASS Grouped GEMM) の3パターンとする。 比較条件 SwinTransformerのStage 0/1をMoE化 Stag…

dropless MoE(Mixture of Experts)を試す その5(推論処理)

MoE

前回、Pythonで実装したエンジンビルドスクリプトで保存した.engineを読み込んで、TensorRTで推論する処理をC++で実装する。 推論処理 TensorRTのライブラリの使用がメインである。 デフォルトで、CUDA Graphを有効にしている。 CUDA Graphは、プラグインでC…

dropless MoE(Mixture of Experts)を試す その4(エンジンビルド)

MoE

前回、実装したプラグインを使用して、カスタムノードを含むONNXをTensorRT の serialized engineに変換する。 dlshogiでは、C++でエンジンビルドを実装しているが、今回はPythonのtensorrtライブラリを使用して実装する。 生成したserialized engineを後でC…

dropless MoE(Mixture of Experts)を試す その3(プラグイン)

MoE

前回、ONNXにエクスポートしたカスタムノードに対応する処理をTensorRTのプラグインで実装する。 TensorRTのプラグイン 公式ドキュメントに記載されている通り、プラグインクラスとプラグイン クリエーターを実装する。 プラグインがREGISTER_TENSORRT_PLUGI…

dropless MoE(Mixture of Experts)を試す その2(ONNXエクスポート)

MoE

前回、PyTorchで実装したMoE対応のSwinTransformerモデルをTensorRTで推論できるように、ONNXにエクスポートする。最低限、grouped_mmのみをカスタムオペレータとすればよいが、router + dispatch + expert + combineを分離するとTensorRTのグラフとpluginの…

dropless MoE(Mixture of Experts)を試す

MoE

dlshogiのモデルはパラメータを増やすほど精度が向上することが60ブロック768フィルタのサイズまで確認できている。 しかし、探索速度が落ちるため、対局した際の強さは、40ブロック512フィルタのモデルには及ばない。MoE(Mixture of Experts)は、パラメータ…

【dlshogi】QKNormを試す

最近のLLMでは、AttentionにQKNormが使われている。 特に、RMSNormを使う実装が主流になっている。世界コンピュータ将棋の会場でnshogiの開発者と話した際に、SwiGLUとQKNormが効果があったということだった。 SwiGLUは、dlshogiでも採用して効果が高いこと…