Sân chơi entropy
Nếu bạn chưa từng gặp khái niệm entropy, việc hình dung nó qua một ví dụ sẽ rất hữu ích.
Bạn sẽ xây dựng hàm plot_probabilities nhận một danh sách xác suất làm đối số. Hàm sẽ tính entropy và vẽ các xác suất dưới dạng biểu đồ cột.
Khi thử nghiệm với entropy, bạn sẽ thấy entropy cao hơn khi phân phối xác suất được dàn trải trên nhiều hành động.
Lớp torch.distribution.Categorical đã được nạp trong môi trường của bạn dưới tên Categorical; lớp này có phương thức .entropy() trả về entropy theo đơn vị nats.
Bài tập này là một phần của khóa học
Deep Reinforcement Learning bằng Python
Hướng dẫn bài tập
- Lấy entropy của phân phối xác suất theo đơn vị nats.
- Để tiện so sánh, hãy chuyển entropy từ nats sang bits.
- Thử dùng một danh sách khác làm đầu vào cho hàm.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
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(____)