Two ways to morph — blend the pixels, or walk the space
Both panels go from face A to face B as you drag. The left panel does it the naive way: crossfade the pixels — image A fades out while image B fades in. The right panel interpolates the latent parameters that generated the faces (eye size, mouth curve, face width…) and redraws one face from the blended parameters. Park the slider at the middle and count the eyes on each side.
The "latent space" here is 6 hand-made face parameters. A real generator (StyleGAN, a VAE) learns hundreds of such dials from data instead of being given them — but interpolation works the same way.
The map is real — every point in latent space is a picture
Here is a whole 2-D latent space, decoded: each thumbnail on the grid is what the decoder produces at that coordinate. One axis controls spikiness, the other controls ripple. Drag the A and B handles anywhere, then slide t — the big shape on the right is the decode of the point walking the straight line between them. Notice there are no gaps: the line never crosses a "broken" region.
This decoder is a smooth hand-built function of (u, v), so the whole square is well-behaved — the ideal case a well-trained generative model tries to approach. EP 04 shows what happens when it isn't.
Don't tunnel through the sphere — lerp vs slerp
Real latent vectors are high-dimensional Gaussians, and those concentrate on a thin shell of radius √N — almost no training sample ever lives near the center. A straight line (lerp) between two shell points cuts through the hollow middle, where the decoder has seen nothing. Spherical interpolation (slerp) walks along the shell instead. Drag t to the middle and compare the two decoded textures — the lerp one goes washed-out and grey, live, with its actual norm printed below.
The vectors are genuine 48-dimensional Gaussian samples and all norms are computed live. The decoder is a toy (texture contrast follows ‖z‖, cubed so your eye can see it), but the norm collapse at the lerp midpoint is the real mathematical effect.
Falling off the manifold — when the midpoint is garbage
Interpolation is only as good as the space. Compare two decoders trained on the same two shape families (flowers and gears). The well-trained one saw examples between the clusters, so its space is smooth. The badly structured one has a hole in the middle of its latent space — no training data ever landed there. Slide through the midpoint in both modes and watch the decode.
Both decoders are hand-made stand-ins. The "broken" one adds decode noise proportional to distance from the two training clusters — a caricature of what early VAEs and GANs really do between poorly-connected modes ("holes" in the latent space).
Latent arithmetic — add a smile, subtract a frown
Interpolation's famous cousin: directions in latent space are attributes. Subtract a neutral face's latent from a smiling face's latent and you get a "smile vector". Add k copies of it to any face. At k ≈ 1 it works beautifully. Now drag k to 3, or to −2: the parameter dials get pushed past every value the decoder was trained on — watch the dials on the right leave their valid bands and the face break.
Each dial's grey band is the range seen in "training". The face is drawn from the raw arithmetic result with no clamping — what you see at k = 3 is genuinely what the equation produces.