În acest articol, vă voi arăta cum să creați și să antrenați o rețea neuronală folosind Synaptic.js, care vă permite să învățați în profunzime în Node.js și browser.
Vom crea cea mai simplă rețea neuronală posibilă: una care reușește să rezolve Ecuația XOR.
De asemenea, am creat un tutorial interactiv Scrimba pe acest exemplu, deci verificați și asta:
Sau dacă sunteți interesat de un curs complet despre rețelele neuronale în JavaScript, vă rugăm să consultați un curs gratuit pe Brain.js la Scrimba.
Dar, înainte de a ne uita la cod, să trecem prin elementele de bază ale rețelelor neuronale.
Neuroni și sinapse
Primul element constitutiv al unei rețele neuronale este, ei bine, neuroni.
Un neuron este ca o funcție, ia câteva intrări și returnează o ieșire.
Există multe tipuri diferite de neuroni. Rețeaua noastră va fi folosită neuroni sigmoizi, care iau orice număr dat și îl strivesc la o valoare între 0
și 1
.
Cercul de mai jos ilustrează un neuron sigmoid. Intrarea sa este 5
iar ieșirea sa este 1
. Săgețile sunt numite sinapse, care conectează neuronul la alte straturi din rețea.
Asa de De ce este numărul roșu 5
? Pentru că este suma celor trei sinapse care se conectează la neuron așa cum arată cele trei săgeți din stânga. Să despachetăm asta.
În extrema stângă, vedem două valori plus un așa-numit părtinire valoare. Valorile sunt 1
și 0
care sunt numerele verzi. Valoarea de prejudecată este -2
care este numărul maro.
În primul rând, cele două intrări sunt multiplicate cu ale lor greutăți, care sunt 7
și 3
așa cum arată cifrele albastre.
În cele din urmă, îl adăugăm cu părtinire și sfârșim cu 5
sau numărul roșu. Aceasta este intrarea pentru neuronul nostru artificial.
Deoarece acesta este un neuron sigmoid care scutură orice valoare între 0 și 1, ieșirea se stoarce la 1
.
Dacă conectați o rețea a acestor neuroni împreună, aveți o rețea neuronală. Acest lucru se propagă înainte de la intrare la ieșire, prin neuroni care sunt conectați între ei prin sinapse. Ca pe imaginea de mai jos:
Scopul unei rețele neuronale este să-l antreneze să facă generalizări, cum ar fi recunoașterea cifrelor scrise de mână sau a e-mailului spam. Și a fi bun la generalizare este o chestiune de a avea dreptul greutăți și părtinire valorile din rețea. Ca și în cazul numerelor albastre și maro din exemplul nostru de mai sus.
Atunci când instruiți rețeaua, îi arătați pur și simplu o mulțime de exemple, cum ar fi cifre scrise de mână, și obțineți rețeaua să prezică răspunsul corect.
După fiecare predicție, veți calcula cât de greșit predicția a fost și ajustează greutățile și valorile de prejudecată astfel încât rețeaua să ghicească puțin mai corect data viitoare. Acest proces de învățare se numește propagare înapoi. Faceți acest lucru de mii de ori și rețeaua dvs. va deveni în curând bună la generalizare.
Modul în care funcționează tehnic retrocedarea este în afara scopului acestui tutorial, dar iată cele mai bune trei surse pe care le-am găsit pentru a o înțelege:
- Un exemplu de propagare înapoi pas cu pas – de Matt Mazur
- Ghidul hackerilor pentru rețelele neuronale – de Andrej Karpathy
- NeuralNetworksAndDeepLarning – de Michael Nielsen
Codul
Acum că ai primit o introducere de bază, să trecem la cod. Primul lucru pe care trebuie să-l facem este să creăm straturile. Facem acest lucru cu new Layer()
funcție în sinaptic. Numărul transmis funcției dictează câte neuroni ar trebui să aibă fiecare strat.
Dacă ești confuz cu privire la ce strat este, verificați screencast de mai sus.
const {Layer, Network} = window.synaptic;
var inputLayer = layer nou (2);
var hiddenLayer = layer nou (3);
var outputLayer = Layer nou (1);
În continuare vom conecta aceste straturi împreună și vom crea o nouă rețea, astfel:
inputLayer.project (hiddenLayer);
hiddenLayer.project (outputLayer);
var MyNetwork = rețea nouă ({
input: inputLayer,
ascuns: [hiddenLayer],
output: outputLayer
});
Deci, aceasta este o rețea 2-3, care poate fi vizualizată astfel:
Acum să pregătim rețeaua:
// train the network - learn XOR
var learningRate = .3;
for (var i = 0; i < 20000; i++) {
// 0,0 => 0
myNetwork.activate([0,0]);
myNetwork.propagate(learningRate, [0]);
// 0,1 => 1
myNetwork.activate([0,1]);
myNetwork.propagate(learningRate, [1]);
// 1,0 => 1
myNetwork.activate([1,0]);
myNetwork.propagate(learningRate, [1]);
// 1,1 => 0
myNetwork.activate([1,1]);
myNetwork.propagate(learningRate, [0]);
}
Aici rulăm rețeaua de 20.000 de ori. De fiecare dată când ne propagăm de patru ori înainte și înapoi, trecând în cele patru intrări posibile pentru această rețea: [0,0] [0,1] [1,0] [1,1]
.
Începem prin a face myNetwork.activate([0,0])
, Unde [0,0]
este punctul de date pe care îl trimitem în rețea. Aceasta este propagarea înainte, numită și activând rețeaua. După fiecare propagare înainte, trebuie să facem o propagare înapoi, unde rețeaua își actualizează propriile greutăți și prejudecăți.
Propagarea înapoi se face cu această linie de cod: myNetwork.propagate(learningRate, [0])
, unde learningRate
este o constantă care spune rețelei cât de mult ar trebui să-și regleze greutățile de fiecare dată. Al doilea parametru 0
reprezintă ieșirea corectă dată intrării [0,0]
.
Rețeaua compară apoi propria predicție cu eticheta corectă. Acest lucru îi spune cât de corect sau greșit a fost.
Folosește comparația ca bază pentru corectarea propriilor greutăți și valori de părtinire, astfel încât data viitoare va ghici puțin mai corect.
După ce a făcut acest proces de 20.000 de ori, putem verifica cât de bine a învățat rețeaua noastră activând rețeaua cu toate cele patru intrări posibile:
console.log(myNetwork.activate([0,0]));
// -> [0.015020775950893527]
console.log(myNetwork.activate([0,1]));
// -> [0.9815816381088985]
console.log(myNetwork.activate([1,0]));
// -> [0.9871822457132193]
console.log(myNetwork.activate([1,1]));
// -> [0.012950087641929467]
Dacă rotunjim aceste valori la cel mai apropiat număr întreg, vom obține răspunsurile corecte pentru ecuația XOR. Ura!
Și cam atât. Chiar dacă tocmai am zgâriat suprafața rețelelor neuronale, acest lucru ar trebui să vă ofere suficient pentru a începe să jucați cu Synaptic pentru dvs. și să continuați să învățați singuri. Wiki-ul lorconține o mulțime de tutoriale bune.
În cele din urmă, asigurați-vă că vă împărtășiți cunoștințele prin crearea unui Scrimbascreencast sau scrierea unui articol când aflați ceva nou! 🙂
PS: Avem mai multe cursuri gratuite pentru tine!
Dacă sunteți în căutarea următoarei dvs. provocări, avem și alte câteva cursuri gratuite pe care le puteți consulta la Scrimba.com.Iată trei care ar putea fi relevante pentru dvs.:
Codificare fericită!
#Cum #creează #rețea #neuronală #în #JavaScript #în #doar #linii #cod
Cum se creează o rețea neuronală în JavaScript în doar 30 de linii de cod
Cum să construiți punți de comunicație cross-origine în iOS și Android
Testarea automată a regresiei performanței site-ului web
O introducere în Q-Learning: învățare prin întărire
Utilizarea Java’s Arrays.sort () pentru orice Listă de obiecte
18 Setări de confidențialitate pe care ar trebui să le analizați în Windows 10
5 Instrumente Web recomandate pentru rezolvarea problemelor dificile de matematică
Cum să vă editați videoclipurile utilizând Editorul video YouTube
Instrucțiuni de import Python explicate
Cum se înlocuiește jQuery cu Vue.js în aplicațiile Ruby on Rails
4 dintre cele mai bune boxe impermeabile Bluetooth pentru 2019
Windows 10 va înceta în curând forțarea actualizărilor
5 sfaturi GitHub pentru noii codificatori
Ce este o casă inteligentă și cum funcționează?
Cum se instalează OSMC pe un Raspberry Pi
Google Play Protect: Noul sistem de securitate Android explicat
5 sfaturi utile pentru Instagram
Cum să utilizați modul invitat Android pentru a vă partaja dispozitivul fără a compromite confidențialitatea
Lista mare de site-uri de streaming pentru a vă satisface nevoile de streaming