НачатьНачать бесплатно

Эксперименты с энтропией

Если вы раньше не сталкивались с понятием энтропии, полезно разобраться в нём на конкретном примере.

Вы создадите функцию plot_probabilities, которая принимает список вероятностей в качестве аргумента, вычисляет энтропию и строит столбчатую диаграмму этих вероятностей.

Экспериментируя с энтропией, вы убедитесь, что она выше, когда распределение вероятностей равномерно распределено по многим действиям.

Класс torch.distribution.Categorical загружен в вашем окружении как Categorical; у этого класса есть метод .entropy(), который возвращает энтропию в натах.

Это упражнение является частью курса

Глубокое обучение с подкреплением на Python

Посмотреть курс

Инструкции к упражнению

  • Вычислите энтропию распределения вероятностей в натах.
  • Для удобства переведите энтропию из натов в биты.
  • Попробуйте передать в функцию другой список в качестве входных данных.

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

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(____)
Редактировать и запускать код