nodchipのコンピューター将棋ブログ

コンピューター将棋ソフト「tanuki-」シリーズの実験結果を掲載しています。

2026-10-12 07:39:22 JST DL水匠・AobaZero・Ryfamateの教師信号を均等平均:32,768局では改善未確定

DL水匠、AobaZero、Ryfamateの3種類の教師信号を同じ割合で混ぜ、そのデータで追加学習した局面評価用のニューラルネットワーク(NNUE)の棋力を測定しました。比較対象は、Ryfamateの割合が半分になる混ぜ方と、既存のDL水匠・AobaZeroの2教師平均です。

3教師を均等に混ぜた条件の推定値は、どちらの比較でも約+4.3 Eloでした。ただし、2系列の学習結果をまとめた95%信頼区間は、どちらも0を含みました。今回の条件では改善を確認できず、現行の最良構成(champion)は変更していません。

何を比較したか

教師信号は、教師モデルが各局面に付けた評価値です。評価値を平均して学習用の正解を作る処理を、ここでは「アンサンブル」と呼びます。対局させたのは教師モデル自体ではなく、その正解を使って追加学習したNNUEです。

条件 教師評価値の混ぜ方
A:既存の2教師平均 DL水匠とAobaZeroをそれぞれ1/2
B:段階的な平均 まずDL水匠とAobaZeroを平均し、その結果とRyfamateを半分ずつ混ぜる。最終的な寄与は1/4、1/4、1/2
C:3教師の均等平均 DL水匠、AobaZero、Ryfamateをそれぞれ1/3

BとCはRyfamateの寄与が異なります。また、評価値を整数で保存するため、Bでは平均を2回取る際の丸めも入ります。今回の対局では寄与率と丸めの効果を別々には測定していないので、差を寄与率だけの効果とは断定しません。平均処理とは別の評価値の較正(分布やスケールの調整)は行っていません。

学習条件

3条件とも、同じ保存済みの学習状態(checkpoint)から開始しました。今回はランダムな重みから新しく学習する比較ではなく、同じ親からの追加学習の比較です。

  • 同じ20,004,864局面を10回使用。1条件・1系列あたりの延べ処理数は200,048,640局面、更新回数は12,210回。
  • 学習データの順序を決める乱数の設定値(seed)は2026101101と2026101102の2種類。同じseedの条件間で局面と学習順序を合わせる。
  • 学習ソフトTataraを使用。ネットワークの各層のサイズはft_out=768、l1=8、l2=32で、進行度を8段階に分ける設定も共通。
  • 誤差指標はWRM lossのpower=2.75で共通。1回の更新に使う局面数(バッチサイズ)は16,384。
  • 学習の更新を計算する内部状態(optimizer、RangerのLookahead)と更新回数の記録を親から継承。学習率のスケジュールだけをリセットし、4.375×10^-5で固定。

AとBは同条件で作成・検査済みのモデルを再利用し、Cを2 seedで新たに学習しました。以下の4つの対局測定は、すべて今回新しく行っています。Ryfamateを含む実験は非営利の開発として実施しています。

対局条件

短い持ち時間での比較(STC)として、各側10秒、1手ごとに0.1秒加算で対局しました。各エンジンは1スレッド、Hash 128 MiB、64局同時実行です。思考エンジンとその他の設定は共通にし、評価値の換算設定FV_SCALEは24に固定しました。先読み(Ponder)は無効です。

各比較・各seedで8,192局、同じ開始局面で先後を入れ替えた4,096ペアを実施しました。4測定で同じ開始局面列を使い、元の開始局面集に含まれる重複も保持しています。入玉ルールはCSARule24、手数上限は開始局面以前を含め512手です。

これは事前に局数を固定した探索的な比較で、途中の結果から終了を決める逐次検定(SPRT)ではありません。重い学習と対局は重ねず、全ペアの完結とエンジンの終了を確認しました。時切れ、反則、engine errorは0件でした。

結果

勝ち・引き分け・負けとElo差は、すべてC(3教師の均等平均)側から見た値です。Elo差は強さの差の推定値で、正ならCのほうが強い方向です。95%信頼区間は、対局結果に基づく推定の幅を示します。区間が0を含む場合、今回の対局では強さの差があると確認できません。

各seedの行は8,192局、「2 seed合計」の行は16,384局の結果です。

