再生核ヒルベルト空間(RKHS)とは?わかりやすく解説

機械学習のカーネル法で頻繁に登場する再生核ヒルベルト空間(Reproducing Kernel Hilbert Space, RKHS)について取り上げます。ガウス過程回帰やカーネルSVMなどの手法は、この空間の理論に支えられています。

数学的に厳密な定義はやや抽象的ですが、本記事ではイメージを大切にしながら、段階的に理解を深めていきます。

本記事の内容

  • 内積空間・ヒルベルト空間の復習
  • 再生核ヒルベルト空間の定義
  • 再生核(カーネル関数)の性質
  • 代表的なカーネルの例とPythonでの実装

前提知識

この記事を読む前に、以下の概念を理解しておくと理解が深まります。

  • 線形代数の基礎(内積、ノルム)
  • 関数空間の基本的な考え方

内積空間とヒルベルト空間

内積空間

内積空間とは、ベクトル空間に内積 $\langle \cdot, \cdot \rangle$ が定義された空間です。有限次元のベクトル空間 $\mathbb{R}^n$ では、内積は次のように定義されます。

$$ \langle \bm{x}, \bm{y} \rangle = \sum_{i=1}^{n} x_i y_i $$

関数空間においても、関数 $f, g$ に対する内積を次のように定義できます。

$$ \langle f, g \rangle = \int_{\mathcal{X}} f(x) g(x) \, dx $$

ヒルベルト空間

ヒルベルト空間とは、内積から誘導されるノルム $\|f\| = \sqrt{\langle f, f \rangle}$ に関して完備な内積空間です。

大雑把に言うと、「内積が定義されていて、コーシー列が必ず収束する」空間です。$\mathbb{R}^n$ や $L^2$ 空間がヒルベルト空間の典型例です。

再生核ヒルベルト空間の定義

評価汎関数

関数空間 $\mathcal{H}$ 上で、特定の点 $x_0$ での関数値を取り出す操作を評価汎関数と呼びます。

$$ \delta_{x_0}: \mathcal{H} \to \mathbb{R}, \quad \delta_{x_0}(f) = f(x_0) $$

RKHSの定義

ヒルベルト空間 $\mathcal{H}$ が再生核ヒルベルト空間であるとは、全ての $x \in \mathcal{X}$ に対して評価汎関数 $\delta_x$ が連続(有界線形汎関数)であることをいいます。

直感的には、「関数の値を特定の点で安定して取り出せる」空間です。$L^2$ 空間はRKHSではありません。なぜなら、$L^2$ の関数は「ほとんど至る所」で定義されており、特定の1点での値は意味を持たないためです。

リースの表現定理との関係

評価汎関数が連続であるとき、リースの表現定理により、ある関数 $k_{x_0} \in \mathcal{H}$ が存在して、

$$ f(x_0) = \langle f, k_{x_0} \rangle_{\mathcal{H}} $$

と書けます。この $k_{x_0}$ を再生核と呼び、2変数関数 $k(x, x’) = k_x(x’)$ をカーネル関数といいます。

再生核の性質

再生性

再生核の名前の由来となる最も重要な性質です。

$$ f(x) = \langle f, k(\cdot, x) \rangle_{\mathcal{H}} \quad \forall f \in \mathcal{H} $$

特に、カーネル関数自身に適用すると、

$$ k(x, x’) = \langle k(\cdot, x), k(\cdot, x’) \rangle_{\mathcal{H}} $$

が成り立ちます。カーネル関数の値は、RKHS内での内積として解釈できます。

正定値性

再生核は正定値カーネルです。すなわち、任意の $n$ 個の点 $x_1, \dots, x_n$ と任意の実数 $c_1, \dots, c_n$ に対して、

$$ \sum_{i=1}^{n} \sum_{j=1}^{n} c_i c_j k(x_i, x_j) \geq 0 $$

が成り立ちます。これはグラム行列 $\bm{K}_{ij} = k(x_i, x_j)$ が半正定値であることを意味します。

ムーア-アロンシャインの定理

逆に、正定値カーネルが与えられれば、そのカーネルを再生核とするRKHSが一意に存在します。これがムーア-アロンシャインの定理です。

この定理のおかげで、カーネル関数を1つ指定するだけで、対応するRKHSが自動的に決まります。

