🔎 詳細

dlshogi — AlphaZeroを日本に持ち込んだ深層学習将棋AI

dlshogi は、山岡忠夫氏が開発する 日本のディープラーニング系将棋AI の代表格です。 DeepMind の AlphaZero(2017)が示した「深いCNN + MCTS + 強化学習」というアプローチを将棋に適用したオープンソースで、 CPU上で動く NNUE 型エンジン(やねうら王・水匠など)とは まったく異なる土俵 で進化し続けています。

このページでは、dlshogi の 歴史・アーキテクチャ・入力テンソル・2ヘッド出力・MCTS・強化学習 を、 第7章 §3 よりさらに踏み込んで解説します。

dlshogi とは何か(概要)

1

山岡忠夫氏のオープンソース

日本のディープラーニング系将棋AIの 代表格
GitHub で全公開、誰でも改造可能。

2

AlphaZeroアプローチを将棋に

深いCNN + ResNet + MCTS + 自己対局による強化学習。 AlphaZero のレシピをほぼそのまま将棋へ。

3

世界選手権で実績

世界コンピュータ将棋選手権・電竜戦で NNUE勢と並ぶ最強クラス。 GPU を活かす土俵で活躍。

💡 核心: dlshogi は「将棋盤を画像のように扱い、深いCNNで局所〜抽象パターンを学習し、MCTSで賢く深く読む」エンジン。 NNUE が「秒間数百万局面を浅く広く読む」のと対極にあり、秒間数千〜数万局面を深く狙って読む 戦略をとります。 どちらが上ではなく、得意な局面が違うので共存 しているのが現代将棋AIの面白さです。

基本情報

項目内容
開発者山岡忠夫(Tadao Yamaoka)氏
ライセンスオープンソース(GPL系、レポジトリ参照)
GitHubTadaoYamaoka/DeepLearningShogi
開発開始2017〜2018年頃(AlphaZero論文を受けて)
ベース理論AlphaZero(DeepMind, 2017)
ハードGPU(NVIDIA系が標準。CUDA / TensorRT で高速化)
探索MCTS(PUCT版モンテカルロ木探索)
評価ネット深いCNN + ResNet(10〜40ブロック)
出力方策(Policy)+ 価値(Value)の 2ヘッド
学習自己対局による 強化学習(教師あり初期化も可)

1. 歴史 — 山岡忠夫氏とAlphaZero

dlshogi の歴史は、AlphaZero ショックなしには語れません。2017年12月、DeepMind は たった1つのアルゴリズムで囲碁・将棋・チェスのすべてを世界最強レベルに到達させた AlphaZero の論文を公開しました。 これが将棋AI界に与えた衝撃と、それを日本のオープンソースに持ち込んだ山岡氏の歩みを順に見ていきます。

1.1 AlphaZero ショック(2017)

2017年12月、DeepMind は AlphaZero の論文("Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm")を公開しました。 驚くべきは次の点です:

日本の将棋AI界では「α-β探索 + 評価関数の機械学習(Bonanzaメソッド)」が長年の主流。 AlphaZero はそのパラダイムを 真っ向から否定する ように見えました。

🏔️ 歴史背景:AlphaZero の前身 AlphaGo / AlphaGo Zero(クリックで展開)

AlphaZero は突然出てきたわけではなく、AlphaGo シリーズの集大成です:

  • AlphaGo(2016):人間の棋譜で 教師あり学習 したネット + MCTS。李世乭九段に勝利
  • AlphaGo Zero(2017):人間の棋譜を捨て、自己対局のみで AlphaGo を超える
  • AlphaZero(2017):囲碁特化を取り払い、将棋・チェスにも同じ手法を適用

共通レシピ:深いCNN(policy + value 2ヘッド) × MCTS × 自己対局による強化学習。 dlshogi はこのレシピを「日本のオープンソースで実装する」プロジェクトです。

1.2 山岡忠夫氏が独自実装を開始

AlphaZero は論文公開のみで 実装コードや学習済みモデルは公開されませんでした。 将棋に応用するには、論文を読み解き、自分で実装するしかなかったのです。

山岡忠夫氏は当時すでに将棋AIに取り組んでおり、AlphaZero 論文を受けて 「同じ手法を自分で再現する」 挑戦を開始しました。 ブログ「TadaoYamaokaの開発日記」では、毎週のように実装の試行錯誤が公開され、 将棋AI開発者コミュニティの 知の共有装置 になっていきました。

