Oppikaa tekoälyä Pythonilla · Oppitunti

Proximal Policy Optimization (PPO)

Leikattu surrogate-tavoite, GAE-advantagen estimointi, PPO stable-baselines3:lla.

Oppitunti 3/413 vaihetta

Proximal Policy Optimization (PPO) on ilmainen Oppikaa tekoälyä Pythonilla-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Oppikaa tekoälyä Pythonilla-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Oppikaa tekoälyä Pythonilla-kurssilla on yhteensä 4 oppituntia.

Miksi PPO?

PPO on nykyisin RL:n oletusalgoritmi: vakaa, otoksia tehokkaasti hyödyntävä ja helposti viritettävä. Se korjaa policy-gradient-menetelmien keskeisen ongelman, liian suuret päivitykset, jotka tuhoavat policyn, rajoittamalla sitä, kuinka paljon policy voi muuttua yhden päivityksen aikana.

Suurten päivitysten vaara

Yksi liian suuri policyn päivitys voi romahduttaa suorituskyvyn, ja koska RL on on-policy, palautuminen on vaikeaa. PPO pitää jokaisen päivityksen lähellä nykyistä policyä, jotta toiminta säilyy turvallisena.

Todennäköisyyksien suhde

PPO seuraa uusien ja vanhojen toimintotodennäköisyyksien suhdetta: ratio = pi_new(a|s) / pi_old(a|s). Ykköstä lähellä oleva suhde tarkoittaa, että policy muuttui vain vähän; ykkösestä kaukana oleva suhde tarkoittaa suurta muutosta.

ratio = torch.exp(new_log_prob - old_log_prob)

Clipped-tavoite

PPO:n tunnusomainen piirre on clipped surrogate -tavoite. Se kertoo suhteen ja advantagen tulon, mutta rajoittaa suhteen välille [1-eps, 1+eps], jolloin policyn siirtämiseen liian kauas ei ole kannustinta.

clipped = torch.clamp(ratio, 1 - eps, 1 + eps)
objective = torch.min(ratio * adv, clipped * adv)
loss = -objective.mean()

Clip-kynnys epsilon

eps (tyypillisesti 0.2) on clip-kynnys. Se rajoittaa, kuinka kauas suhde voi siirtyä ykkösestä, joten vaikka advantage olisi suuri, policyn päivitys pysyy rajattuna ja vakaana.

eps = 0.2  # allow at most +/-20% change in probability

Miksi min() ja clipping toimivat

Clipatun ja clipaamattoman tavoitteen min-arvon käyttäminen tekee rajasta pessimistisen: clip-rajan ylittävät parannukset eivät tuota lisähyötyä, joten optimoijalla ei ole syytä mennä yli rajan.

Generalisoitu advantagen estimointi

PPO estimoi advantaget GAE:n avulla. GAE yhdistää usean askeleen tuotot parametrien gamma ja lambda avulla. Se tasapainottaa harhaa ja varianssia tuottaakseen tasaisia ja luotettavia advantage-estimaatteja.

def gae(rewards, values, gamma=0.99, lam=0.95):
    adv, gae_acc = [], 0
    for t in reversed(range(len(rewards))):
        delta = rewards[t] + gamma * values[t+1] - values[t]
        gae_acc = delta + gamma * lam * gae_acc
        adv.insert(0, gae_acc)
    return adv

Useita epoheja batchia kohti

Toisin kuin REINFORCE, PPO käyttää jokaista kerättyä databatchia uudelleen useiden optimointiepochien ajan. Clipping tekee tämän turvalliseksi ja parantaa otostehokkuutta huomattavasti.

for _ in range(n_epochs):
    # recompute ratio and clipped loss on the same batch
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

PPO Stable-Baselines3:n avulla

Käytännössä PPO:ta tarvitsee harvoin koodata itse. Stable-Baselines3 tarjoaa testatun toteutuksen. Luokaa se policy-tyypin, ympäristön ja verbosity-asetuksen avulla ja kutsukaa sitten learn-metodia.

from stable_baselines3 import PPO

model = PPO("MlpPolicy", env, verbose=1)
model.learn(total_timesteps=100_000)

Koulutetun agentin käyttäminen

Koulutuksen jälkeen voitte käyttää predict-metodia toimintojen hakemiseen uusille havainnoille. Asettakaa deterministic=True arviointia varten, jotta valitaan todennäköisin toiminto otannan sijaan.

obs, _ = env.reset()
action, _ = model.predict(obs, deterministic=True)
model.save("ppo_agent")

Miksi PPO hallitsee

PPO yhdistää vakaat clipped-päivitykset, GAE-advantaget ja datan uudelleenkäytön vankaksi ja yleiskäyttöiseksi algoritmiksi, joka toimii monissa tehtävissä vähäisellä virittämisellä. Siksi sitä käytetään kaikkeen robotiikasta RLHF:ään.

Pikatesti

Testatkaa, miten hyvin ymmärrätte PPO:ta.

Kertaus: PPO

Opitte PPO:n clipped surrogate -tavoitteen, joka käyttää todennäköisyyksien suhdetta ja clip-kynnystä eps päivitysten rajoittamiseen, GAE:n advantagen estimointiin sekä datan uudelleenkäytön useiden epochien aikana. Ajoitte sen helposti Stable-Baselines3:ssa komennolla PPO("MlpPolicy", env, verbose=1).

Aloita maksutta

Opi Python tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
53
Oppitunnit
225

Usein kysytyt kysymykset

Onko oppitunti ”Proximal Policy Optimization (PPO)” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Oppikaa tekoälyä Pythonilla-oppimispolun 3 oppituntia, myös oppitunnin “Proximal Policy Optimization (PPO)”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppikaa tekoälyä Pythonilla-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Proximal Policy Optimization (PPO)”?

Leikattu surrogate-tavoite, GAE-advantagen estimointi, PPO stable-baselines3:lla. Harjoittelet Oppikaa tekoälyä Pythonilla-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Oppikaa tekoälyä Pythonilla-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Oppikaa tekoälyä Pythonilla-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Proximal Policy Optimization (PPO)”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Oppikaa tekoälyä Pythonilla-oppitunnilla?

Kyllä. Jokainen Oppikaa tekoälyä Pythonilla-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Policy gradient -menetelmät: REINFORCE
  2. Actor–critic-menetelmät (A2C)
  3. Proximal Policy Optimization (PPO)
  4. Mukautetut Gymnasium-ympäristöt
← Takaisin: Oppikaa tekoälyä Pythonilla