By using the method of gradient descent, not only are you able to tell each network “you did well” or “you did badly”, but also “adjust your output in this or that way, so that the other network is even more wrong”. By using this circulatory mechanism, the networks force each other to improve. In the beginning, the generator produces random noise based on the random noise that it was fed with. The discriminator, which is also not very smart at this point, has no problems classifying these outputs as fakes – yet. However, over time, as both networks improve each other – the generator getting better at producing real-looking fakes and the discriminator getting better at spotting them –, the generator will eventually produce outputs that are indistinguishable from images in the original dataset (cats, cars, people). At this point, the discriminator is no longer able to tell which images are real and which are fake, therefore its possible output between 0 and 1 is always 0.5.