Una dintre cele mai importante abilități ale agenților inteligenți este capacitatea de a învăța. Cunoaștem diferite moduri de învățare. Dacă derivăm în mod logic o nouă regulă dintr-o regulă deja cunoscută (de exemplu pentru a crește eficiența procesului) vorbim despre învățarea analitică sau deductivă. Învățarea unei funcții/reguli generale din perechi specifice intrare-ieșire se numește învățare inductivă. În funcție de natura feedback-ului primit de mașină, învățarea poate fi împărțită după cum urmează:

Învățare supravegheată

Agentul observă mai multe perechi de intrare-ieșire eșantion și învață cum să creeze o ieșire adecvată pentru intrare. Fiabilitatea unui astfel de algoritm instruit depinde în mare măsură de mărimea și calitatea setului de date de antrenament.
Putem compara acest proces cu modul în care părinții îi învață pe copiii mici să recunoască diferite lucruri. De exemplu. le vor arăta o carte ilustrată despre animale, unde vor indica fotografia fiecărui animal și o vor marca corect („câine”, „pisică”, „cal” etc.). În acest fel, copilul învață să recunoască animale individuale chiar dacă le vede în altă imagine sau trăiește.

Învățare nesupravegheată

Agentul încearcă să găsească unele tipare în datele de intrare fără niciun feedback explicit (nu cunoaște „răspunsurile corecte”). Este esențial să grupați astfel de intrări care sunt similare într-un fel („grupare”), precum și să veniți cu reguli de asociere care să descrie grupuri individuale de date și relațiile dintre ele.
Dacă arătăm un astfel de algoritm de ex. mai multe imagini diferite ale câinilor, așa că va putea spune că toate sunt similare într-un fel (doi ochi, patru picioare, coadă etc.) și le așează într-un singur grup, deși nu le va putea eticheta câini.

Învățare semi-supravegheată

Iată doar câteva exemple de intrare bine marcate, iar aparatul trebuie să facă tot ce poate cu o colecție extinsă de intrări nemarcate. Uneori există și zgomot aleatoriu în date, i. inexactități, a căror detectare necesită metode de predare fără profesor.

Consolidarea învățării

Agentul a definit anumite reguli de conduită (de exemplu, regulile jocului pe care urmează să îl joace). El învață prin încercare și eroare dintr-o serie de recompense sau pedepse pe care le primește pentru rezultatele deciziilor sale (recompensă pentru câștig, penalizare pentru pierdere etc.). Depinde de el să decidă care dintre acțiunile dinaintea recompensei/pedepsei au fost cele mai responsabile pentru rezultat.

Inducerea arborelui decizional

Una dintre cele mai simple și mai reușite forme de învățare automată este inducerea unui arbore de decizie. Este o funcție care ia ca intrare un vector de valori, atribute și returnează o decizie, o singură valoare de ieșire. Vom ajunge la această decizie prin efectuarea unei secvențe de teste. Fiecare nod din arbore corespunde unui test al valorii unuia dintre atributele de intrare, în timp ce ramurile din nod sunt marcate cu posibile valori ale acestui atribut. Intrările sunt procesate de la rădăcina arborelui prin ramurile corespunzătoare până la nodul frunzei specificând valoarea care trebuie returnată de funcție.

Regresie

O altă formă de învățare inductivă este regresia. Este vorba despre găsirea funcției care descrie cel mai bine relația dintre intrări și ieșiri, adică potrivirea graficului lor de dependență.
Cel mai simplu exemplu este regresia liniară, care caută o funcție de forma f (x) = w0x + w1. În graficul dependenței intrării de ieșire, are forma unei linii de regresie. Coeficienții w0 și w1 se mai numesc mase. În regresie liniară, algoritmul caută valori ale masei astfel încât suma erorilor pe secundă să fie cât mai mică posibil. Prin eroare înțelegem diferența dintre valoarea reală a ieșirii și valoarea prezisă pentru intrarea dată de linia de regresie. Pentru o intrare putem calcula pătratul erorii ca (y - w0x - w1) 2, unde x este valoarea intrării și y este ieșirea reală (nu cea prezisă). Suma pătratelor erorilor pentru toate intrările este de asemenea utilizată pentru a indica R2.
O funcție care descrie relația dintre intrări și ieșiri poate fi de ex. exponențial liniar, polinom etc.

