メインコンテンツまでスキップ

入力特徴量の設計

ニューラルネットワークは数値しか処理できません。囲碁を理解させるには、盤面を「翻訳」して数値に変換する方法が必要です。

この翻訳プロセスが入力特徴量設計です。

AlphaGoは48の特徴プレーンを使用し、AlphaGo Zeroは17に簡略化、KataGoは22に最適化しました。この記事では、これらの設計選択の背後にある考慮点を詳しく解説します。


特徴プレーンとは?

基本概念

特徴プレーンとは19×19の行列で、各要素が盤上の対応する位置の特定の属性を表します。

例えば、「黒石の位置」という特徴プレーン:

盤面状態:                特徴プレーン(黒石):
A B C D E A B C D E
1 . . . . . 1 0 0 0 0 0
2 . ● . . . 2 0 1 0 0 0
3 . . ○ . . → 3 0 0 0 0 0
4 . . . ● . 4 0 0 0 1 0
5 . . . . . 5 0 0 0 0 0
  • 黒石がある位置 = 1
  • 黒石がない位置 = 0

複数の特徴プレーン

ニューラルネットワークは様々な情報を必要とするため、複数の特徴プレーンを積み重ねます:

これはカラー画像がR、G、Bの3チャンネルを持つのに似ています。囲碁の「画像」はN個のチャンネルを持ちます。


AlphaGoの48特徴プレーン

完全なリスト

AlphaGoは48の特徴プレーンを使用し、いくつかの大きなカテゴリに分かれます:

1. 石の位置(3プレーン)

プレーン名称説明
1黒石黒石あり = 1、なし = 0
2白石白石あり = 1、なし = 0
3空点空点 = 1、なし = 0

2. 履歴記録(16プレーン)

プレーン名称説明
4-11黒石の履歴1〜8手前の黒石の位置
12-19白石の履歴1〜8手前の白石の位置

なぜ履歴が必要なのか?

  • コウの判断:即座に取り返せるかどうかを知る必要がある
  • 着手意図:直近の数手が双方の計画を示す
  • 時系列情報:CNN自体は時間を処理しないため、履歴プレーンがこれを補う

3. 呼吸点の特徴(8プレーン)

プレーン名称説明
20-231〜4呼吸点(自分)自分の石の連が1/2/3/4呼吸点 = 1
24-271〜4呼吸点(相手)相手の石の連が1/2/3/4呼吸点 = 1

呼吸点は囲碁で最も重要な戦術概念です:

  • 1呼吸点:アタリ、まもなく取られる
  • 2呼吸点:危険な状態
  • 3呼吸点:注意が必要
  • 4呼吸点以上:一時的に安全

4. アタリの特徴(8プレーン)

プレーン名称説明
28-31アタリ位置(自分)ここに打つと相手の1/2/3/4個の石をアタリにできる
32-35アタリ位置(相手)ここに打つと自分の1/2/3/4個の石がアタリにされる

アタリは囲碁で最も一般的な戦術です:

  • 多くの石をアタリにする = より大きな脅威
  • 異なる大きさのアタリには異なる対応が必要

5. シチョウの特徴(8プレーン)

プレーン名称説明
36-39シチョウ関連(自分)自分のシチョウに関連する位置
40-43シチョウ関連(相手)相手のシチョウに関連する位置

シチョウ(Ladder)は囲碁で有名な戦術です:

  • 斜め方向に相手の石を追いかける
  • 「シチョウ有利」か「シチョウ不利」かを判断する必要がある
  • これは全局的な視野が必要で、従来のコンピュータ囲碁の難題だった

6. 合法性の特徴(1プレーン)

プレーン名称説明
44合法位置合法的に着手可能 = 1

これはネットワークが非合法手を出力するのを防ぎます:

  • すでに石がある位置には打てない
  • 禁じ手(自殺かつ取れない)には打てない
  • コウを即座に取り返すことはできない

7. 辺・隅の特徴(4プレーン)

プレーン名称説明
45辺からの距離11線上 = 1
46辺からの距離22線上 = 1
47辺からの距離33線上 = 1
48辺からの距離4+4線以上内側 = 1