比較相手 学習seed Cの勝ち・引き分け・負け Elo差 95%信頼区間
B:段階的な平均 2026101101 4,061・262・3,869 +8.1 [+0.6, +15.7]
B:段階的な平均 2026101102 3,943・318・3,931 +0.5 [-7.0, +8.0]
B:段階的な平均 2 seed合計 8,004・580・7,800 +4.3 [-1.0, +9.6]
A:既存の2教師平均 2026101101 3,999・263・3,930 +2.9 [-4.6, +10.5]
A:既存の2教師平均 2026101102 4,029・268・3,895 +5.7 [-1.8, +13.2]
A:既存の2教師平均 2 seed合計 8,028・531・7,825 +4.3 [-1.0, +9.6]

相手の異なる対局を一つにまとめず、Bとの比較、Aとの比較をそれぞれ16,384局で集計しました。各seedの推定値はどちらの比較も正でしたが、両方の合計の信頼区間が0を含みます。「強くなった」とも「効果がない」とも、今回の結果だけでは確定できません。

学習ロスの推移

上段がseed 2026101101、下段が2026101102です。青のAは既存の2教師平均、赤のBは段階的な平均、緑のCは3教師の均等平均です。横軸のsuperbatchは今回のデータ20,004,864局面を1回使う単位、縦軸は訓練ロス(WRM loss、power=2.75)です。記録された10点を直線で結び、両段で同じ縦軸の範囲を使っています。AとCの曲線は近く、重なって見える部分があります。公開時に縮小された図ですが、両段の曲線・凡例・軸を確認して掲載しています。

記録された訓練ロスは、全6系列で学習の初回より最終回のほうが小さくなりました。最終回は、Aが約0.00652、Bが約0.00666、Cが約0.00650です。AとCの推移は近く、Bはやや大きい値でした。

ここでいう訓練ロスは、学習に使った局面について教師の正解とのずれを測る値です。教師信号が条件によって違うので、Cのロスが小さいことを、そのまま棋力の優位とは解釈しません。独立した検証データのロスは記録していないため、学習データに合わせすぎる「過学習」の有無も、この訓練ロスだけでは確認できません。

採否と限界

実験前に、次段階へ進む条件を「両比較で各seedのElo推定値が正、かつ各比較の2 seed合計の95%信頼区間の下限も正」と固定しました。今回は後半の条件を満たさず、この比較から大規模蒸留・追加学習や長い持ち時間の確認へは進めませんでした。championとの直接比較や昇格も行っていません。

学習seedは2種類だけです。表示した信頼区間は、この2種類の学習済みモデルの対局結果に基づくもので、別の学習seedから作ったモデル全体のばらつきまで十分に含むものではありません。同じ親からの追加学習という条件なので、ランダムな初期値から学習した場合や別のデータ量、持ち時間への一般化もできません。

この実験の結論は「3教師の均等平均に小さな正の推定値は見られたが、今回の2 seed・固定局数では改善を確認できなかった」です。提案そのものを検証済みとして撤回することはせず、今回の結果と限界を次の計画の参考として残します。

実験ID:e9088e06-54d8-4e88-ab21-bd5efbf32cba

2026-10-11 21:35:00 JST Ryfamateと既存教師の平均で追加学習:2seed・16,384局では改善を確定できず

NNUE(将棋AIの局面評価を担う小型ニューラルネットワーク)の学習に使う教師評価値を変え、学習後の棋力を比較しました。既存教師とRyfamateの評価値を半分ずつ混ぜた候補は、既存教師だけで追加学習した比較対象に対して、合算で +3.3 Elo、95%信頼区間は−2.0〜+8.6 でした。今回の条件では改善を確定できず、大規模化やchampionの更新には進みません。

何を比較したか

比較したのは教師モデル同士ではなく、それぞれの評価値から学習したNNUE同士です。

  • 比較対象:DL水匠とAobaZeroの評価値を相加平均した、従来の教師データ。
  • 候補:従来の教師評価値と、同じ局面をRyfamateで再評価した評価値を、等重みで相加平均したデータ。

元の教師がDL水匠とAobaZeroを半分ずつ含むため、候補の寄与はおおむね DL水匠25%・AobaZero25%・Ryfamate50% です。3教師をそれぞれ3分の1ずつ混ぜる方法ではありません。整数評価値の途中の丸めもあるため、実装上は厳密な実数の加重平均とも区別します。局面など評価値以外のデータが変わっていないことを確認しました。

Ryfamateでは勝率へ変換する前の出力を固定係数で評価値へ換算しました。追加のscore較正(評価値分布の調整)は行っていません。従来データの生成由来は利用者提供の記録によるもので、今回すべてを独立に再検証したわけではありません。

