Deep Convolutional Generative Adversarial Networks
We start out by having the Generator use random noise, then update the weights throughout trainning.
Both the Discriminator and Generator are updated using different loss functions. The original algorithim by Ian Goodfellow can be seen here
After just 4000 epochs you can see the generator learned the features that make up the MNIST numbers.