woensdag 11 mei 2016

Reenforcement learning revisited.

Door de successen van DeepMind met het automatisch leren van Atari spelen maar meer nog de overwinning op de wereld speler GO onlangs is re-enforcementlearning een zeer interessante machinelearning tak geworden. Er is een aardige website waar e.e.a. is beschreven. Eens kijken of we daar ook iets mee kunnen.  Dat loopt samen met de wens om een robotarm aan proberen te sturen met DL. Als simulatie daarvan heb ik een virtuele robotarm in twee delen gemaakt die een steeds wisselend target moet gaan grijpen (gele stip). Het lukt al snel om de random beweging met een 'cost-functie' in de richting van het target te sturen. Nu nog met behulp van RL.  




Dit lijkt sterk op het OpenAI voorbeeld 'Reacher'.
Het beschreven Q-learning algoritme lijkt redelijk eenvoudig van structuur:















De vertaling naar het probleem met de virtuele robotarm zou als volgt kunnen zijn. Het 'replay memory' wordt gebruikt om een NN te leren. Het NN moet de winst ('r' - of verlies - we zullen hier even alleen spreken over winst) weergeven van een situatie (state - 's') en een bijbehorende actie. De totale ingeschatte winst voor de toekomstige opeenvolgende stappen bepaald 'normaal' de selectie van de volgende actie. (via de Q - quality functie) Dat is ook de reden dat de resulterende situatie (s') in het replay memory wordt vastgelegd.
De opdrachtregel "select a = argmax Q(s, a')" moet ik nog juist zien te vertalen. In principe selecteren we de actie met de hoogste toekomstige winst gegeven een status 's'. Wat a' daarin doet begrijp ik nog niet helemaal.
In een bepaald percentage (Epsilon) van de acties zullen we op 'ontdekkingstocht' gaan om mogelijk betere alternatieven te ontdekken.

Voor mijn eenvoudige model is de state gegeven door de hoek ('A' - en lengte) van de 'onderarm', de hoek ('B' - en lengte) van de 'bovenarm' en de coördinaten van het 'target'. In principe dus 4 waarden. De lengte houden we constant en blijven dus in principe buiten beschouwing.
De mogelijke acties zijn vergroten, verkleinen of gelijk houden van hoek A en/of B. Totaal 8 verschillende acties.

Mijn 'loss function' of te wel winst (r) wordt bepaald door de afstand tussen het uiteinde van de 'bovenarm' en het target. Eenvoudig te bepalen met behulp van Pythagoras. (sqrt((x1-x2)^2+ (y1-y2)^2)) Dit helpt tevens de 'terminate conditie' (of beter 'replay conditie') wanneer de afstand bijvoorbeeld kleiner is dan 2 beeldposities.

Het NN trainen we met de status (s) en de actie (a) en de geobserveerde winst (r) vanuit het 'replay memory'. De beschreven trainmethode vraagt nog wat bestudering. Ook hier lijken de toekomstige beloningsverwachtingen voor de volgende stappen meegenomen te worden om het NN te trainen.

  


Geen opmerkingen:

Een reactie posten