Phần thưởng entropy và PPO

Deep Reinforcement Learning bằng Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

Phần thưởng entropy

 

 

  • Thuật toán policy gradient có thể sụp thành policy tất định
  • Giải pháp: thêm phần thưởng entropy
  • Entropy đo mức bất định của một phân phối!

Một xe tự hành trên sao Hỏa bị kẹt vì tảng đá lớn chặn ngay phía trước.

Deep Reinforcement Learning bằng Python

Entropy của phân phối xác suất

 

Entropy của biến ngẫu nhiên rời rạc X, đo bằng bit, được định nghĩa: H(X) = - tổng trên các giá trị x của p(x) log_2 p(x)

  • Dùng $\ln$ thay vì $\log_2$: kết quả đo bằng $nat$.
  • $1\ nat = \frac{1}{\ln 2}\ bit \approx 1{,}44\ bit$

Biểu đồ cột thứ nhất: policy ngẫu nhiên trên 4 hành động. Mỗi hành động có xác suất 0,25; entropy 2 bit.

Biểu đồ cột thứ hai: policy tập trung đều vào hai hành động, 0 cho các hành động khác; entropy 1 bit.

Biểu đồ cột thứ ba: policy dồn toàn bộ xác suất vào một hành động với xác suất 1; entropy 0 bit.

Deep Reinforcement Learning bằng Python

Cài đặt phần thưởng entropy

def select_action(policy_network, state):
  action_probs = policy_network(state)
  action_dist = Categorical(action_probs)
  action = action_dist.sample()
  log_prob = action_dist.log_prob(action)

# Obtain the entropy of the policy entropy = action_dist.entropy()
return (action.item(), log_prob.reshape(1), entropy)
  • Mất mát actor: actor_loss -= c_entropy * entropy
  • Lưu ý: Categorical.entropy() cho nats; chia math.log(2) để đổi sang bit
Deep Reinforcement Learning bằng Python

Vòng lặp huấn luyện PPO

for episode in range(10):
  state, info = env.reset()
  done = False
  while not done:
    action, action_log_prob, entropy = select_action(actor, state)
    next_state, reward, terminated, truncated, _ = env.step(action)
    done = terminated or truncated
    actor_loss, critic_loss = calculate_losses(critic, action_log_prob, action_log_prob,
                                               reward, state, next_state, done)
    actor_loss -= c_entropy * entropy
    actor_optimizer.zero_grad(); actor_loss.backward(); actor_optimizer.step()
    critic_optimizer.zero_grad(); critic_loss.backward(); critic_optimizer.step()
    state = next_state
Deep Reinforcement Learning bằng Python

Tiến tới PPO với cập nhật theo lô

 

  • Cập nhật mỗi bước: không tận dụng hết hàm mục tiêu PPO
  • Ở mỗi bước, $\theta$ trùng với $\theta_{old}$.
  • Triển khai PPO đầy đủ tách biệt:
    • Cập nhật tham số (minibatch)
    • Cập nhật policy (rollout)
Deep Reinforcement Learning bằng Python

Ayo berlatih!

Deep Reinforcement Learning bằng Python

Preparing Video For Download...