Q Învățare în Python: ce este, definiții [Exemple de codare]

Publicat: 2020-03-26

Învățarea prin consolidare este atunci când un agent de învățare învață să se comporte optim în funcție de mediul său prin interacțiuni constante. Agentul trece prin diverse situații, cunoscute și sub denumirea de stări. După cum ați fi ghicit, învățarea prin întărire are multe aplicații în lumea noastră. Aflați mai multe dacă sunteți interesat să aflați mai multe despre algoritmii de știință a datelor.

De asemenea, are mulți algoritmi, printre cei mai populari se numără Q learning . În acest articol, vom discuta despre ce este acest algoritm și cum funcționează.

Așa că, fără alte prelungiri, să începem.

Cuprins

Ce este Q Learning?

Învățarea Q este un algoritm de învățare prin întărire și se concentrează pe găsirea celui mai bun curs de acțiune pentru o anumită situație. Este în afara politicii deoarece acțiunile din care învață funcția de învățare Q sunt în afara politicii existente, deci nu necesită una. Se concentrează pe învățarea unei politici care îi crește recompensa totală. Este o formă simplă de învățare prin întărire care utilizează valorile de acțiune (sau valorile Q) pentru a îmbunătăți comportamentul agentului de învățare.

Învățarea Q este unul dintre cei mai populari algoritmi în învățarea prin întărire, deoarece este ușor de înțeles și implementat. „Q” în învățarea Q reprezintă calitatea. După cum am menționat mai devreme, învățarea Q se concentrează pe găsirea celei mai bune acțiuni pentru o anumită situație. Iar calitatea arată cât de utilă este o anumită acțiune și ce recompensă vă poate ajuta să ajungeți.

Definiții importante

Înainte de a începe să discutăm despre cum funcționează, ar trebui mai întâi să aruncăm o privire la câteva concepte esențiale ale învățării q. Să începem.

Q-Valori

Valorile Q sunt cunoscute și ca valori de acțiune. Ele sunt reprezentate de Q(S, A) și vă oferă o estimare a cât de bună este de a întreprinde acțiunea A în starea S. Modelul va calcula această estimare în mod iterativ utilizând regula de actualizare a diferențelor temporale pe care am discutat-o ​​mai târziu. in aceasta sectiune.

Episoade și recompense

Un agent începe dintr-o stare de început, trece prin mai multe tranziții și apoi trece de la starea actuală la următoarea în funcție de acțiunile sale și de mediul său. Ori de câte ori agentul ia măsuri, primește o recompensă. Și când nu sunt posibile tranziții, este finalizarea episodului.

TD-Update (diferență de timp)

Iată regula TD-Update sau diferența temporală:

Q(S,A) Q(S,A) + (R + Q(S',A')-Q(S,A))

Aici, S reprezintă starea curentă a agentului, în timp ce S' reprezintă starea următoare. A reprezintă acțiunea curentă, A' reprezintă următoarea cea mai bună acțiune conform estimării valorii Q, R arată recompensa curentă conform acțiunii prezente, reprezintă factorul de reducere și arată lungimea pasului.

Citește și: Condiție preliminară pentru știința datelor. Cum se schimbă în timp?

Exemplu de Q Learning Python

Cel mai bun mod de a înțelege Q învățarea Python este să vedeți un exemplu. În acest exemplu, folosim mediul de sală OpenAI și ne antrenăm modelul cu acesta. În primul rând, va trebui să instalați mediul. Puteți face acest lucru cu următoarea comandă:

pip install gym

Acum, vom importa bibliotecile de care vom avea nevoie pentru acest exemplu:

import sală

import itertools

import matplotlib

import matplotlib.style

import numpy ca np

importa panda ca pd

import sys

din colecții import defaultdict

din windy_gridworld import WindyGridworldEnv

import plotting

matplotlib.style.use('ggplot')

Fără bibliotecile necesare, nu ați putea efectua aceste operațiuni cu succes. După ce am importat bibliotecile, vom crea mediul:

env = WindyGridworldEnv()

Acum vom crea politica -greedy:

def createEpsilonGreedyPolicy(Q, epsilon, num_actions):

„””

Creează o politică epsilon-lacomă

pe o funcție Q dată și epsilon.

Returnează o funcție care preia starea

ca intrare și returnează probabilitățile

pentru fiecare acțiune sub forma unui tablou numpy

a lungimii spațiului de acțiune (set de răspunsuri posibile).

„””

def policyFunction(stare):

Action_probabilities = np.ones(num_actions,

dtype = float) * epsilon / num_actions

cea mai bună acțiune = np.argmax(Q[stare])

Probabilități_acțiune[cea mai bună acțiune] += (1,0 – epsilon)

returnează Action_probabilities

politica de returnareFunction

Iată codul pentru construirea unui model de q-learning:

def qLearning(env, num_episodes, discount_factor = 1.0,

alfa = 0,6, epsilon = 0,1):

„””

Algoritm Q-Learning: Control TD în afara politicii.

Găsește politica optimă de lăcomie în timp ce se îmbunătățește

urmând o politică epsilon-lacomă”””

# Funcția de valoare de acțiune

# Un dicționar imbricat care hărți

