Utforska entropi
Om du inte har stött på begreppet entropi tidigare är det bra att bekanta sig med det via ett exempel.
Du ska bygga en funktion plot_probabilities som tar en lista med sannolikheter som argument. Den beräknar entropin och visualiserar sannolikheterna i ett stapeldiagram.
När du experimenterar med entropi bör du märka att entropin är högre när sannolikhetsfördelningen är utspridd över många handlingar.
Klassen torch.distribution.Categorical är inläst i din miljö som Categorical; den har en metod, .entropy(), som returnerar entropin i nats.
Den här övningen är en del av kursen
Djup förstärkningsinlärning i Python
Övningsinstruktioner
- Beräkna entropin för sannolikhetsfördelningen i nats.
- Konvertera entropin från nats till bitar för enklare tolkning.
- Prova att använda en annan lista som indata till funktionen.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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(____)