1.3 dlshogi の誕生と発展(2018〜)

こうして生まれたのが dlshogi(DeepLearningShogi)です。

マイルストーン
2018第28回世界コンピュータ将棋選手権で dlshogi 初参戦
2019〜ResNet ブロック数・チャンネル数の拡大、学習データの増強
2020第1回電竜戦で上位入賞。GPU環境での実用性が広く認知される
2021世界コンピュータ将棋選手権で 優勝(dlshogi with HEROZ)
2022〜TensorRT 化・大規模分散自己対局・モデルの大型化
2024NNUE勢と並ぶ世界トップクラスとして定着
📚 補足:dlshogi 周辺の関連プロジェクト(クリックで展開)
  • AobaZero:純粋な AlphaZero クローン。自己対局のみで人間棋譜を一切使わない
  • ふかうら王:やねうら王プロジェクトの DL 版。dlshogi の評価エンジンをやねうら王の探索フレームに組み込むイメージ
  • 棋神アナリティクス:dlshogi 系の技術が商用化されたサービス(HEROZ)

詳細は §7 関連プロジェクト でまとめます。

2. アーキテクチャ — 深いCNN + ResNet + 2ヘッド

dlshogi のネットワーク構造は、AlphaZero とほぼ同じ 「Policy-Value 2ヘッド型 ResNet」 です。 まず 「1局面が入力されてから出力が出るまで」 のデータの流れを4ステップで俯瞰し、その後で各層の内部構造を詳しく見ていきます。

2.0 1局面処理フロー — 入力から2ヘッド出力まで

dlshogi も NNUE も、入力は同じ「局面」、出力は「評価」。ただし途中の処理が 完全に違います: dlshogi は盤面を 「画像のような3次元テンソル」 として扱い、深いCNNで処理します。

dlshogiの1局面処理フロー:盤面 → 9×9×100テンソル → 深いCNN → 方策+勝率 ① 局面(9×9の盤面) 9×9 = 81マスの2D構造 エンコード ② 9×9×100 テンソル(100枚の2D白黒画像のスタック) 9×9 ▲歩 のマップ 100枚(チャンネル)の例: プレーン 1:▲歩がある?(各マス0/1) プレーン 2:▲香がある? プレーン 3:▲桂がある? ⋯ ▲銀 ▲金 ▲角 ▲飛 ▲玉 ⋯ プレーン15:▽歩がある? ⋯ 後手駒、持ち駒、効き ⋯ 合計 約100チャンネル プレーン1「▲歩がある?」の中身(9×9の2値マップ): 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 ← 1のところに▲歩がいる (画像ピクセルと同じ扱い) 畳み込み ③ 深いCNN(ResNet × 10〜40段) 3×3 conv 256ch ResNet ブロック ResNet ブロック ResNet ブロック ⑳〜㊵ 9×9 × 256ch 深い特徴 各層が捉えるパターン: • 浅い層:「金が前進している」「歩が並んでいる」 • 中間層:「美濃囲い」「振り飛車の形」 • 深い層:「先手の右辺攻めが成立する」「玉が薄い」 階層が深いほど、より抽象的な戦略パターンを学ぶ ④ 2つのヘッドが結果を出す 🎯 方策ヘッド (Policy Head) → ▲7八金 30% / ▲5八玉 25% / ▲4八銀 18% ... 📊 価値ヘッド (Value Head) → 勝率 +0.65(先手やや有利)

ポイント:dlshogiは 盤面を画像のように扱い、CNNで局所パターン → 深い戦略概念 を階層的に学習。 出力が 2つ(指し手の確率分布 + 勝率)あるのが特徴で、これが後段の MCTS探索(§5) に使われます。

2.1 ネットワーク全体図 — Conv・ResNet・2ヘッドの内部構造

次に 各層の中身 を SVG で見ていきます。前節の俯瞰図では「ResNet ブロック」とまとめていた部分を、Conv 3×3 → BN → ReLU → Conv 3×3 → BN → 残差接続 → ReLU のレベルまで分解した図です:

dlshogi のネットワーク全体:9×9×100テンソル → CNN → ResNet × N → 2ヘッド出力 ① 入力テンソル 9 × 9 × 100 9×9 2値マップ ×100枚 各駒種・効き・持ち駒 の存在をプレーンで表現 ② 入力 conv Conv 3×3 256ch BN + ReLU 9×9×256 ③ ResNet ブロック × 10〜40段 ResNet Block(1つ) Conv 3×3 BN ReLU Conv 3×3 BN + ReLU 残差接続(identity shortcut) ↑ これを 10〜40 段スタック ④ 深い特徴 9×9 ×256ch 深い表現 ⑤ Policy Head(方策ヘッド) Conv 1×1 + Softmax 出力: 9×9×27ch ≈ 2187要素 「どこから・どの駒・成りか」 → 各指し手の確率分布 ▲7八金 30% / ▲5八玉 25% / ... ⑥ Value Head(価値ヘッド) FC + tanh 出力: スカラー 1個 範囲: [-1, +1] → 勝率予測 +0.65(先手やや有利) 1回の forward pass で「次の手の候補」と「勝率予測」が同時に出る この2出力を MCTS(§5)が両方使って木探索を行う

ポイント

2.2 なぜ ResNet を使うのか

単に「Conv を 40 段重ねれば良い」というわけではありません。 ふつう 層を深くすると勾配が消えて学習できなくなる(勾配消失問題)。 これを解決したのが ResNet の 残差接続(skip connection) です。

残差接続は「入力 x を、ブロックの出力 F(x) にそのまま加える」というシンプルな構造:

def resnet_block(x):
    h = conv_3x3(x)        # 256ch → 256ch
    h = batch_norm(h)
    h = relu(h)
    h = conv_3x3(h)
    h = batch_norm(h)
    h = h + x              # ← 残差接続(identity shortcut)
    h = relu(h)
    return h

これにより、深い層の勾配が 浅い層まで直接届く ようになり、40 段でも学習が破綻しなくなります。 詳しくは 第5章 §3 ResNet を参照。

2.3 dlshogi の仕様(典型構成)

入力:   9×9×100 テンソル
   ↓
初段:   Conv 3×3, 256ch, BN, ReLU
   ↓
ResNet × N段 (N = 10, 20, 40 など、モデルにより異なる)
        各ブロック: Conv → BN → ReLU → Conv → BN → +x → ReLU
   ↓
深い特徴: 9×9×256
   ├─ Policy Head:
   │     Conv 1×1, 数十ch → Flatten → Softmax → 約2187次元の確率分布
   └─ Value Head:
         Conv 1×1, 1ch → Flatten → FC(256) → ReLU → FC(1) → tanh → スカラー [-1, +1]
📚 補足:モデルサイズの選択肢(10ブロック / 20ブロック / 40ブロック)(クリックで展開)

dlshogi では複数のモデルサイズが配布されています:

  • 10ブロック:軽量。CPU + 弱めのGPUでも実用
  • 20ブロック:標準。コンシューマGPU(RTX 3060クラス〜)で快適
  • 40ブロック:最強モデル。RTX 4090 や A100 などの強力なGPUで真価を発揮

深いほど棋力は上がるが、1秒あたりに評価できる局面数が減る。 探索深さとのトレードオフで決まります。

3. 入力テンソル — 9×9×100 の正体

dlshogi が 盤面を「画像」のように扱える のは、入力を 9×9×100 という 3階テンソル(multi-channel 2D 画像) として与えるからです。 ここを丁寧に解剖していきます。

3.1 なぜ「画像」として扱えるのか

将棋盤は本質的に 2D 構造です。9×9 マスのどこに何があるか、という空間情報がそのまま意味を持ちます。 さらに、駒の 局所パターン(玉の周りに金が3枚 = 美濃囲い)が極めて重要。 この性質は、画像認識で CNN が威力を発揮する理由と完全に同じです:

ただし「色(RGB)」がないので、その代わりに 「駒種・持ち主・効きなど」を多数のチャンネルに分配 します。 これが 100 チャンネルになる理由です。

3.2 100チャンネルの内訳

dlshogi の実装によって細部は異なりますが、典型的には以下のような構成です:

チャンネル群枚数(概算)内容
先手の駒の存在14枚▲歩、▲香、▲桂、▲銀、▲金、▲角、▲飛、▲玉、と、成香、成桂、成銀、馬、龍 — 各1枚の 9×9 バイナリマップ
後手の駒の存在14枚▽歩、▽香、…(同じく14種類)
先手の持ち駒7枚程度歩・香・桂・銀・金・角・飛 の所持枚数。1チャンネルで全マス同じ値(broadcast)
後手の持ち駒7枚程度同上、後手側
先手の効きマップ20枚以上各マスに効いている枚数 / どの駒種から効いているか
後手の効きマップ20枚以上同上、後手
手番・王手・手数など少数現在手番(先手/後手)、王手中フラグ、千日手カウンタなど
合計約100チャンネル(実装により80〜120)

3.3 1チャンネルの中身(イメージ)

たとえば「▲歩の存在」チャンネルは、9×9 のうち先手の歩がいるマスだけが 1、それ以外が 0 という単純な2値マップです:

「▲歩の存在」チャンネル(9×9)の例:
   . . . . . . . . .
   . . . . . . . . .
   . . . . . . . . .
   . . . . . . . . .
   . . . . . . . . .
   . . . . . . . . .
   1 1 1 1 1 1 1 1 1   ← 7段目に▲歩が並ぶ
   . . . . . . . . .
   . . . . . . . . .

これを駒種ごとに 14 枚、相手の駒で 14 枚…と重ねていくと、最終的に 「駒の存在パターンが層になって積まれた、9×9 の100層画像」 が出来上がります。

🧠 上級補足:効きマップが効く(うまい)理由(クリックで展開)

「効き」は将棋プレイヤーが 無意識に頭の中で計算している情報です。 「ここに駒を打つと相手の角に取られる」「玉の周りに4枚効いているから安全」など、 局面評価で極めて重要な指標。

効きマップを 事前計算してチャンネルに与える ことで、CNN は「効きを自分で再発見する手間」を省け、 より 抽象的な戦略パターンの学習にリソースを使えます。 これは AlphaZero の囲碁版とは違う、将棋ドメイン特化の工夫です。

つまり dlshogi は「完全なゼロから」ではなく、将棋らしい局面表現に少しチートしている、と言える。

4. 方策ヘッド(Policy)と価値ヘッド(Value)

dlshogi のネットは 「次の手の候補(policy)」と「勝率予測(value)」を1回のフォワードパスで同時に出力 します。 これが AlphaZero 型アーキテクチャの肝であり、後段の MCTS を強力にする鍵です。

4.1 Policy Head — 各指し手の確率分布

将棋の指し手は 「どのマスから・どの駒・成り or 不成」 の組み合わせで表現できます。 dlshogi では、これを 9×9×27 = 2187 要素 の確率分布として出力します(実装により厳密な数は異なる):

すべての要素を Softmax で正規化することで、合計が1になる確率分布になります:

Policy Head の出力(例、上位3手):
  ▲7八金    : 0.30  ← 30% の確率で「この手が最善」
  ▲5八玉    : 0.25
  ▲4八銀    : 0.18
  ▲3六歩    : 0.10
  ...(残り 0.17 が他の合法手に分散)

合計 = 1.00

重要:これは 「最善手の予測」ではなく「読むべき手の優先度」 です。 policy が高い手から MCTS が深く読むことで、無駄な手を読まずに済みます。

4.2 Value Head — 勝率予測スカラー

Value Head は 「この局面、誰が勝ちそうか」 をスカラー値 1 個で表します:

実用的には「勝率」に変換して使うことが多く、(value + 1) / 2 で [0, 1] の勝率になります:

Value Head の出力:
  value = +0.65
  → 勝率 = (0.65 + 1) / 2 = 0.825 = 82.5%
  「先手が約82%の確率で勝つ」と予測している

4.3 2ヘッドにする利点 — 1回の計算で2つの情報

なぜ policy と value を 同じネットの別ヘッドにするのか。理由は3つ:

  1. 計算効率:1回のフォワードパスで両方得られる。別々のネットを2回回す必要がない
  2. 共通の深い特徴を共有:「この局面は危ない」という認識は、policy にも value にも有用
  3. マルチタスク学習の効果:2つのタスクを同時に学ぶと、片方だけ学ぶより 汎化性能が上がる ことが経験的に知られている

4.4 擬似コードで見るフォワードパス

