MulaiMulai sekarang secara gratis

A2C dengan pembaruan batch

Sejauh ini dalam kursus ini, Anda telah menggunakan variasi di sekitar loop pelatihan DRL inti yang sama. Dalam praktiknya, ada sejumlah cara untuk memperluas struktur ini, misalnya untuk mengakomodasi pembaruan batch.

Sekarang Anda akan meninjau kembali loop pelatihan A2C pada lingkungan Lunar Lander, tetapi alih-alih memperbarui jaringan pada setiap langkah, Anda akan menunggu hingga 10 langkah berlalu sebelum menjalankan langkah penurunan gradien. Dengan merata-ratakan kerugian selama 10 langkah, Anda akan mendapatkan pembaruan yang sedikit lebih stabil.

Latihan ini adalah bagian dari kursus

Deep Reinforcement Learning dengan Python

Lihat Kursus

Petunjuk latihan

  • Tambahkan kerugian dari setiap langkah ke tensor kerugian untuk batch saat ini.
  • Hitung kerugian batch.
  • Inisialisasi ulang tensor kerugian.

Latihan interaktif praktis

Cobalah latihan ini dengan menyelesaikan kode contoh berikut.

actor_losses = torch.tensor([])
critic_losses = torch.tensor([])
for episode in range(10):
    state, info = env.reset()
    done = False
    episode_reward = 0
    step = 0
    while not done:
        step += 1
        action, action_log_prob = select_action(actor, state)                
        next_state, reward, terminated, truncated, _ = env.step(action)
        done = terminated or truncated
        episode_reward += reward
        actor_loss, critic_loss = calculate_losses(
            critic, action_log_prob, 
            reward, state, next_state, done)
        # Append to the loss tensors
        actor_losses = torch.cat((____, ____))
        critic_losses = torch.cat((____, ____))
        if len(actor_losses) >= 10:
            # Calculate the batch losses
            actor_loss_batch = actor_losses.____
            critic_loss_batch = critic_losses.____
            actor_optimizer.zero_grad(); actor_loss_batch.backward(); actor_optimizer.step()
            critic_optimizer.zero_grad(); critic_loss_batch.backward(); critic_optimizer.step()
            # Reinitialize the loss tensors
            actor_losses = ____
            critic_losses = ____
        state = next_state
    describe_episode(episode, reward, episode_reward, step)
Edit dan Jalankan Kode