キーワード:PyTorch / Transformer / 統計的距離 / 画像解析 / 異常音検知


1️⃣ マハラノビス距離って何者?

「ユークリッド距離=全方向で目盛りが同じ定規」なら、マハラノビス距離は「データの形(共分散)に合わせて伸び縮みするゴム定規」。

  • 平均 μ を基点に、
  • 共分散 Σ で “データが広がる方向” を把握し、
  • その軸に沿って“どれだけ飛び出たか”を測定。

数式

これだけで 多次元版 zスコア 完成!


2️⃣ 具体例でピンと来る✨

シーン普通の距離マハラノビス距離
街の写真でネコだけ探したいピクセル差はネコも壁も同じ扱い“ネコ色&形” 方向に離れた点を強調
工場のモーター音を監視50Hz ハムノイズで誤検知多発周波数の相関込みで”異音”だけアウト

3️⃣ PyTorch で 10 行レシピ 🐍

import torch
# 埋め込みベクトル (N,D) を想定
embeds = model(images_or_audio)          
μ  = embeds.mean(0)
Σ  = torch.cov(embeds.T) + 1e-6*torch.eye(embeds.size(1))
Σ_inv = torch.inverse(Σ)

def maha(x):
    diff = x - μ
    return torch.sqrt((diff @ Σ_inv * diff).sum(-1))

scores = maha(embeds)                   # ← 距離スコア
threshold = scores.quantile(0.99)       # 上位1%を異常に
anomaly_mask = scores > threshold
  • トリック1e-6*I を足して数値安定🔥

1e‑6 × I って? Σが“薄っぺら”で逆行列が取れないときに、対角へ小さな砂利を敷くイメージ。0.000001 を足して厚みを持たせ、数値エラーを防ぎます。


4️⃣ Transformer と組み合わせると最強💪

  1. 画像 ➡ Patchify → ViT で埋め込み。
  2. 音声 ➡ Log-Mel を小パッチに → Audio-Transformer 🌀
  3. 得た埋め込み空間に マハラノビス距離 をかけるだけ。
    • 自己教師あり(SimCLR/MAE) と相性抜群。
    • ラベルなし正常データだけでOK。

5️⃣ イメージしやすい💡 アナロジー

🥳 パーティ会場を想像してください。ドレスコード=黒スーツ。みんな黒なら会場は“黒スーツの集団”。突然、真っ赤なドレスの人が入ってきたら?— ユークリッド距離では「単に色が違う人」。— マハラノビス距離は「黒スーツの集団から 3σ 以上離れた超レア来客!」と即座に警報を鳴らします。


6️⃣ 使ってみる時の8つのTips📝

  1. Σ はロバスト推定(Ledoit-Wolf)が安定。
  2. 埋め込み次元 > データ数なら 主成分圧縮で rank を下げる。
  3. しきい値は ROC (Receiver Operating Characteristic )曲線で FPR と TPR を確認。
  4. 窓単位移動平均でスコア平滑化し誤警報↓。
  5. データシフトに備え μ, Σ をスライディング更新
  6. 可視化:t‑SNE / UMAP (次元削減)でクラスタとアウトライアをチェック。
  7. ハイブリッド:kNN 距離とアンサンブルすると頑健性↑。
  8. εI 正則化Σ + εI を足して 逆行列を必ず取れるようにする(ε = 1e‑6 など)。

7️⃣ まとめ & 次の一歩🚀

  • マハラノビス距離は “データの形ごと測る定規”。
  • Transformer の多彩な埋め込みと組み合わせると、画像・音声・時系列の異常をラベルレスに検出可能。

投稿者 kojiro777

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です