Qual é a diferença entre DbSet <> e DbSet virtual <>?

No código da estrutura da entidade primeiro, quando declaro entidades, tenho que usar o tipo de propriedades DbSet <> para isso. Por exemplo:

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

Recentemente eu conheci o DbSet <> declarado como virtual.

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

Qual é a diferença? Quais funcionalidades da EF estão ativadas?