CommencezCommencez gratuitement

Le ratio de probabilité tronqué

Vous allez maintenant implémenter le ratio de probabilité tronqué, un élément essentiel de la fonction objectif de PPO.

Pour référence, le ratio de probabilité est défini comme : $$\frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}$$

Et le ratio de probabilité tronqué est : \(\mathrm{clip}(r_t(\theta), 1-\varepsilon, 1+\varepsilon)\).

Cette activité fait partie du cours

Deep Reinforcement Learning en Python

Voir le cours

Instructions de l’exercice

  • Obtenez la probabilité d'action prob à partir de action_log_prob, et prob_old à partir de action_log_prob_old.
  • Détachez l'ancienne log-probabilité d'action du graphe de calcul des gradients de torch.
  • Calculez le ratio de probabilité.
  • Tronquez l'objectif de substitution.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

log_prob = torch.tensor(.5).log()
log_prob_old = torch.tensor(.4).log()

def calculate_ratios(action_log_prob, action_log_prob_old, epsilon):
    # Obtain prob and prob_old
    prob = ____
    prob_old = ____
    # Detach the old action log prob
    prob_old_detached = ____.____()
    # Calculate the probability ratio
    ratio = ____ / ____
    # Apply clipping
    clipped_ratio = torch.____(ratio, ____, ____)
    print(f"+{'-'*29}+\n|         Ratio: {str(ratio)} |\n| Clipped ratio: {str(clipped_ratio)} |\n+{'-'*29}+\n")
    return (ratio, clipped_ratio)

_ = calculate_ratios(log_prob, log_prob_old, epsilon=.2)
Modifier et exécuter le code