IniziaInizia gratis

Il rapporto di probabilità con clipping

Ora implementerai il rapporto di probabilità con clipping, una componente essenziale della funzione obiettivo di PPO.

Per riferimento, il rapporto di probabilità è definito come: $$\frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}$$

E il rapporto di probabilità con clipping è: \(\mathrm{clip}(r_t(\theta), 1-\varepsilon, 1+\varepsilon)\).

Questo esercizio fa parte del corso

Deep Reinforcement Learning in Python

Visualizza il corso

Istruzioni dell'esercizio

  • Ottieni la probabilità dell'azione prob da action_log_prob, e prob_old da action_log_prob_old.
  • Scollega il log-prob delle azioni vecchie dal grafo di calcolo dei gradienti di torch.
  • Calcola il rapporto di probabilità.
  • Applica il clipping all'obiettivo surrogato.

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

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)
Modifica ed esegui il codice