Replace per-param gradient norm extraction with batched Tensor::stack pattern (N GPU syncs → 1). Remove per-batch loss scalar extraction from backward(), defer to epoch-level accumulation. Apply GPU-accumulated validation loss (stack + mean_all instead of per-batch to_scalar). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>