機械学習のための線形代数入門
機械学習の中核は、ベクトル・行列として表現されたデータに対する線形変換と最適化である。したがって線形代数は、モデルの表現能力・計算効率・数値安定性を決める基盤である。
参考ドキュメント
MIT OpenCourseWare, 18.06 Linear Algebra (Gilbert Strang) https://ocw.mit.edu/courses/18-06-linear-algebra-spring-2010/
Stanford CS229, Linear Algebra Review (PDF) https://cs229.stanford.edu/notes2022fall/linalg.pdf
九州大学 数理・データサイエンス教育研究センター, 線形代数に基づくデータ解析の基礎(PDF) https://mdsc.kyushu-u.ac.jp/wp/wp-content/uploads/2023/07/a4b5a02cf7b127e514ed66cfaa165c0d.pdf
1. 位置づけ:機械学習で線形代数が現れる場所
機械学習の多くは、入力データ
深層学習でも同様で、全結合層は
2. 記号とデータ表現:スカラー・ベクトル・行列・テンソル
2.1 基本オブジェクト
- スカラー:
- ベクトル:
- 行列:
- テンソル:多次元配列(深層学習の実装では一般にテンソルと呼ぶが、数学的テンソルの厳密さとは距離がある)
2.2 よく使う操作
- 転置:
- 逆行列:
(存在条件に注意が必要) - 行列積:
(一般に可換でない) - トレース:
- 行列式:
- 単位行列:
トレースの循環性
3. 内積・ノルム・距離:類似度と損失関数の幾何
3.1 内積と直交
内積を
3.2 ノルムと距離
代表的ノルムは以下である。
| 名称 | 定義 | 機械学習での出番 |
|---|---|---|
| 最小二乗、正規化、コサイン類似度 | ||
| スパース性(正則化) | ||
| ロバスト化の解析など | ||
| Frobenius | 行列近似、損失(行列回帰) |
距離は
が埋め込み(embedding)の評価で頻出である。
4. 線形写像と部分空間:基底・一次独立・階数・零空間
4.1 線形写像
4.2 階数(rank)
機械学習では、特徴量が強く相関すると
5. 連立一次方程式: とモデル学習
連立一次方程式
として表される。
ただし、実装では
6. 射影と最小二乗:回帰・正則化
6.1 幾何としての最小二乗
最小二乗は
であり、
6.2 リッジ回帰( 正則化)
リッジ回帰は
であり、正規方程式は
となる。
7. 固有値分解:二次形式・共分散・反復法
7.1 固有値・固有ベクトル
正方行列
で定義される。共分散行列
7.2 対称行列と半正定値
対称行列
8. 特異値分解(SVD):最重要の行列分解
8.1 定義
任意の
と分解できる。ここで
SVDはPCA、低ランク近似、正則化、数値安定な最小二乗の中核を成す。NumPyの numpy.linalg.svd は内部でLAPACKルーチンを用いることが文書化されている。
8.2 低ランク近似(圧縮)
特異値を大きい順に
とすれば、情報を保ちながら次元を落とす近似になる。これはPCAの「分散を最大に保つ射影」と同値の見方を与える。
9. PCA:SVDとしての次元削減
データ行列
9.1 PCAの基本数式
中心化した行列を
とすると、
となり、SVDと固有値分解が直結する。
9.2 どの解法を使うか
| 方法 | 何を分解するか | 長所 | 注意 |
|---|---|---|---|
| 固有値分解 | 共分散の理解が直観的 | ||
| SVD | 数値的に扱いやすい | 実装はライブラリ依存 | |
| ランダム化SVD | 近似でSVD | 大規模で高速 | 近似誤差を管理する |
ランダム化SVDは、乱択で「大部分の情報を含む部分空間」を見つけてから圧縮し、縮約した行列に決定的手続きを適用する枠組みとして整理されている。
10. 行列微分(行列微積分):勾配降下と逆伝播の計算規則
機械学習では、損失関数
行列微分の公式集としては The Matrix Cookbook が広く参照され、逆行列の微分などを系統的に与えている。
11. 疎行列・反復解法・ランダム化:大規模学習の計算
深層学習や大規模線形モデルでは、計算量の支配項が行列積になる場合が多い。疎行列ではゼロ要素を省いて計算し、反復法(共役勾配法など)で
Dense(密)線形代数の性能はBLAS/LAPACKに大きく依存する。BLASはLevel 1(ベクトル操作)・Level 2(行列ベクトル)・Level 3(行列行列)に整理され、LAPACKなど高水準計算の土台として使われている。
12. 計算ライブラリ(BLAS/LAPACK)
12.1 BLASとLAPACKの役割
- BLAS:ベクトル・行列の基本演算(Level 1/2/3)を規格化したもの
- LAPACK:連立一次方程式、最小二乗、固有値問題、SVDなどの高水準ルーチン群
この分業により、同じアルゴリズムでもBLAS実装(CPU最適化版など)次第で速度が大きく変わる。LAPACK Users’ Guide には、導入・インストール・使用上の情報が体系化されている。
12.2 NumPyなどの高水準APIとの関係
例えば numpy.linalg.svd は内部でLAPACKルーチンを使うことが明記されており、数式上のSVDが実装では数値線形代数ルーチンにより実現されていることが読み取れる。
13. NumPyでPCA(SVD)を自作する
以下は、中心化→SVD→上位
import numpy as np
def pca_svd(X, k):
"""
X: (n_samples, n_features)
k: number of components
returns:
Z: low-dim representation (n_samples, k)
X_hat: reconstruction (n_samples, n_features)
components: principal axes (k, n_features)
explained_variance: (k,)
"""
# 1) center
mu = X.mean(axis=0, keepdims=True)
Xc = X - mu
# 2) SVD: Xc = U Σ V^T
# full_matrices=False makes U:(n,kmax), Σ:(kmax,), Vt:(kmax,d) where kmax=min(n,d)
U, S, Vt = np.linalg.svd(Xc, full_matrices=False)
# 3) take top-k
Uk = U[:, :k]
Sk = S[:k]
Vtk = Vt[:k, :]
# 4) low-dim coordinates (scores)
Z = Uk * Sk # equivalent to Uk @ diag(Sk)
# 5) reconstruction
X_hat = (Z @ Vtk) + mu
# 6) explained variance (sample covariance convention)
n = X.shape[0]
explained_variance = (Sk**2) / (n - 1)
components = Vtk # rows are principal axes
return Z, X_hat, components, explained_varianceこの実装は「PCAは中心化したデータにSVDを適用して低次元へ射影する」という説明と整合する。
まとめと展望
線形代数は、機械学習におけるデータ表現(ベクトル・行列)、学習(最小二乗・正則化)、表現学習(PCA・低ランク近似)、および勾配計算(行列微分)を一貫した数学で結びつける基盤である。特にSVDは、次元削減・安定な推定・近似計算を統一的に理解するための中心概念である。
今後は、(1) ランダム化・近似行列分解による大規模計算の整理、(2) 疎行列・反復法と確率的最適化の接続、(3) BLAS/LAPACKやGPU線形代数上での計算モデル理解、の三点が「学習アルゴリズムの理解」と「計算特性」の距離を縮める方向として重要になる。
参考文献
- scikit-learn documentation, PCA https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html
- NumPy documentation, numpy.linalg.svd https://numpy.org/doc/stable/reference/generated/numpy.linalg.svd.html
- netlib, BLAS https://www.netlib.org/blas/
- netlib, LAPACK https://www.netlib.org/lapack/
- LAPACK Users’ Guide (HTML) https://www.netlib.org/lapack/lug/
- Petersen & Pedersen, The Matrix Cookbook (PDF) https://www.math.uwaterloo.ca/~hwolkowi/matrixcookbook.pdf
- Halko, Martinsson, Tropp, Finding structure with randomness (SIREV, PDF) https://users.cms.caltech.edu/~jtropp/papers/HMT11-Finding-Structure-SIREV.pdf
- 理化学研究所 中田真秀, 線形代数演算ライブラリBLASとLAPACKの基礎と実践(PDF, 2013) https://cmsi.issp.u-tokyo.ac.jp/ja/events/0523-nakata-rev1.pdf