Thuật toán DQN tối giản

Deep Reinforcement Learning bằng Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

DQN tối giản

 

 

  • Bước đầu tới thuật toán DQN đầy đủ
  • Thành phần:
    • Vòng lặp huấn luyện DRL tổng quát
    • Mạng Q
    • Nguyên lý Q-learning
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
Deep Reinforcement Learning bằng Python

Chọn hành động trong DQN tối giản

 

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
  • Chính sách: chọn hành động có Q-value cao nhất
    • $ a_t = {\arg\max}_a Q(S_t, a) $
    • Ở đây: hành động 2, Q-value 0.12

 

 

Q-values: [-0.01, 0.08, 0.12, -0.07]

Hành động chọn: 2, q-value 0.12
Deep Reinforcement Learning bằng Python

Hàm loss DQN tối giản

 

  • Hàm giá trị-hành động thỏa phương trình Bellman
  • Ý tưởng: tối thiểu hóa chênh lệch hai vế (TD-error/Bellman error)
  • Dùng bình phương Bellman error làm hàm loss:

Loss DQN (bình phương Bellman error): L(theta) = bình phương Bellman error

 

Phương trình Bellman Q(S,A) = reward + discount * max(Q(S_next,A))

Bellman Error Q(S,A) - (reward + discount * max(Q(S_next,A)))

Deep Reinforcement Learning bằng Python

Hàm loss DQN tối giản

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
  • Q-value trạng thái hiện tại:

       $Q(s_t, a_t)$

  • Q-value trạng thái kế tiếp:

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

  • Q-value mục tiêu:

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

  • Loss của DQN:

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

Deep Reinforcement Learning bằng Python

Mô tả các tập

describe_episode(episode, reward, episode_reward, step)
| Tập      1 | Thời lượng:   84 bước | Lợi tức: -871.38 | Rơi vỡ |

| Tập 2 | Thời lượng: 53 bước | Lợi tức: -452.68 | Rơi vỡ |
| Tập 3 | Thời lượng: 57 bước | Lợi tức: -414.22 | Rơi vỡ | | Tập 4 | Thời lượng: 54 bước | Lợi tức: -475.09 | Rơi vỡ |
| Tập 5 | Thời lượng: 67 bước | Lợi tức: -532.31 | Rơi vỡ | | Tập 6 | Thời lượng: 53 bước | Lợi tức: -407.00 | Rơi vỡ | | Tập 7 | Thời lượng: 52 bước | Lợi tức: -380.45 | Rơi vỡ | | Tập 8 | Thời lượng: 55 bước | Lợi tức: -380.75 | Rơi vỡ | | Tập 9 | Thời lượng: 88 bước | Lợi tức: -688.68 | Rơi vỡ | | Tập 10 | Thời lượng: 76 bước | Lợi tức: -338.06 | Rơi vỡ |
Deep Reinforcement Learning bằng Python

Ayo berlatih!

Deep Reinforcement Learning bằng Python

Preparing Video For Download...