ノルム
ノルム( norm )は単一のベクトルに対して定義される 大きさ を表す数学的な指標です。
2 次元ベクトル $\mathbf{x} = (x_1, x_2)$ における代表的なノルムである $L_2$ ノルムと $L_1$ ノルム についてまとめます。
1. L_2$ ノルム(ユークリッドノルム)
通常、ベクトルの大きさは $L_2$ ノルムを指します。
原点から点 $(x_1, x_2)$ までの直線距離を表し次の式で定義されます。
特徴
2. $L_1$ ノルム(マンハッタンノルム)
各成分の絶対値の和で計算されるノルムです。
格子状の街路(マンハッタンの街並み)を直線ではなく道に沿って移動したときの距離に対応します。
$L_1$ ノルムは次の式で定義されます。
特徴
2 ベクトル間の距離
2 つのベクトル $\mathbf{x} = (x_1, x_2)$ と $\mathbf{y} = (y_1, y_2)$ の距離(差のノルム)は以下のように計算されます。
ユークリッド距離 ($L_2$)
\[\|\mathbf{x} - \mathbf{y}\|_2 = \sqrt{(x_1 - y_1)^2 + (x_2 - y_2)^2}\]マンハッタン距離 ($L_1$)
\[\|\mathbf{x} - \mathbf{y}\|_1 = |x_1 - y_1| + |x_2 - y_2|\]まとめ比較表
| 項目 | $L_1$ ノルム | $L_2$ ノルム | ||||
|---|---|---|---|---|---|---|
| 名称 | マンハッタンノルム | ユークリッドノルム | ||||
| 計算式 | $ | x_1 | + | x_2 | $ | $\sqrt{x_1^2 + x_2^2}$ |
| 幾何学的意味 | 格子状の移動距離 | 原点からの直線距離 | ||||
| 単位円の形状 | ひし形(ダイヤ型) | 正円 |
フロベニウスノルム(行列のノルム)
行列 $W$ に対する $L_2$ ノルムはフロベニウスノルムと呼ばれ、全要素の 2 乗和の平方根で定義されます。
\[\|W\|_F = \sqrt{\sum_{i,j} w_{ij}^2}\]機械学習では、重み行列 $W$ の大きさを測る指標として $L_2$ 正則化(Weight Decay)などで使われます。
import numpy as np
# 1. 2x2 の ndarray を定義
w = np.array([[1, 2],
[3, 4]])
# 2. 各要素を 2 乗する (Element-wise)
# 結果: [[1, 4], [9, 16]]
w_squared = w ** 2
# 3. 要素の 2 乗和を計算
# 計算: 1 + 4 + 9 + 16 = 30
sum_squared = np.sum(w_squared)
# 4. 平方根をとってフロベニウスノルムを算出
# 計算: √30 ≈ 5.4772
frobenius_norm = np.sqrt(sum_squared)
# (参考)NumPy の標準関数を使う場合
frobenius_norm_np = np.linalg.norm(w)
print(f"元の配列 w:\n{w}")
print(f"2乗した配列 w**2:\n{w_squared}")
print(f"2乗和 sum_squared: {sum_squared} (型: {type(sum_squared)})")
print(f"フロベニウスノルム frobenius_norm: {frobenius_norm:.4f} (型: {type(frobenius_norm)})")
print(f"np.linalg.norm(w) の結果: {frobenius_norm_np:.4f}")
# 元の配列 w:
# [[1 2]
# [3 4]]
# 2乗した配列 w**2:
# [[1 4]
# [9 16]]
# 2乗和 sum_squared: 30 (型: <class 'numpy.int64'>)
# フロベニウスノルム frobenius_norm: 5.4772 (型: <class 'numpy.float64'>)
# np.linalg.norm(w) の結果: 5.4772