辺と隅は囲碁で特別な意味を持ちます:

  • 1線:死線、石が囲まれやすい
  • 2線:生き筋だが効率が低い
  • 3線:地線、堅実
  • 4線:勢力線、影響力を追求

なぜこれほど多くの特徴が必要なのか?

DeepMindの設計理念はできるだけ多くの情報を提供し、ネットワーク自身に何が有用かを決めさせることです:

生の盤面 → 48特徴プレーン → ニューラルネットワーク → 判断

特徴エンジニアの仕事:囲碁知識を特徴にエンコードする
ニューラルネットワークの仕事:これらの特徴を組み合わせることを学ぶ

これは「ボールをニューラルネットワークに渡す」戦略です——人間が特徴設計を担当し、ネットワークが組み合わせの学習を担当します。


AlphaGo Zeroの簡略化:17特徴プレーン

革命的な変化

AlphaGo Zeroは入力特徴を大幅に簡略化しました:

バージョン特徴プレーン数人間の知識使用
AlphaGo48多量(呼吸点、シチョウなど)
AlphaGo Zero17ほぼなし

17プレーンの構成

1. 石の位置履歴(16プレーン)

プレーン名称説明
1-8黒石 T-0 から T-7現在と過去7手の黒石の位置
9-16白石 T-0 から T-7現在と過去7手の白石の位置

2. 手番(1プレーン)

プレーン名称説明
17手番黒番 = 全て1、白番 = 全て0

なぜこれほど簡略化できるのか?

AlphaGo Zeroの核心的な洞察:

十分な計算資源と訓練時間があれば、ニューラルネットワークは自らこれらの特徴を学習できる

「呼吸点」「アタリ」「シチョウ」といった概念は、人類が数千年かけて発展させてきました。しかしAlphaGo Zeroは、ニューラルネットワークが数日で自ら学習できることを証明しました——しかも人間より優れた表現を学ぶ可能性もあります。

効果の比較

驚くべきことに、より少ない特徴を使用するAlphaGo Zeroの方がより強いのです:

バージョン特徴数訓練時間最終棋力
AlphaGo Master48数ヶ月約5185 Elo
AlphaGo Zero1740日約5185 Elo
AlphaGo Zero (3日)173日人類超越

より少ない人間の知識が、より強い性能をもたらしました。

なぜ人間の知識がかえって負担になるのか?

1. 人間の知識には誤りがありうる

人間がまとめた囲碁のルールは経験的なもので、最適ではない可能性があります。例えば:

  • 「金角銀辺草腹」——しかし特定の局面では中央がより重要
  • 「シチョウ不利なら打つな」——しかし時には自ら捨て石にすることも

2. 特徴エンコーディングが表現を制限する

「呼吸点」を1〜4呼吸点の4プレーンにエンコードするとき、「呼吸点」が重要な分類方法であると暗黙的に仮定しています。しかしより良い分類方法があるかもしれず、このエンコーディングがネットワークの発見を妨げます。

3. 表現のボトルネック

48プレーンはより多くの計算資源を消費します。一部の特徴が冗長であれば、これらの資源は無駄になります。


KataGoの最適化:22特徴プレーン

実用主義的なバランス

KataGoはAlphaGo Zeroをベースに、厳選された少量の人間の知識を加えました:

項目AlphaGo ZeroKataGo
履歴プレーン165
石の位置ありあり
手番ありあり
コウ状態なしあり
ルールバリアントなしあり(コミ、自殺ルールなど)
合計1722

KataGoの特徴リスト

基本特徴(5つ)

プレーン名称説明
1黒石現在の黒石の位置
2白石現在の白石の位置
3空点現在の空点の位置
4手番(1)常に1の定数プレーン
5手番(2)黒番 = 1、白番 = 0

履歴特徴(5つ)

プレーン名称説明
61手前の位置相手の直前の着手位置
72手前の位置自分の直前の着手位置
83手前の位置相手の2手前の着手位置
94手前の位置自分の2手前の着手位置
105手前の位置相手の3手前の着手位置