// dlshogi の forward pass(JavaScript風擬似コード)
function forward(board) {
    // 1. 盤面を 9×9×100 テンソルに変換
    let x = encodeBoard(board);  // shape: [9, 9, 100]

    // 2. 初段の Conv
    x = conv3x3(x, 256);  // shape: [9, 9, 256]
    x = batchNorm(x);
    x = relu(x);

    // 3. ResNet ブロックを N 段
    for (let i = 0; i < N; i++) {
        let h = conv3x3(x, 256);
        h = batchNorm(h);
        h = relu(h);
        h = conv3x3(h, 256);
        h = batchNorm(h);
        x = relu(h + x);  // ← 残差接続
    }
    // この時点で x は「深い特徴」 [9, 9, 256]

    // 4. 2ヘッドに分岐
    // Policy Head
    let policyLogits = conv1x1(x, 27);    // shape: [9, 9, 27]
    let policy = softmax(flatten(policyLogits));  // shape: [2187]

    // Value Head
    let v = conv1x1(x, 1);                // shape: [9, 9, 1]
    v = relu(fc(flatten(v), 256));
    let value = tanh(fc(v, 1));           // shape: スカラー

    return { policy, value };
}

これが dlshogi の評価ネット 1 回分の処理。1秒間にこれを 数千〜数万回(GPUの並列性を活かして)実行し、MCTS から呼び出します。

5. MCTS — ネットを「賢く読む」探索

ネットだけでは「次の1手」を提案できても 「数手先を読んだ最善手」 は出せません。 そこで MCTS(Monte Carlo Tree Search、モンテカルロ木探索) がネットを 探索の頭脳 として使います。

5.1 α-β探索との違い — 「全幅で広く」vs「方策で絞って深く」

NNUE 系(やねうら王・水匠)が使う α-β探索と、dlshogi の MCTS は、思想が真逆です:

α-β探索(NNUE系)MCTS(dlshogi系)
探索の広がり原則すべての手を読む(全幅)方策が選んだ少数の手だけ読む(選択的)
枝刈りα-βカットで明らかな悪手を切るpolicy が低い手は最初から読まない
評価回数秒間 数百万〜数千万 局面秒間 数千〜数万 局面
探索の深さ浅く広く(20〜30手)狭く深く(重要な変化は40手以上)
1局面の評価コスト軽い(浅いMLP, CPU)重い(深いCNN, GPU)

「秒間数千局面しか読まないのに、なぜ秒間数百万局面の NNUE と戦えるのか」がポイント。 答えは:policy が「読むべき手」を最初から絞ってくれるから、無駄な手に時間を使わないのです。

5.2 MCTS の探索木のイメージ

MCTS は 探索木を少しずつ育てる。ルート(現局面)から、policy が高い手を優先的にたどり、 末端で value(勝率予測)を使って評価する、というループを繰り返します:

MCTS の探索木:方策で絞って、深く読む 現局面 ▲7八金 (30%) ▲5八玉 (25%) ▲4八銀 (18%) 候補1 N=250 候補2 N=180 候補3 N=70 ▽3四歩 ▽8四歩 ▽4二銀 深い読み (40手以上) 凡例: ルート policy 上位手(よく読む) 2手目 N = 訪問回数(多いほど信頼) 特徴: • policy が高い枝ほど 深く・繰り返し読む • 全幅探索ではなく 「絞って深く」 • 末端ノードで value ヘッドが勝率を出す → NNUE より少ない 局面数で深い理解

5.3 PUCT — 探索ノード選択の数式

MCTS の各ステップで 「次にどの枝を読むか」 を選ぶ式が PUCT(Predictor + UCT)です:

PUCT スコア

$$ \text{PUCT}(s, a) = Q(s, a) + c_{\text{puct}} \cdot P(s, a) \cdot \frac{\sqrt{N(s)}}{1 + N(s, a)} $$

直感的に:

この2項のバランスで、MCTS は 「policy が良いと言った手を中心に、ときどき他も試す」 という賢い探索を実現します。

5.4 MCTS の1ループ(擬似コード)

