Temel DQN algoritması

Python ile Deep Reinforcement Learning

Timothée Carayol

Principal Machine Learning Engineer, Komment

Temel DQN

 

 

  • Tam DQN algoritmasına ilk adımımız
  • Özellikler:
    • Genel DRL eğitim döngüsü
    • Bir Q-ağı
    • Q-öğrenmenin ilkeleri
for episode in range(1000):
  state, info = env.reset()
  done = False
  while not done:
    # Action selection
    action = select_action(network, state)
    next_state, reward, terminated, truncated, _ = (
                                   env.step(action))
    done = terminated or truncated
    # Loss calculation
    loss = calculate_loss(network, state, action, 
                          next_state, reward, done)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    state = next_state
Python ile Deep Reinforcement Learning

Temel DQN eylem seçimi

 

def select_action(q_network, state):

# Feed state to network to obtain Q-values
q_values = q_network(state)
# Obtain index of action with highest Q-value action = torch.argmax(q_values).item()
return action
  • Politika: en yüksek Q-değerine sahip eylemi seç
    • $ a_t = {\arg\max}_a Q(S_t, a) $
    • Burada: eylem 2, Q-değeri 0.12

 

 

Q-değerleri: [-0.01, 0.08, 0.12, -0.07]

Seçilen eylem: 2, q-değeri 0.12
Python ile Deep Reinforcement Learning

Temel DQN kayıp fonksiyonu

 

  • Eylem-değer fonksiyonu Bellman Denklemini sağlar
  • Fikir: iki taraf arasındaki farkı en aza indir, yani TD-hatası veya Bellman hatası
  • Kayıp olarak Kare Bellman Hatasını kullan:

DQN kaybı (kare Bellman Hatası): L(theta) = Bellman hatasının karesi

 

Bellman denklemi Q(S,A) = ödül + iskonto * max(Q(S_next,A))

Bellman Hatası Q(S,A) - (ödül + iskonto * max(Q(S_next,A)))

Python ile Deep Reinforcement Learning

Temel DQN kayıp fonksiyonu

def calculate_loss(
      q_network, state, action,
      next_state, reward, done):

q_values = q_network(state)
current_state_q_value = q_values[action]
next_state_q_value = q_network(next_state).max()
target_q_value = reward + gamma * next_state_q_value * (1-done)
loss = nn.MSELoss()( current_state_q_value, target_q_value)
return loss
  • Geçerli durum Q-değeri:

       $Q(s_t, a_t)$

  • Sonraki durum Q-değeri:

       $\max_a Q(s_{t+1}, a)$

  • Hedef Q-değeri:

       $r_{t+1} + \gamma \max_a Q(s_{t+1}, a)$

  • DQN kaybı:

$$\left(Q(s_t, a_t) - (r_{t+1} + \gamma \max_a Q(s_{t+1}, a)\right)^2$$

Python ile Deep Reinforcement Learning

Bölümleri tanımlama

describe_episode(episode, reward, episode_reward, step)
| Bölüm    1 | Süre:   84 adım | Getiri: -871.38 | Çakıldı  |

| Bölüm 2 | Süre: 53 adım | Getiri: -452.68 | Çakıldı |
| Bölüm 3 | Süre: 57 adım | Getiri: -414.22 | Çakıldı | | Bölüm 4 | Süre: 54 adım | Getiri: -475.09 | Çakıldı |
| Bölüm 5 | Süre: 67 adım | Getiri: -532.31 | Çakıldı | | Bölüm 6 | Süre: 53 adım | Getiri: -407.00 | Çakıldı | | Bölüm 7 | Süre: 52 adım | Getiri: -380.45 | Çakıldı | | Bölüm 8 | Süre: 55 adım | Getiri: -380.75 | Çakıldı | | Bölüm 9 | Süre: 88 adım | Getiri: -688.68 | Çakıldı | | Bölüm 10 | Süre: 76 adım | Getiri: -338.06 | Çakıldı |
Python ile Deep Reinforcement Learning

Hadi pratik yapalım!

Python ile Deep Reinforcement Learning

Preparing Video For Download...