Entropy bonus และ PPO

Deep Reinforcement Learning ด้วย Python

Timothée Carayol

Principal Machine Learning Engineer, Komment

Entropy bonus

 

 

  • อัลกอริทึม policy gradient อาจยุบรวมเป็น deterministic policy
  • แนวทางแก้ไข: เพิ่ม entropy bonus
  • Entropy วัดความไม่แน่นอนของการกระจาย!

ยานสำรวจดาวอังคารที่ไม่สามารถเคลื่อนที่ต่อได้เพราะมีก้อนหินขนาดใหญ่ขวางอยู่ตรงหน้า

Deep Reinforcement Learning ด้วย Python

Entropy ของการกระจายความน่าจะเป็น

 

ค่า entropy ของตัวแปรสุ่มแบบไม่ต่อเนื่อง X มีหน่วยเป็นบิต นิยามเป็น H(X) = - ผลรวมของ p(x) log_2 p(x) ทุกค่า x

  • หากใช้ $\ln$ แทน $\log_2$: ผลลัพธ์มีหน่วยเป็น $nats$
  • $1\ nat = \frac{1}{\ln 2}\ bit \approx 1.44 \ bit$

แผนภูมิแท่งแรกจากสามแผนภูมิ แสดง stochastic policy บน 4 actions โดยแต่ละ action มีความน่าจะเป็น 0.25 ซึ่งให้ค่า entropy เท่ากับ 2 บิต

แผนภูมิแท่งที่สองจากสามแผนภูมิ แสดง stochastic policy บน 4 actions โดยความน่าจะเป็นกระจุกอยู่ที่สอง action เท่ากัน ส่วนที่เหลือเป็น 0 ให้ค่า entropy เท่ากับ 1 บิต

แผนภูมิแท่งที่สามจากสามแผนภูมิ แสดง stochastic policy บน 4 actions โดยความน่าจะเป็นทั้งหมดกระจุกอยู่ที่ action เดียวด้วยความน่าจะเป็น 1 ให้ค่า entropy เท่ากับ 0 บิต

Deep Reinforcement Learning ด้วย Python

การนำ entropy bonus ไปใช้งาน

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)
  • Actor loss: actor_loss -= c_entropy * entropy
  • หมายเหตุ: Categorical.entropy() มีหน่วยเป็น nats; หารด้วย math.log(2) เพื่อแปลงเป็นบิต
Deep Reinforcement Learning ด้วย Python

Training loop ของ 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 ด้วย Python

ก้าวสู่ PPO แบบ batch updates

 

  • การอัปเดตในแต่ละ step: ยังไม่ได้ใช้ประโยชน์จาก PPO objective function เต็มที่
  • ในแต่ละ step, $\theta$ จะตรงกับ $\theta_{old}$ พอดี
  • การนำ PPO ไปใช้แบบเต็มรูปแบบจะแยกออกเป็น:
    • การอัปเดตพารามิเตอร์ (minibatches)
    • การอัปเดต policy (rollouts)
Deep Reinforcement Learning ด้วย Python

มาฝึกกันเถอะ!

Deep Reinforcement Learning ด้วย Python

Preparing Video For Download...