キーワード: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 と組み合わせると最強💪
- 画像 ➡ Patchify → ViT で埋め込み。
- 音声 ➡ Log-Mel を小パッチに → Audio-Transformer 🌀
- 得た埋め込み空間に マハラノビス距離 をかけるだけ。
- 自己教師あり(SimCLR/MAE) と相性抜群。
- ラベルなし正常データだけでOK。
5️⃣ イメージしやすい💡 アナロジー
🥳 パーティ会場を想像してください。ドレスコード=黒スーツ。みんな黒なら会場は“黒スーツの集団”。突然、真っ赤なドレスの人が入ってきたら?— ユークリッド距離では「単に色が違う人」。— マハラノビス距離は「黒スーツの集団から 3σ 以上離れた超レア来客!」と即座に警報を鳴らします。
6️⃣ 使ってみる時の8つのTips📝
- Σ はロバスト推定(Ledoit-Wolf)が安定。
- 埋め込み次元 > データ数なら 主成分圧縮で rank を下げる。
- しきい値は ROC (Receiver Operating Characteristic )曲線で FPR と TPR を確認。
- 窓単位移動平均でスコア平滑化し誤警報↓。
- データシフトに備え μ, Σ をスライディング更新。
- 可視化:t‑SNE / UMAP (次元削減)でクラスタとアウトライアをチェック。
- ハイブリッド:kNN 距離とアンサンブルすると頑健性↑。
- εI 正則化:
Σ + εI
を足して 逆行列を必ず取れるようにする(ε = 1e‑6 など)。
7️⃣ まとめ & 次の一歩🚀
- マハラノビス距離は “データの形ごと測る定規”。
- Transformer の多彩な埋め込みと組み合わせると、画像・音声・時系列の異常をラベルレスに検出可能。