A Generative Adversarial Network has two parts. The Generator (left) takes a small random input and expands it into something that looks like real data: 8 → 16 → 32 → 64. The Discriminator (right) takes that output and compresses it back down to a single number: 64 → 32 → 16 → 8 → 1. That number is a probability: how confident the discriminator is that the input is real.
We train the generator and the discriminator against each other. The generator tries to fool the discriminator. The discriminator tries not to be fooled. Over time, the generator gets better at producing realistic data.
Notice what I have drawn here: the generator is a decoder (expanding), the discriminator is an encoder (compressing). It's an autoencoder flipped: the decoder comes first, and the encoder ends with a single value instead of a bottleneck.
Next:
11. Two-Tower MLP


