ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 150
Numărul 149 Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 20
Abonament PDF

Restricted Boltzmann Machines

Roland Szabo
Junior Python Developer
@3Pillar Global



PROGRAMARE

După ce în articolul trecut am prezentat pe scurt istoria deep learning -ului și am enumerat câteva dintre tehnicile care se folosesc, acum voi oferi detalii despre părțile componente ale unui sistem de deep learning .

Deep learning a obținut primul succes în 2006, când Geoffrey Hinton și Ruslan Salakhutdinov au publicat articolul "Reducing the Dimensionality of Data with Neural Networks", care a fost prima aplicare eficientă și rapidă a mașinilor Boltzmann restrânse (Restricted Boltzmann Machines sau, pe scurt, RBM).

După cum sugerează și numele, RBM-urile sunt un fel de mașini Boltzmann, cu anumite constrângeri. Acestea au fost propuse de Geoffrey Hinton și Terry Sejnowski în 1985 și au fost primele rețele neuronale care puteau să învețe reprezentări interne (modele) ale datelor de intrare și să se folosească de aceasta pentru a rezolva apoi diferite probleme, cum ar fi completarea de imagini incomplete. Ele nu au fost folosite multă devreme deoarece, în lipsa unor constrângeri, algoritmul de învățare a reprezentării interne era foarte ineficient.

Conform definiției, mașinile Boltzmann sunt rețele neuronale recurente stochastice generative. Stochasticitatea lor înseamnă că au un element probabilistic în ele și neuronii din rețea nu sunt activați în mod deterministic, ci cu o anumită probabilitate, în funcție de intrările lor. Faptul că sunt generative înseamnă că învață distribuția de probabilitate a variabilelor de intrare și construiesc un model pentru acestea, care poate fi folosit apoi pentru a genera alte date aleatorii, similare celor cu care au fost antrenate.

Dar există și un alt mod de a privi mașinile Boltzmann, ca fiind modele grafice bazate pe energie. Aceasta înseamnă că fiecărei combinații de date de intrare asociem un număr, numit "energie", iar pentru combinațiile pe care le avem între datele de intrare dorim ca energia să fie cât mai mică, iar pentru toate celelalte să fie cât mai mare.

Model grafic pentru un RBM cu 4  unități de intrare și 3 unități ascunse.

Constrângerea impusă asupre RBM-urilor este că neuronii trebuie să formeze un graf bipartit, ceea ce în practică înseamnă că nu există legături între neuronii din stratul vizibil, nici între neuronii din stratul ascuns, ci doar între cele două straturi. În figura de alături se observă că nu avem conexiuni între v-uri, nici între h-uri, ci doar între fiecare v cu fiecare h.

Stratul ascuns din RBM se poate considera ca fiind factorii care generează stratul de intrare. Dacă analizăm notele date de utilizatori unor filme, atunci stratul de intrare corespunde notelor date de un utilizator la mai multe filme, iar stratul ascuns corespunde categoriilor de filme. Aceste categorii nu sunt predefinite, ci RBM-ul construiește un model intern în care grupează filmele astfel încât energia totală să fie minimizată. Dacă datele de intrare sunt pixeli ai unei imagini, atunci putem considera stratul ascuns drept trăsături ale obiectelor care generează acei pixeli (cum ar fi margini de obiecte, colțuri, linii drepte și alte trăsături care diferențiază obiectele).

Privind RBM-urile ca modele bazate pe energie, putem să ne folosim de tehnici preluate din fizica statistică ca să estimăm distribuția de probabilitate și apoi să facem predicții. De altfel, partea de Boltzmann din nume vine de la faptul că distribuția pe care o va învăța este de tip Boltzmann, o distribuție clasică din fizica statistică.

Energia unui astfel de model, știind vectorul v (stratul de intrare), vectorul h (stratul ascuns), matricea W (ponderile asociate fiecărei conexiuni dintre un neuron din stratul de intrare și cel ascuns), și vectorii a șib (care corespund pragurilor de activare specifice fiecărui neuron din stratul de intrare, respectiv stratul ascuns) este dată de următoarea formulă:

Deși pare urâtă formula, este vorba doar de adunare și înmulțire de matrici.

Odată ce avem energia pentru o stare, probabilitatea ei este dată de:

Z este un factor de normalizare, ca să dea bine probabilitățile.