コウの特徴(3つ)

プレーン名称説明
11コウ禁止点現在打てないコウ禁止点
12潜在コウ点(自分)自分がここに打つとコウになる
13潜在コウ点(相手)相手がここに打つとコウになる

ルール特徴(9つ)

プレーン名称説明
14-22ルールエンコーディングコミ、自殺ルール、スーパーコウなど

なぜこれらの特徴を追加するのか?

KataGoの作者lightvectorの説明:

1. コウはあまりにも重要

コウは囲碁で最も複雑な概念の一つです。生の盤面状態からコウのルールを学ぶには、大量のサンプルが必要です。コウ禁止点を明示的に示すことで学習を加速できます。

2. ルールの多様性

囲碁には複数のルールがあります:

  • コミ:中国ルール7.5目、日本ルール6.5目
  • 自殺ルール:一部のルールでは自殺が許可される
  • スーパーコウ:長いループの処理方法が異なる

入力にルールを明示的にエンコードすることで、一つのネットワークで全てのバリアントを処理できます。

3. 訓練効率

少量の人間の知識を加えることで、訓練を大幅に加速できます。KataGoは50 GPU日で達成した棋力を、AlphaGo Zeroは5000+ TPU日かかりました。


特徴設計の哲学

3つのアプローチ

アプローチ代表特徴数人間の知識計算要求
多量の人間の知識AlphaGo48多い中程度
最小限の人間の知識AlphaGo Zero17ほぼなし非常に高い
適度な人間の知識KataGo22厳選された少量比較的低い

トレードオフの考慮

リソースが限られている場合

計算資源が限られている場合(ほとんどの研究者の状況)、人間の知識を加えることは賢明です:

  • 訓練収束を加速
  • 必要な訓練データを削減
  • 車輪の再発明を避ける

極限を追求する場合

計算資源が十分にある場合、人間の知識を減らすことでより高い棋力に到達できる可能性があります:

  • 人間のバイアスを避ける
  • 人間が知らない戦略を発見
  • 真の「ゼロからのスタート」

示唆

AlphaGoシリーズの進化は私たちに教えてくれます:

  1. 特徴工学は依然として重要——しかし形が変わった
  2. エンドツーエンド学習がトレンド——ネットワーク自身に特徴を学ばせる
  3. 唯一の正解はない——リソースと目標に依存する

実装例

特徴抽出(AlphaGoスタイル)

import numpy as np

def extract_features_alphago(board, history, current_player):
"""
AlphaGoスタイルの48特徴プレーンを抽出

board: 19×19の盤面、0=空、1=黒、2=白
history: 直近8手の履歴
current_player: 1=黒、2=白
"""
features = np.zeros((48, 19, 19))

# 1-3: 石の位置
features[0] = (board == 1) # 黒石
features[1] = (board == 2) # 白石
features[2] = (board == 0) # 空点

# 4-19: 履歴位置
for i, hist_board in enumerate(history[:8]):
features[3 + i] = (hist_board == 1) # 黒石履歴
features[11 + i] = (hist_board == 2) # 白石履歴

# 20-27: 呼吸点特徴
liberties = compute_liberties(board)
for i, lib_count in enumerate([1, 2, 3, 4]):
my_color = current_player
opp_color = 3 - current_player
features[19 + i] = (liberties == lib_count) & (board == my_color)
features[23 + i] = (liberties == lib_count) & (board == opp_color)

# 28-35: アタリ特徴
capture_counts = compute_captures(board)
for i, cap_count in enumerate([1, 2, 3, 4]):
features[27 + i] = (capture_counts[current_player] == cap_count)
features[31 + i] = (capture_counts[3-current_player] == cap_count)

# 36-43: シチョウ特徴(簡略化)
ladder_status = compute_ladder(board)
# ... 詳細実装は省略 ...

# 44: 合法位置
features[43] = compute_legal_moves(board, current_player)

