ฝึก REINFORCE algorithm
ถึงเวลาแล้วที่จะฝึก Lunar Lander ด้วย REINFORCE! สิ่งที่ต้องทำคือ implement training loop ของ REINFORCE รวมถึงการคำนวณ REINFORCE loss
เนื่องจากขั้นตอนการคำนวณ loss ครอบคลุมทั้ง inner loop และ outer loop จึงไม่ใช้ฟังก์ชัน calculate_loss() ในครั้งนี้
เมื่อ episode สิ้นสุดลง สามารถใช้ทั้งสองค่านั้นในการคำนวณ loss ได้
สำหรับข้อมูลอ้างอิง นี่คือนิพจน์ของฟังก์ชัน REINFORCE loss:
จะใช้ฟังก์ชัน describe_episode() เพื่อแสดงผลการทำงานของ agent ในแต่ละ episode อีกครั้ง
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Deep Reinforcement Learning ด้วย Python
คำแนะนำการฝึกหัด
- เพิ่ม log probability ของ action ที่เลือกไว้ลงใน episode log probabilities
- เพิ่มค่า episode return ด้วย discounted reward ของ step ปัจจุบัน
- คำนวณ REINFORCE episode loss
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
for episode in range(50):
state, info = env.reset()
done = False
episode_reward = 0
step = 0
episode_log_probs = torch.tensor([])
R = 0
while not done:
step += 1
action, log_prob = select_action(policy_network, state)
next_state, reward, terminated, truncated, _ = env.step(action)
done = terminated or truncated
episode_reward += reward
# Append to the episode action log probabilities
episode_log_probs = torch.cat((____, ____))
# Increment the episode return
R += (____ ** step) * ____
state = next_state
# Calculate the episode loss
loss = ____ * ____.sum()
optimizer.zero_grad()
loss.backward()
optimizer.step()
describe_episode(episode, reward, episode_reward, step)