学習条件

同じ親checkpoint(追加学習を始める時点の重み・学習状態)から、条件をそろえて追加学習しました。ランダムな重みからの学習ではありません。

  • 同一の20,004,864局面を10回学習。各モデルの処理量は延べ200,048,640局面であり、異なる2億局面ではありません。
  • 学習順序のseedは2026101101と2026101102の2通り。seedは学習データの並び順を決める値です。
  • 学習器はTatara、ネットワークは特徴変換の出力768・中間層8/32・進行度8バケット、lossの指数は2.75。
  • 同じ親の重み・optimizer(重み更新の状態)などを引き継ぎ、学習率のスケジュールを同じ条件で初期化しました。

比較対象の2モデルは前の実験で学習済みのものを再利用し、候補の2モデルだけを新しく学習しました。ただし、今回の対局は全て新しく実施しており、過去の対局結果は合算していません。

対局条件と結果

両側で同じ公開ソース由来の思考エンジンを使い、評価関数だけを変えました。持ち時間は10秒+1手ごと0.1秒加算、Threads=1、Hash=128 MiB、FV_SCALE=24、同時対局数64です。共通の開始局面列から先後を反転して対局し、各seedで8,192局、合計16,384局を行いました。結果を見て途中で打ち切る方式ではありません。短い事前検証の対局は集計から除外しています。

以下は候補側から見た結果です。Eloが正なら候補が強い方向、負なら比較対象が強い方向です。

学習順序seed 勝 分 敗 Elo差 95%信頼区間
2026101101 4,045 269 3,878 +7.1 −0.4〜+14.6
2026101102 3,950 280 3,962 −0.5 −8.0〜+7.0
合算 7,995 549 7,840 +3.3 −2.0〜+8.6

図の上段「1」がseed 2026101101、下段「2」がseed 2026101102です。W(緑)は候補の勝ち、D(灰色)は引き分け、L(赤)は候補の負けを表します。

全seed合計8,192先後ペア(計16,384局)の完結と全対局記録を検査し、時切れ・反則・思考エンジンのエラーはいずれも0件でした。対局用に起動した思考エンジンは、すべて正常終了を確認しています。

判断と限界

観測前に、「両seedのElo差が正であり、合算の95%信頼区間の下限も正、かつ結果検査を通過」を、大規模実験へ進む条件として固定しました。今回は両seedで改善方向が一致せず、合算の信頼区間も0をまたぐため、この条件を満たしません。

したがって、この配合の大規模な知識蒸留・長い持ち時間での追加測定・champion昇格は行いません。現在のchampionは変更しません。

信頼区間は対局単位の近似計算です。先後ペアや共通開始局面による結果の関連、学習seed全体のばらつきを十分に含むものではありません。共通の親から追加学習した2つの学習順序だけで、別の初期重み・データ量・配合でも同じ結果になるとは限りません。親がこれらの局面を学習済みである可能性もあります。

「この固定条件では改善を確定できなかった」という結果であり、Ryfamateを使う方法全般や、3教師を等重みで混ぜる方法、ランダム初期化からの比較を否定するものではありません。

実験ID:e202ca55-d74c-4ba4-925b-4d2d4f113d8d

2026-10-11 17:10:54 JST Ryfamateを教師にしたNNUEの追加学習を比較:2条件・2 seed・16,384局

今回は、既存の教師データとRyfamateから作った教師データで、それぞれ追加学習したNNUEの強さを比較しました。NNUEは、将棋AIが探索中に局面を評価するために使うニューラルネットワークです。Ryfamate本体と別のAIを対局させた結果ではありません。

この条件では、Ryfamateを教師にした側は2つの学習系列を合計して −6.5 Elo でした。Elo差は、対局成績から換算した棋力差の目安です。今回の小規模比較では改善を確認できず、大規模な確認実験への移行とchampionの更新は行いませんでした。ここでのchampionは、運用上の比較基準にしているエンジン・評価関数・設定の組です。

比較したもの

  • 既存教師側:既存データの評価値をそのまま使って追加学習。
  • Ryfamate教師側:同じ局面の評価値だけをRyfamateで付け直して追加学習。

既存データの生成時の説明は、DL水匠とAobaZero WCSC35の教師信号の相加平均(2教師の評価値を足して2で割ったもの)で、評価値の分布を調整する追加の較正は行っていないというものです。ただし、今回はその生成工程全体を独立に再検証したわけではありません。

