Errefortzu bidezko ikaskuntzari sarrera. 3. zatia: Q-learning sare neuronalekin, DQN algoritmoa.
Bigarren zatian ikusi genuen Q-Learning algoritmoak oso ondo funtzionatzen duela ingurunea sinplea denean eta Q(s, a) funtzioa balioen taula edo matrize gisa adieraz daitekenean. Baina milaka milioi estatu ezberdin eta ehunka ekintza ezberdin daudenean, taula hori handiegia da, eta ez da bideragarria taula erabiltzea. Horregatik, Deep Q-Network edo DQN algoritmoa asmatu zuten (Mnih et al.) [1]. Algoritmo horrek Q-learning algoritmoa sare neuronal sakonekin (Deep Neural Networks) elkartzen du. Adimen artifizialaren esparruan ezaguna den moduan, sare neuronalak funtzio ez-linealak hurbiltzeko tresna zoragarriak dira. Beraz, sare neuronal bat erabiltzen du Q funtzioa hurbiltzeko, taula erraldoia erabiltzea saihestuz. Egia esan, bi sare neuronal erabiltzen ditu ikasketa prozesua egonkortzeko. Lehenengoa, sare neuronal nagusia (main Neural Network), θ parametroez osatutakoa, s egoeraren eta a ekintzen Q baloreak kalkulatzeko erabiltzen da: Q(s, a; θ). Bigarrenak, sare neuronal helburuak (target NN), θ´ parametroez osatua, sare nagusiak duen arkitektura bera izango du, baina hurrengo egoeraren s´ eta hurrengo ekintzaren a´ Q-baloreak hurbiltzeko erabiliko da. Ikasketa prozesua sare nagusian gertatzen da beti, ez sare helburuan. Helburu sarea izoztu egiten da (bere parametroak ez dira aldatzen) zenbait iteraziotan (normalean 10000 inguru), eta ondoren sare nagusiaren parametroak helburu-sarera kopiatzen dira, horrela ikaskuntza batetik bestera transmitituz. Ondorioz, helburu sareak kalkulatutako estimazioak zehatzago bihurtuko dira.
Bellmanen ekuazioa DQN algoritmoan
Bellmanen ekuazioak itxura hau du orain. Sare neuronal bat entrenatu ahal izateko, galera edo kostu funtzio bat behar dugu (loss or cost function). Bellmanen ekuazioaren bi aldeen arteko diferentziaren karratua bezala definituko dugu galera funtzioa:
Beraz, funtzio hori minimizatuko dugu gradienteen jaitsieraren algoritmoa erabiliz (gradient descent). Hau automatikoki diferentziatu eta optimizatu ahalko dugu ikaskuntza automatikoko (machine learning / deep learning) liburutegi bat erabiliz, TensorFlow edo PyTorch hala nola.
Kodea, CartPole ingurunea ebazten TensorFlow erabiliz
Zuk zeuk exekuta dezakezu TensorFlow kodea urratsez urrats esteka honetan, (edo PyTorch bertsioa esteka honetan), edo jarrai ezazu irakurtzen kodea eta azalpena ikusteko exekutatu behar izan gabe. Atal honetan kodea aurrekoetan baino luzeagoa denez, zati garrantzitsuenak bakarrik erakutsiko ditut jarraian. Goiko estekan kode osoa dago ikusgai.
Hemen dugu CartPole bezala ezagutzen den ingurunea. OpenAI Gym paketea erabili dut ingurune hori bistaratu eta exekutatzeko. Ingurune horretan, gurdia eskuin eta ezker aldera mugitzea da helburua, makila orekan mantentzeko asmoz. Eta makila ardatz bertikalarekiko 15 gradu baino gehiago okertzen bada, ibilbidea amaitu egiten da eta berriro hasi beharko dugu. Zenbat eta denbora luzeagoz mantendu makila orekan, orduan eta sari handiagoa jasoko du agenteak.
DQN algoritmoa inplementatzeko, bi sare neuronalak sortzen hasiko gara, nagusia (main_nn) eta helburua (target_nn). Azken hori nagusiaren kopia bat izango da, baina bere parametro propioekin. Optimizatzaile (optimizer) bat eta galera funtzio (loss function) bat ere beharko ditugu.
Buffer bat ere sortuko dugu, non jasotako esperientzia gordeko dugun, gero sare neuronala entrenatzeko.
Hainbat funtzio osagarri ere sortuko ditugu, bat ε-jale politika inplementatzeko, eta bestea sare neuronal nagusia entrenatzeko, buffer-ean gordetako datuak erabiliz.
Ondoren, hiperparametroak definitu eta algoritmoa entrenatzen hasiko gara. Lehendabizi, ε-jale politika erabiliko dugu, jokoa (ingurunea) jolasteko eta datuak biltzeko, gero datu horietatik ikasi ahal izateko. Ibilbide bat amaitu ondoren, sare neuronala entrenatzen duen funtzioa exekutatuko dugu. 2000 urratsero sare neuronal nagusiaren pisuak helburu sarera kopiatuko ditugu. Epsilon (ε) balioa ere jaisten joango gara, esplorazio balio altu batekin hasteko eta gutxika jaisten joango gara. Hala, datuak bildu eta agentea entrenatzearen artean txandakatuko dugu. Pixkanaka, algoritmoa ikasten dabilela ikusiko dugu, eta ingurunea jokatuz lortutako saria pixkanaka hobetuz joango da ondorioz.
Hau izango da ikusiko dugun emaitza:
Episode 0/1000. Epsilon: 0.99. Reward in last 100 episodes: 14.0 Episode 50/1000. Epsilon: 0.94. Reward in last 100 episodes: 22.2 Episode 100/1000. Epsilon: 0.89. Reward in last 100 episodes: 23.3 Episode 150/1000. Epsilon: 0.84. Reward in last 100 episodes: 23.4 Episode 200/1000. Epsilon: 0.79. Reward in last 100 episodes: 24.9 Episode 250/1000. Epsilon: 0.74. Reward in last 100 episodes: 30.4 Episode 300/1000. Epsilon: 0.69. Reward in last 100 episodes: 38.4 Episode 350/1000. Epsilon: 0.64. Reward in last 100 episodes: 51.4 Episode 400/1000. Epsilon: 0.59. Reward in last 100 episodes: 68.2 Episode 450/1000. Epsilon: 0.54. Reward in last 100 episodes: 82.4 Episode 500/1000. Epsilon: 0.49. Reward in last 100 episodes: 102.1 Episode 550/1000. Epsilon: 0.44. Reward in last 100 episodes: 129.7 Episode 600/1000. Epsilon: 0.39. Reward in last 100 episodes: 151.7 Episode 650/1000. Epsilon: 0.34. Reward in last 100 episodes: 173.0 Episode 700/1000. Epsilon: 0.29. Reward in last 100 episodes: 187.3 Episode 750/1000. Epsilon: 0.24. Reward in last 100 episodes: 190.9 Episode 800/1000. Epsilon: 0.19. Reward in last 100 episodes: 194.6 Episode 850/1000. Epsilon: 0.14. Reward in last 100 episodes: 195.9 Episode 900/1000. Epsilon: 0.09. Reward in last 100 episodes: 197.9 Episode 950/1000. Epsilon: 0.05. Reward in last 100 episodes: 200.0 Episode 1000/1000. Epsilon: 0.05. Reward in last 100 episodes: 200.0
Beraz, agenteak ikasi du ahalik eta sari handiena jasotzen CartPole ingurunearentzat. Orain beste behin exekutatuko dugu agentea ingurunean eta emaitzaren bideoa ikusi ahal izango dugu.
Zuk zeuk exekuta dezakezu TensorFlow kodea urratsez urrats esteka honetan, (edo PyTorch bertsioa esteka honetan)
Erreferentziak:
Sutton, R. S., & Barto, A. G. (2018). Reinforcement learning: An introduction. MIT press.
Errefortzu bidezko ikaskuntzari sarrera, serie osoa:
- zatia: beso anitzeko bidelapurraren problema
- zatia: Q-Learning
- zatia: Q-learning sare neuronalekin, DQN algoritmoa
- zatia: Double DQN eta Dueling DQN