Advances in generative modelling: from component analysis to generative adversarial networks