# 45-48: 辺からの距離
for i in range(19):
for j in range(19):
dist = min(i, j, 18-i, 18-j)
if dist == 0:
features[44, i, j] = 1
elif dist == 1:
features[45, i, j] = 1
elif dist == 2:
features[46, i, j] = 1
else:
features[47, i, j] = 1

return features

特徴抽出(AlphaGo Zeroスタイル)

def extract_features_zero(board_history, current_player):
"""
AlphaGo Zeroスタイルの17特徴プレーンを抽出

board_history: 直近8手の盤面状態リスト
current_player: 1=黒、2=白
"""
features = np.zeros((17, 19, 19))

# 1-8: 黒石のT-0からT-7の位置
for i, board in enumerate(board_history[:8]):
features[i] = (board == 1)

# 9-16: 白石のT-0からT-7の位置
for i, board in enumerate(board_history[:8]):
features[8 + i] = (board == 2)

# 17: 手番
if current_player == 1: # 黒番
features[16] = np.ones((19, 19))
else:
features[16] = np.zeros((19, 19))

return features

性能比較

import time

# 1000回の特徴抽出をシミュレート
board = np.random.randint(0, 3, (19, 19))
history = [np.random.randint(0, 3, (19, 19)) for _ in range(8)]

# AlphaGoスタイル(複雑な計算あり)
start = time.time()
for _ in range(1000):
features = extract_features_alphago(board, history, 1)
alphago_time = time.time() - start

# AlphaGo Zeroスタイル(シンプル)
start = time.time()
for _ in range(1000):
features = extract_features_zero(history, 1)
zero_time = time.time() - start

print(f"AlphaGoスタイル: {alphago_time:.2f}s")
print(f"AlphaGo Zeroスタイル: {zero_time:.2f}s")
# 典型的な結果:AlphaGoスタイルは5-10倍遅い

特徴プレーンの可視化

実際の局面例

実際の盤面:
A B C D E F G H J K L M N O P Q R S T
19 . . . . . . . . . . . . . . . . . . .
18 . . . . . . . . . . . . . . . . . . .
17 . . . ● . . . . . . . . . . . ○ . . .
16 . . . . . . . . . . . . . . . . . . .
15 . . . . . . . . . . . . . . . . . . .
...

特徴プレーン1(黒石):
A B C D E F G H J K L M N O P Q R S T
19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
...

特徴プレーン2(白石):
A B C D E F G H J K L M N O P Q R S T
19 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
17 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
...

特徴プレーンからの洞察

異なる特徴プレーンを観察することで、モデルが「見ている」ものを理解できます:

特徴直感的な意味モデルが学びうること
黒石/白石の位置誰がどこにいるか石の形、連結性
履歴最近何が起きたか着手意図、戦いの方向
呼吸点誰が危険か攻撃/防御の目標
アタリ戦術的機会局所的な戦術
辺からの距離位置の重要性序盤の選点、辺・隅の定石

アニメーション対応

この記事で扱う核心概念とアニメーション番号:

番号概念物理/数学対応
A8特徴エンコーディングテンソル表現
A10入力正規化特徴工学
D1畳み込み入力マルチチャンネル画像
E3Zeroの簡略化最小表現

関連記事


重要ポイント

  1. 特徴プレーンは盤面のデジタル表現:各プレーンは19×19の行列
  2. AlphaGoは48プレーンを使用:多くの人間の囲碁知識を含む
  3. AlphaGo Zeroは17に簡略化:ネットワークが自ら特徴を学べることを証明
  4. KataGoは22に最適化:効率と性能のバランス
  5. 特徴設計はトレードオフ:人間の知識 vs 計算資源

入力特徴量設計は「人間が理解する囲碁」と「機械が処理できる数値」を繋ぐ架け橋です。


参考資料

  1. Silver, D., et al. (2016). "Mastering the game of Go with deep neural networks and tree search." Nature, 529, 484-489.
  2. Silver, D., et al. (2017). "Mastering the game of Go without human knowledge." Nature, 551, 354-359.
  3. Wu, D. (2019). "Accelerating Self-Play Learning in Go." arXiv:1902.10565.
  4. KataGo Documentation: https://github.com/lightvector/KataGo