Entropie-speeltuin
Als je het concept entropie nog niet eerder bent tegengekomen, is het handig om het met een voorbeeld te verkennen.
Je bouwt een functie plot_probabilities die een lijst met waarschijnlijkheden als argument neemt. De functie berekent de entropie en plot de waarschijnlijkheden in een staafdiagram.
Als je met entropie speelt, zul je merken dat de entropie hoger is wanneer de kansverdeling over veel acties is uitgesmeerd.
De klasse torch.distribution.Categorical is in je omgeving geladen als Categorical; deze klasse heeft een methode, .entropy(), die de entropie in nats teruggeeft.
Deze oefening maakt deel uit van de cursus
Deep Reinforcement Learning in Python
Oefeninstructies
- Bepaal de entropie van de kansverdeling in nats.
- Zet voor het gemak de entropie om van nats naar bits.
- Probeer een andere lijst als invoer voor de functie.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
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(____)