एंट्रॉपी बोनस और PPO

Python में Deep Reinforcement Learning

Timothée Carayol

Principal Machine Learning Engineer, Komment

एंट्रॉपी बोनस

 

 

  • पॉलिसी ग्रेडिएंट एल्गोरिदम निर्धारक पॉलिसी पर सिमट सकते हैं
  • समाधान: एंट्रॉपी बोनस जोड़ें
  • एंट्रॉपी किसी वितरण की अनिश्चितता मापती है!

एक मंगल रोवर, ठीक सामने बड़े पत्थर के कारण आगे नहीं बढ़ पा रहा है.

Python में Deep Reinforcement Learning

प्रायिकता वितरण की एंट्रॉपी

 

डिस्क्रीट रैंडम वैरिएबल X की एंट्रॉपी, बिट्स में: H(X) = - sum over values x of p(x) log_2 p(x)

  • अगर $\ln$ हो, \log_2 की जगह: परिणाम $nats$ में मापा जाएगा.
  • $1\ nat = \frac{1}{\ln 2}\ bit \approx 1.44 \ bit$

तीन में पहला बार चार्ट: 4 ऐक्शनों पर स्टोकेस्टिक पॉलिसी. हर ऐक्शन की प्रायिकता 0.25; एंट्रॉपी 2 बिट्स.

तीन में दूसरा बार चार्ट: 4 ऐक्शनों पर पॉलिसी. दो ऐक्शनों पर बराबर प्रायिकता, बाकी 0; एंट्रॉपी 1 बिट.

तीन में तीसरा बार चार्ट: सारी प्रायिकता एक ही ऐक्शन पर (1); एंट्रॉपी 0 बिट.

Python में Deep Reinforcement Learning

एंट्रॉपी बोनस लागू करना

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 में होती है; bits के लिए math.log(2) से भाग दें
Python में Deep Reinforcement Learning

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
Python में Deep Reinforcement Learning

बैच अपडेट्स के साथ PPO की ओर

 

  • हर स्टेप पर अपडेट करना: PPO ऑब्जेक्टिव का पूरा लाभ नहीं लेता
  • हर स्टेप पर $\theta$, वास्तव में $\theta_{old}$ के बराबर होता है.
  • पूरी PPO इम्प्लीमेंटेशन यह अलग करती हैं:
    • पैरामीटर अपडेट्स (मिनिबैच)
    • पॉलिसी अपडेट्स (रोलआउट्स)
Python में Deep Reinforcement Learning

अभ्यास करते हैं!

Python में Deep Reinforcement Learning

Preparing Video For Download...