K-oppiminen: Kaikki mitä sinun tarvitsee tietää vahvistusoppimisesta



Tämä artikkeli tarjoaa yksityiskohtaisen ja kattavan tiedon Q-oppimisesta kauniin analogian avulla Vahvistusoppiminen Python-koodin kautta.

ja ovat muutamia verkkotunnuksia, jotka ovat alan suosituimpien tunnussanojen joukossa ja hyvästä syystä. Tekoäly aikoo luoda 2,3 miljoonaa työpaikkaa vuoteen 2020 mennessä, kun otetaan huomioon, että sen päätavoitteena on antaa koneiden jäljitellä ihmisten käyttäytymistä. Outo, eikö olekin? Joten tänään keskustelemme Q-oppimisesta, vahvistusoppimisen rakennusaineesta seuraavassa järjestyksessä:

Mikä on vahvistusoppiminen?

Katsotaanpa meidän päivittäistä elämäämme. Suoritamme lukuisia tehtäviä ympäristössä, ja jotkut niistä tuovat meille hyötyä, kun taas toiset eivät. Etsimme jatkuvasti erilaisia ​​polkuja ja yritämme selvittää, mikä tie johtaa palkintoihin, ja parannamme toimintamme perusteella strategiamme tavoitteiden saavuttamiseksi. Tämä ystäväni ovat yksi yksinkertaistetuimmista analogeista vahvistamisen oppimisesta.





Tärkeimmät kiinnostuksen kohteet:

  • Ympäristö
  • Toiminta
  • Palkinto
  • Osavaltio

vahvistava oppiminen - q-oppiminen



Vahvistusoppiminen on koneoppimisen haara, jonka avulla järjestelmät voivat oppia omien päätöstensä tuloksista. Se ratkaisee tietyntyyppisen ongelman, jossa päätöksenteko on peräkkäistä ja tavoite on pitkäaikainen.

Q-oppimisprosessi

Ymmärretään, mitä Q-oppiminen on, tässä ongelmalausekkeellamme. Se auttaa meitä määrittelemään vahvistavan oppimisratkaisun pääkomponentit, eli agentit, ympäristö, toimet, palkkiot ja tilat.

Autotehtaan analogia:



Olemme robotteilla täytetyssä autotehtaassa. Nämä robotit auttavat tehtaan työntekijöitä välittämällä tarvittavat osat auton kokoamiseksi. Nämä eri osat sijaitsevat tehtaan eri paikoissa 9 asemalla. Osat sisältävät alustan, pyörät, kojelaudan, moottorin ja niin edelleen. Factory Master on asettanut etusijalle sijainnin, johon runko asennetaan. Katsotaanpa asetuksia täällä:

Osavaltiot:

Paikkaa, jossa robotti on tietyssä instanssissa, kutsutaan sen tilaksi. Koska se on helppo koodata sen sijaan, että muistat sen nimillä. Kartoitetaan sijainti numeroihin.

Toiminnot:

Toiminnot eivät ole muuta kuin robottien liikkeet mihin tahansa paikkaan. Harkitse, että robotti on L2-paikassa ja suorat sijainnit, joihin se voi liikkua, ovat L5, L1 ja L3. Ymmärretään tämä paremmin, jos visualisoimme tämän:

Palkinnot:

Robotille annetaan palkkio siitä, että hän menee suoraan tilasta toiseen. Voit esimerkiksi saavuttaa L5: n suoraan L2: sta ja päinvastoin. Joten palkkio 1 annetaan kummassakin tapauksessa. Katsotaanpa palkintotaulukkoa:

dynaaminen muistin allokointi c ++: ssa

Muista, kun Factory Master priorisoi alustan sijainnin. Se oli L7, joten aiomme sisällyttää tämän tosiasian palkintotaulukkoomme. Joten osoitamme erittäin suuren määrän (tapauksessamme 999) sijaintiin (L7, L7).

Bellman-yhtälö

Oletetaan nyt, että robotin on mentävä pisteestä A paikkaan B. Se valitsee polun, joka tuottaa positiivisen palkkion. Oletetaan tällöin, että tarjoamme palkkion jalanjäljinä sen seuraamiseksi.

Mutta entä jos robotti alkaa jostain siltä väliltä, ​​josta se voi nähdä kaksi tai useampaa polkua. Robotti ei siten voi tehdä päätöstä, ja tämä tapahtuu ensisijaisesti siksi, että sillä ei ole a muisti . Tässä tulee Bellman-yhtälö kuvaan.