代表的なカーネル関数

線形カーネル

$$ k(x, x’) = x^\top x’ $$

対応するRKHSは通常の有限次元ベクトル空間です。

RBF(ガウス)カーネル

$$ k(x, x’) = \exp\left(-\frac{\|x – x’\|^2}{2\sigma^2}\right) $$

対応するRKHSは無限次元の関数空間であり、非常に柔軟な関数を表現できます。

多項式カーネル

$$ k(x, x’) = (x^\top x’ + c)^d $$

$d$ 次までの多項式を含む関数空間に対応します。

Pythonでの実装

代表的なカーネル関数とそのグラム行列を計算・可視化します。

import numpy as np
import matplotlib.pyplot as plt

def linear_kernel(X1, X2):
    """線形カーネル"""
    return X1 @ X2.T

def rbf_kernel(X1, X2, sigma=1.0):
    """RBF(ガウス)カーネル"""
    sq_dists = np.sum(X1**2, axis=1, keepdims=True) + \
               np.sum(X2**2, axis=1, keepdims=True).T - \
               2 * X1 @ X2.T
    return np.exp(-sq_dists / (2 * sigma**2))

def polynomial_kernel(X1, X2, degree=3, c=1.0):
    """多項式カーネル"""
    return (X1 @ X2.T + c) ** degree

# データ点の生成
np.random.seed(42)
n = 50
X = np.sort(np.random.uniform(-3, 3, n)).reshape(-1, 1)

# 各カーネルのグラム行列を計算
kernels = {
    'Linear': linear_kernel(X, X),
    'RBF ($\sigma=0.5$)': rbf_kernel(X, X, sigma=0.5),
    'RBF ($\sigma=1.0$)': rbf_kernel(X, X, sigma=1.0),
    'Polynomial (d=3)': polynomial_kernel(X, X, degree=3),
}

# グラム行列の可視化
fig, axes = plt.subplots(1, 4, figsize=(16, 4))
for ax, (name, K) in zip(axes, kernels.items()):
    im = ax.imshow(K, cmap='viridis', aspect='equal')
    ax.set_title(name, fontsize=10)
    ax.set_xlabel('Data index')
    ax.set_ylabel('Data index')
    plt.colorbar(im, ax=ax, fraction=0.046)

plt.suptitle('Gram Matrices for Different Kernels', fontsize=13)
plt.tight_layout()
plt.show()

# RKHSの再生性の数値的検証
# k(x, x') = <k(., x), k(., x')> を検証
sigma = 1.0
K = rbf_kernel(X, X, sigma=sigma)

# 任意の2点 x_i, x_j を選ぶ
i, j = 10, 30
# カーネル関数の直接計算
k_direct = K[i, j]

# グラム行列を用いた内積近似(有限次元近似)
# K = V Lambda V^T(固有値分解)
eigenvalues, eigenvectors = np.linalg.eigh(K)
# 正の固有値のみ使用
pos_idx = eigenvalues > 1e-10
Lambda = eigenvalues[pos_idx]
V = eigenvectors[:, pos_idx]

# RKHS内の特徴ベクトル
Phi = V * np.sqrt(Lambda)
# 内積による計算
k_inner = Phi[i] @ Phi[j]

print(f"k(x_i, x_j) 直接計算: {k_direct:.6f}")
print(f"<phi(x_i), phi(x_j)> 内積計算: {k_inner:.6f}")
print(f"差: {abs(k_direct - k_inner):.2e}")

このコードでは、異なるカーネル関数のグラム行列を可視化し、RBFカーネルについてRKHSの再生性(カーネル値が内積として計算できること)を数値的に検証しています。

まとめ

本記事では、再生核ヒルベルト空間(RKHS)の基本概念について解説しました。

  • RKHSは評価汎関数が連続なヒルベルト空間であり、特定の点での関数値を安定して取り出せる
  • リースの表現定理により、評価汎関数は再生核(カーネル関数)との内積で表される
  • カーネル関数の値はRKHS内での内積として解釈でき、これが「カーネルトリック」の数学的基盤となる
  • ムーア-アロンシャインの定理により、正定値カーネルからRKHSが一意に構成される

RKHSの理論は、ガウス過程回帰、カーネルSVM、カーネル主成分分析など、カーネル法全般の数学的基盤を提供します。