ÎncepețiÎncepe gratuit

Funcția obiectiv surogat clipeată

Implementează funcția calculate_loss() pentru PPO. Aceasta presupune codificarea inovației-cheie a PPO – funcția de pierdere surogat clipeată. Aceasta ajută la limitarea actualizării politicii, împiedicând-o să se îndepărteze prea mult de politica anterioară la fiecare pas.

Formula pentru obiectivul surogat clipeat este

În mediul tău, hiperparametrul de clipping epsilon este setat la 0.2.

Acest exercițiu face parte din cursul

Deep Reinforcement Learning în Python

Vezi cursul

Instrucțiuni pentru exercițiu

  • Obține rapoartele de probabilitate dintre \pi_\theta și \pi_{\theta_{old}} (versiunile neclipată și clipeată).
  • Calculează obiectivele surogat (versiunile neclipată și clipeată).
  • Calculează obiectivul surogat clipeat PPO.
  • Calculează pierderea actorului.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

def calculate_losses(critic_network, action_log_prob, action_log_prob_old,
                     reward, state, next_state, done):
    value = critic_network(state)
    next_value = critic_network(next_state)
    td_target = (reward + gamma * next_value * (1-done))
    td_error = td_target - value
    # Obtain the probability ratios
    ____, ____ = calculate_ratios(action_log_prob, action_log_prob_old, epsilon=.2)
    # Calculate the surrogate objectives
    surr1 = ratio * ____.____()
    surr2 = clipped_ratio * ____.____()    
    # Calculate the clipped surrogate objective
    objective = torch.min(____, ____)
    # Calculate the actor loss
    actor_loss = ____
    critic_loss = td_error ** 2
    return actor_loss, critic_loss
  
actor_loss, critic_loss = calculate_losses(critic_network, action_log_prob, action_log_prob_old,
                                           reward, state, next_state, done)
print(actor_loss, critic_loss)
Editează și rulează codul