教師信号とは、学習で正解として使う局面の評価値です。Ryfamate側では、勝率へ変換する前の数値に固定した定数を掛けて評価値に換算しました。追加の較正や、他の教師の評価値との新しい平均化は行っていません。全件の比較で、評価値以外の局面データが変更されていないことを確認しました。

両側とも同じcheckpointから追加学習しました。checkpointは、重みと学習途中の状態を保存したファイルです。構造・損失関数・学習量・学習率の条件をそろえ、教師信号だけを比較の変更点にしました。重みをランダムに初期化した比較ではありません。

学習データの順序を決める乱数seedを2種類(2026101101、2026101102)使い、各seed内で両側の順序をそろえました。2条件×2 seedで、追加学習は計4回です。

学習量と対局条件

既存ファイルの先頭20,004,864局面を使い、各モデルで繰り返して約2億局面分を学習しました。約2億種類の局面ではなく、約2,000万局面を約10回使った実験です。親モデルの学習に含まれていた可能性もあり、未学習局面だけを使った検証ではありません。

対局では両側に同じ公開ソース由来の探索エンジンを使い、評価関数だけを入れ替えました。再現用の設定は次のとおりです。

  • 持ち時間:10秒+1手ごとに0.1秒加算。
  • 各エンジン:1 thread(計算の並列数)、Hash 128 MiB(探索用の一時記憶領域)、FV_SCALE=24(評価値のスケール設定)、Ponder無効(相手の手番には思考しない)。
  • 同時対局数:64。手数上限:開始局面以前を含めて512手。入玉設定:CSARule24(入玉時の勝敗判定規則)。
  • 固定した開始局面列を使い、同じ局面で先後を反転。
  • 各seed:8,192局(4,096先後ペア)。合計:16,384局。

最終モデルの短い事前検証も行いましたが、その対局や短い学習の試験結果は、下表の棋力集計には含めていません。途中の結果を見て局数を変えず、予定した全局を実施しました。

結果

以下はすべてRyfamate教師側から見た勝敗とElo差です。Elo差のプラスはRyfamate教師側が強く、マイナスは既存教師側が強い方向を表します。

図の上段1はseed 2026101101、下段2はseed 2026101102です。WはRyfamate教師側の勝ち、Dは引き分け、Lは負けを表します。

学習データ順序のseed 勝 分 敗 Elo差 通常の95%信頼区間
2026101101 3,944 243 4,005 −2.6 [−10.1, +4.9]
2026101102 3,869 209 4,114 −10.4 [−17.9, −2.9]
合計 7,813 452 8,119 −6.5 [−11.8, −1.2]

全対局・先後ペア・使用条件を検査し、時切れ・反則・エンジンエラーは0件でした。64局同時に両側のエンジンを使うため、各対局実行では128エンジンを起動しました。それらすべての正常終了も確認しました。

信頼区間は、今回の対局集計のばらつきを近似して求めたものです。学習の乱数seed全般のばらつきは含めていません。同じ局面から先後を入れ替えた2局も、互いに独立とは限りません。また、両seedで同じ開始局面列を使っているため、2系列を完全に独立な観測とみなせるわけではありません。これらの関連を十分に考慮した区間ではない点に注意が必要です。

判断と限界

実験前に「両seedのElo差がプラスで、合計の95%信頼区間の下限もプラスなら、大規模な確認実験へ進む」と決めていました。今回は両seedともマイナスで、この条件を満たしませんでした。長い持ち時間での確認とchampion更新は行っていません。

これは、今回のデータ範囲・追加学習条件・評価値変換・対局条件に限った結果です。Ryfamate一般の性能や、別のデータ量・較正・アンサンブルの有効性を否定するものではありません。教師データを増やすなどの別条件は未検証として残します。

実験ID:484bec8b-4bb3-473e-83f4-67c0cadf6c2f

2026-10-10 20:24:54 JST 入玉局面を含むデータで2億局面追加学習―対局の完了検査で最良モデルの更新を見送り

学習データを切り替えると、将棋AIが強くなるかを調べました。今回は学習自体は完了しましたが、現在の比較基準である最良モデル(以下「champion」)との対局に不備が見つかりました。そのため、この対局結果から強さの優劣は結論づけず、championは変更していません。

何を比較したか

同じ追加学習済みモデルを出発点に、次の2種類のモデルを作りました。

  • 通常データ候補:従来の通常データを使って、さらに学習する。
  • 入玉データ候補:入玉局面を含むデータへ切り替えて、さらに学習する。

