ทดลองเล่นกับ Entropy
หากยังไม่คุ้นเคยกับแนวคิดเรื่อง entropy การทำความเข้าใจผ่านตัวอย่างจะช่วยได้มาก
ในแบบฝึกหัดนี้ จะได้สร้างฟังก์ชัน plot_probabilities ที่รับลิสต์ของค่าความน่าจะเป็นเป็น argument จากนั้นฟังก์ชันจะคำนวณค่า entropy และแสดงผลเป็น bar chart
เมื่อทดลองปรับค่าต่าง ๆ จะพบว่า entropy มีค่าสูงขึ้นเมื่อการกระจายความน่าจะเป็นกระจายออกไปในหลาย action
คลาส torch.distributions.Categorical ถูกโหลดไว้ในสภาพแวดล้อมแล้วในชื่อ Categorical โดยคลาสนี้มีเมธอด .entropy() ซึ่งคืนค่า entropy ในหน่วย nats
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Deep Reinforcement Learning ด้วย Python
คำแนะนำการฝึกหัด
- คำนวณค่า entropy ของการกระจายความน่าจะเป็นในหน่วย nats
- แปลงค่า entropy จากหน่วย nats เป็น bits เพื่อความสะดวก
- ลองใช้ลิสต์อื่นเป็น input ให้กับฟังก์ชัน
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
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(____)