=5eqvl-mefi の続きです。
# 変分オートエンコーダー(VAE)による詰将棋局面生成の実験レポート
執筆:gemini3.5flash
[注意] 上記AIを用いて、メモ書きから再構成しています。
細かいところなど事実と異なる可能性があります。
大体こんなことをしている、できるという理解がちょうどいいかもしれません。
以下のような機械学習は、google colabやjupyter notebook上などで行うことが可能です。なお技術的な詳細は割愛します。
あくまで個人の趣味としての実験であり、記事には自明ではない推測も含まれています。
モデル作成用の元データは自作のツールで作成したランダム局面からの精査した抽出局面のみを使用しています。
詰み率はkomoring heightsで検証したものです。
---
## 1. はじめに(なぜVAEなのか?)
- **決定論的プログラム(ランダム生成)との違い**
- プログラムで合法局面を作るだけなら合法率100%は容易だが、「詰み率」はわずか3.5%〜4.5%にとどまり、人間らしい詰将棋の構造(手筋の配置)にはならない。
- 大量の詰将棋データを学習させたVAEであれば、潜在空間に「詰将棋の本質的な構造」が宿り、高確率で詰む素材を生成できるのではないか?という仮説からスタート。
- **タスクの難しさ**
- 将棋のSFEN文字列は1マスのズレや駒数オーバーで即破綻するデジタルな世界。
- これをアナログ(連続的)な潜在空間で扱うため、「文法の維持」と「詰みらしさの獲得」の両立が最大の壁となる。
## 2. 実践プロセスと「合法率・詰み率」のリアルな推移
実験を重ねる中での、データ量・モデル設計・生成品質の推移の記録です。
### 段階①:初期検証(データ5,000件、文字レベルエンコード、GRU-VAE)
- **生生成での壁**:統計的なパターンを学ぶだけなので、「玉が2枚」「全駒の合計数オーバー」など将棋のルールを自然には守れない。
- **解決策**:後手玉の補填、駒数超過を持ち駒から削る「修復関数(repair_sfen)」を導入。
- **結果**:
- データ5,000件:repairなし 74% → **repairあり 98%**
- **詰み率の検証**:エンジンの判定で42.2%を記録(ランダム合法局面の約9倍)。
### 段階②:スケールアップと潜在空間のバグ(データ10,000件〜20,000件)
- **モデル拡張**:潜在次元数を64→128、Hidden Dimを256→512へ。
- **罠(事後分布崩壊 / Posterior Collapse)**:
- `free_bits` を0.8から0.1に下げたところ、128次元中110次元が「死に次元」化。モデルがサボることを覚え、生成の多様性が失われ詰み率が低下(31%〜32%)。
- **黄金バランスの発見**:
- `latent_dim=64`, `free_bits=0.3` に調整したところ、上位数次元に情報が集中する「健康的」な状態へ。合法率は実質100%(99.53%)に達する。
### 段階③:ブレイクスルーをもたらした工夫
- **成駒の1トークン化(4月アップデート)**:`+P` などで表現されていた成駒を1文字として扱うことで、デコーダの負担を劇的に軽減。
- **左右反転(ミラーリング)データ拡張**:
- データ数を増やす以上に効果あり。位置情報という表層的なノイズが消え、エンコーダが「本質的な詰みの構造」に集中。データ4,000件の小規模でも**詰み率が36.8%→42.6%へ向上**。
- **段のマス数エラー対策**:
- 不正内訳の79%を占めていた「1段が9マスにならないエラー(特に10マスへの肥大)」を、末尾の数字を±1調整するrepairの改良で完全制覇(不合法はわずか41件/10,000件へ)。
## 3. VAEが「教師なし」で自動発見した詰将棋の構造
潜在空間を可視化(t-SNE / UMAP)した結果、驚くべき事実が判明しました。VAEは、将棋のルールや概念を一切教えられていないにもかかわらず、SFENの文字列を眺めるだけで**詰将棋の2大軸を自動的に整理**していました。
- **横軸(第1軸):先手玉(K)の有無**
- 空間が左右の「2つの島」に完全分離。左の島は「攻め方持ち駒のみ(Kなし)」、右の島は「双玉(Kあり)」の局面にきれいに分かれた。
- **縦軸(第2軸):後手玉(k)の段(位置)**
- 両方の島の中で、縦方向にグラデーションが発生。上が「7〜9段」、下が「1〜3段」の局面。
- **総駒数の無視**:
- 総駒数(39〜40枚)は潜在空間の分布に一切影響を与えていなかった。モデルが無意味な特徴を無視し、**「配置パターン」に集中している証拠**。
## 4. 総括と今後の展望
- **現在の到達点**:
- 長手数の問題(5手以上12,000件を含む)にシフトしても、**合法率99%・詰み率40%以上**を安定してマーク。実用的な「詰将棋素材ガチャ」として機能するレベルに到達。
- **AI資源効率の視点(LLMとの比較)**:
- 何でもかんでも巨大なLLM(GPTやClaudeなど)に学ばせるのは非効率。将棋の構造的な知識は、今回のような「軽量な特化型VAE(パラメータ数たった数百万)」に任せて潜在ベクトル(z)に圧縮し、日本語の解説を汎用LLMに任せるという「マルチモーダルな役割分担」こそが、これからの個人開発AIの強力なアプローチになるのではないか。
- **次のステップ**:
- 攻め方の持ち駒や理想の手数を条件として入力し、狙い通りの素材を狙い撃ちで出す「条件付きVAE(CVAE)」への拡張。