basics of generative adversarial network