入玉とは、相手陣へ自分の玉が入り込むことです。今回のデータは入玉局面だけではありません。また、2種類のデータは局面の分布と教師の評価値の両方が異なります。したがって、差が出ても「入玉局面を加えたことだけが原因」とは言えません。

両候補とも、今回の追加分は200,048,640局面、12,210回の重み更新です。同じネットワーク構造と学習率・学習順序の乱数設定を使い、元モデルの重みと学習状態を引き継ぎました。ネットワークは768-8-32、進行度の区分は8、損失関数のべき指数は2.75です。学習率は0.00004375に設定し直しています。

GPUでの実際の重み更新、有限な学習損失、保存したモデルと学習再開用ファイルの読み込みを確認しました。短い対局で両モデルの動作も確認しました。ただし、これらは正常に学習・実行できたことの確認であり、棋力向上の証明ではありません。

対局条件

思考エンジンは両側で同じ公開ソース版を使い、評価関数だけを入れ替えました。

  • 持ち時間10秒、1手ごとに0.1秒加算。
  • 各エンジン1スレッド、ハッシュ128 MiB、同時対局64局。
  • 評価値の換算設定は両側ともFV_SCALE=24。
  • 同じ開始局面から先後を入れ替えて2局ずつ対局。
  • 入玉判定はCSARule24、開始局面以前も含めて最大512手。

開始局面は SHOGI.floodgate32-80.adjust_bishop_exchange.sfen.epd を使用しました。元の重複を残した5,824行です。短い検証で64局同時の実行も確認してから本測定へ進みました。

対局数の上限は各比較131,072局ですが、必ず上限まで行う方式ではありません。事前に決めた逐次検定(SPRT)で判定が出たら新しい対局の供給を止め、開始済みの対局を終える方式です。

1. 入玉データ候補と通常データ候補の直接比較

入玉データ候補から見た結果は、2,608勝・173分・2,765敗(5,546局)でした。

図のWは入玉データ候補の勝ち、Dは引き分け、Lは負けです。比較相手は通常データ候補であり、championではありません。

最初に判定が出た2,739組の先後ペアでは、入玉データ候補を採用する条件を満たしませんでした。開始済みの対局を終えた最終記録は2,773組です。終了時点の全対局集計が未判定へ戻っていても、事前に決めた最初の停止判定を後から置き換えません。

参考として、全5,546局から求めた通常のElo差は入玉データ候補側で−9.84、通常の95%信頼区間は約[−18.99, −0.69]でした。ただし、途中判定で打ち切る検定を行った後の参考値であり、この通常の信頼区間を採用判断の根拠にはしていません。

この比較では時切れ・エンジンエラーは0件、未完了ペアも0組でした。128個のエンジンプロセスの正常終了を確認しました。事前の選択ルールに従い、通常データ候補をchampionとの比較へ進めました。

2. 通常データ候補とchampionの比較は無効

この比較は9,327局で終了しました。通常データ候補から見た記録上の勝敗は4,422勝・341分・4,564敗です。ただし、先後ペアが1組未完了で、時切れも1件ありました。

先後の両方が揃った4,663組(9,326局)の集計は4,421勝・341分・4,564敗です。残り1局を都合よく除いて有効な測定へ変更することはせず、標準解析器の検査不合格をそのまま残しています。先ほどの図には、この無効な比較を含めていません。

終了コードは0で、128個のエンジンプロセスも正常終了していました。それでも、対局結果の検査には合格していません。「プログラムが正常終了した」ことと「棋力測定が有効だった」ことは別です。この比較の勝敗や途中の検定表示から、候補がchampionより弱いとも強いとも結論づけません。

未完了ペアについては、検定の停止判定後に、すでに片側を開始したペアの残り1局まで供給を止めてしまう対局プログラムの処理を確認しました。開始済みのペアは最後まで揃えるよう修正し、合成試験と新しい短い実動で確認する予定です。今回の結果に後から1局を追加することはしません。

時切れの1件はchampion側で、記録上の時間枠200 msに対して1,807 msを要しました。測定には別途1,000 msのタイムアウト余裕がありますが、それも超えています。エンジンの時間管理、OSの実行スケジュール、対局プログラムの計時のどれが根本原因かは、まだ確定していません。原因未確認のまま時間設定や合格基準を緩めません。

今回の判断と次の作業

championは据え置きです。より長い持ち時間で行う確認対局(LTC)も開始していません。元の計画、全対局記録、学習成果物と失敗調査を保存し、バックアップのサイズとSHA-256の一致を確認しました。