// dlshogi の MCTS(簡略化)
function mcts(rootBoard, numSimulations) {
    let root = createNode(rootBoard);

    for (let i = 0; i < numSimulations; i++) {
        // === 1. Selection(葉ノードまで PUCT で降りる)===
        let node = root;
        let path = [node];
        while (node.children && node.children.length > 0) {
            node = selectChildByPUCT(node);  // PUCT が最大の子を選ぶ
            path.push(node);
        }

        // === 2. Expansion + Evaluation(ネット呼び出し)===
        let { policy, value } = network.forward(node.board);
        // この局面で合法な指し手すべてを子ノードとして生成
        for (let move of legalMoves(node.board)) {
            node.children.push({
                move: move,
                prior: policy[moveIndex(move)],  // policy をそのまま事前確率に
                N: 0,
                W: 0,  // 累積勝率
            });
        }

        // === 3. Backup(path をさかのぼって value を伝播)===
        for (let n of path.reverse()) {
            n.N += 1;
            n.W += value;
            value = -value;  // 相手番では符号反転
        }
    }

    // === 4. 最終的に最も訪問された手を返す ===
    return root.children.sort((a, b) => b.N - a.N)[0].move;
}

このループを 1秒間に数千〜数万回 回し、最終的に 「いちばん訪問された手」 を最善手として出力します。 「policy で重要度を絞り → value で末端を評価 → backup で全体を更新」というのが MCTS の核です。

🧠 上級補足:MCTS のバリエーション(仮想損失、並列探索、Dirichlet noise)(クリックで展開)
  • 仮想損失(virtual loss):複数スレッドで同じ枝を読むのを防ぐため、選択中のノードに一時的にマイナス報酬を加える
  • バッチ並列:GPU の並列性を活かすため、複数の葉ノードを一気に評価する
  • Dirichlet noise:学習時に root の policy にランダムノイズを混ぜることで、多様な手を試して探索を活発化する(AlphaZero 由来)

実用版の dlshogi はこれらの工夫を組み合わせて、CPU+GPU を最大限活用しています。

6. 強化学習 — 自己対局で永遠に強くなる

dlshogi 最強モデルの強さの源泉は 強化学習による自己対局。 人間の棋譜が一切不要で、コンピューターだけで永遠に強くなれる、という AlphaZero の核心です。

6.1 自己対局ループ

  1. 初期モデルを用意(ランダム重み、または教師あり学習で初期化)
  2. 現在のモデル同士で対局 を何百万回も行う(policy + MCTS で着手)
  3. 各局面の (盤面、policy、勝敗) を訓練データに保存
  4. このデータでネットを学習:
    • policy ヘッド → MCTS が選んだ手の分布を学ぶ
    • value ヘッド → 最終勝敗(+1 / -1 / 0)を学ぶ
  5. 新しいモデルが古いモデルに勝ち越したら、新モデルが 現役 に昇格
  6. 2 に戻る。永遠にループ

これを「policy iteration(方策反復)」の一種と見なすこともできます。 MCTS が現在のネットより少し賢い手を選んでくれるので、それを学ばせれば次世代ネットは少し強くなる、というブートストラップ構造です。

6.2 損失関数 — 2ヘッド同時学習

ネットの学習は、policy と value の2損失の和を最小化します:

$$ L = (z - v)^2 - \pi^\top \log p + c \|\theta\|^2 $$

6.3 報酬は「勝敗」だけ — シンプルさの威力

dlshogi の強化学習で使われる報酬は 勝敗(+1 / -1 / 0)のみ。 「歩を取ったら +5 点」「玉が逃げたら -3 点」のような 中間報酬は一切ない

一見すると学習が遅そうに思えますが、これがむしろ 強さの本質

📚 補足:強化学習と教師あり学習のハイブリッド(クリックで展開)

純粋な AlphaZero はランダムから始まり、自己対局のみで強くなりますが、現実のプロジェクト(dlshogi 含む)では計算資源を節約するため:

  • 初期段階:プロ棋譜・既存エンジンの自己対局棋譜で 教師あり学習(数日〜数週間で実用レベルに到達)
  • 後期段階:そこから 自己対局による強化学習でさらに伸ばす

これは 第2章 補足「直交する2軸」 でいうと、「教師あり×DL」と「強化学習×DL」を 順番に使う イメージ。 実用的なベストプラクティスです。

6.4 計算資源 — 莫大なGPU時間

dlshogi の世界トップクラスのモデルを作るには、膨大な GPU 時間が必要です:

