Cum să faci o rețea neuronală: arhitectură, parametri și cod

Publicat: 2021-02-12

Rețelele neuronale, așa cum sugerează și numele, sunt circuite de neuroni. Există diferite tipuri de rețele neuronale. Rețelele neuronale biologice sunt formate din neuroni biologici reali. În timp ce rețelele neuronale artificiale (ANN) este un sistem care se bazează pe rețeaua neuronală biologică, așa cum este prezentă în creier. Numărul estimat de neuroni din creier este de aproximativ 100 de miliarde, care comunică prin semnale electrochimice.

ANN încearcă să recreeze complexitatea computațională prezentă în neuronii biologici, dar nu este la fel de comparabilă cu aceasta și sunt versiuni mult mai simple și necomplexe ale rețelelor neuronale biologice. În acest articol, vom înțelege structura unui ANN și vom învăța cum să creăm o rețea neuronală folosind Python.

Cuprins

Arhitectura rețelelor neuronale

Rețeaua neuronală artificială este formată din neuroni artificiali care sunt numiți și „Noduri”. Aceste noduri sunt conectate între ele astfel încât să fie creată o rețea sau o rețea. Puterea acestor conexiuni una cu alta i se atribuie o valoare. Această valoare se află între -1 și 1.

Dacă valoarea conexiunii este mare, indică o conexiune puternică între acele noduri. Fiecare nod are o funcție caracteristică. Schimbarea acestei funcții va schimba comportamentul și natura complexității rețelei neuronale. Există trei tipuri de neuroni într-un ANN, noduri de intrare, noduri ascunse și noduri de ieșire, după cum se arată mai jos:

Sursă

Nodul de intrare este responsabil pentru primirea informațiilor care sunt în general sub formă de valori numerice sau expresii. Informațiile sunt prezentate ca valori de activare, unde fiecărui nod i se atribuie un număr, cu cât numărul este mai mare, cu atât este mai mare activarea.
Informațiile sunt transmise în continuare în rețea. Pe baza greutăților conexiunii Nodului și a funcției de activare a anumitor neuroni ai unor straturi specifice, informațiile sunt transmise de la neuron la neuron. Fiecare dintre noduri adaugă valorile de activare la primire, valorile sunt modificate pe baza funcției de transfer.
Informația circulă în întreaga rețea, prin straturi ascunse, până ajunge la nodurile de ieșire. Nodurile de ieșire sunt foarte importante, deoarece reflectă intrarea într-un mod semnificativ către lumea exterioară. Aici poate fi văzut un aspect uimitor al rețelelor neuronale care duce la ajustarea greutăților pentru fiecare strat și noduri.

Diferența dintre valoarea prezisă și valoarea reală (eroarea) va fi propagată înapoi. Prin urmare, rețeaua neuronală va învăța din erorile făcute și va încerca să ajusteze ponderile pe baza abordării ratei de învățare desemnate.

Prin urmare, prin ajustarea parametrilor cum ar fi un număr de straturi ascunse, un număr de neuroni pe strat, strategia de actualizare a greutății și funcția de activare, putem crea o rețea neuronală.

Definiți parametrii

Funcția de activare

Există diverse funcții de activare din care puteți alege, care pot fi utilizate în rețeaua neuronală pe baza problemei în cauză.

Funcțiile de activare sunt ecuații matematice pe care le are fiecare neuron. Acesta determină ieșirea unei rețele neuronale.
Această funcție de activare este atașată fiecărui neuron din rețea și determină dacă ar trebui activat sau nu, care se bazează pe dacă activarea acelui neuron anume ajută la obținerea de predicții relevante la nivelul de ieșire. Straturi diferite pot avea diferite funcții de activare atașate. Funcțiile de activare ajută, de asemenea, la normalizarea ieșirii fiecărui neuron într-un interval între 1 și 0 sau între -1 și 1.

Rețelele neuronale moderne folosesc o tehnică importantă numită backpropagation pentru a antrena modelul prin ajustarea greutăților, ceea ce impune o presiune computațională crescută asupra funcției de activare și a funcției sale derivate.

Funcționarea unei funcții de activare
MissingLink

Există 3 tipuri de funcții de activare:
Binar- x<0 y=0, x>0 y=1
Linear- x=y
Neliniar – Diverse tipuri: Sigmoid, TanH, Logistic, ReLU, Softmax etc.

Sursa: Blog

Tip: ReLU
MissingLink

Algoritm

Există multe tipuri de rețele neuronale, dar ele sunt adesea împărțite în rețele de tip feed-forward și feed-back (backpropagation).

1) Rețeaua de alimentare înainte este o rețea nerepetitivă care conține intrări, ieșiri și straturi ascunse; întrucât semnalele se pot mișca doar într-o singură direcție. Datele de intrare sunt transferate la nivelul echipamentului de procesare unde efectuează calculele. Fiecare factor de procesare își face calculul pe baza ponderii intrării. Sunt calculate valori noi și apoi noile valori de intrare alimentează stratul următor.

Acest proces continuă până când trece prin toate straturile și determină rezultatul. O funcție de transfer limită este uneori utilizată pentru a măsura ieșirea neuronilor în stratul de ieșire. Rețelele Feed Forward sunt cunoscute ca și includ rețele Perceptron (directe și indirecte). Rețelele de tip feed-forward sunt adesea folosite pentru extragerea datelor.