まず対局の停止処理を修復し、時切れの原因を調べます。新しい測定は修正後の短い検証に合格してから行います。今回の無効な結果を上書きしたり、成功扱いに変更したりはしません。

なお、今回は学習順序の乱数設定が1種類だけです。複数の学習乱数に対して同じ結果になることや、すべての入玉データに一般化できることは確認していません。

技術的な検定条件は、直接比較がnEloの仮説0/5・alpha=0.05・beta=0.05、champion比較が0/5・alpha=0.025・beta=0.05です。nEloは先後ペアの結果のばらつきで正規化した指標で、通常のElo差とは別です。条件は観測前に固定しました。

実験ID:deb28d6d-d88a-4722-9d9f-e3622c8c9a57

2026-10-10 14:54:17 JST NNUEを2億局面追加学習:入玉を含むデータと通常データを比較(基準モデル維持)

結論

同じ学習状態から、通常のデータと入玉を含むデータを使って、それぞれ約2億局面分の追加学習を行いました。

現在の基準モデル(champion)との対局では、どちらの候補も改善を確認できませんでした。候補同士の直接対局では、今回の条件で通常データの候補が優勢でした。championは変更していません。

何を比較したか

候補を次の2種類に分けました。

  • 通常候補:これまで使っていた通常の学習データで追加学習。
  • 入玉含む候補:入玉を含む別のデータ群で追加学習。

入玉とは、玉が相手陣へ進入する展開です。ただし、この実験は入玉局面の有無だけを変えた比較ではありません。データ群全体を替えているため、他の局面の分布や教師信号の違いも結果に含まれます。教師信号とは、学習の目標にする評価値です。

両候補は同じcheckpoint(重みと学習の履歴を保存したファイル)から出発しました。重み、重み更新に使う内部状態、累積更新回数は引き継ぎ、学習率(更新幅を調整する設定)は一定値0.00004375へ設定し直しました。

構造、学習設定、追加の更新量、データ順を決める乱数の値は共通です。ただし入力データが異なるので、実際に学習する局面まで同じではありません。追加のscore較正は行っていません。較正とは、教師の評価値の尺度を変換して整える処理です。

各候補の追加学習は12,210回の更新、200,048,640局面分です。これは処理回数で数えた量であり、異なる局面が約2億種類あるという意味ではありません。短い事前検証も通過し、学習後の保存ファイルを検査しました。

対局条件

  • 同じ公開版の思考エンジンを使用し、FV_SCALE=24を両側へ明示。FV_SCALEは評価値の尺度を調整する設定です。
  • 1手5,000ノードを指定。ノードは探索する局面の数で、秒数指定ではありません。実際の消費量は局面によって変わります。
  • 1スレッド、ハッシュ128 MiB、4対局を並列実行。
  • 固定した開始局面集から抽出し、各ペアで先後を反転。3比較で同じ開始局面の順序を使用。
  • 各比較1,024ペア、2,048局。開始局面までの手数を含めた512手到達で引き分け。
  • 開始局面の重複は取り除かず、同じ局面を再び使う場合もあります。
  • 入玉の宣言条件はCSARule24。長い思考条件での追加測定は今回は行っていません。

結果

勝・分・敗とElo差は、すべて表の「候補」側から見た値です。Elo差は勝敗から換算した強さの差で、プラスなら候補側が優勢です。

候補 相手 勝 分 敗 Elo差 95%区間
通常候補 champion 1,041 0 1,007 +5.8 −9.3〜+20.8
入玉含む候補 champion 1,032 5 1,011 +3.6 −11.5〜+18.6
入玉含む候補 通常候補 942 8 1,098 −26.5 −41.6〜−11.4

95%区間は、対局数によるばらつきから計算した推定幅です。championとの2比較では0をまたいでいるため、改善とも悪化とも判断を確定していません。「同等だと証明した」という意味でもありません。

直接比較は、解析ツールの計算上、入玉含む候補が通常候補より弱い方向の区間になりました。この追加学習量・再開方法・対局条件の組合せでは入玉含む候補を不採用とします。入玉を含む学習データ全般が役に立たない、という結論ではありません。

追加学習した2候補とchampionの勝敗

図の1は通常候補対champion、2は入玉含む候補対championです。Wは候補の勝ち、Dは引き分け、Lは候補の負けです。候補同士の直接比較は図に含めず、表の3行目に示しました。3比較の結果は合算していません。

全比較で、時切れと対局プログラムが記録した反則・エラーは0件でした。対局用の子プロセスもすべて正常終了しました。

解釈の限界と次の検証

