-

Hoe doen computers slimme dingen? Zo werkt reïnforcement leren

Supervised en unsupervised leren zijn erg nuttig, maar we gaan er dan wel telkens vanuit dat er voldoende data beschikbaar zijn: wat doen we als dat niet zo is? Kunnen we computers dan ook leren zelf data te verzamelen? En, welke data zijn dan interessant? Deze vragen zijn het domein van het zogenaamde reïnforcement leren.

In een poging om de zin van de onzin te scheiden op het gebied van Machine Learning, Data Science en AI – de naam doet er eigenlijk niet zoveel toe – schrijft Maurits Kaptein een serie van zes artikelen over “hoe computers slimme dingen doen”. Het eerste artikel liet zien hoe computers, door middel van een goed idee, een (wiskundige) formalisatie, en daarna optimalisatie, een leuke film voor vanavond kunnen aanraden. Het tweede artikel en het derde artikel lieten samen zien hoe computers leren van voorbeelden (supervised leren). In het vierde artikel bekeken we hoe computers data kunnen samenvatten (unsupervised leren).

Stap 4: Reinforcement leren

Stel, je staat voor een gokkast en je hebt duizend muntjes ter beschikking. Eén voor één kun je een muntje in de gokkast gooien en daarna op een van de twee knoppen voorop de gokkast drukken. Je gooit een muntje in de gokkast, drukt op knop A of op knop B, en ziet de uitkomst. Als je die ronde geluk hebt krijg je tien punten, als je pech hebt krijg je er geen. Je denkt dat een van de twee knoppen vaker uitbetaald: de kans dat je punten krijgt nadat je op die ene knop duwt is hoger dan wanneer je op de andere knop duwt. Je weet echter niet welke knop het best is. Het is uiteindelijk jouw doel om — gegeven de 1000 rondes die je kunt spelen — zoveel mogelijk punten te verzamelen. Hoe los je dit op?

Dit gokkast probleem klinkt wellicht niet super interessant, maar het is een goede basis om na te denken over de manier waarop we computers zelf kunnen leren data te verzamelen als er nog geen data beschikbaar is. Daarbij klinkt het probleem al een stuk interessanter wanneer we het zo verwoorden:

Stel, je bent een arts en je staat op het punt duizend patiënten te behandelen. Eén voor één kun je een je spreekkamer inroepen en daarna een van twee medicijnen voorschrijven. Je roept een patiënt, schrijft medicijn A of B voor, en je ziet direct of de patiënt beter wordt. Als de patiënt beter wordt krijg je tien punten, als de patiënt niet beter wordt krijg je er geen. Je denkt dat een van de twee medicijnen beter is: de kans dat de patiënt beter wordt krijgt nadat je dat medicijn voorschrijft is hoger dan wanneer je het andere medicijn voorschrijft. Je weet echter niet welke medicijn het best is. Het is uiteindelijk jouw doel om — gegeven de duizend patiënten die je kunt behandelen — zoveel mogelijk mensen beter te maken. Hoe los je dit op?

Als we data ter beschikking hebben dan is dit een vrij makkelijk probleem: als we al honderden observaties hebben van keuzes (A of B) en hun uitkomsten, dan kunnen we simpelweg een supervised leren model gebruiken om de input (A of B) aan de output (het aantal punten) te linken (zie ook het tweede artikel en het derde artikel in deze reeks). Als we dit model eenmaal hebben dan geven we het model zowel A als B als input en kijken voor welke input de voorspelde output het hoogst is. Simpel.

Maar, wat als er geen data is? Dan lijkt er weinig anders op te zitten dan uit te proberen: we moeten keuzes (A of B) gaan maken om te leren hoeveel punten deze keuzes opleveren. Natuurlijk zouden we gewoon willekeurig een keuze kunnen maken, en die keuze 1000 keer kunnen herhalen: iedere patiënt krijgt medicijn A. Dit is waarschijnlijk niet de beste strategie. We zouden echter ook bij de eerste 100 patiënten random een keuze kunnen maken: we gooien een muntje op en als het kop is kiezen we voor A, als het munt is kiezen we voor B. Na deze 100 keer gooien hebben we data, en we kunnen dan een supervised leren model gebruiken om te leren welke keuze het beste is gegeven deze data. Deze keuze kunnen we dan maken voor de overgebleven 900 patiënten. Dit is al een betere strategie.

Maar, waarom gebruiken we 100 rondes (of patiënten) om data te verzamelen, om daarna die kennis te gebruiken bij de volgende 900 rondes? We zouden toch ook 50 rondes kunnen gebruiken om data te verzamelen? Of 500?

Dit probleem is de kern van het interactief leren: wanneer we computers interactief laten leren dan combineert de computer supervised leren (het linken van input aan output, in dit geval van onze keuzes A of B met het aantal punten), met een effectieve strategie om nieuwe data te verzamelen. Sommige strategieën zijn logischerwijs niet zo heel goed: als ik maar 2 rondes een random keuze maak om data te verzamelen, dan is de kans vrij groot dat ik op basis van deze data niet goed kan leren of A beter is dan B. Er is waarschijnlijk meer data nodig. Aan de andere kant, als ik 1000 rondes een random keuze maak om data te verzamelen — dus bij alle 1000 patiënten een muntje opgooi om te bepalen welk medicijn ze krijgen — dan weet ik daarna weliswaar goed of A beter is dan B, maar dan heb ik deze kennis nooit gebruikt: ik heb de helft van de patiënten met het slechte medicijn behandeld. Een goede strategie weegt het verzamelen van nieuwe data, het uitproberen, af tegen het gebruiken van de kennis die tot dan toe verzameld is.