Exemplu de regresie liniară:
f (x) = 0,872x + 10, R2 = 0,666

artificială

Exemplu de regresie exponențială:
f (x) = 23 * e 0,0161x, R 2 = 0,667

Exemplu de regresie polinomială de gradul 2:
f (x) = 17,8 + 0,364 x + 0,0053 x 2, R 2 = 0,684

Exemplu de regresie polinomială de gradul III:
f (x) = 19,8 + 0,084x + 0,0126 x 2 - 0,0000497x 3, R 2 = 0,685

Exemplu de regresie polinomială de gradul 4:
f (x) = 16,6 + 0,744x - 0,0167 x 2 + 0,000403x 3 - 0,00000226x 4, R 2 = 0,667

Clasificare

Fitingul poate fi folosit și pentru clasificare, adică împărțirea intrărilor în clase (grupuri de intrări cu proprietăți similare). Linia care separă clasele din grafic se numește limita de decizie.
Capacitatea algoritmului de antrenament este exprimată printr-o curbă de antrenament care arată exactitatea predicțiilor programului antrenat în funcție de mărimea setului de antrenament. În același timp, teoria învățării computaționale spune că este puțin probabil ca o ipoteză creată de un program care să fie în concordanță cu un set suficient de mare să fie prea incorectă.

Dacă limita de decizie este o linie dreaptă, o numim separator liniar. Un clasificator care utilizează un separator liniar este, de asemenea, numit clasificator liniar, iar datele care permit un astfel de separator sunt denumite separabile liniare. Acest tip de clasificator poate fi instruit printr-o regulă simplă de actualizare a coeficienților care definesc limitele sale de decizie, pentru a se potrivi cu date separabile liniar. Alte abordări includ de ex. regresia logistică, care folosește un separator definit de o funcție logistică și funcționează și pentru date liniar inseparabile.
Capacitatea algoritmului de antrenament este exprimată printr-o curbă de antrenament care arată acuratețea predicțiilor programului antrenat în funcție de mărimea setului de antrenament. În același timp, teoria învățării computaționale spune că este puțin probabil ca o ipoteză creată de un program care să fie în concordanță cu un set suficient de mare să fie prea incorectă.

Separabil liniar

Acest tip de clasificator poate fi instruit printr-o regulă simplă de actualizare a coeficienților care definesc limita deciziei sale, pentru a se potrivi cu date separabile liniar. Alte abordări includ de ex. regresie logistică, care folosește un separator definit de o funcție logistică și funcționează și pentru date liniar inseparabile:

Liniar inseparabil

Acest tip de clasificator poate fi instruit printr-o regulă simplă de actualizare a coeficienților care definesc limita deciziei sale, pentru a se potrivi cu date separabile liniar. Alte abordări includ de ex. regresie logistică, care folosește un separator definit de o funcție logistică și funcționează și pentru date liniar inseparabile:

Rețele neuronale artificiale

În prezent, un concept relativ nou, rețelele neuronale artificiale, este foarte popular. Acestea sunt modele simplificate ale rețelelor neuronale din creierul animalelor. Funcția de bază a unui neuron artificial este de a calcula suma ponderată a intrărilor sale și de a returna o valoare dintr-un anumit interval (adesea de la 0 la 1) pe baza unor funcții de activare (transfer). Pentru a regla ieșirea neuronului, așa-numitul prejudecată, o constantă pe care un neuron o adaugă la suma ponderată a intrărilor înainte de a aplica o funcție de activare. Datorită existenței acestei constante, modelul rețelei neuronale este mai flexibil și poate fi mai bine adaptat la datele de intrare. Ponderile de intrare utilizate și valoarea prejudecății sunt actualizate în timpul procesului de învățare, care poate avea loc cu sau fără un profesor. Se compune din 3 pași de bază:

  1. Inițializarea greutăților - Ponderile au la început valori aleatorii, egale cu unele numere mici (de ex. -1 la 1). În mod similar, valoarea prejudecății fiecărui neuron este un număr foarte mic la început.
  2. Calculul ieșirii - Se calculează suma ponderată a valorilor de intrare și se adaugă valoarea prejudiciului. Rezultatul este transmis funcției de activare, care își apasă valoarea într-un anumit interval (de exemplu, de la 0 la 1). Alegerea funcției de activare depinde de natura datelor așteptate. De exemplu. în clasificarea liniară putem folosi așa-numitul model al neuronului. prag unitate logică. Operațiunea sa de bază este să calculeze suma ponderată a intrărilor și apoi să returneze 1, dacă această sumă depășește un anumit prag, altfel returnează 0.
  3. Calculul erorii și reglarea greutății - Mai întâi calculăm eroarea, i. diferența dintre ieșirea returnată de model și ieșirea așteptată. Apoi, greutățile rețelei și valorile de polarizare sunt ajustate astfel încât ieșirea modelului din următoarea iterație (repetare) să fie mai aproape de ieșirea așteptată și eroarea să fie redusă. Cât de semnificative ar trebui să fie modificările valorilor pot fi determinate în prealabil cu ajutorul unei constante care determină rata de învățare din fiecare iterație (de obicei un număr de la 0 la 1).