# stare -> (acțiune -> acțiune-valoare).

Q = defaultdict(lambda: np.zeros(env.action_space.n))

# Ține evidența statisticilor utile

stats = plotting.EpisodeStats(

episode_lengths = np.zeros(num_episodes),

episode_rewards = np.zeros(num_episodes))

# Creați o funcție de politică epsilon lacomă

# adecvat pentru spațiul de acțiune în mediu

politică = createEpsilonGreedyPolicy(Q, epsilon, env.action_space.n)

# Pentru fiecare episod

pentru ith_episode in range(num_episodes):

# Resetați mediul și alegeți prima acțiune

stare = env.reset()

pentru t în itertools.count():

# obține probabilitățile tuturor acțiunilor din starea curentă

action_probabilities = politica(stat)

# alege acțiunea în funcție de

# distribuția probabilității

acțiune = np.random.choice(np.arange(

len(action_probabilities)),

p = probabilități_acțiune)

# luați măsuri și primiți recompensă, treceți la următoarea stare

next_state, recompensă, terminat, _ = env.step(action)

# Actualizați statisticile

stats.episode_rewards[i_episode] += recompensă

stats.episode_lengths[i_episode] = t

# Actualizare TD

best_next_action = np.argmax(Q[next_state])

td_target = recompensă + discount_factor * Q[next_state][best_next_action]

td_delta = td_target – Q[stare][acțiune]

Q[stare][acțiune] += alfa * td_delta

# done este adevărat dacă episodul s-a încheiat

daca ai terminat:

pauză

stare = următoarea_state

returnează Q, statistici

Să antrenăm modelul acum:

Q, statistici = qLearning(env, 1000)

După ce am creat și antrenat modelul, putem reprezenta statisticile esențiale ale acestuia:

plotting.plot_episode_stats(stats)

Utilizați acest cod pentru a rula modelul și a reprezenta graficul. Ce fel de rezultate vezi? Împărtășiți-ne rezultatele, iar dacă vă confruntați cu orice confuzie sau îndoieli, anunțați-ne.

Citește și: Algoritmi de învățare automată pentru știința datelor

Învață cursuri de știință a datelor de la cele mai bune universități din lume. Câștigă programe Executive PG, programe avansate de certificat sau programe de master pentru a-ți accelera cariera.

Gânduri finale

Când trasezi graficul, vei vedea că recompensa pe episod crește progresiv în timp. Și după anumite episoade, intriga reflectă, de asemenea, că nivelează limita mare de recompensă per episod. Ce indică asta?

Înseamnă că modelul tău a învățat să mărească recompensa totală pe care o poate câștiga într-un episod, asigurându-se că se comportă optim. Trebuie să fi văzut și de ce q învățarea Python vede aplicații în atât de multe industrii și domenii.

Care sunt dezavantajele învățării prin întărire?

1. Învățarea prin întărire excesivă poate duce la un exces de stări, scăzând calitatea rezultatelor.
2. Învățarea prin întărire nu este recomandată pentru rezolvarea ușoară a problemelor.
3.Învățarea prin consolidare necesită o cantitate mare de date și calcule.
4. Învățarea prin întărire are propriul său set de obstacole unice și foarte complicate, cum ar fi configurarea dificilă a designului antrenamentului și problemele legate de echilibrul explorării și întăririi.

Se bazează pe modelul de învățare Q?

Nu, învățarea Q nu depinde de modele. Q-learning este o tehnică de învățare prin întărire fără model pentru a determina valoarea unei anumite acțiuni într-o anumită stare. Învățarea Q este unul dintre câțiva algoritmi actuali de învățare prin întărire care nu conține modele, ceea ce înseamnă că poate fi utilizat într-o varietate de contexte și se poate adapta rapid la condiții noi și necunoscute. Poate face față problemelor care implică tranziții stocastice și recompense fără a necesita adaptări și nu necesită un model de mediu. Q-learning este un algoritm de învățare care se bazează pe valori. Algoritmii bazați pe valoare folosesc o ecuație pentru a actualiza funcția de valoare (în special ecuația Bellman).

Cum sunt Q Learning și SARSA diferite una de cealaltă?

SARSA învață o politică aproape optimă în timp ce explorează, în timp ce Q-learning învață direct politica optimă. SARSA în afara politicii învață valorile acțiunii în raport cu politica pe care o urmează, în timp ce SARSA în cadrul politicii învață valorile acțiunii în raport cu politica pe care o urmează. În legătură cu politica lacomă, Q-Learning o face. Ambele converg către funcția de valoare reală în anumite condiții similare, dar la viteze diferite. Q-Learning durează puțin mai mult pentru a converge, dar poate continua să învețe în timp ce reglementările sunt modificate. Când este cuplat cu o aproximare liniară, Q-Learning nu este garantat să converge. SARSA va lua în considerare penalizările din pașii exploratori atunci când se apropie de convergență, în timp ce Q-learning nu va lua în considerare. Dacă există șansa unei recompense negative semnificative pe calea ideală, Q-learning va încerca să o declanșeze în timpul explorării, totuși SARSA va încerca să evite o cale optimă riscantă și va învăța să o folosească numai după ce parametrii de explorare sunt scădeți.