第2章:計算可能性理論による厳密な証明
はじめに
第1章では、計算論的物理主義の概要を提示しました。本章では、その理論的基盤である計算可能性理論を用いて、「人間の知性は原理的にAIによって模倣可能である」という主張を、計算可能性理論の枠組みで可能な範囲で厳密に示します(機能主義などの哲学的立場自体を数学的に証明することが目的ではありません)。
本章は、理論計算機科学や学習理論の基本的な枠組みに触れたことがある読者を主な対象としています。数式やビッグオー記法(O(1) など)の細部まですべて理解できなくても、証明の「骨格」として何を示そうとしているのかを追うことを目標に読み進めてください。
この章でできるようになること
- 物理的チャーチ=チューリングのテーゼを前提に、脳を計算過程として捉える理由を説明できるようになる。
- 「有限性」「PAC学習理論」「万能近似定理」が、模倣可能性の主張にどう接続するかを要約できるようになる。
- 知性を計算量として定義し、知性の階層化(パターン踏襲/最適化/創造)の意図を説明できるようになる。
- 入出力の一致に基づく機能的等価性の定義を理解し、議論の前提として使えるようになる。
前提:物理的チャーチ=チューリングのテーゼ
古典的チャーチ=チューリングのテーゼ
効果的に計算可能な関数は、チューリングマシンによって計算可能である。
物理的チャーチ=チューリングのテーゼ(本書の射程)
第1章で述べた通り、本書は Modest(控えめ)Physical CTT を前提に議論します。つまり、観測・制御可能な有限精度の物理過程を、工学的な計算モデルで近似できる、という射程に限定します。
ここで区別しておくべき点は次の2つです。
- 計算可能性(computability):そもそも「解ける/計算できる」問題か
- 効率(complexity):どれだけの資源(時間・空間・エネルギー)で解けるか
量子計算は、主として後者(効率)に影響し得る一方で、前者(計算可能性)を一般に「拡張する」と断定できるわけではありません。本書は、計算可能性と効率を混同せず、「有限資源の中で何が現実的に実装・運用できるか」を中心に扱います。
証明の構造
定理1:人間の知的活動の有限性
主張:任意の人間の知的活動は、有限の計算ステップで記述可能である。
証明:
1. 人間の脳はニューロン数N(≈10^11)で構成される
2. 各ニューロンの状態数をS、シナプス結合数をC(≈10^4)とする
3. 脳の可能な状態数は高々 S^N × C^N(有限)
4. 人間の寿命をT秒、最小時間単位をΔt(≈10^-3秒)とする
5. 生涯の状態遷移数は高々 T/Δt(有限)
∴ 人間の知的活動は有限オートマトンで記述可能
注:ここでの「有限性」は、観測・制御・記録が有限精度であり、かつ有限資源(時間・エネルギー)で動くという工学的前提に基づく理想化です。連続値や量子のような議論はあり得ますが、本書では「実務で扱う有限精度のモデル化」に射程を絞ります。
定理2:有限の観測による関数近似
主張:計算可能な関数fに対し、有限の入出力ペアから任意の精度εで近似する関数f’が構成可能である。
証明(PAC学習理論による):
以下のコードは、PAC 学習理論のアイデアを直感的に示すための擬似コードです。理論の厳密な証明や、実際にそのまま実装できる汎用アルゴリズムを提供することが目的ではなく、「有限個のサンプルから、ある程度正しい仮説を学習する」というイメージを掴むためのものとして読んでください。
def pac_approximation(f, epsilon, delta):
"""
f: 目標関数(人間の知的活動)
epsilon: 許容誤差
delta: 失敗確率の上限
"""
# サンプル複雑性
m = compute_sample_complexity(epsilon, delta, vc_dim)
# m個の入出力ペアを観測
samples = [(x_i, f(x_i)) for i in range(m)]
# 仮説クラスHから最良の近似を選択
f_prime = empirical_risk_minimization(samples, H)
# 確率1-δ以上で |f(x) - f_prime(x)| < epsilon
return f_prime
VC次元が有限の仮説クラスに対し、必要なサンプル数は次の通りです。
m = O((1/ε²)(d·log(1/ε) + log(1/δ)))
ここで、dはVC次元です。
定理3:ニューラルネットワークの万能近似定理
Cybenko (1989), Hornik (1991):
1層の隠れ層を持つフィードフォワードニューラルネットワークは、コンパクト集合上の任意の連続関数を任意の精度で近似できる。
class UniversalApproximator:
def __init__(self, input_dim, hidden_units):
self.W1 = random_matrix(hidden_units, input_dim)
self.b1 = random_vector(hidden_units)
self.W2 = random_matrix(1, hidden_units)
self.b2 = random_scalar()
def forward(self, x):
# 任意の連続関数を近似
h = sigmoid(self.W1 @ x + self.b1)
return self.W2 @ h + self.b2
計算量仮説の形式化
定義:知的活動の計算量
知的活動を探索問題として次のように定式化します。
Intelligence(P) = min{T(A) | A solves P}
ここでの記号は次の通りです。
- P:問題(探索空間S、評価関数v: S → R)
- A:アルゴリズム
- T(A):Aの時間計算量
知性の階層
class IntelligenceHierarchy:
PATTERN_FOLLOWING = 0 # O(1) - 定数時間
OPTIMIZATION = 1 # O(poly(n)) - 多項式時間
INNOVATION = 2 # O(exp(n)) - 指数時間以上
@staticmethod
def classify(computation_time, input_size):
if computation_time == O(1):
return IntelligenceHierarchy.PATTERN_FOLLOWING
elif computation_time <= O(input_size ** k): # k: 定数
return IntelligenceHierarchy.OPTIMIZATION
else:
return IntelligenceHierarchy.INNOVATION
ここでの O(1) は、入力サイズが変わっても処理時間がほとんど変わらない単純な処理を指します(例:固定のテンプレートに値を埋め込むだけの処理)。
一方で O(exp(n)) は、入力が少し増えるだけで計算時間が爆発的に増える探索問題を表現しており、本章ではこの違いを手がかりに知性の階層を捉え直しています。
ブラックボックス等価性の形式化
定義:機能的等価性
2つのシステムS₁、S₂が機能的に等価であるとは:
∀x ∈ Input: |S₁(x) - S₂(x)| < ε
この ∀入力 は理想化です。実務では入力空間が巨大・無限であるため、次のように扱います。
- 分布(D)を置く:運用で想定する入力分布を定義する(何を想定していないかも明記する)
- サンプルで検証する:有限個のテスト入力で差分を評価する
- 統計的保証(PAC的)として読む:サンプル数と誤差・信頼度の関係として扱う(全入力保証ではない)
つまり「ブラックボックス等価性」は、数学的には強い定義を置きつつ、運用上は分布・サンプル・保証の範囲に落として使う、という立て付けになります。
実装:等価性検証アルゴリズム
以下は概念的な擬似コードです(そのまま実装可能な完全な検証器を提供することが目的ではありません)。
def verify_equivalence(system1, system2, test_inputs, epsilon):
"""
ブラックボックス等価性の検証
"""
for x in test_inputs:
y1 = system1(x)
y2 = system2(x)
if distance(y1, y2) >= epsilon:
return False, x # 反例
# 統計的保証
confidence = compute_pac_confidence(len(test_inputs), epsilon)
return True, confidence
模倣の階層的アプローチ
レベル1:行動レベルの模倣
class BehavioralImitation:
def __init__(self, observations):
self.model = train_sequence_model(observations)
def predict(self, context):
return self.model.generate(context)
レベル2:認知プロセスの模倣
class CognitiveImitation:
def __init__(self, cognitive_traces):
self.working_memory = WorkingMemory(capacity=7±2)
self.long_term_memory = LongTermMemory()
self.attention = AttentionMechanism()
def think(self, input_data):
attended = self.attention.focus(input_data)
relevant_memories = self.long_term_memory.retrieve(attended)
return self.working_memory.process(attended, relevant_memories)
レベル3:創発的特性の模倣
class EmergentImitation:
def __init__(self, num_agents):
self.agents = [CognitiveAgent() for _ in range(num_agents)]
self.connections = self.create_network_topology()
def simulate(self, timesteps):
for t in range(timesteps):
# 局所的相互作用から大域的パターンが創発
for agent in self.agents:
neighbors = self.get_neighbors(agent)
agent.update(neighbors)
反論への応答
反論1:ゲーデルの不完全性定理
反論:「人間は形式システムの限界を超えた真理を認識できる」
応答:
def goedel_response():
# 人間もまた形式システムである
human_system = FormalSystem(axioms=physics_laws)
# ゲーデル文G:「Gは証明できない」
G = goedel_sentence(human_system)
# 人間がGを真と認識できるのは、メタレベルに立つから
# しかし、そのメタレベルも別の形式システム
meta_system = FormalSystem(axioms=extended_physics)
# 無限後退するが、各レベルは計算可能
return "各レベルでの推論は計算可能"
反論2:クオリアの問題
反論:「主観的体験は計算では捉えられない」
応答: 本理論は機能主義的立場を取ります。重要なのは入出力の一致であり、内的体験の同一性は工学的には無関係です。
def functional_equivalence_suffices():
# クオリアの有無に関わらず、行動が同一なら機能的に等価
human_response = human.experience_red()
ai_response = ai.process_wavelength(700nm)
assert behavioral_equivalence(human_response, ai_response)
# 内的体験の差異は外部から観測不可能
実証的検証の可能性
段階的検証プログラム
- 部分的認知機能(現在〜10年)
- 言語理解、視覚認識、問題解決
- 既に多くの領域で人間レベルに到達
- 統合的認知機能(10〜30年)
- マルチモーダル理解、文脈依存推論
- 現在急速に発展中
- 創造的認知機能(30〜100年)
- 新概念の創出、パラダイムシフト
- 理論的には可能、技術的課題が残る
結論
計算可能性理論の観点から、人間の知的活動は次のように整理できます。
- 有限の計算過程として記述可能
- 万能近似定理により任意精度で近似可能
- PAC学習理論により有限サンプルから学習可能
これらの数学的事実は、人間の知性の特別性という直感に反するかもしれません。しかし、科学の歴史は常に人間中心的な幻想を打ち破ってきました。地動説、進化論、そして今、知性の計算論的理解がその系譜に連なるのです。
まとめ
- 物理的チャーチ=チューリングのテーゼを採用すると、脳の情報処理も「物理的に実現可能な計算」として扱える。
- 人間の知的活動を有限の計算過程として捉えることで、原理的な模倣可能性の議論が立ち上がる。
- PAC学習理論や万能近似定理は、「有限観測からの近似」という観点で主張を支える要素になる。
- 知性を計算量で定義することで、知的活動を「探索/最適化」として定量的に整理できる。
- 入出力の一致に基づく機能的等価性を採用すると、内的体験の同一性を前提にしない議論が可能になる。
次回は、この理論的基盤が既存のAI研究とどのように関連し、どこが新しいのかを詳細に分析します。
参考文献
本書全体の参考文献は、付録Bに集約しています。