Net zoals het simpele huizenprijzen probleem in artikel twee was uit te breiden to instressante supervised leren problemen is ook het simpele 2-keuze (A vs. B) probleem uit te breiden tot veel interessantere problemen. Ten eerste kunnen we het aantal keuzes vergroten: we kiezen niet tussen A en B, maar tussen mogelijk honderden verschillende opties. Daarnaast kunnen we ook een zogenaamde “context” toevoegen: wat als we telkens voordat we een keuze maken we wat extra informatie krijgen, zoals bijvoorbeeld het geslacht of de leeftijd van de patiënt? Ook in dat geval bestaat het probleem uit het maken van een goed supervised leren model, dit keer om de relatie tussen geslacht, leeftijd, en het medicijn te linken aan de uitkomst, en een effectieve strategie om nieuwe data te verzamelen. Sterker nog, het probleem is nog verder uit te breiden: wat als we niet 1 keuze maken per ronde, maar meerdere? Dit is bijvoorbeeld relevant wanneer we een computer een spelletje schaak willen leren spelen. Bij schaak kiest de computer een hele reeks van zetten achter elkaar, en ziet daarna pas de uitkomst. Als er heel veel data beschikbaar was met allerlei verschillende zetten en de daarbij behorende uitkomsten, dan zouden we middels supervised leren een computer kunnen leren schaken. Maar, in werkelijkheid is daar niet voldoende data voor, en moet de computer zelf kiezen welke data zij wil verzamelen: de computer moet kiezen welke zet moet worden uitgeprobeerd.

Het is verassend dat bij al deze problemen dezelfde, vrij simpele, strategie erg effectief is. Eerst uitproberen voor 100 rondes en dan een definitieve keuze maken voor de volgende 900 blijkt niet de beste strategie. Een betere strategie is als volgt: als we geen kennis hebben, dus geen idee hebben welke keuze het best is, dan maken we een random keuze. Als de keuze punten oplevert, dan verhogen we de kans dat we diezelfde keuze nog eens maken. Als de keuze geen punten oplevert dan verlagen we de kans. Deze kansen gebruiken we in de volgende ronde. Hoe je dit precies uitrekent gaat wat te ver voor deze serie (maar is goed te doen voor zeer complexe modellen, zie hier). Het komt erop neer dat we keuzes waarvan we op basis van een supervised leren model — dat we telkens updaten met de nieuwste data — denken dat ze goed zijn steeds vaker maken, terwijl we keuzes waarvan we denken dat ze slecht zijn steeds minder vaak gaan maken. Deze effectieve strategie mixt dus constant het uitproberen met het gebruiken van de tot nu toe verzamelede kennis.

Reïnforcement leren is een effectieve manier om computers te leren keuzes te maken waarbij de uitkomsten van deze keuzes niet op voorhand bekend zijn. Dit komt veel voor: een computer kiest een advertentie voor een bezoeker van een website of een computer kiest de dosering van een medicijn. Sterker nog, zelfs het op de weg houden van een elektrische auto is een keuzeprobleem: telkens moet de computer kiezen om, gegeven de huidige positie van de auto (de context) het stuur stil te houden of juist naar links of naar rechts te bewegen. In al deze situaties is het onmogelijk om doormiddel van vaste regels een computer een goede keuze te laten maken nog is er genoeg data beschikbaar voor supervised leren. De computer moet dus zelf gaan uitproberen welke keuze het best is.

Reïnforcement leren, de combinatie van supervised leren en gericht data verzamelen, is een van de meest interessante toepassingen van machine learning (of AI, wat je wilt). En we zijn al best ver: een computer leren om een computerspelletje te spelen is basiskennis van de gemiddelde data scientist. Maar, er zijn ook nog veel open vragen: we kunnen reïnforcement leren op dit moment eigenlijk alleen als we de context, en alle mogelijke keuzes, goed kunnen omschrijven, makkelijk kunnen uitproberen, en vrij snel de uitkomst kunnen observeren. Dat is jammer genoeg lang niet altijd waar, en er zijn dan ook vrij veel toepassingen waar het lastig is om deze methode effectief toe te passen.

Ik ben me ervan bewust dat ik met het beschrijven van reïnforcement leren als “supervised leren + data verzameling” maar het topje van de ijsberg heb beschreven. In het boek “Hallo Wereld” leg ik reïnforcement leren wat verder uit, en beschrijf ik meer detail hoe deze methode van leren wordt gebruikt om zelfrijdende auto’s op de weg te houden. Echter, in mijn ogen is “supervised leren + data verzameling” wel het belangrijkste idee: in veel gevallen hebben we nog geen, of niet voldoende data en is data verzameling kostbaar. Het is dan essentieel om een goede strategie te hebben voor de verzameling van nieuwe data.  

Supervised, unsupervised, en reïnforcement leren zijn momenteel grofweg de drie manieren waarop computers dingen kunnen leren. Daar kunnen we veel mooie dingen mee doen, maar er is ook veel wat we nog niet kunnen: in het laatste artikel bespreek ik wat computers nog niet kunnen leren.

Deel dit bericht

Plaats een reactie

Uw e-mailadres wordt niet op de site getoond