2) Rețeaua Feed-Back (de exemplu, o rețea neuronală recurentă sau RNN) are mecanisme retrospective, ceea ce înseamnă că pot avea semnale care se deplasează în ambele direcții folosind capcane/bucle. Este permisă orice comunicare posibilă între neuroni.

Deoarece buclele sunt prezente în acest tip de rețea, aceasta devine un sistem neliniar care se schimbă constant până când ajunge la o stare de stabilitate. Rețelele de feedback sunt adesea folosite pentru amintirile asociate cu probleme de performanță atunci când rețeaua caută un set bun de obiecte conectate.

Instruire

trecerea de feed-forward înseamnă o intrare și ponderea modului în care este calculată rezultatul. După finalizarea antrenamentului, rulăm doar trecerea înainte pentru a forma predicțiile.

Dar mai întâi trebuie să ne antrenăm modelul pentru a învăța cu adevărat greutățile și, prin urmare, procedura de antrenament funcționează după cum urmează:

  1. Selectați și inițializați aleatoriu ponderile pentru toate nodurile. Există metode inteligente de inițializare care sunt încorporate în TensorFlow și Keras (Python).
  2. Pentru fiecare exemplu de antrenament, efectuați o trecere înainte folosind greutățile prezente și calculați rezultatul fiecărui nod care merge de la stânga la dreapta. Ieșirea finală este valoarea ultimului nod.
  3. Comparați rezultatul final cu ținta reală din datele de antrenament și măsurați eroarea utilizând o funcție de pierdere.
  4. Efectuați o trecere înapoi de la dreapta la stânga și propagați eroarea calculată în ultimul pas către fiecare nod individual folosind propagarea înapoi.
  5. Calculați contribuția de greutate a fiecărui neuron la eroare și ajustați ponderile conexiunii în consecință folosind coborârea gradientului. Propagați gradienții de eroare înapoi de la ultimul strat.

Cod Python pentru rețeaua neuronală

Acum că înțelegem cum este realizată rețeaua neuronală teoretic, să implementăm același lucru folosind Python.

Rețeaua neuronală în Python
Vom folosi API-ul Keras cu backend-urile Tensorflow sau Theano pentru a ne crea rețeaua neuronală.

Instalarea bibliotecilor
Theano
>>> pip install –upgrade –no-deps git+git://github.com/Theano/Theano.git

Tensorflow și Keras
>>> pip3 instalează tensorflow
>>> pip install –upgrade Keras

Importă bibliotecile

import keras
din keras.models import Sequential
din keras.straturi import Dense

Inițializarea rețelei neuronale artificiale

model = Sequential()

Creează straturi de intrare și ascunse -

model.add(Dense(input_dim = 2, units = 10, activation='relu', kernel_initializer='uniform'))

Acest cod adaugă stratul de intrare și un strat ascuns la rețeaua secvențială
Dense(): ne permite să creăm o rețea neuronală dens conectată
input_dim: forma sau numărul de noduri din stratul de intrare
unități: numărul de neuroni sau noduri din stratul curent (stratul ascuns)
activare: funcția de activare aplicată fiecărui nod.”relu” înseamnă Rectified Linear Unit
kernel_initializer: greutăți aleatorii inițiale ale stratului

Al doilea strat ascuns
model.add(Dense(unități = 20, activation='relu', kernel_initializer='uniform'))

Codul creează și adaugă un alt strat ascuns modelului cu 20 de noduri și funcția de activare „liniară rectificată”. Mai multe straturi pot fi adăugate într-un mod similar, în funcție de problemă și de complexitate.

Strat de ieșire
model.add(Dense(unități = 1, activation='sigmoid', kernel_initializer='uniform'))

Un singur strat de ieșire cu Sigmoid sau softmax sunt funcțiile de activare utilizate în mod obișnuit pentru un strat de ieșire.

compilație ANN:
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

ANN este compilat cu o funcție de optimizare și o funcție de pierdere înainte de a fi antrenat.

Optimizer: o funcție de optimizare pentru rețea, Există diferite tipuri de optimizatori și Adam este utilizat în cea mai mare parte.
Pierdere: utilizat pentru calcularea pierderilor și erorilor. Există diferite tipuri și alegerea depinde de natura problemei tratate.
Metrici: metrica utilizată pentru a măsura performanța modelului.

Potrivirea modelului cu datele de antrenament:
model.fit(X_train,Y_train,batch_size=64, epochs=30)

Acest cod va crea modelul

Concluzie

Acum putem crea o rețea neuronală artificială (pe Python) de la zero, deoarece am înțeles diferiții parametri care pot fi modificați în funcție de problema în cauză.

Dacă sunteți interesat să aflați mai multe despre tehnicile de învățare profundă , învățarea automată, consultați Diploma PG de la IIIT-B și upGrad în Învățare automată și AI, care este concepută pentru profesioniști care lucrează și oferă peste 450 de ore de formare riguroasă, peste 30 de studii de caz și sarcini, statutul de absolvenți IIIT-B, peste 5 proiecte practice practice și asistență la locul de muncă cu firme de top.

Învață cursul ML de la cele mai bune universități din lume. Câștigă programe de master, Executive PGP sau Advanced Certificate pentru a-ți accelera cariera.

Conduceți revoluția tehnologică condusă de inteligența artificială

Aplicați pentru Programul de certificat avansat în Învățare automată și NLP