始める無料で始める

エントロピーで遊んでみよう

エントロピーの概念に初めて触れる方は、具体例で直感をつかむと理解しやすいです。

引数に確率のリストを受け取る関数 plot_probabilities を作成します。エントロピーを計算し、確率を棒グラフで可視化します。

エントロピーをいろいろ試すと、確率分布が多くの行動に分散しているほどエントロピーが高くなることが分かるはずです。

torch.distribution.Categorical クラスは環境内で Categorical として読み込まれています。このクラスのメソッド .entropy() は、エントロピーを nat 単位で返します。

この演習はコースの一部です

Pythonで学ぶDeep Reinforcement Learning

コースを見る

演習の手順

  • 確率分布のエントロピーを nat 単位で取得します。
  • 便利のため、エントロピーを nat から bit に変換します。
  • 別のリストを関数の入力として試してみてください。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

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(____)
コードを編集して実行