概要
機械学習 の核心となる数式を厳選し、理論的な解説と Python実装例 をセットで紹介。 確率論・情報理論 から線形代数、最適化、先端ML概念まで幅広くカバー。 実践的な数式 の意味や用途を明確に説明し、実装で理解を深める構成。 初学者から中級者 まで、ML数式の理解を深めたい人向けのガイド。 @goyal__pramod氏のツイート から着想を得た、体系的まとめ。
機械学習を支える「最強」数式まとめ
- 数学 は機械学習の「言語」
- 確率論・線形代数・最適化 がMLアルゴリズムの基礎
- 本記事 では重要数式の理論・実装・用途を簡潔に整理
- NumPy, scikit-learn, TensorFlow, PyTorch などのPythonライブラリ例を掲載
- 初心者・実務者 どちらにも役立つ体系的な数式リファレンス
確率論・情報理論
- 不確実性の推論や分布の違いの測定 に不可欠な理論群
Bayesの定理
- 数式: [P(A|B) = \frac{P(B|A) P(A)}{P(B)}]
- 新しい証拠 Bを得たときの 仮説Aの確率 の更新式
- 分類・推論 など多くのML手法の基礎
- Naive Bayes分類器・ベイズ最適化 で活用
- Python例:
def bayes_theorem(p_d, p_t_given_d, p_t_given_not_d): p_not_d = 1 - p_d p_t = p_t_given_d * p_d + p_t_given_not_d * p_not_d return (p_t_given_d * p_d) / p_t
エントロピー
- 数式: [H(X) = -\sum_{x \in X} P(x) \log P(x)]
- 分布の不確実性・ランダム性 の定量化
- 情報利得・決定木 などで基本指標
- Python例:
import numpy as np def entropy(p): return -np.sum(p * np.log(p, where=p > 0))
同時確率・条件付き確率
- 数式:
- 同時確率: [P(A, B) = P(A|B) P(B)]
- 条件付き確率: [P(A|B) = \frac{P(A, B)}{P(B)}]
- 2つの事象の関係性・依存性 の記述
- ベイズモデル・ナイーブベイズ などで利用
- Python例(GaussianNB):
from sklearn.naive_bayes import GaussianNB import numpy as np X = np.array([[1, 2], [2, 3], [3, 4], [4, 5]]) y = np.array([0, 0, 1, 1]) model = GaussianNB().fit(X, y)
Kullback-Leibler Divergence (KLダイバージェンス)
- 数式: [D_{KL}(P | Q) = \sum_{x} P(x) \log \left( \frac{P(x)}{Q(x)} \right)]
- 分布PとQの乖離度合い を測定
- VAE・モデル評価 などで用いられる
- Python例:
import numpy as np P = np.array([0.7, 0.3]) Q = np.array([0.5, 0.5]) kl_div = np.sum(P * np.log(P / Q))
クロスエントロピー
- 数式: [H(P, Q) = -\sum_{x} P(x) \log Q(x)]
- 真の分布Pと予測分布Qの違い を測定
- 分類問題の損失関数 で広く利用
- Python例:
import numpy as np y_true = np.array([1, 0, 1]) y_pred = np.array([0.9, 0.1, 0.8]) cross_entropy = -np.mean(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))
線形代数
- データ変換・構造把握 のための必須理論
線形変換
- 数式: [y = Ax + b]
- 入力xを行列Aとバイアスbで変換
- 線形回帰・ニューラルネット の基本演算
- Python例:
import numpy as np A = np.array([[2, 1], [1, 3]]) x = np.array([1, 2]) b = np.array([0, 1]) y = A @ x + b
固有値・固有ベクトル
- 数式: [Av = \lambda v]
- 行列Aによる空間のスケーリング・回転方向 を示す
- PCA(主成分分析) などで活用
- Python例:
import numpy as np A = np.array([[4, 2], [1, 3]]) eigenvalues, eigenvectors = np.linalg.eig(A)
特異値分解(SVD)
- 数式: [A = U \Sigma V^T]
- 行列Aを直交行列と特異値に分解
- 次元削減・レコメンドシステム などで利用
- Python例:
import numpy as np A = np.array([[1, 2], [3, 4], [5, 6]]) U, S, Vt = np.linalg.svd(A)
最適化
- モデルがデータから学習するための仕組み
勾配降下法(Gradient Descent)
- 数式: [\theta_{t+1} = \theta_t - \eta \nabla_{\theta} L(\theta)]
- 損失関数Lの勾配方向にパラメータθを更新
- ニューラルネット・線形回帰 などの学習の根幹
- Python例:
import numpy as np def gradient_descent(X, y, lr=0.01, epochs=1000): m, n = X.shape theta = np.zeros(n) for _ in range(epochs): gradient = (1/m) * X.T @ (X @ theta - y) theta -= lr * gradient return theta
バックプロパゲーション
- 数式: [\frac{\partial L}{\partial w_{ij}} = \frac{\partial L}{\partial a_j} \cdot \frac{\partial a_j}{\partial z_j} \cdot \frac{\partial z_j}{\partial w_{ij}}]
- 損失Lの重みw_{ij}への勾配を連鎖律で計算
- 深層学習の効率的な学習 を実現
- Python例 (PyTorch):
import torch import torch.nn as nn model = nn.Sequential(nn.Linear(2, 1), nn.Sigmoid()) loss_fn = nn.MSELoss() optimizer = torch.optim.SGD(model.parameters(), lr=0.01) X = torch.tensor([[0., 0.], [1., 1.]], dtype=torch.float32) y = torch.tensor([[0.], [1.]], dtype=torch.float32) optimizer.zero_grad() output = model(X) loss = loss_fn(output, y) loss.backward() optimizer.step()
損失関数
- モデル性能の評価・最適化の指針
平均二乗誤差(MSE)
- 数式: [\text{MSE} = \frac{1}{n} \sum_{i=1}^n (y_i - \hat{y}_i)^2]
- 予測値と正解値の二乗誤差の平均
- 回帰問題の標準的指標
- Python例:
import numpy as np y_true = np.array([1, 2, 3]) y_pred = np.array([1.1, 1.9, 3.2]) mse = np.mean((y_true - y_pred)**2)
クロスエントロピー損失
- ※上記「クロスエントロピー」参照
先端ML概念
- 現代機械学習をリードする数式群
拡散過程(Diffusion Process)
- 数式: [x_t = \sqrt{\alpha_t} x_0 + \sqrt{1 - \alpha_t} \epsilon]
- データx_0にノイズを加える時間発展式
- 生成AI(画像生成等) で注目
- Python例:
import torch x_0 = torch.tensor([1.0]) alpha_t = 0.9 noise = torch.randn_like(x_0) x_t = torch.sqrt(torch.tensor(alpha_t)) * x_0 + torch.sqrt(torch.tensor(1 - alpha_t)) * noise
畳み込み演算(Convolution)
- 数式: [(f * g)(t) = \int f(\tau) g(t - \tau) d\tau]
- 関数fとgを重ね合わせて特徴抽出
- CNN(畳み込みニューラルネット) の基礎
- Python例 (PyTorch):
import torch import torch.nn as nn conv = nn.Conv2d(1, 1, kernel_size=3) image = torch.randn(1, 1, 28, 28) output = conv(image)
ソフトマックス関数(Softmax)
- 数式: [\sigma(z_i) = \frac{e^{z_i}}{\sum_j e^{z_j}}]
- スコアz_iを確率値へ変換
- 多クラス分類の出力層 で利用
- Python例:
import numpy as np z = np.array([1.0, 2.0, 3.0]) softmax = np.exp(z) / np.sum(np.exp(z))
アテンション機構(Attention)
- 数式: [\text{Attention}(Q, K, V) = \text{softmax}\left( \frac{Q K^T}{\sqrt{d_k}} \right) V]
- クエリQとキーKの類似度で値Vを重み付け集約
- Transformer・NLPモデルの中核
- Python例:
import torch def attention(Q, K, V): d_k = Q.size(-1) scores = torch.matmul(Q, K.transpose(-2, -1)) / torch.sqrt(torch.tensor(d_k, dtype=torch.float32)) attn = torch.softmax(scores, dim=-1) return torch.matmul(attn, V)
まとめ・さらなる学び
- 本記事の数式 を理解・実装することで、ML理論の基礎体力向上
- 公式ドキュメント・論文・専門書 でさらに深掘り推奨
- MLの根本的な仕組み を数式から捉える姿勢が重要
- 実装と理論の往復 で応用力を高める
参考文献・おすすめリソース
- Deep Learning Book (Ian Goodfellow他)
- Pattern Recognition and Machine Learning (Christopher Bishop)
- 公式ドキュメント (NumPy, scikit-learn, TensorFlow, PyTorch)
- arXiv論文・ML解説ブログ