엔트로피 놀이터
엔트로피 개념이 처음이라면, 예시로 직접 확인해 보면 이해에 도움이 돼요.
확률 값의 리스트를 인자로 받아들이는 함수 plot_probabilities를 만들어 보세요. 이 함수는 엔트로피를 계산하고, 막대그래프로 확률을 시각화해요.
엔트로피를 여러 값으로 실험해 보면, 확률 분포가 여러 행동에 더 고르게 퍼져 있을수록 엔트로피가 커진다는 점을 알 수 있어요.
torch.distribution.Categorical 클래스는 환경에 Categorical로 로드되어 있어요. 이 클래스에는 엔트로피를 nats 단위로 반환하는 .entropy() 메서드가 있어요.
이 연습은 강의의 일부입니다
Python으로 배우는 Deep Reinforcement Learning
연습 안내
- 확률 분포의 엔트로피를 nats 단위로 구하세요.
- 편의를 위해, 엔트로피를 nats에서 bits로 변환하세요.
- 함수의 입력으로 다른 리스트도 넣어 시도해 보세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
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(____)