The classifier head as CertLayers — batched GAP and the dense classifier #
Every conv net in the suite ends in global average pooling and a dense classifier, and both are
globally certified (GAP is linear, dense is affine), so ok := True. Written once here and shared
by MobileNetV4, ResNet-34 and ResNet-50.
⭐ Both backward graphs tie by rfl. den of .gapBackBatched is definitionally the row-wise
GAP VJP, and den of .denseRowBack is rowDenseBackFlat, which is what batchMap_has_vjp
reduces to. ⚠ GAP's VJP does not depend on its input, and den .gapBackBatched uses that by
evaluating the backward at fun _ => 0. That is sound because GAP is linear, and it is why the tie
holds at every x.