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
Instructions de l’exercice
- Obtenez la probabilité d'action
probà partir deaction_log_prob, etprob_oldà partir deaction_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)