機械学習やデータサイエンスの分野でよく登場する「L2ノルム」という概念は、ベクトルの大きさや距離計算において欠かせない数学的ツールです。
「normalizationとは何か」「L1ノルムとどう違うのか」「正則化ではどう使われるのか」といった疑問を持つ方のために、本記事ではL2ノルムの意味・計算方法・具体的な使い方を丁寧に解説していきます。
L2ノルムとは?ユークリッド距離を表すベクトルの大きさ
それではまず、L2ノルムの基本的な定義と意味について解説していきます。
L2ノルム(L2 norm)とは、ベクトルの各要素の2乗和の平方根で表されるベクトルの大きさ(長さ)のことです。
ユークリッドノルム、またはユークリッド距離とも呼ばれ、最も直感的な「距離」の概念に対応しています。
n次元ベクトル x = (x₁, x₂, …, xₙ) のL2ノルムは次のように定義されます。
L2ノルムの定義式
‖x‖₂ = √(x₁² + x₂² + ⋯ + xₙ²)
例:x = (3, 4) の場合
‖x‖₂ = √(3² + 4²) = √(9 + 16) = √25 = 5
これはまさに三平方の定理(ピタゴラスの定理)と同じ計算であり、2次元空間での点の原点からの距離を求める式と一致します。
n次元に拡張することで、高次元空間でのベクトルの長さや2点間の距離(ユークリッド距離)を計算できます。
L2ノルムは数学・物理・機械学習・コンピュータビジョンなど幅広い分野で使われる基本的な概念です。機械学習においては、モデルのパラメータ(重み)のL2ノルムを計算してモデルの複雑さを制御する「L2正則化(Ridge正則化)」に活用されます。
L2ノルムとL1ノルムの違い
L2ノルムと混同されやすいのがL1ノルムです。
L1ノルムはベクトルの各要素の絶対値の和であり、マンハッタン距離とも呼ばれます。
L1ノルム:‖x‖₁ = |x₁| + |x₂| + ⋯ + |xₙ|
L2ノルム:‖x‖₂ = √(x₁² + x₂² + ⋯ + xₙ²)
例:x = (3, -4) の場合
L1ノルム = |3| + |-4| = 3 + 4 = 7
L2ノルム = √(3² + (-4)²) = √(9 + 16) = 5
L2ノルムは大きな要素を二乗するため、外れ値(大きな値)の影響を強く受けます。
L1ノルムは絶対値を使うため外れ値の影響が相対的に小さく、スパース性(多くの要素がゼロ)を促す特性があります。
L2ノルムは滑らかな最適化が得意、L1ノルムはスパースな解を求めるのが得意という使い分けが機械学習では重要です。
L2ノルムとユークリッド距離の関係
2点間のユークリッド距離はL2ノルムを使って表現できます。
2点 a = (a₁, a₂, …, aₙ) と b = (b₁, b₂, …, bₙ) の距離は、差ベクトル (a – b) のL2ノルムで計算します。
ユークリッド距離の計算式
d(a, b) = ‖a – b‖₂ = √((a₁-b₁)² + (a₂-b₂)² + ⋯ + (aₙ-bₙ)²)
例:a = (1, 2)、b = (4, 6) の距離
d = √((4-1)² + (6-2)²) = √(9 + 16) = 5
この計算はk近傍法(KNN)・クラスタリング・推薦システムなど、データポイント間の類似度を「距離」で測る多くの機械学習アルゴリズムの基盤となっています。
L2ノルムによるユークリッド距離は最も直感的な距離指標であるため、特別な理由がなければまずL2距離から試すのが一般的なアプローチです。
L2ノルムの正規化(normalization)の意味と使い方
続いては、L2ノルムを使ったnormalization(正規化)の方法と目的を確認していきます。
L2正規化とは、ベクトルをそのL2ノルムで割ることで、ベクトルの大きさ(長さ)を1に統一する操作のことです。
単位ベクトル化、またはL2正規化とも呼ばれます。
L2正規化の計算式
x̂ = x / ‖x‖₂
例:x = (3, 4) の場合
‖x‖₂ = 5
x̂ = (3/5, 4/5) = (0.6, 0.8)
確認:‖x̂‖₂ = √(0.6² + 0.8²) = √(0.36 + 0.64) = 1.0(単位ベクトル)
L2正規化後のベクトルは大きさが1の単位ベクトルとなり、向きの情報だけを保持します。
これにより、スケールの異なるデータ間での公平な比較が可能になります。
機械学習でのL2正規化の活用シーン
L2正規化は機械学習の前処理において広く活用されています。
テキスト分類(TF-IDFベクトルの正規化)では、文書の長さが異なる場合でも余弦類似度による公平な比較ができるようにL2正規化が使われます。
コンピュータビジョンでは、画像特徴ベクトルのL2正規化によって照明条件などスケールの違いを吸収できます。
ニューラルネットワークのBatch NormalizationやLayer Normalizationも、入力の正規化によって学習を安定させる仕組みです。
L2正規化はベクトルの方向(角度)の類似性を比較したい場面に特に有効であり、余弦類似度との組み合わせが定番アプローチです。
Pythonでのl2ノルム計算と正規化の実装
PythonではNumPyやscikit-learnを使って簡単にL2ノルムを計算できます。
NumPyを使ったL2ノルム計算例
import numpy as np
x = np.array([3, 4])
l2_norm = np.linalg.norm(x) # 結果:5.0
x_normalized = x / l2_norm # L2正規化:[0.6, 0.8]
scikit-learnを使った正規化
from sklearn.preprocessing import normalize
x_norm = normalize(x.reshape(1, -1), norm=’l2′) # 行列形式で入力する
NumPyのnp.linalg.norm()は最もシンプルなL2ノルム計算方法であり、デフォルトでL2ノルムを計算します。
scikit-learnのnormalize関数は複数サンプルの一括正規化に便利で、norm=’l2’と指定することでL2正規化を適用できます。
機械学習の前処理パイプラインではscikit-learnのnormalizeを使う方法が管理しやすく推奨されます。
L2ノルムと正則化の関係
続いては、機械学習における正則化でのL2ノルムの役割を確認していきます。
正則化(regularization)とは、機械学習モデルの過学習(overfitting)を防ぐために、損失関数にモデルの複雑さに対するペナルティ項を加える手法です。
L2ノルムを使った正則化は「L2正則化」または「Ridge正則化」と呼ばれます。
L2正則化の損失関数
L2正則化付き損失関数
L(w) = 損失関数 + λ × ‖w‖₂²
(λ:正則化の強さを制御するハイパーパラメータ)
(‖w‖₂²:モデルの重みwのL2ノルムの2乗)
例:線形回帰にL2正則化を加えた場合(Ridge回帰)
L(w) = Σ(yᵢ – ŷᵢ)² + λ × Σwⱼ²
ペナルティ項 λ × ‖w‖₂² により、重みが大きくなるほど損失が増加するため、モデルは小さな重みを好むように学習します。
重みが小さくなることでモデルが過度に複雑になることを抑制し、汎化性能が向上します。
λが大きいほど正則化が強くなり、モデルはよりシンプルになります(ただし学習能力が低下するリスクもあります)。
L1正則化との使い分け
L2正則化と並んでよく使われるL1正則化(Lasso正則化)との使い分けを理解しておくことが重要です。
L2正則化は重みを小さくするが完全にゼロにはしないため、全特徴量が残る「密な解」が得られます。
L1正則化は重みを完全にゼロにする傾向があるため、不要な特徴量を自動的に除去する「スパースな解」が得られます。
| 比較項目 | L1正則化(Lasso) | L2正則化(Ridge) |
|---|---|---|
| ペナルティ | ‖w‖₁(絶対値の和) | ‖w‖₂²(2乗和) |
| 解の性質 | スパース(ゼロが多い) | 全重みが小さい |
| 特徴量選択 | 自動的に行う | 行わない |
| 使いどころ | 特徴量が多く不要なものが多い場合 | 全特徴量が関連する場合 |
ElasticNetはL1とL2の両方を組み合わせた正則化手法であり、両者の利点を活かしたバランスの良い選択肢です。
どちらを使うべきか迷ったときは、まずL2正則化から試してみることが多くの教科書で推奨されています。
まとめ
L2ノルムはベクトルの各要素の2乗和の平方根で計算されるベクトルの大きさであり、ユークリッド距離と同義です。
L2正規化(normalization)はベクトルをそのL2ノルムで割って長さを1にする操作であり、機械学習の前処理やテキスト・画像特徴の比較で広く使われます。
L2正則化は機械学習の損失関数に重みの2乗和をペナルティとして加える手法であり、過学習の防止とモデルの汎化性能向上に貢献します。
L1ノルムとの違いはスパース性の有無にあり、特徴量選択が不要な場合はL2正則化が、不要な特徴量を除きたい場合はL1正則化が適しています。
PythonではNumPyやscikit-learnを使って簡単に計算・実装できるため、まず動かしながら理解を深めることをお勧めします。