Öncelikli deneyim tekrarı ile DQN
Bu egzersizde, DQN algoritmasını geliştirmek için Prioritized Experience Replay (PER) ekleyeceksin. PER'in amacı, her adımda ağı güncellemek için seçilen geçişlerden oluşan yığını (batch) eniyilemektir.
Referans olması için, PrioritizedReplayBuffer için tanımladığın yöntem adları şunlardır:
push()(geçişleri arabelleğe eklemek için)sample()(arabellekten bir geçiş yığını örneklemek için)increase_beta()(önem örneklemesini artırmak için)update_priorities()(örneklenen öncelikleri güncellemek için)
describe_episode() işlevi, her bölümü (episode) açıklamak için yine kullanılır.
Bu egzersiz
Python ile Deep Reinforcement Learning
kursunun bir parçasıdırEgzersiz talimatları
- 10000 geçiş kapasiteli bir Öncelikli Deneyim Tekrarı arabelleği oluştur.
betaparametresini güncelleyerek zamanla önem örneklemesinin etkisini artır.- Örneklenen deneyimlerin önceliğini, en son TD hatalarına göre güncelle.
Uygulamalı interaktif egzersiz
Bu örnek kodu tamamlayarak bu egzersizi bitirin.
# Instantiate a Prioritized Replay Buffer with capacity 10000
replay_buffer = ____(____)
for episode in range(5):
state, info = env.reset()
done = False
step = 0
episode_reward = 0
# Increase the replay buffer's beta parameter
replay_buffer.____
while not done:
step += 1
total_steps += 1
q_values = online_network(state)
action = select_action(q_values, total_steps, start=.9, end=.05, decay=1000)
next_state, reward, terminated, truncated, _ = env.step(action)
done = terminated or truncated
replay_buffer.push(state, action, reward, next_state, done)
if len(replay_buffer) >= batch_size:
states, actions, rewards, next_states, dones, indices, weights = replay_buffer.sample(64)
q_values = online_network(states).gather(1, actions).squeeze(1)
with torch.no_grad():
next_q_values = target_network(next_states).amax(1)
target_q_values = rewards + gamma * next_q_values * (1-dones)
td_errors = target_q_values - q_values
# Update the replay buffer priorities for that batch
replay_buffer.____(____, ____)
loss = torch.sum(weights * (q_values - target_q_values) ** 2)
optimizer.zero_grad()
loss.backward()
optimizer.step()
update_target_network(target_network, online_network, tau=.005)
state = next_state
episode_reward += reward
describe_episode(episode, reward, episode_reward, step)