深層学習による異常検知の定番、オートエンコーダ。「正常データを圧縮して復元する」モデルを学習し、復元誤差で異常を判定。
オートエンコーダの種類
| 手法 | 向くデータ | 特徴 |
|---|---|---|
| Vanilla AE | シンプルな表形式 | 実装最易、エントリーポイント |
| Denoising AE | ノイズの多いデータ | ロバスト性が上がる |
| Variational AE (VAE) | 確率的な異常度が欲しい | 再構成誤差 + KL ダイバージェンス |
| LSTM-AE | 時系列・系列データ | RNN で時間依存性を学習 |
| Transformer-AE | 長期依存・複雑系列 | 近年定石、最高精度 |
実装:PyTorch
シンプルな AutoEncoder
Python
import torchimport torch.nn as nn
class AE(nn.Module): def __init__(self, input_dim, latent_dim=8): super().__init__() self.encoder = nn.Sequential( nn.Linear(input_dim, 32), nn.ReLU(), nn.Linear(32, latent_dim), nn.ReLU(), ) self.decoder = nn.Sequential( nn.Linear(latent_dim, 32), nn.ReLU(), nn.Linear(32, input_dim), ) def forward(self, x): return self.decoder(self.encoder(x))
# 学習model = AE(input_dim=10)optimizer = torch.optim.Adam(model.parameters())criterion = nn.MSELoss()for epoch in range(100): optimizer.zero_grad() out = model(X_normal) loss = criterion(out, X_normal) loss.backward(); optimizer.step()
# 異常検知(再構成誤差)with torch.no_grad(): reconstructed = model(X_test) errors = ((X_test - reconstructed) ** 2).mean(dim=1) anomalies = X_test[errors > threshold]オーバーフィットの罠
「異常も学習してしまう」
学習データに異常が混入していると、AE はそれも学習して異常を異常と判定できなくなる。学習前に既知の異常を除外するか、robust loss(Huber 等)を使う。
ふくふくの進め方
深層学習ベースの異常検知は精度高いが運用コスト高。ふくふくでは、まず古典手法で動かし、必要なら AE へ段階導入を推奨します。
次回予告
EP.07 はストリーミング異常検知:リアルタイム検知のアーキテクチャ。
この記事の感想を教えてください
あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。