¿Cuál es la diferencia entre DbSet <> y virtual DbSet <>?

En Entity Framework Code First, cuando declaro entidades, tengo que usar el tipo de propiedades DbSet <> para eso. Por ejemplo:

public DbSet<Product> Products { get; set; }
public DbSet<Customer> Customers { get; set; }

Recientemente me encontré con DbSet <> declarado como virtual.

public virtual DbSet<Product> Products { get; set; }
public virtual DbSet<Customer> Customers { get; set; }

¿Cuál es la diferencia? ¿Qué funcionalidades EF están habilitadas?

Respuestas a la pregunta(2)

Su respuesta a la pregunta