Inizia subitoInizia 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 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 interattivo pratico

Prova questo esercizio completando questo 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