Terrain de jeu Entropie
Si vous n'avez jamais rencontré le concept d'entropie auparavant, il est utile de le comprendre à l'aide d'un exemple.
Vous allez créer une fonction plot_probabilities prenant comme argument une liste de probabilités. Il calcule l'entropie et représente les probabilités dans un graphique à barres.
En jouant avec l'entropie, vous devriez constater que l'entropie est plus élevée lorsque la distribution de probabilité est répartie sur de nombreuses actions.
La classe torch.distribution.Categorical est chargée dans votre environnement sous le nom Categorical; cette classe dispose d'une méthode, .entropy(), qui renvoie l'entropie en nats.
Cet exercice fait partie du cours
Apprentissage par renforcement profond en Python
Instructions
- Obtenir l'entropie de la distribution de probabilité en nats.
- Pour plus de commodité, convertissez l'entropie de nats en bits.
- Veuillez essayer d'utiliser une autre liste comme entrée pour la fonction.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
def plot_probabilities(probs):
dist = Categorical(torch.tensor(probs))
# Obtain the entropy in nats
entropy = dist.____
# Convert the entropy to bits
entropy = entropy / math.log(____)
print(f"{'Probabilities:':>15} {[round(prob, 3) for prob in dist.probs.tolist()]}")
print(f"{'Entropy:':>15} {entropy:.2f}\n")
plt.figure()
plt.bar([str(x) for x in range(len(dist.probs))], dist.probs, color='skyblue', edgecolor='black')
plt.ylabel('Probability'); plt.xlabel('Action index'); plt.ylim(0, 1)
plt.show()
plot_probabilities([.25, .25, .25, .25])
plot_probabilities([.1, .15, .2, .25, .3])
# Try with your own list
plot_probabilities(____)