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
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)