Pașii 2 și 3 se repetă până când eroarea este minimizată la cea mai mică valoare posibilă sau nu mai există o modalitate de a reduce eroarea. Alternativ, instruirea poate fi încheiată chiar și după atingerea unui anumit număr maxim de iterații.

Implementare Python:
Descarca

# Importați module utilizate
import aleatoriu, numpy
def initialize_weight ():
# Setarea unei „semințe” pentru un generator aleatoriu
random.seed (1)

# Generați greutăți inițiale aleatorii
# (atribuirea numerelor aleatorii din intervalul [-1,1) la matricea 3x1)
weight = numpy.random.uniform (low = -1, high = 1, size = (3, 1))
retur greutate

# Funcția de activare (în acest caz este o funcție sigmoidală)
sigmoid def (x):
returnează 1/(1 + numpy.exp (-x))
# O altă funcție auxiliară (derivarea funcției sigmoide)
def derivative_sigmoid (x):
returnează x * (1 - x)
# Funcția pentru calcularea rezultatului folosind suma ponderată, prejudecățile și funcția de activare
def find_output (intrări, greutăți, prejudecăți):
return sigmoid (numpy.dot (intrări, greutăți) + prejudiciu)

# Instruire în rețeaua neuronală
instruire def (intrări, ieșire_așteptată, greutăți, prejudecăți, rată_învățare, număr_de_iterare):
pentru iteracia în interval (pocet_iteracii):

# Găsiți rezultatele intrărilor de antrenament
calculate_output = find_output (intrări, greutăți, prejudecăți)

# Calculul erorii
eroare = derivat_sigmoid (calculat_output) * (asteptat_output - calculat_output)

# Factorii de ajustare a greutății și valoarea prejudiciului
factorH = numpy.dot (intrări.T, eroare) * rate_învățare
factorP = eroare * rate_învățare
# Ajustarea greutăților și a valorilor prejudecăților
greutate + = factorH
prejudecată + = factorP

# Declarație intermediară a procedurii
if ((iteracia% 1000) == 0):
print ("iterație", iterație)
print ("Rezultatul calculat:", vypocitany_vystup.T)
print ("Rezultatul așteptat:", output_out.T)
imprimare ()

# Ponderile inițiale aleatoare pentru rețea
weight = initialize_weight ()

# Set de antrenament
intrări = numpy.array ([[1, 1, 1],
[1, 0, 0],
[0, 0, 1]])

# Țintă și set de testare
expected_output = numpy.array ([[1, 0, 1]]). T
test = numpy.array ([1, 0, 1])

# Instruire în rețeaua neuronală
greutate învățată = antrenament (intrări, ieșire așteptată, greutăți, prejudecată = 0,001, rată de învățare = 0,98, număr_de_iterări = 100000)

# Testați rețeaua în rețeaua de testare
precizie = (find_output (test, greutate_invățată, părtinire = 0,01)) * 100
print ("Precizia modelului", precizia [0], "%")

Resurse, linkuri utile, literatură

RUSSELL, S. J. - NORVIG, P.: Inteligența artificială: o abordare modernă (ediția a 3-a). Upper Saddle River, SUA: Prentice Hall, 2003. ISBN 0-13-790395-2