ここが NNUE 系(CPUの自己対局でデータ生成可能)との大きな違い。 DL 系は GPU 沼に踏み込む覚悟が必要 です。

7. 関連プロジェクト

dlshogi 単体ではなく、周辺の関連プロジェクトも併せて見ると、日本のDL系将棋AIの全体像が見えてきます。

7.1 AobaZero — 純粋な AlphaZero クローン

7.2 ふかうら王 — やねうら王 + dlshogi 評価エンジン

7.3 棋神アナリティクス — 商用化された DL 系

7.4 開発者・コミュニティ

8. NNUE型との対比 — 共存する2大潮流

ここまでで dlshogi の中身は十分つかめたはず。最後に、もう一方の主流である NNUE 型との対比をまとめます。 第7章 §3 よりも踏み込んだ比較です:

観点NNUE 型(やねうら王・水匠)DL 型(dlshogi・ふかうら王)
評価ネット浅いMLP(4層、HalfKP_256x2-32-32)深いCNN + ResNet(10〜40段)
入力HalfKP特徴ベクトル(約41,024次元、スパース)9×9×100 テンソル(密、画像的)
出力評価値スカラー1個policy(2187次元)+ value(スカラー)の 2ヘッド
探索α-β(全幅、枝刈り)MCTS(選択的、policy で絞る)
1秒の局面数数百万〜数千万数千〜数万
得意な局面終盤の詰み・寄せ、戦術的読み中盤の大局観、戦略的判断
ハードCPU(マルチコア、AVX)GPU(NVIDIA + CUDA / TensorRT)
学習教師あり(強いエンジンの自己対局棋譜)強化学習(自己対局、ハイブリッドあり)
象限教師あり × DL(浅い)強化学習 × DL(深い)
発祥日本(那須悠氏、2018)→ チェスにも輸出イギリス(DeepMind, 2017)→ 日本で実装

8.1 両者は「ライバル」ではなく「相補的」

この対比で重要なのは、どちらが強いかは局面によって変わる ということ:

このため、現代の解析では NNUE 系と DL 系を併用する のが定石になっています。 第9章「棋士視点で最先端」 もぜひ参照してください。

📚 補足:それでも DL 系が NNUE 系より優れている1つの点 — 「人間に説明可能性が高い」(クリックで展開)

純粋な棋力では NNUE 系と DL 系はほぼ拮抗。 ただ、DL 系には1つ 「教育上の優位性」があります:

  • policy 分布が出る → 「この局面でAIが選ぶ候補手 上位5つ」が確率付きで分かる
  • value 勝率が出る → 「先手の勝率 65%」と人間にわかる指標

NNUE が出すのは 「評価値 +120」 という単一スカラーで、人間にはやや解釈しにくい。 観戦中継や教育コンテンツでは DL 系の出力の方が 視聴者・学習者に優しい 傾向があります。

棋神アナリティクスのような商用サービスが DL 系をベースにするのは、この説明可能性の高さも理由の一つです。

9. 関連リンク・もっと深く知るには

9.1 サイト内の関連章

9.2 詳細ページ間の横断

9.3 外部リソース(一次情報)

まとめ

  1. dlshogi は 山岡忠夫氏が開発する、日本のDL系将棋AIの代表格。AlphaZero のアプローチを将棋に適用したオープンソース
  2. アーキテクチャは 9×9×100 テンソル入力 → 深いCNN + ResNet × 10〜40段 → policy/value 2ヘッド
  3. 盤面を 画像のように扱い、CNN で局所〜抽象パターンを階層的に学習
  4. 探索は MCTS(PUCT版)。policy で読むべき手を絞り、value で末端を評価。秒間数千〜数万局面を 賢く深く 読む
  5. 学習は 自己対局による強化学習。報酬は勝敗のみ。人間の棋譜不要で永遠に強くなれる
  6. NNUE 型とは「浅く広く vs 狭く深く」「CPU vs GPU」「教師あり vs 強化学習」のすべてで対極。両者は共存し、相補的

dlshogi は、機械学習の 最先端アイデア(深いCNN・ResNet・MCTS・強化学習)が将棋に集約された結晶。 このページの内容を踏まえて 第8章 CEDEC2024第9章 棋士視点 を読むと、開発者・棋士の生の言葉がいっそう響くはずです。