V (s) = max (R (s, a) + & # 120632V (s ’))

Missä:

  • s = tietty tila
  • a = toiminta
  • s '= tila, johon robotti siirtyy s: stä
  • & # 120632 = alennuskerroin
  • R (s, a) = palkkio-funktio, joka ottaa tilan (tilat) ja toiminnan (a) ja tuottaa palkkion arvon
  • V (s) = tietyssä tilassa olemisen arvo

Nyt kohteen alla olevalla lohkolla on palkinto 1, mikä on korkein palkkio. Mutta entä toinen lohko? No, tästä tulee alennuskerroin. Oletetaan, että alennuskerroin on 0,9 ja täytetään kaikki lohkot yksitellen.

Markovin päätöksentekoprosessi

Kuvittele, että robotti on oranssissa lohkossa ja sen on päästävä määränpäähän. Mutta vaikka onkin pieni toimintahäiriö, robotti hämmentyy siitä, kumpi polku kulkee sen sijaan, että menisi ylös.

Joten meidän on muutettava päätöksentekoprosessia. Sen täytyy Osittain satunnainen ja Osittain robotin hallinnassa . Osittain satunnainen, koska emme tiedä, milloin robotti ei toimi, ja osittain hallinnassa, koska se on edelleen robotin päätös. Ja tämä muodostaa perustan Markovin päätöksentekoprosessille.

Markov-päätöksentekoprosessi (MDP) on erillinen aikastokastinen ohjausprosessi. Se tarjoaa matemaattisen kehyksen päätöksenteon mallintamiseen tilanteissa, joissa tulokset ovat osittain satunnaisia ​​ja osittain päättäjän valvonnassa.

Joten aiomme käyttää alkuperäistä Bellman-yhtälöä ja tehdä siihen muutoksia. Mitä emme tiedä, on seuraava tila eli. s ’. Tiedämme kaikki käännöksen mahdollisuudet ja muuttakaamme yhtälöä.

V (s) = max (R (s, a) + & # 120632 V (s ’))

V (s) = max (R (s, a) + & # 120632) & Sigmas ’P (s, a, s ’) V (s))

P (s, a, s ’): Todennäköisyys siirtyä tilasta s että s ’ toiminnalla että

java-ero työvälineiden ja laajennusten välillä

& Sigmas ’P (s, a, s ’) V (s): Robotin satunnaisuusodotukset

V (s) = max (R (s, a) + & # 120632 ((0,8 V (huoneylös)) + (0,1 V (huonealas) +….))

Siirrytään nyt Q-oppimiseen. Q-Learning tarjoaa ajatuksen arvioida toiminnan laatu, joka tehdään siirtyäkseen tilaan sen sijaan, että määritettäisiin sen tilan mahdollinen arvo, johon se siirtyy.

Tämän saamme, jos sisällytämme ajatuksen arvioida toimien laatua siirtyessä tiettyyn valtioon. Päivitetystä Bellman-yhtälöstä, jos poistamme ne enint komponentti, oletamme vain yhden jalanjäljen mahdolliselle toiminnalle, joka ei ole muuta kuin Laatu toiminnasta.

Q (s, a) = (R (s, a) + & # 120632) & Sigmas ’P (s, a, s ’) V (s))

Tässä yhtälössä, joka mittaa toiminnan laatua, voidaan olettaa, että V (s) on suurin mahdollinen Q (s, a) -arvo. Korvataan siis v (s) funktiolla Q ().

Q (s, a) = (R (s, a) + & # 120632) & Sigmas ’P (s, a, s ’) max Q (s ’, a’))

Olemme vain yksi askel lähellä Q-oppimisen lopullista yhtälöä. Aiomme esitellä a Ajallinen ero laskea Q-arvot suhteessa ympäristön muutoksiin ajan myötä. Mutta miten voimme tarkkailla Q: n muutosta?

TD (s, a) = (R (s, a) + & # 120632) & Sigmas ’P (s, a, s ’) max Q (s ’, a’)) - Q (s, a)

Laskemme uudet Q (s, a) uudelleen samalla kaavalla ja vähennämme siitä aiemmin tunnetut Q (s, a). Joten yllä olevasta yhtälöstä tulee:

Qt(s, a) = Qt-1(s, a) + a TDt(s, a)

Qt(s, a) = Nykyinen Q-arvo

Qt-1(s, a) = Edellinen Q-arvo

Qt(s, a) = Qt-1(s, a) + α (R (s, a) + & # 120632 max Q (s ’, a’)-Qt-1(s, a))

Q-oppimisesittely: NumPy

Aion käyttää NumPy osoittaa, kuinka Q-oppiminen toimii.

Vaihe 1: Tuonti, parametrit, tilat, toiminnot ja palkkiot

tuo numero niin kuin np gamma = 0,75 # Alennuskerroin alfa = 0,9 # Oppimisnopeus location_to_state = {'L1': 0, 'L2': 1, 'L3': 2, 'L4': 3, 'L5': 4, ' L6 ': 5,' L7 ': 6,' L8 ': 7,' L9 ': 8} toimet = [0,1,2,3,4,5,6,7,8] palkkiot = np.array ( [[0,1,0,0,0,0,0,0,0], [1,0,1,0,0,0,0,0,0,0], [0,1,0,0, 0,1,0,0,0], [0,0,0,0,0,0,1,0,0], [0,1,0,0,0,0,0,1,0] , [0,0,1,0,0,0,0,0,0], [0,0,0,1,0,0,0,1,0], [0,0,0,0, 1,0,1,0,1], [0,0,0,0,0,0,0,1,0]])

Vaihe 2: Kartta-indeksit paikkoihin

state_to_location = dict ((tila, sijainti) sijainnille, tila location_to_state.items ())

Vaihe 3: Hanki optimaalinen reitti Q-oppimisprosessin avulla

mikä on luokan java
def get_optimaalinen reitti (aloituspaikka, loppupaikan sijainti): palkkio_uusi = np.copy (palkkiot) end_state = sijainti_kohde_kohde [end_lokointi] palkkio_uusi [loppuasema, loppuasemat] = 999 Q = np.kohde (np.zeros ([9,9])) # Q- Oppimisprosessi alueella i (1000): # Satunnaisen tilan noutaminen current_state = np.random.randint (0,9) # Python sulkee pois ylärajan playable_actions = [] # Toistetaan uuden palkkimatriisin kautta alueella j ( 9): if rewards_new [current_state, j]> 0: playable_actions.append (j) # Valitse satunnainen toiminto, joka johtaa meidät seuraavaan tilaan next_state = np.random.choice (playable_actions) # Ajallisen eron laskeminen TD = rewards_new [current_state , seuraava asema] + gamma * Q [seuraava asema, np.argmax (Q [seuraava asema,])] - Q [nykyinen asema, seuraava asema] # Q-arvon päivittäminen Bellman-yhtälöllä Q [current_state, next_state] + = alfa * TD # Alusta optimaalinen reitti lähtöpaikalla reitti = [lähtö_sijainti] # Alusta seuraava_sijainti lähtöpaikalla seuraava_sijainti = tähti t_location # Emme tiedä lopulliseen sijaintiin tarvittavien iteraatioiden tarkkaa lukumäärää, joten silmukka on hyvä valinta iteroinnille samalla kun (next_location! = end_location): # Hae alkutila start_state = location_to_state [start_location] # Hae korkein lähtötilaan liittyvä Q-arvo next_state = np.argmax (Q [start_state,]) # Saimme seuraavan tilan indeksin. Mutta tarvitsemme vastaavan kirjeen. next_location = state_to_location [next_state] route.append (next_location) # Päivitä seuraavan iteroinnin lähtöpaikka start_location = seuraava_location paluureitti

Vaihe 4: Tulosta reitti

tulosta (get_optimal_route ('L1', 'L9'))

Tuotos:

Tämän myötä olemme päässeet Q-oppimisen loppuun. Toivon, että sait tietää Q-oppimisen toiminnasta sekä erilaisista riippuvuuksista, kuten ajallisesta erosta, Bellman-yhtälöstä ja muusta.

Edurekan saa sinut hallitsemaan tekniikoita, kuten valvottu oppiminen, valvomaton oppiminen ja luonnollisen kielen käsittely. Se sisältää koulutuksen uusimmista kehityksistä ja teknisistä lähestymistavoista tekoälyyn ja koneoppimiseen, kuten syväoppiminen, graafiset mallit ja vahvistusoppiminen.