MulaiMulai sekarang secara gratis

Fungsi objektif surrogate terpangkas (clipped)

Implementasikan fungsi calculate_loss() untuk PPO. Ini memerlukan pengodean inovasi kunci PPO — fungsi loss surrogate yang dipangkas (clipped). Pendekatan ini membantu membatasi pembaruan kebijakan agar tidak bergeser terlalu jauh dari kebijakan sebelumnya pada setiap langkah.

Rumus untuk objektif surrogate yang dipangkas adalah

Lingkungan Anda memiliki hiperparameter clipping epsilon yang disetel ke 0.2.

Latihan ini adalah bagian dari kursus

Deep Reinforcement Learning dengan Python

Lihat Kursus

Petunjuk latihan

  • Peroleh rasio probabilitas antara \pi_\theta dan \pi_{\theta_{old}} (versi belum dipangkas dan dipangkas).
  • Hitung tujuan surrogate (versi belum dipangkas dan dipangkas).
  • Hitung objektif surrogate PPO yang dipangkas (clipped).
  • Hitung loss aktor.

Latihan interaktif praktis

Cobalah latihan ini dengan menyelesaikan kode contoh berikut.

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)
Edit dan Jalankan Kode