Oříznutá náhradní objektivní funkce
Implementuj funkci calculate_loss() pro PPO. Budeš potřebovat zakódovat klíčovou inovaci PPO – oříznutou náhradní ztrátovou funkci (clipped surrogate loss). Ta pomáhá omezit aktualizaci politiky tak, aby se v každém kroku příliš nevzdálila od předchozí politiky.
Vzorec pro oříznutý náhradní cíl je:
Hyperparametr ořezávání epsilon je v tvém prostředí nastaven na hodnotu 0,2.
Toto cvičení je součástí kurzu
Deep Reinforcement Learning v Pythonu
Pokyny k cvičení
- Získej poměry pravděpodobností mezi
\pi_\thetaa\pi_{\theta_{old}}(neoříznutou i oříznutou verzi). - Vypočítej náhradní cíle (neoříznutou i oříznutou verzi).
- Vypočítej oříznutý náhradní cíl PPO.
- Vypočítej ztrátovou funkci aktora.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
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)