期待値、分散と共分散 -- データの数値的特徴
期待値 = 中心がどこにあるか。分散 = どれだけ散らばっているか。共分散 = 2つの変数がどう連動するか。
概念の解説
期待値 E[X]
加重平均 = 「長期的な平均結果」
\( \mathbb{E}[X] = \sum x_i P(x_i) \)
分散 Var(X)
データのばらつきの程度
\( \mathbb{E}[(X - \mu)^2] \)
共分散 Cov(X,Y)
2つの変数の連動関係
\( \mathbb{E}[(X-\mu_X)(Y-\mu_Y)] \)
共分散行列
d 次元ランダムベクトルの共分散行列は d×d の対称行列:\( \Sigma_{ij} = \text{Cov}(X_i, X_j) \)。
- 対角成分 = 各特徴量の分散
- 非対角成分 = 特徴量間の共分散
身近な例
2つのクラスの平均点
A クラスと B クラスの数学の平均点はどちらも 75 です。しかし A クラスは全員が 70〜80 点ですが、B クラスには 30 点の人も 100 点の人もいます。
期待値は同じでも、分散はまったく異なります——分散は「安定性」の違いを明らかにします。
Python で実践
例
data = np.random.normal(5, 2, 10000)
print(f"平均={np.mean(data):.3f}, 分散={np.var(data):.3f}, 標準偏差={np.std(data):.3f}")
# 共分散
x = np.random.randn(1000)
y1 = 0.8*x + np.random.randn(1000)*0.3 # 正の相関
y2 = -0.8*x + np.random.randn(1000)*0.3 # 負の相関
print(f"Cov(X, Y+): {np.cov(x,y1)[0,1]:.3f} (正)")
print(f"Cov(X, Y-): {np.cov(x,y2)[0,1]:.3f} (負)")
# 共分散行列
data_3d = np.random.randn(100, 3)
print("\n共分散行列:\n", np.round(np.cov(data_3d.T), 3))
print("対称:", np.allclose(np.cov(data_3d.T), np.cov(data_3d.T).T))
出力:
均值=4.990, 方差=4.008, 标准差=2.002 Cov(X, Y+): 0.846 (正) Cov(X, Y-): -0.860 (负) 协方差矩阵: [[ 1.03 0.035 0.033] [ 0.035 0.89 -0.066] [ 0.033 -0.066 0.933]] 对称: True
AI での応用シーン
Batch Normalization の数学
各ミニバッチに対して平均 μ_B と分散 σ²_B を計算し、\( \hat{x} = (x - \mu_B) / \sqrt{\sigma^2_B + \epsilon} \) で標準化します。ここでは期待値(平均)と分散という2つの統計量を使用します。\( \epsilon \) はゼロ除算を防ぐための小さな定数(通常 1e-5)です。
PCA 次元削減 = 共分散行列の固有値分解
PCA の第1ステップ:データの共分散行列 \( \Sigma \)(d×d の対称行列)を計算します。第2ステップ:\( \Sigma \) を固有値分解し、上位 k 個の最大固有値に対応する固有ベクトルを主成分方向とします。これらの方向の分散が最大 → 最も多くの情報を保持します。
重み初期化の分散制御
Kaiming 初期化:\( Var(W) = 2/n_{in} \)(ReLU ネットワーク)、または Xavier:\( Var(W) = 2/(n_{in}+n_{out}) \)(tanh ネットワーク)。各層の出力の分散を正確に制御し、順伝播時の活性化値の分散を不変に保ち、逆伝播時の勾配の分散も不変に保ちます。初期化が不適切だと、学習初期に勾配消失・爆発を引き起こします。
Adam オプティマイザの二次モーメント推定
Adam は勾配の二乗の指数移動平均 \( v_t = \beta_2 v_{t-1} + (1-\beta_2)g_t^2 \) を維持します。これは本質的に「各パラメータ方向における勾配の分散」のオンライン推定です。分散が大きい方向(激しく振動する)にはより小さな学習率を与え、分散が小さい方向(安定して下降する)にはより大きな学習率を与えます。
その他の拡張