Aici este unul din locurile unde constrângerile din RBM ne ajută. Pentru că neuronii din stratul vizibil nu sunt conectați între ei înseamnă că dacă fixăm neuronii din stratul ascuns, atunci neuronii din stratul vizibil sunt independenți unii de alții. Așa că putem obține ușor probabilitatea unor date de intrare pentru o valoare fixă a neuronilor din stratul ascuns:

unde

reprezintă probabilitatea de activare a unui singur neuron:

În mod analog se poate defini și probabilitatea pentru stratul ascuns, având stratul vizibil fixat.

La ce ne ajută dacă știm aceste probabilități?

Să presupunem că știm valorile corecte ale ponderilor și ale pragurilor de activare a neuronilor pentru un RBM și că vrem să vedem ce obiecte sunt într-o imagine. Punem pixelii imaginii ca fiind intrările RBM-ului și calculăm probabilitățile de activare pentru stratul ascuns. Aceste probabilități le putem interpreta drept filtre pe care le-a învățat RBM-ul despre obiectele care pot exista în imagini.

Luăm valorile probabilităților, și le introducem într-un alt RBM ca date de intrare. Acest RBM scoate și el la rândul lui alte probabilități, care sunt filtre pentru intrările lui. Aceste filtre sunt de un nivel mai înalt deja. Repetăm acest procedeu de câteva ori, punem unul peste altul RBM-urile, peste ultimul strat punem un strat de clasificare (chiar și regresia logistică funcționează bine) și obținem un Deep Belief Network.

Antrenare într-un mod greedy a unui DBN

Ideea care a stat la baza revoluției deep learning a fost aceasta: că poți învăța strat cu strat filtre pentru trăsături tot mai complexe și astfel la sfârșit nu mai clasifici ce este într-o poză direct din pixeli, ci din trăsături de nivel înalt, care sunt mult mai bune indicatore pentru conținutul unei poze.

Învățarea parametrilor unui RBM se face cu un algoritm numit "contrastive divergence". Acesta pornește cu un exemplu din datele de intrare, calculează valorile pentru stratul ascuns, pentru ca din aceste valori obținute pentru stratul ascuns să se simuleze apoi ce valori de intrare au produs. Parametrii sunt apoi schimbați cu diferența dintre valoarea originală și valoarea simulată (sub formă de produs matriceal). Aceasta se repetă pentru fiecare exemplu din datele de intrare, de mai multe ori, până când fie eroarea devine suficient de mică, fie au trecut un număr predefinit de iterații.

O parte din filtrele învățate de RBM. Se observă filtre pentru literele B, R, S și pentru cifrele 0, 8, 7 și altele

RBM-urile sunt implementate în multe librării de învățare automată. Una dintre acestea este scikit-learn, o librărie Python care este folosită de firme cum ar fi Evernote sau Spotify pentru clasificarea notițelor sau pentru recomandare de muzică. În continuare vom prezenta ce ușor se poate antrena un RBM pe un set de imagini care conțin litere și cifre, după care vom vizualiza filtrele pe care le învață acesta.

from sklearn.neural_network import BernoulliRBM as RBM
import numpy as np
import matplotlib.pyplot as plt
import cPickle

X,y = cPickle.load(open(„letters.pkl”))
X = (X - np.min(X, 0)) / (np.max(X, 0) + 0.0001)  # 0-1 scaling
rbm = RBM(n_components=900, learning_rate=0.05, batch_size=100, n_iter=50)
print(„Init rbm”)

rbm.fit(X)

plt.figure(figsize=(10.2, 10))
for i, comp in enumerate(rbm.components_):
    plt.subplot(30, 30, i + 1)
    plt.imshow(comp.reshape((20, 20)), cmap=plt.cm.gray_r,
               interpolation=’nearest’)
    plt.xticks(())
    plt.yticks(())
plt.suptitle(‚900 components extracted by RBM’, fontsize=16)

plt.show()

RBM-urile sunt o componentă esențială de la care a pornit deep learning-ul și sunt unul din puținele modele care ne permit să ne construim eficient o reprezentare internă a problemei pe care dorim să o rezolvăm. În articolul următor, vom vedea o altă abordare la învățarea reprezentărilor interne, cu autoencodere.

NUMĂRUL 149 - Development with AI

Sponsori

  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • Colors in projects