Terrain de jeu de l'entropie
Si vous n'avez jamais rencontré la notion d'entropie, un exemple vous aidera à bien la saisir.
Vous allez créer une fonction plot_probabilities qui prend en argument une liste de probabilités. Elle calcule l'entropie et trace les probabilités sous forme d'histogramme à barres.
En explorant l'entropie, vous devriez constater qu'elle 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 offre une méthode, .entropy(), qui retourne l'entropie en nats.
Cette activité fait partie du cours
Deep Reinforcement Learning en Python
Instructions de l’exercice
- Obtenez l'entropie de la distribution de probabilité en nats.
- Pour plus de commodité, convertissez l'entropie de nats en bits.
- Essayez d'utiliser une autre liste comme entrée de la fonction.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
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(____)