Same real autoencoder as the 3D version, redrawn as two 2D-native plots instead of paired 3D bars. An 8-channel sensor reading x is compressed through a narrow bottleneck and reconstructed as x̂, trained by gradient descent only on data assumed normal:
L = 0.5 Σᵢ (xᵢ − x̂ᵢ)² (SGD, LR folded into the update)
Encoder: h = tanh(W₁x + b₁) (8 → bottleneck)
Decoder: x̂ = W₂h + b₂ (bottleneck → 8)
MSE shown in the UI = (1/8) Σᵢ (xᵢ − x̂ᵢ)²
The top panel is a scrolling heatmap: one row per sensor channel, one column per new sample, color = that channel's own squared error (green→red). A vertical red streak means one sensor just broke away from the learned correlation structure — a diagnosis, not just a flag. The bottom-left panel is a phase portrait of the compressed code: it plots the first two hidden units h₁ vs h₂ as a fading trail. Because two hidden sinusoidal factors actually drive all 8 sensors, normal samples trace a closed loop in this 2D latent space; an anomaly kicks the trajectory off that loop. The bottom-right panel is the MSE-vs-time strip chart with the adaptive mean+3σ threshold line overlaid — the same rule production anomaly detectors use.
- Bottleneck width — a wider bottleneck reconstructs everything well (including anomalies, hurting detection); a narrower one forces stronger compression and sharper anomaly contrast, but can under-fit normal data too.
- Heatmap rows — S1..S8 top to bottom; the reddest cell in the newest column is the diagnosed root-cause channel.
- Latent trail — only uses hidden units 1 and 2 (any extra bottleneck units still train and reconstruct, they just aren't plotted).
- Training toggle — freezes the weights so you can compare a still-learning network against a converged one on the same anomaly.
Real-world relevance: this per-feature attribution is what turns a bare "anomaly score" into an actionable alert in manufacturing (which sensor drifted?), IT operations (which metric spiked?) and fraud systems (which field is inconsistent?).