I'm trying to gain some intuition beyond definitions, in any possible dimension. I'd appreciate references to read.
The intution that I have about these is that generative are "from abstract to concrete" whereas discriminative models are "from concrete to abstract".
For example: Detecting if a photo has a cat or not is about going from the photo i.e concrete to the abstract concept of a cat. Whereas generating a photo of a cat given some abstract properties about the cat is going from abstract to concrete.
Another way of seeing the differences between these models in the case of binary classification for instance between a class A and a class B:
A generative model will be trained to model the properties of class A and another one will be trained to model the properties of class B. If we want to know if a new sample belongs to class A or B, we will compare it to each model and decide. The advantage is that we are able to synthetically generate more samples of these classes using the generative property of the model. The models have a "global knowledge" of what the classes are.
On the other hand, a discriminative model will "pay attention" to what differentiates the 2 classes. It is more straightforward and often computationally less expensive as the model does not need to grasp everything about each class but only what makes them different.
This is for the big picture. I find this course slides quite helpful to understand these concepts in more details (especially the first slides that are equation-free): http://www.cedar.buffalo.edu/~srihari/CSE574/Discriminative-Generative.pdf