今回の学習は各候補1系列だけです。データの順序を変えた複数回の学習では確認していません。

上の95%区間は、解析ツールが各対局を独立とみなして計算した近似です。同じ開始局面の再利用や先後反転ペアで結果が似やすいこと、学習をやり直した場合のばらつきは十分に反映していません。3比較全体の誤判定を一定率に抑える調整もしていないため、探索的な結果として扱います。

開始局面は入玉を狙って集めたものではありません。エンジンが勝ちを宣言した終了も記録しましたが、その宣言がルール上正しいかを対局プログラムとは別に確認したわけではありません。入玉での強さを十分検証したとは言えません。

今回の結果だけで、入玉を含むデータを使う検討は打ち切りません。今後は学習量やデータの順序を変えた確認、入玉に適した局面での検証などを検討します。改善を確認してchampionへ昇格する条件を満たしていないため、比較基準は従来のchampionのままです。

学習データ・開始局面・モデルは非公開です。この記事だけで完全な再現はできません。

実験ID:ac3d607f-504b-43ab-b39b-918882518d06

2026-10-10 13:35:41 JST 開始局面集を広げて追加学習を再測定:2候補は勝ち越し、512局では差は未確定

開始局面を4種類だけに限った前回の測定では、追加学習した候補が弱くなりました。今回は、ShogiBenchで使っていた開始局面集に切り替え、同じ候補を学習し直さずに再測定しました。

その結果、学習状態を引き継いだ候補は、現在の比較基準(champion)に 276勝・4分・232敗 でした。さらに、同じ条件で学習状態を初期化した対照候補は 270勝・5分・237敗 でした。どちらも勝ち越しましたが、各512局では差の不確実性が残り、強くなったとは確定していません。championは変更しませんでした。

追加学習2候補とchampionの対局結果

図の上段「1」は学習状態を引き継いだ候補、下段「2」は初期化した候補です。いずれもchampionとの対局で、Wは候補の勝ち、Dは引き分け、Lは負けを表します。2つの結果は合算していません。

今回の比較

評価関数は、局面の有利不利を数値化する仕組みです。その学習済み重みを同じ親から読み込み、追加学習を行うときの内部状態を比較しました。

  • 継承候補:重みの更新方向に関する過去の情報、RangerのLookaheadが別に保持する重み、累積更新回数を引き継ぐ。
  • 初期化候補:同じ親の学習済み重みを使い、上記3つの内部状態を初期化する。
  • 両候補共通:学習率のスケジュールは初期化し、一定の学習率で再開する。

初期化候補はランダムな重みから作ったものではありません。また、3つの内部状態をまとめて変更しているため、optimizer、Lookahead、累積更新回数のどれが効いたかを個別に判断する実験ではありません。optimizerは重みの更新方法、Lookaheadは更新を安定させるための仕組みです。

追加学習の条件は両候補でそろえました。

  • 学習率:0.00004375
  • 1回の更新に使う局面数:16,384
  • 追加の更新回数:1,221回
  • 読み込んだ局面数:20,004,864局面(重複を除いた異なる局面数ではありません)
  • 損失関数の指数:2.75
  • 親の重み、学習データ、データを読む順番、ネットワーク構造:共通
  • 教師の評価値への追加の較正:なし

継承候補には前回保存したモデルをそのまま使いました。初期化候補だけを新たに学習し、実際の更新回数と保存した学習状態を検査しました。

開始局面と対局条件

今回は SHOGI.floodgate32-80.adjust_bishop_exchange.sfen.epd を使用しました。5,824行の開始局面集で、元からある重複行も残しています。各比較では同じ乱数seedと同じ開始局面の列を使い、先後を入れ替えました。実際に選ばれた異なる開始局面は238種類でした。ファイル中の全局面を使い切った測定ではありません。

対局は同じ公開ソース由来の思考エンジンで行いました。

  • 1手当たり1,000ノードの探索(秒読み1秒ではありません)
  • 1スレッド、探索用メモリ128 MiB
  • FV_SCALE=24
  • 打ち切りは開始局面までの手数を含めた総手数512手
  • 各比較512局、先後反転256組、3比較で計1,536局

結果

表の勝敗とレーティング差は、左側に書いた候補の視点です。Eloは棋力差の目安となる単位で、プラスは左側が強かった方向を表します。

比較(左側の視点) 勝・分・敗 レーティング差 95%信頼区間
継承候補 vs champion 276・4・232 +29.9 Elo −0.3〜+60.1 Elo
初期化候補 vs champion 270・5・237 +22.4 Elo −7.7〜+52.6 Elo
継承候補 vs 初期化候補 277・1・234 +29.2 Elo −1.0〜+59.4 Elo

