L2距離(ユークリッド距離)

FAISS(Facebook AI Similarity Search)における「距離計量と類似度」の基礎として、**L2距離(ユークリッド距離)**は最も基本的かつ広く使われる距離指標の一つです。以下に詳しく説明します。


1. L2距離(ユークリッド距離)とは

L2距離(またはユークリッド距離)とは、2つのベクトル間の直線距離(ユークリッド空間での距離)を表す指標です。次の数式で定義されます:

L2距離(x,y)=i=1d(xiyi)2\text{L2距離}(\mathbf{x}, \mathbf{y}) = \sqrt{\sum_{i=1}^{d} (x_i – y_i)^2}

ここで:

  • x,y\mathbf{x}, \mathbf{y}dd 次元のベクトル

  • xi,yix_i, y_i はそれぞれのベクトルの第 ii 成分

この距離は、幾何学的に「2点間の直線距離」と一致します。


2. FAISSにおけるL2距離の使用

FAISSではベクトル同士の類似性の比較を行うために、L2距離を以下のような場面で使用します。

2.1 インデックスの種類とL2距離

FAISSでL2距離が使用される代表的なインデックス:

  • IndexFlatL2

  • IndexIVFFlat(L2距離指定時)

  • IndexHNSWFlatmetric=L2 によって)

2.2 類似ベクトルの検索(search)

FAISSでは検索時に「距離が小さい順に近いベクトルを返す」という形式になります。L2距離が小さいということは、空間上でより近い=類似度が高いとみなされます。

python
import faiss import numpy as np d = 128 # 次元数 index = faiss.IndexFlatL2(d) # L2距離を使うインデックス xb = np.random.rand(1000, d).astype('float32') index.add(xb) # ベクトルを追加 xq = np.random.rand(5, d).astype('float32') # クエリベクトル D, I = index.search(xq, k=3) # 各クエリについて近いベクトルを3件検索
  • D:各検索結果に対するL2距離の配列

  • I:検索結果のインデックス番号


3. 特徴と注意点

3.1 特徴

  • L2距離は直感的な類似度測定として理解しやすい

  • スケールに敏感で、ベクトルのスケーリングにより結果が変化する

3.2 注意点

  • 次元が非常に高い場合(高次元空間)には「次元の呪い」の影響で精度が低下することがある

  • 正規化されていないデータに対しては、Cosine類似度の方が適切な場合もある


4. まとめ

項目 内容
定義 i=1d(xiyi)2\sqrt{\sum_{i=1}^{d} (x_i – y_i)^2}
FAISSでの使用例 IndexFlatL2IndexIVFFlat など
類似度の解釈 距離が小さいほど類似度が高い
長所 単純で分かりやすく、計算が高速
短所 スケーリングや高次元に弱い傾向

ChatGPT4o 生成日:2025/06/18