Hraní si s entropií
Pokud ses s pojmem entropie ještě nesetkal/a, pomůže si ho lépe představit na konkrétním příkladu.
Napíšeš funkci plot_probabilities, která přijímá seznam pravděpodobností jako argument. Vypočítá entropii a zobrazí pravděpodobnosti jako sloupcový graf.
Až si s entropií trochu pohraješ, zjistíš, že entropie je vyšší, když je rozdělení pravděpodobnosti rozloženo rovnoměrně přes mnoho akcí.
Třída torch.distribution.Categorical je ve tvém prostředí dostupná jako Categorical; tato třída má metodu .entropy(), která vrací entropii v natech.
Toto cvičení je součástí kurzu
Deep Reinforcement Learning v Pythonu
Pokyny k cvičení
- Získej entropii rozdělení pravděpodobnosti v natech.
- Pro přehlednost převeď entropii z natů na bity.
- Zkus jako vstup funkce použít jiný seznam.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
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(____)