3比較とも95%信頼区間に「差なし」を示す0が入っています。継承候補と初期化候補の直接対局でも、どちらが強いかは確定していません。時間切れ・反則・エンジンエラーは0件で、必要な子プロセスの正常終了も確認しました。

前回の結果をどう扱うか

前回の4種類の開始局面による測定では、同じ継承候補が192勝0分320敗でした。今回は開始局面集と抽選条件が変わっているので、前回の対局と合算せず、別条件の結果として残します。

今回の結果は、4種類だけの測定から「追加学習や学習状態の継承は弱くなる」と一般化できないことを示しています。一方、今回の勝ち越しから「継承すれば強くなる」と結論づけることもできません。

今回も学習時のデータ順は1系列だけで、短い探索量の予備実験です。通常の局ごとの勝敗から計算した信頼区間は、開始局面の繰り返しや学習時のばらつきを十分に表していない可能性があります。3比較を探索的に行った結果であり、長い持ち時間での強さを保証しません。今回の計画では事前に昇格なしと決めていました。追加の対照測定や別seed、必要に応じて長い探索量で確認するまで、championを維持します。

2026-10-10 13:06:50 JST 学習状態を引き継いだ追加学習を試す:512局で候補は192勝320敗、今回は不採用

追加学習した候補を元の比較基準と512局対戦させたところ、候補は 192勝・0分・320敗 でした。今回の条件では元の評価関数より弱くなったため、候補は不採用とし、現在の最良構成(champion)は変更しませんでした。

追加学習候補の対局結果

図の W は候補の勝ち、D は引き分け、L は負けです。

何を試したか

評価関数(局面の有利不利を数値化する仕組み)の学習済み重みと、学習を進めるための内部状態を引き継ぎ、追加学習を行いました。内部状態には、重みの更新方向を決めるための過去の情報と、更新を安定させるために別に保持する重み(RangerのLookahead)、これまでの更新回数を含みます。学習率のスケジュールだけは引き継がず、今回は一定の学習率で再開しました。

  • 学習率:0.00004375
  • 1回の更新に使う局面数:16,384
  • 追加の更新回数:1,221回
  • 追加で読み込んだ局面数:20,004,864局面(重複を除いた異なる局面数ではありません)
  • 損失関数の指数:2.75
  • 学習データとネットワーク構造:変更なし
  • 教師の評価値への追加の較正:なし

学習の終了後、実際の更新回数、有限なloss(学習の誤差を表す値)、保存した学習状態を検査しました。今回のlossは約0.008625でした。ただし、lossの小ささだけでは棋力向上を判断していません。

対局の条件と結果

追加学習前後の評価関数を、同じ公開ソース由来の思考エンジンで使いました。エンジンの探索処理と設定は両側でそろえています。

  • 1手当たりの探索量:1,000ノード(探索した局面数の上限。秒読み1秒の対局ではありません)
  • スレッド数:1
  • 探索用メモリ:128 MiB
  • 評価値のスケール設定:FV_SCALE=24
  • 最大手数:512手
  • 対局数:512局、先後を入れ替えた256組
  • 開始局面:4種類を繰り返し使用

候補側の結果は192勝0分320敗でした。通常の局ごとの勝敗集計から算出したレーティング差は −88.7 Elo(棋力差の目安となる単位)、95%信頼区間は −119.8〜−57.7 Elo でした。マイナスは候補が弱かった方向を表します。時間切れ・反則・エンジンエラーは0件で、必要な子プロセスの正常終了も確認しました。

この結果から言えること・言えないこと

この追加学習候補は、今回の短い探索量と開始局面では弱くなりました。ただし、これだけで「学習の内部状態を引き継ぐと弱くなる」とは言えません。今回は、同じ量の追加学習を内部状態の初期化あり・なしで比較していないためです。

また、開始局面は4種類だけで、学習の乱数条件も1系列だけです。同じ局面の繰り返しを含むため、上記の信頼区間は幅広い開始局面や学習の乱数によるばらつきを十分に表しておらず、不確実性を小さく見積もっている可能性があります。長い持ち時間での強さや、一般的な棋力差を示す結果ではありません。

今回の試験は事前に昇格なしと決めた予備実験です。候補を採用せず、今後は学習量をそろえた内部状態の初期化との対照比較や、開始局面の幅を増やした検証を検討します。