Namų neuroninis tinklas. Neuroniniai tinklai: praktinis pritaikymas


Daugelis neuroninių tinklų terminų yra susiję su biologija, todėl pradėkime nuo pradžių:

Smegenys yra sudėtingas dalykas, tačiau jas galima suskirstyti į kelias pagrindines dalis ir operacijas:

Sukėlėjas gali būti vidinis(pavyzdžiui, vaizdas arba idėja):

Dabar pažvelkime į pagrindinius ir supaprastintus dalys smegenys:


Smegenys paprastai yra kaip kabelių tinklas.

Neuronas- pagrindinis skaičiavimo vienetas smegenyse, jis priima ir apdoroja cheminius signalus iš kitų neuronų ir, priklausomai nuo daugelio veiksnių, nieko nedaro arba generuoja elektrinį impulsą, arba veikimo potencialą, kuris vėliau siunčia signalus per sinapses į kaimyninius vieni susijęs neuronai:

Sapnai, prisiminimai, savireguliuojantys judesiai, refleksai ir, tiesą sakant, viskas, ką galvojate ar darote – viskas vyksta šio proceso dėka: dirba milijonai ar net milijardai neuronų. skirtingi lygiai ir sukurti ryšius, kurie sukuria įvairias lygiagrečias posistemes ir atstovauja biologiniam neuronui neto.

Žinoma, visa tai yra supaprastinimai ir apibendrinimai, tačiau jų dėka galime apibūdinti paprastą
neuroninis tinklas:

Ir formaliai apibūdinkite tai naudodami grafiką:

Čia reikia šiek tiek paaiškinimo. Apskritimai yra neuronai, o linijos yra jungtys tarp jų,
ir kad šiuo metu viskas būtų paprasta, santykiai reprezentuoja tiesioginį informacijos judėjimą iš kairės į dešinę. Pirmasis neuronas Šis momentas aktyvus ir paryškintas pilkai. Taip pat priskyrėme jam numerį (1, jei veikia, 0, jei ne). Skaičiai tarp neuronų rodo svorio komunikacijos.

Aukščiau pateiktose diagramose parodytas tinklo laiko momentas; norint, kad vaizdas būtų tikslesnis, jį reikia padalyti į laikotarpius:

Norėdami sukurti savo neuronų tinklą, turite suprasti, kaip svoriai veikia neuronus ir kaip neuronai mokosi. Kaip pavyzdį paimkime triušį (bandomąjį triušį) ir patalpinkime jį į klasikinio eksperimento sąlygas.

Kai į juos nukreipiamas saugus oro srautas, triušiai, kaip ir žmonės, mirksi:

Šį elgesio modelį galima pavaizduoti diagramose:

Kaip ir ankstesnėje diagramoje, šie grafikai rodo tik momentą, kai triušis jaučia kvėpavimą, taigi ir mes užkoduoti dvelksmas kaip loginė reikšmė. Be to, pagal svorio vertę apskaičiuojame, ar antrasis neuronas užsidega. Jei jis lygus 1, tai sensorinis neuronas užsidega, mes mirksime; jei svoris mažesnis už 1, mes nemirksime: antrasis neuronas riba- 1.

Įveskime dar vieną elementą – saugų garso signalas:

Triušio susidomėjimą galime modeliuoti taip:

Pagrindinis skirtumas yra tas, kad dabar svoris yra lygus nulis, taigi mes negavome mirksinčio triušio, na, bent jau ne. Dabar išmokykime triušį mirksėti pagal komandą maišydami
Stimulai (pypsėjimas ir smūgis):

Svarbu, kad šie įvykiai įvyktų skirtingu laiku era, diagramose tai atrodys taip:

Pats garsas nieko nedaro, bet oro srautas vis tiek priverčia triušį mirksėti, ir tai parodome per svorius, padaugintus iš dirgiklių (raudona spalva).

Išsilavinimas sudėtingas elgesys gali būti supaprastintai išreikštas kaip laipsniškas svorio pasikeitimas tarp sujungtų neuronų laikui bėgant.

Norėdami išmokyti triušį, kartojame veiksmus:

Pirmųjų trijų bandymų metu schemos atrodys taip:

Atkreipkite dėmesį, kad garso dirgiklio svoris didėja po kiekvieno pakartojimo (pažymėtas raudonai), ši reikšmė šiuo metu yra savavališka – pasirinkome 0,30, tačiau skaičius gali būti bet koks, net neigiamas. Po trečio kartojimo zuikio elgesio pasikeitimo nepastebėsite, tačiau po ketvirto kartojimo atsitiks kažkas nuostabaus – elgesys pasikeis.

Pašalinome oro ekspoziciją, bet triušis vis tiek mirksi, kai išgirsta pyptelėjimą! Mūsų paskutinė diagrama gali paaiškinti šį elgesį:

Mes išmokėme triušį reaguoti į garsą mirksėdami.


Tikrame tokio tipo eksperimente rezultatui pasiekti gali prireikti daugiau nei 60 pakartojimų.

Dabar paliksime biologinį smegenų ir triušių pasaulį ir bandysime viską pritaikyti
išmoko sukurti dirbtinį neuroninį tinklą. Pirmiausia pabandykime atlikti paprastą užduotį.

Tarkime, kad turime aparatą su keturiais mygtukais, kurie išduoda maistą, kai paspaudžiamas tinkamas mygtukas
mygtukai (na, arba energija, jei esate robotas). Užduotis yra išsiaiškinti, kuris mygtukas suteikia atlygį:

Galime (schematiškai) pavaizduoti, ką mygtukas daro spustelėjus taip:

Geriausia šią problemą išspręsti visiškai, todėl pažvelkime į visus galimus rezultatus, įskaitant teisingą:


Spustelėkite 3 mygtuką, kad gautumėte vakarienę.

Norėdami atkurti neuroninį tinklą kodu, pirmiausia turime sukurti modelį arba grafiką, su kuriuo būtų galima palyginti tinklą. Čia yra vienas užduočiai tinkamas grafikas, be to, jis gerai parodo jo biologinį analogą:

Šis neuroninis tinklas tiesiog priima įeinančią informaciją – šiuo atveju tai būtų suvokimas, kuris mygtukas buvo paspaustas. Tada tinklas pakeičia gaunamą informaciją svoriais ir daro išvadą, remdamasis sluoksnio pridėjimu. Tai skamba šiek tiek klaidinančiai, bet pažiūrėkime, kaip mygtukas pavaizduotas mūsų modelyje:


Atkreipkite dėmesį, kad visi svoriai yra 0, todėl neuroninis tinklas yra kaip kūdikis, visiškai tuščias, bet visiškai tarpusavyje susijęs.

Taigi mes palyginame išorinį įvykį su neuroninio tinklo įvesties sluoksniu ir apskaičiuojame jo išvesties vertę. Tai gali sutapti su tikrove arba nesutapti, bet mes kol kas į tai nekreipsime dėmesio ir pradėsime apibūdinti problemą taip, kad ją suprastų kompiuteris. Pradėkime įvesdami svorius (naudosime JavaScript):

Var įvesties = ; var svoriai = ; // Patogumo dėlei šiuos vektorius galima iškviesti
Kitas žingsnis yra sukurti funkciją, kuri renka įvesties vertes ir sveria bei apskaičiuoja išvesties vertę:

Funkcija įvertintiNeuralNetwork(inputVector,weightVector)(var rezultatas = 0; inputVector.forEach(function(inputValue, weightIndex) ( layerValue = inputValue*weightVector; rezultatas += layerValue; )); return (result.toFixed(2)); ) / / Gali atrodyti sudėtinga, bet viskas, ką reikia padaryti, yra suderinti svorio / įvesties poras ir pridėti rezultatą
Kaip ir tikėtasi, jei paleisime šį kodą, gausime tą patį rezultatą kaip ir mūsų modelyje ar diagramoje...

ĮvertintiNeuralNetwork(įvestis, svoriai); // 0,00
Tiesioginis pavyzdys: Neural Net 001.

Kitas žingsnis tobulinant mūsų neuroninį tinklą bus būdas patikrinti savo išvestį arba gautas reikšmes tokiu būdu, kuris būtų panašus į tikrąją situaciją,
pirmiausia užkoduokime šią konkrečią tikrovę į kintamąjį:

Norėdami aptikti neatitikimus (ir kiek jų yra), pridėsime klaidos funkciją:

Klaida = realybė – neuroninio tinklo išvestis
Su juo galime įvertinti savo neuroninio tinklo našumą:

Bet dar svarbiau, kaip su situacijomis, kai tikrovė duoda teigiamą rezultatą?

Dabar žinome, kad mūsų neuroninio tinklo modelis sugedęs (ir žinome, kiek), puiku! Puiku yra tai, kad dabar galime naudoti klaidos funkciją savo mokymuisi valdyti. Bet visa tai bus prasminga, jei iš naujo apibrėžsime klaidos funkciją taip:

Klaida = Norima išvestis- Neuroninio tinklo išvestis
Nepagaunamas, bet toks svarbus neatitikimas, tyliai rodantis, kad taip ir bus
Naudokite ankstesnius rezultatus, kad palygintumėte su būsimais veiksmais
(ir mokymuisi, kaip matysime vėliau). Tai taip pat egzistuoja realiame gyvenime, pilna
pasikartojantys modeliai, todėl tai gali tapti evoliucine strategija (na, in
daugeliu atvejų).

Var įvestis = ; var svoriai = ; var norimasRezultatas = 1;
Ir nauja funkcija:

Funkcija įvertintiNeuralNetError(pageidaujama,faktinė) ( return (pageidaujama - faktinė); ) // Įvertinę tinklą ir klaidą gautume: // "Neural Net output: 0.00 Error: 1"
Tiesioginis pavyzdys: Neural Net 002.

Apibendrinkime. Pradėjome nuo užduoties, ją atlikome paprastas modelis biologinio neuroninio tinklo pavidalu ir turi būdą išmatuoti jo veikimą, palyginti su realybe ar norimu rezultatu. Dabar turime rasti būdą, kaip ištaisyti neatitikimą – procesą, kuris tiek kompiuteriams, tiek žmonėms gali būti laikomas mokymusi.

Kaip išmokyti neuroninį tinklą?

Tiek biologinių, tiek dirbtinių neuroninių tinklų mokymo pagrindas yra kartojimas
Ir mokymosi algoritmai, todėl su jais dirbsime atskirai. Pradėkime nuo
mokymo algoritmai.

Gamtoje mokymosi algoritmai reiškia fizikinius ar cheminius pokyčius
neuronų charakteristikos po eksperimentų:

Dramatiška iliustracija, kaip bėgant laikui keičiasi du neuronai kode ir mūsų „mokymosi algoritmo“ modelyje, reiškia, kad laikui bėgant mes tiesiog pakeisime dalykus, kad palengvintume savo gyvenimą. Taigi, pridėkime kintamąjį, nurodantį, koks lengvas gyvenimas:

Var mokymosi rodiklis = 0,20; // Kuo didesnė reikšmė, tuo greitesnis bus mokymosi procesas :)
Ir ką tai pakeis?

Tai pakeis svorius (kaip ir triušio!), ypač išvesties svorį, kurį norime pagaminti:

Kaip koduoti tokį algoritmą – jūsų pasirinkimas, paprastumo dėlei prie svorio pridedu mokymosi faktorių, čia jis yra funkcijos pavidalu:

Funkcijų išmokimas(įvestiesVektorius, svorioVektorius) ( svorisVector.forEach(funkcija(svoris, indeksas, svoriai) ( if (inputVector > 0) (svoriai = svoris + mokymosi rodiklis; ) )); )
Kai naudojama ši treniruočių funkcija, mūsų mokymosi faktorius tiesiog pridės prie svorio vektoriaus aktyvus neuronas, prieš ir po treniruotės (arba kartojimo), rezultatai bus tokie:

// Originalus svorio vektorius: // Neuroninis grynasis išėjimas: 0.00 Klaida: 1 mokytis(įvestis, svoriai); // Naujas svorio vektorius: // Neuroninė grynoji išvestis: 0,20 Klaida: 0,8 // Jei tai nėra akivaizdu, neuroninė grynoji išvestis yra artima 1 (vištienos išvestis) – to mes ir norėjome, todėl galime daryti išvadą, kad judame link teisinga kryptimi
Tiesioginis pavyzdys: Neural Net 003.

Gerai, dabar, kai judame teisinga kryptimi, paskutinė šio galvosūkio dalis bus įgyvendinimas pasikartojimų.

Tai nėra taip sudėtinga, gamtoje mes tiesiog kartojame tą patį, bet kode tiesiog nurodome pakartojimų skaičių:

Var bandymai = 6;
O pakartojimų skaičiaus funkcijos įdiegimas mūsų mokymo neuroniniame tinkle atrodys taip:

Funkcinis traukinys (bandymai) ( (i = 0; i< trials; i++) { neuralNetResult = evaluateNeuralNetwork(input, weights); learn(input, weights); } }
Na, štai mūsų galutinė ataskaita:

Neuroninė grynoji išvestis: 0,00 Klaida: 1,00 Svorio vektorius: Neuroninė grynoji išvestis: 0,20 Klaida: 0,80 Svorio vektorius: Neuroninė Grynoji išvestis: 0,40 Klaida: 0,60 Svorio vektorius: Neuroninė Grynoji išvestis: 0,60 Klaida: 0,40 Svorio vektorius: Neuroninė 0 klaida: 0.8 : 0,20 Svorio vektorius: Neuroninis Grynasis išėjimas: 1,00 Klaida: 0,00 Svorio vektorius: // Vištienos vakarienė !
Tiesioginis pavyzdys: Neural Net 004.

Dabar turime svorio vektorių, kuris duos tik vieną išvestį (vištiena vakarienei), jei įvesties vektorius atitinka tikrovę (paspaudus trečią mygtuką).

Taigi, koks šauniausias dalykas, kurį ką tik padarėme?

Šiuo konkrečiu atveju mūsų neuroninis tinklas (po treniruotės) gali atpažinti įvesties duomenis ir pasakyti, kas lems norimą rezultatą (vis tiek reikės užprogramuoti konkrečias situacijas):

Be to, tai yra keičiamo dydžio modelis, žaislas ir mūsų mokymosi įrankis. Galėjome išmokti kažko naujo apie mašininį mokymąsi, neuroninius tinklus ir dirbtinį intelektą.

Įspėjimas vartotojams:

  • Nėra išmoktų svorių saugojimo mechanizmo, todėl šis neuroninis tinklas pamirš viską, ką žino. Atnaujinant ar paleidžiant kodą reikia bent šešių sėkmingų iteracijų, kad tinklas pilnai išmoktų, jei manote, kad žmogus ar mašina mygtukus paspaus atsitiktinai... Tai užtruks.
  • Biologiniai tinklai, skirti mokytis svarbių dalykų, turi 1 mokymosi koeficientą, todėl reikėtų tik vienos sėkmingos iteracijos.
  • Yra mokymosi algoritmas, labai panašus į biologinius neuronus, ir turi patrauklų pavadinimą: Widroff-Hoff taisyklė, arba Widroff-hoff treniruotės.
  • Į neuronų slenksčius (mūsų pavyzdyje 1) ir perkvalifikavimo efektus (su dideliu pakartojimų skaičiumi rezultatas bus didesnis nei 1) neatsižvelgiama, tačiau jie yra labai svarbūs gamtoje ir yra atsakingi už didelius ir sudėtingus elgesio reakcijų blokus. . Taip pat ir neigiamus svorius.

Pastabos ir nuorodų sąrašas tolesniam skaitymui

Bandžiau vengti matematikos ir griežtų terminų, bet jei jus domina, sukūrėme perceptroną, kuris apibrėžiamas kaip dvigubų klasifikatorių prižiūrimas mokymosi algoritmas (supervizuotas mokymasis) – sunkus dalykas.

Biologinė smegenų struktūra nėra paprasta tema, iš dalies dėl netikslumo ir iš dalies dėl sudėtingumo. Geriau pradėti nuo Neurologijos (Purves) ir Kognityvinės neurologijos (Gazzaniga). Pakeičiau ir pritaikiau triušio pavyzdį iš Gateway to Memory (Gluck), kuris taip pat yra puikus įvadas į grafikų pasaulį.

Įvadas į neuroninius tinklus (Gurney) yra dar vienas puikus šaltinis visiems jūsų AI poreikiams patenkinti.

O dabar Python! Dėkojame Iljai Andshmidtui, kad pateikė Python versiją:

Įvestys = svoriai = norimas_rezultatas = 1 mokymosi greitis = 0,2 bandymų = 6 def įvertinti_neuralinis_tinklas(įvesties_masyvas, svorio_masyvas): rezultatas = 0 diapazone (len(įvesties_masyvas)): sluoksnio_vertė = įvesties_masyvas[i] * svorio_masyvas[i] rezultatas += sluoksnis_ print("evaluate_neural_network: " + str(result)) print("svoriai: " + str(svoriai)) return rezultatas def įvertinti_klaida(pageidaujamas, faktinis): klaida = norima - faktinis spausdinimas("vertinti_klaida: " + str(klaida) ) grąžinti klaidą def learning(įvesties_masyvas, svorio_masyvas): print("mokymasis...") for i diapazone(len(įvesties_masyvas)): if įvesties_masyvas[i] > 0: weight_array[i] += learning_rate def train(bandymai) ): i diapazone (bandymai): neural_net_result = vertinti_neural_network(įvestis, svoriai) mokytis(įvestis, svoriai) treniruotis(bandymai)
O dabar pirmyn! Ačiū Kieran Maher už šią versiją.

Paketo pagrindinis importas ("fmt" "matematika") func main() ( fmt.Println("Įvesties ir svorių kūrimas...") inputs:= float64(0.00, 0.00, 1.00, 0.00) weights:= float64(0.00, 0,00, 0,00, 0,00) pageidaujamas:= 1,00 mokymosi rodiklis:= 0,20 bandymų:= 6 treniruotės (bandymai, įvesties, svoriai, pageidaujamas, mokymosi rodiklis) ) funkcinis traukinys (bandymai int, įvesties plūdimas64, svoriai plūduriuoja64, norimi plūduriuoti64,4 mokymasis i:= 1;i< trials; i++ { weights = learn(inputs, weights, learningRate) output:= evaluate(inputs, weights) errorResult:= evaluateError(desired, output) fmt.Print("Output: ") fmt.Print(math.Round(output*100) / 100) fmt.Print("\nError: ") fmt.Print(math.Round(errorResult*100) / 100) fmt.Print("\n\n") } } func learn(inputVector float64, weightVector float64, learningRate float64) float64 { for index, inputValue:= range inputVector { if inputValue >0,00 ( svorisVector = svorisVektorius + mokymosi greitis ) return weightVector ) func value(inputVector float64, weightVector float64) float64 ( rezultatas:= 0,00 indeksui, inputValue:= diapazonas inputVector ( layerValue:= inputValue * weightVector rezultatas) = ​​rezultatas func assessmentError(norimas float64, faktinis float64) float64 (grąžinti pageidaujamą - faktinis )

Galite padėti ir pervesti šiek tiek lėšų svetainės plėtrai

 

Pirmąjį 2016 metų pusmetį pasaulis išgirdo apie daugybę naujovių neuroninių tinklų srityje – savo algoritmus demonstravo Google (Go tinklo grotuvas AlphaGo), Microsoft (daug vaizdų identifikavimo paslaugų), startuoliai MSQRD, Prisma ir kt.

Į žymes

Svetainės redaktoriai pasakoja, kas yra neuroniniai tinklai, kam jie reikalingi, kodėl planetą užvaldė būtent dabar, o ne metais anksčiau ar vėliau, kiek iš jų galima uždirbti ir kas yra pagrindiniai rinkos žaidėjai. Savo nuomonėmis taip pat pasidalijo MIPT, Yandex, Mail.Ru Group ir Microsoft ekspertai.

Kas yra neuroniniai tinklai ir kokias problemas jie gali išspręsti?

Neuroniniai tinklai yra viena iš dirbtinio intelekto sistemų kūrimo krypčių. Idėja yra kuo tiksliau modeliuoti žmogaus nervų sistemos funkcionavimą – būtent jos gebėjimą mokytis ir taisyti klaidas. Tai yra Pagrindinis bruožas bet koks neuroninis tinklas – jis geba mokytis savarankiškai ir veikti remdamasis ankstesne patirtimi, kaskart darydamas vis mažiau klaidų.

Neuroninis tinklas imituoja ne tik žmogaus nervų sistemos veiklą, bet ir struktūrą. Toks tinklas susideda iš daugybės atskirų skaičiavimo elementų („neuronų“). Daugeliu atvejų kiekvienas „neuronas“ priklauso tam tikram tinklo sluoksniui. Įvesties duomenys nuosekliai apdorojami visuose tinklo sluoksniuose. Kiekvieno „neurono“ parametrai gali keistis priklausomai nuo rezultatų, gautų naudojant ankstesnius įvesties duomenų rinkinius, taip keičiant visos sistemos veikimo tvarką.

„Mail.Ru Group“ Mail.ru paieškos skyriaus vadovas Andrejus Kalininas pažymi, kad neuroniniai tinklai gali išspręsti tas pačias problemas kaip ir kiti mašininio mokymosi algoritmai, skiriasi tik požiūris į mokymą.

Visos užduotys, kurias gali išspręsti neuroniniai tinklai, yra kažkaip susijusios su mokymusi. Tarp pagrindinių neuroninių tinklų taikymo sričių yra prognozavimas, sprendimų priėmimas, modelių atpažinimas, optimizavimas ir duomenų analizė.

„Microsoft“ Rusijoje technologinio bendradarbiavimo programų direktorius Vladas Šeršulskis pažymi, kad neuroniniai tinklai dabar naudojami visur: „Pavyzdžiui, daugelis didelių interneto svetainių juos naudoja, kad reakcija į vartotojų elgesį būtų natūralesnė ir naudingesnė auditorijai. Daugumos pagrindas yra neuroniniai tinklai modernios sistemos kalbos atpažinimas ir sintezė, taip pat vaizdo atpažinimas ir apdorojimas. Jie naudojami kai kuriose navigacijos sistemose, nesvarbu, ar tai pramoniniai robotai, ar savarankiškai važiuojantys automobiliai. Apsaugo neuroninių tinklų algoritmai Informacinės sistemos nuo kenkėjiškų atakų ir padėti atpažinti neteisėtą turinį tinkle“.

Artimiausiu metu (5-10 metų), Shershulsky mano, neuroniniai tinklai bus naudojami dar plačiau:

Įsivaizduokite žemės ūkio kombainą, kurio pavarose sumontuota daug vaizdo kamerų. Per minutę kiekvieno augalo trajektorijoje nufotografuoja penkis tūkstančius nuotraukų ir, naudodamas neuroninį tinklą, analizuoja, ar tai piktžolė, ar nepakenkta ligai, ar kenkėjams. Ir kiekvienas augalas apdorojamas atskirai. Fantastinis? Jau tikrai ne. O po penkerių metų tai gali tapti norma. – Vladas Šeršulskis, „Microsoft“.

Michailas Burcevas, MIPT Gyvųjų sistemų centro Neuroninių sistemų ir giluminio mokymosi laboratorijos vadovas, pateikia preliminarų neuronų tinklų plėtros 2016–2018 m. žemėlapį:

  • Sistemos objektams atpažinti ir klasifikuoti vaizduose;
  • Daiktų interneto balso sąveikos sąsajos;
  • paslaugų kokybės stebėjimo sistemos skambučių centruose;
  • gedimų aptikimo sistemos (įskaitant tas, kurios numato laiką Priežiūra), anomalijos, kibernetinės fizinės grėsmės;
  • intelektinės apsaugos ir stebėjimo sistemos;
  • kai kurių skambučių centro operatorių funkcijų pakeitimas robotais;
  • vaizdo analizės sistemos;
  • savarankiško mokymosi sistemos, optimizuojančios medžiagų srautų valdymą ar objektų išsidėstymą (sandėliuose, transporte);
  • intelektualios, savarankiškai besimokančios valdymo sistemos gamybos procesams ir įrenginiams (įskaitant robotiką);
  • universalių tiesioginio vertimo sistemų, skirtų konferencijoms ir asmeniniam naudojimui, atsiradimas;
  • botų konsultantų atsiradimas Techninė pagalba arba asmeniniai padėjėjai, kurių funkcijos panašios į žmogaus.

„Yandex“ technologijų platinimo direktorius Grigorijus Bakunovas mano, kad per ateinančius penkerius metus neuroninių tinklų platinimo pagrindas bus galimybė tokias sistemas pritaikyti. įvairių sprendimų: „Pagrindinis dalykas, kurį neuroniniai tinklai dabar daro žmogui, yra išgelbėti jį nuo nereikalingų sprendimų priėmimo. Taigi jie gali būti naudojami beveik visur, kur ne itin protingus sprendimus priima gyvas žmogus. Per ateinančius penkerius metus būtent šis įgūdis bus išnaudojamas, kuris pakeis žmogaus sprendimų priėmimą paprasta mašina.

Kodėl neuroniniai tinklai tapo tokie populiarūs dabar?

Mokslininkai dirbtinius neuroninius tinklus kuria daugiau nei 70 metų. Pirmasis bandymas formalizuoti neuroninį tinklą datuojamas 1943 m., kai du amerikiečių mokslininkai (Warren McCulloch ir Walter Pitts) pristatė straipsnį apie žmogaus idėjų ir nervų veiklos loginį skaičiavimą.

Tačiau dar visai neseniai, sako Andrejus Kalininas iš Mail.Ru Group, neuroninių tinklų greitis buvo per mažas, kad jie plačiai paplitų, todėl tokios sistemos daugiausia buvo naudojamos su kompiuteriniu regėjimu susijusiuose kūrime, o kitose srityse buvo naudojami kiti algoritmai. mašininis mokymasis.

Daug darbo ir daug laiko reikalaujanti neuroninio tinklo kūrimo proceso dalis yra jo mokymas. Kad neuroninis tinklas teisingai išspręstų priskirtas problemas, jis turi „paleisti“ savo darbą su dešimtimis milijonų įvesties duomenų rinkinių. Būtent su įvairių pagreitinto mokymosi technologijų atsiradimu Andrejus Kalininas ir Grigorijus Bakunovas sieja neuroninių tinklų plitimą.

Pagrindinis dalykas, kuris dabar atsitiko, yra tai, kad atsirado įvairių gudrybių, kurios leidžia sukurti neuroninius tinklus, kurie yra daug mažiau jautrūs perkvalifikavimui. - Grigorijus Bakunovas, „Yandex“

„Pirma, atsirado didelis ir viešai prieinamas pažymėtų vaizdų masyvas (ImageNet), kuriame galite mokytis. Antra, šiuolaikinės vaizdo plokštės leidžia treniruoti neuroninius tinklus ir jais naudotis šimtus kartų greičiau. Trečia, atsirado paruošti, iš anksto apmokyti neuroniniai tinklai, atpažįstantys vaizdus, ​​kurių pagrindu galima kurti savo aplikacijas, nereikia ilgai ruošti neuroninio tinklo darbui. Visa tai užtikrina labai galingą neuroninių tinklų plėtrą būtent vaizdų atpažinimo srityje“, – pažymi Kalininas.

Koks yra neuroninių tinklų rinkos dydis?

„Labai lengva apskaičiuoti. Galite imtis bet kurios srities, kurioje dirba žemos kvalifikacijos darbuotojai, pavyzdžiui, skambučių centro agentai, ir tiesiog atimti visus žmogiškuosius išteklius. sakyčiau taip mes kalbame apie apie kelių milijardų dolerių rinką net vienoje šalyje. Nesunku suprasti, kiek žmonių pasaulyje dirba žemos kvalifikacijos darbus. Taigi, net ir kalbant labai abstrakčiai, manau, kad mes kalbame apie šimto milijardų dolerių rinką visame pasaulyje“, – sako Grigorijus Bakunovas, „Yandex“ technologijų platinimo direktorius.

Remiantis kai kuriais skaičiavimais, daugiau nei pusė profesijų bus automatizuotos – tai yra didžiausia apimtis, kuria galima padidinti mašininio mokymosi algoritmų (ir ypač neuroninių tinklų) rinką. – Andrejus Kalininas, „Mail.Ru Group“

„Mašininio mokymosi algoritmai yra kitas žingsnis automatizuojant bet kokius procesus, kuriant bet kokius programinė įranga. Todėl rinka bent jau sutampa su visa programinės įrangos rinka, o greičiau ją pranoksta, nes tampa įmanoma kurti naujus išmaniuosius sprendimus, neprieinamus senai programinei įrangai“, – tęsia Andrejus Kalininas, „Mail“ Mail.ru paieškos skyriaus vadovas. Ru grupė.

Kodėl neuroninių tinklų kūrėjai kuria mobiliąsias programas masinei rinkai

Per pastaruosius kelis mėnesius rinkoje pasirodė keli aukšto lygio pramoginiai projektai naudojant neuroninius tinklus – tai populiari vaizdo paslauga, kuri Socialinis tinklas Facebook, ir rusiškos aplikacijos vaizdo apdorojimui (birželio mėn. investicijos iš Mail.Ru Group) ir kt.

Savo neuroninių tinklų galimybes pademonstravo ir „Google“ („AlphaGo“ technologija laimėjo prieš čempioną Go; 2016 m. kovą korporacija aukcione pardavė 29 neuroniniais tinklais nupieštus paveikslus ir kt.), ir „Microsoft“ (projektas „CaptionBot“, kuris atpažįsta nuotraukose esančius vaizdus ir automatiškai sukuria jiems antraštes; „WhatDog“ projektas, kuris pagal nuotrauką nustato šuns veislę; „HowOld“ paslauga, kuri nustato nuotraukoje esančio žmogaus amžių ir pan., „Yandex“ Birželio mėnesį komanda į Avto.ru programą sukūrė automobilių atpažinimo nuotraukose paslaugą, pristatė neuroninių tinklų albumo įrašytą muzikinį įrašą, gegužę sukūrė projektą LikeMo.net, skirtą piešti garsių menininkų stiliumi).

Tokios pramogų paslaugos kuriamos ne globalioms problemoms spręsti, į kurias ir yra skirti neuroniniai tinklai, o neuroninio tinklo galimybėms pademonstruoti ir jo mokymui atlikti.

„Žaidimai yra būdingas mūsų, kaip rūšies, elgesio bruožas. Viena vertus, žaidimo situacijos gali būti naudojamos imituojant beveik visus tipiškus žmogaus elgesio scenarijus, kita vertus, žaidimų kūrėjai ir ypač žaidėjai gali patirti daug malonumo iš šio proceso. Taip pat yra grynai utilitarinis aspektas. Gerai suplanuotas žaidimas ne tik teikia pasitenkinimą žaidėjams: žaisdami jie lavina neuroninio tinklo algoritmą. Juk neuroniniai tinklai yra pagrįsti mokymusi iš pavyzdžio“, – sako Vladas Shershulsky iš Microsoft.

„Visų pirma tai daroma siekiant parodyti technologijos galimybes. Kitos priežasties tikrai nėra. Jei kalbame apie „Prisma“, tai aišku, kodėl jie tai padarė. Vaikinai pastatė kažkokį vamzdyną, leidžiantį dirbti su paveikslėliais. Norėdami tai pademonstruoti, jie pasirinko gana paprastą stilizacijų kūrimo būdą. Kodėl gi ne? Tai tik algoritmų veikimo demonstravimas“, – sako Grigorijus Bakunovas iš „Yandex“.

Andrejus Kalininas iš Mail.Ru Group turi kitokią nuomonę: „Žinoma, tai įspūdinga visuomenės požiūriu. Kita vertus, nepasakyčiau, kad pramogų produktų negalima pritaikyti naudingesnėms sritims. Pavyzdžiui, vaizdų stilizavimo užduotis yra labai svarbi daugeliui pramonės šakų (dizainas, Kompiuteriniai žaidimai, animacija yra tik keli pavyzdžiai), o visapusiškas neuroninių tinklų naudojimas gali žymiai optimizuoti jų turinio kūrimo išlaidas ir metodus.

Pagrindiniai neuroninių tinklų rinkos dalyviai

Kaip pažymi Andrejus Kalininas, iš esmės dauguma rinkoje esančių neuroninių tinklų mažai skiriasi vienas nuo kito. „Visų technologijos yra maždaug vienodos. Tačiau neuroninių tinklų naudojimas yra malonumas, kurį ne visi gali sau leisti. Norint savarankiškai išmokyti neuroninį tinklą ir atlikti daugybę eksperimentų, jums reikia didelių mokymo rinkinių ir mašinų parko su brangiomis vaizdo plokštėmis. Akivaizdu, kad tokių galimybių yra didelės įmonės", jis sako.

Iš pagrindinių rinkos žaidėjų Kalininas mini „Google“ ir jos padalinį „Google DeepMind“, sukūrusį „AlphaGo“ tinklą, bei „Google Brain“. „Microsoft“ turi savo patobulinimų šioje srityje – juos vykdo „Microsoft Research“ laboratorija. Neuroninių tinklų kūrimas vykdomas IBM, Facebook (Facebook AI tyrimų padalinys), Baidu (Baidu Institute of Deep Learning) ir kt. Techniniuose universitetuose visame pasaulyje vykdoma daug patobulinimų.

„Yandex“ technologijų platinimo direktorius Grigorijus Bakunovas pažymi, kad įdomių pokyčių neuroninių tinklų srityje pastebima ir tarp startuolių. „Prisiminčiau, pavyzdžiui, įmonę ClarifAI. Tai mažas startuolis, kurį kažkada sukūrė žmonės iš „Google“. Dabar jie galbūt geriausiai pasaulyje nustato nuotraukos turinį. Tokie startuoliai yra MSQRD, Prisma ir kt.

Rusijoje neuroninių tinklų plėtrą vykdo ne tik startuoliai, bet ir didelės technologijų įmonės – pavyzdžiui, „Mail.Ru Group“ holdingas naudoja neuroninius tinklus tekstams apdoroti ir klasifikuoti Paieškoje ir vaizdų analizėje. Bendrovė taip pat vykdo eksperimentinę plėtrą, susijusią su robotais ir pokalbių sistemomis.

„Yandex“ taip pat kuria savo neuroninius tinklus: „Iš esmės tokie tinklai jau naudojami dirbant su vaizdais ir garsu, tačiau tiriame jų galimybes kitose srityse. Dabar atliekame daug eksperimentų, kaip naudoti neuroninius tinklus dirbant su tekstu. Vykdomi universitetai: Skoltech, MIPT, Maskvos valstybinis universitetas, Aukštoji ekonomikos mokykla ir kt.

Dirbtinis neuroninis tinklas yra vienas su kitu sąveikaujančių neuronų rinkinys. Jie gali priimti, apdoroti ir kurti duomenis. Tai taip pat sunku įsivaizduoti kaip darbą. žmogaus smegenys. Neuroninis tinklas mūsų smegenyse veikia taip, kad jūs galite tai perskaityti dabar: mūsų neuronai atpažįsta raides ir įvardija jas žodžiais.

Dirbtinis neuroninis tinklas yra kaip smegenys. Iš pradžių jis buvo užprogramuotas supaprastinti kai kuriuos sudėtingus skaičiavimo procesus. Šiandien neuroniniai tinklai turi daug daugiau galimybių. Kai kurie iš jų yra jūsų išmaniajame telefone. Kita dalis savo duomenų bazėje jau įrašė, kad atidarėte šį straipsnį. Kaip visa tai vyksta ir kodėl, skaitykite toliau.

Kaip viskas prasidėjo

Žmonės labai norėjo suprasti, iš kur kyla žmogaus protas ir kaip veikia smegenys. Praėjusio amžiaus viduryje tai suprato kanadiečių neuropsichologas Donaldas Hebas. Hebbas tyrinėjo neuronų sąveiką tarpusavyje, ištyrė principą, kuriuo jie sujungiami į grupes (moksliškai tariant – ansamblius) ir pasiūlė pirmąjį moksle neuroninių tinklų mokymo algoritmą.

Po kelerių metų amerikiečių mokslininkų grupė sumodeliavo dirbtinį neuroninį tinklą, galintį atskirti kvadratines formas nuo kitų formų.

Kaip veikia neuroninis tinklas?

Tyrėjai išsiaiškino, kad neuronų tinklas yra neuronų sluoksnių rinkinys, kurių kiekvienas yra atsakingas už tam tikro kriterijaus atpažinimą: formą, spalvą, dydį, tekstūrą, garsą, garsumą ir kt. Metai iš metų dėl milijonų eksperimentai ir daugybė skaičiavimų, paprasčiausias tinklas Buvo pridėta vis daugiau neuronų sluoksnių. Jie dirba pakaitomis. Pavyzdžiui, pirmasis nustato, ar kvadratas yra kvadratas, ar ne, antrasis supranta, ar kvadratas yra raudonas, ar ne, trečiasis apskaičiuoja kvadrato dydį ir pan. Ne kvadratai, ne raudoni ir netinkamo dydžio formos patenka į naujas neuronų grupes ir yra jų tyrinėjamos.

Kas yra neuroniniai tinklai ir ką jie gali padaryti?

Mokslininkai sukūrė neuroninius tinklus, kad galėtų atskirti sudėtingus vaizdus, ​​vaizdo įrašus, tekstus ir kalbą. Šiandien yra daugybė neuroninių tinklų tipų. Jie klasifikuojami priklausomai nuo architektūros – duomenų parametrų rinkinių ir šių parametrų svorio, tam tikro prioriteto. Žemiau yra keletas iš jų.

Konvoliuciniai neuroniniai tinklai

Neuronai skirstomi į grupes, kiekviena grupė apskaičiuoja jai duotą charakteristiką. 1993 metais prancūzų mokslininkas Yann LeCun parodė pasauliui LeNet 1 – pirmąjį konvoliucinį neuronų tinklą, galintį greitai ir tiksliai atpažinti ant popieriaus ranka užrašytus skaičius. Pasižiūrėk pats:

Šiandien konvoliuciniai neuroniniai tinklai daugiausia naudojami multimedijos tikslais: jie dirba su grafika, garsu ir vaizdu.

Pasikartojantys neuroniniai tinklai

Neuronai nuosekliai įsimena informaciją ir remdamiesi šiais duomenimis kuria tolesnius veiksmus. 1997 metais vokiečių mokslininkai paprasčiausius pasikartojančius tinklus pakeitė į tinklus su ilgalaike trumpalaike atmintimi. Jų pagrindu buvo sukurti tinklai su kontroliuojamais pasikartojančiais neuronais.

Šiandien tokių tinklų pagalba rašomi ir verčiami tekstai, užprogramuojami botai vesti prasmingus dialogus su žmonėmis, kuriami puslapių ir programų kodai.

Tokio tipo neuroninių tinklų naudojimas yra galimybė analizuoti ir generuoti duomenis, sudaryti duomenų bazes ir net daryti prognozes.

2015 m. „SwiftKey“ išleido pirmąją pasaulyje klaviatūrą, veikiančią pasikartojančiame neuroniniame tinkle su valdomais neuronais. Tada sistema teikė užuominas renkant pagal paskutinius įvestus žodžius. Praėjusiais metais kūrėjai išmokė neuroninį tinklą ištirti renkamo teksto kontekstą, o užuominos tapo prasmingos ir naudingos:

Kombinuoti neuroniniai tinklai (konvoliucinis + pasikartojantis)

Tokie neuroniniai tinklai sugeba suprasti, kas yra vaizde, ir tai apibūdinti. Ir atvirkščiai: pieškite vaizdus pagal aprašymą. Ryškiausią pavyzdį pademonstravo Kyle'as MacDonaldas, pasivaikščiojęs po Amsterdamą neuroniniu tinklu. Tinklas akimirksniu nustatė, kas yra priešais jį. Ir beveik visada tiksliai:

Neuroniniai tinklai nuolatos mokosi savarankiškai. Per šį procesą:

1. „Skype“ pristatė sinchroninio vertimo galimybes 10 kalbų. Tarp kurių trumpam yra rusų ir japonų – vieni sunkiausių pasaulyje. Žinoma, vertimo kokybė reikalauja rimto tobulėjimo, tačiau įkvepia pats faktas, kad dabar su kolegomis iš Japonijos galite bendrauti rusiškai ir būti tikri, kad būsite suprasti.

2. „Yandex“ sukūrė du, pagrįstus neuroniniais tinklais paieškos algoritmas: „Palechas“ ir „Korolev“. Pirmasis padėjo rasti tinkamiausias svetaines žemo dažnio užklausos. „Palechas“ ištyrė puslapių antraštes ir palygino jų reikšmę su užklausų reikšme. Remiantis Palekh, pasirodė Korolevas. Šis algoritmas įvertina ne tik pavadinimą, bet ir visą puslapio tekstinį turinį. Paieška tampa vis tikslesnė, o svetainių savininkai pradeda protingiau žiūrėti į puslapio turinį.

3. SEO kolegos iš „Yandex“ sukūrė muzikinį neuroninį tinklą: jis kuria poeziją ir rašo muziką. Neurogrupė simboliškai vadinama Neurona ir jau turi pirmąjį albumą:

4. „Google Inbox“ naudoja neuroninius tinklus, kad atsakytų į pranešimus. Technologijų plėtra įsibėgėja, o šiandien tinklas jau studijuoja korespondenciją ir generuoja galimi variantai atsakyti. Nereikia gaišti laiko spausdinimui ir nebijoti pamiršti kokį nors svarbų susitarimą.

5. „YouTube“ naudoja neuroninius tinklus vaizdo įrašams reitinguoti ir pagal iš karto du principus: vienas neuroninis tinklas tiria vaizdo įrašus ir auditorijos reakcijas į juos, kitas atlieka vartotojų ir jų pageidavimų tyrimus. Štai kodėl „YouTube“ rekomendacijos visada yra naudingos.

6. Facebook aktyviai dirba su DeepText AI – komunikacijos programa, kuri supranta žargoną ir išvalo pokalbius nuo nepadorios kalbos.

7. Tokios programos kaip Prisma ir Fabby, sukurtos ant neuroninių tinklų, kuria vaizdus ir vaizdo įrašus:

Colorize atkuria spalvas juodai baltose nuotraukose (nustebink močiutę!).

MakeUp Plus atrenka tobulus lūpų dažus mergaitėms iš daugybės tikrų prekių ženklų: Bobbi Brown, Clinique, Lancome ir YSL jau veikia.


8.
„Apple“ ir „Microsoft“ nuolat atnaujina savo neuroninius „Siri“ ir „Contana“. Kol kas jie tik vykdo mūsų užsakymus, bet artimiausiu metu ims imtis iniciatyvos: teikti rekomendacijas ir numatyti mūsų norus.

Kas dar mūsų laukia ateityje?

Savarankiškai besimokantys neuroniniai tinklai gali pakeisti žmones: jie prasidės nuo tekstų kūrėjų ir korektorių. Robotai jau kuria tekstus, turinčius prasmę ir be klaidų. Ir jie tai daro daug greičiau nei žmonės. Jie ir toliau dirbs su skambučių centro darbuotojais, technine pagalba, viešųjų puslapių socialiniuose tinkluose moderatoriais ir administratoriais. Neuroniniai tinklai jau gali išmokti scenarijų ir atkurti jį balsu. O kaip kitose srityse?

Žemės ūkio sektorius

Neuroninis tinklas bus įdiegtas į specialią įrangą. Kombainai autopilotuos, nuskaitys augalus ir tyrinės dirvožemį, perduos duomenis į neuroninį tinklą. Ji nuspręs, ar laistyti, tręšti ar purkšti nuo kenkėjų. Vietoj poros dešimčių darbuotojų jums reikės daugiausia dviejų specialistų: prižiūrėtojo ir techninio.

Vaistas

„Microsoft“ šiuo metu aktyviai dirba kurdama vaistą nuo vėžio. Mokslininkai užsiima bioprogramavimu – bando skaitmeninti navikų atsiradimo ir vystymosi procesą. Kai viskas pavyks, programuotojai galės rasti būdą, kaip tokį procesą blokuoti, ir pagal analogiją bus sukurtas vaistas.

Rinkodara

Rinkodara yra labai individualizuota. Jau dabar neuroniniai tinklai gali per kelias sekundes nustatyti, kokį turinį kuriam vartotojui ir už kokią kainą rodyti. Ateityje rinkodaros specialisto dalyvavimas procese bus sumažintas iki minimumo: neuroniniai tinklai pagal vartotojų elgsenos duomenis prognozuos užklausas, nuskaitys rinką ir pateiks tinkamiausius pasiūlymus iki to laiko, kai žmogus pagalvos apie pirkimą.

El. prekyba

Elektroninė prekyba bus įdiegta visur. Jums nebereikia eiti į internetinę parduotuvę naudojant nuorodą: viską, kur matote, galite nusipirkti vienu paspaudimu. Pavyzdžiui, šį straipsnį skaitote po kelerių metų. Jums labai patinka lūpų dažai ekrano kopijoje iš MakeUp Plus programos (žr. aukščiau). Paspaudi ant jo ir eini tiesiai į krepšelį. Arba žiūrėkite vaizdo įrašą apie Naujausias Modelis Hololens (mišrios realybės akiniai) ir nedelsdami pateikite užsakymą tiesiai iš „YouTube“.

Beveik kiekvienoje srityje bus vertinami specialistai, išmanantys ar bent išmanantys neuroninių tinklų struktūrą, mašininį mokymąsi ir dirbtinio intelekto sistemas. Mes egzistuosime kartu su robotais. Ir kuo daugiau apie juos žinosime, tuo ramesnis bus mūsų gyvenimas.

P.S.„Zinaida Falls“ yra „Yandex“ neuroninis tinklas, rašantis poeziją. Įvertinkite darbą, kurį mašina parašė po Majakovskio apmokymo (išsaugota rašyba ir skyrybos ženklai):

« Tai»

Tai
tik viskas
kažkas
ateityje
ir galia
tas asmuo
yra viskas pasaulyje ar ne
aplink yra kraujas
sandoris
sustorėti
šlovė
žemė
su trenksmu į snapą

Įspūdinga, tiesa?

Taip atsitiko, kad universitete neuroninių tinklų temą sėkmingai perėmė mano specialybė, nepaisant didžiulio susidomėjimo. Mėginimus ugdytis nemokšiškiai kelis kartus daužė į nesugriaunamas mokslo citadelės sienas, prisidengdami nesuprantamais terminais ir painiais paaiškinimais sausa universitetinių vadovėlių kalba.

Šiame straipsnyje (straipsnių serijoje?) pabandysiu apžvelgti neuroninių tinklų temą neišmanančio žmogaus požiūriu, paprasta kalba, įjungta paprasti pavyzdžiai, sudėti viską į lentynas, o ne „neuronų masyvas sudaro perceptroną, veikiantį pagal gerai žinomą, patikrintą schemą“.

Tiems, kurie domisi, skaitykite kat.

Tikslai
Kam skirti neuroniniai tinklai?
Neuroninis tinklas yra mokymosi sistema. Jis veikia ne tik pagal nurodytą algoritmą ir formules, bet ir remiantis ankstesne patirtimi. Savotiškas vaikas, kuris kiekvieną kartą dėlioja dėlionę ir daro vis mažiau klaidų.

Sutikime, kad neuronas yra tik kažkokia įsivaizduojama juodoji dėžė, turinti krūvą įvesties angų ir vieną išvesties angą.
Be to, tiek gaunama, tiek išsiunčiama informacija gali būti analogiška (dažniausiai taip ir bus).

Kaip iš įvesties signalų krūvos susidaro išvesties signalas, lemia vidinis neurono algoritmas.

Pavyzdžiui, parašykime nedidelę programą, kuri atpažins paprastus vaizdus, ​​tarkime, rusų kalbos raides rastriniai vaizdai.
Sutikime, kad pradinė būklė mūsų sistema turės „tuščią“ atmintį, t.y. savotiškos naujagimio smegenys, pasiruošusios mūšiui.
Kad jis veiktų tinkamai, turėsime skirti laiko treniruotėms.

Vengdamas į mane skraidančių pomidorų, pasakysiu, kad rašysime Delfyje (rašymo metu šis straipsnis buvo po ranka). Jei reikės, padėsiu pavyzdį išversti į kitas kalbas.

Taip pat prašau nerimtai vertinti kodo kokybę - programa buvo parašyta per valandą, kad suprastumėte temą, toks kodas vargu ar tinka rimtoms problemoms.

Taigi, kiek gali būti išėjimo parinkčių, atsižvelgiant į atliekamą užduotį? Teisingai, tiek raidžių, kiek galime atpažinti. Kol kas abėcėlėje jų yra tik 33, todėl tuo ir sustosime.

Dėl to reikia sukurti 33 neuronus, kurių kiekvienas turės 30x30=900 įėjimų.
Sukurkime savo neurono klasę:

Tipas Neuron = klasės pavadinimas: eilutė; // Čia neurono pavadinimas yra raidė, su kuria jis susietas. Įvestis: sveikųjų skaičių masyvas; // Čia įvesties masyvas yra 30x30 output:integer; // Čia jis pasakys, kad nusprendė atmintis: array of integer; // Čia bus saugoma patirtis apie ankstesnės patirties pabaigą;

Sukurkime neuronų masyvą pagal raidžių skaičių:

Nuo i:=0 iki 32 pradėkite neuro_web[i]:=Neuronas.Create; neuro_web[i].output:=0; // Kol kas tyli neuro_web[i].name:=chr(Ord("A")+i); // Raidės nuo A iki Z pabaigos;

Dabar kyla klausimas - kur mes saugosime neuroninio tinklo „atmintį“, kai programa neveikia?
Kad nesigilinčiau į INI arba, neduok Dieve, duomenų bazes, nusprendžiau jas saugoti tuose pačiuose 30x30 bitmaps.
Pavyzdžiui, čia yra neurono „K“ atmintis paleidus programą skirtingais šriftais:

Kaip matote, labiausiai prisotintos sritys atitinka dažniausiai pasitaikančius pikselius.
Mes įkelsime „atmintį“ į kiekvieną neuroną, kai jis bus sukurtas:
p:=TBitmap.Sukurti; p.LoadFromFile(ExtractFilePath(Application.ExeName)+"\res\"+ neuro_web[i].name+.bmp")

Netreniruotos programos pradžioje kiekvieno neurono atmintis bus 30x30 balta dėmė.

Neuronas bus atpažintas taip:

Paimkite 1 pikselį
- Palyginkite jį su 1-uoju atminties pikseliu (ten yra reikšmė 0...255)
- Palyginkite skirtumą su tam tikra riba
- Jei skirtumas mažesnis už slenkstį, darome prielaidą, kad šiuo metu raidė yra panaši į atmintyje esančią, prie neurono svorio pridėkite +1.

Ir taip visiems pikseliais.

Neurono svoris yra tam tikras skaičius (teoriškai iki 900), kurį lemia apdorotos informacijos panašumo į atmintyje saugomą laipsnį.
Atpažinimo pabaigoje turėsime neuronų rinkinį, kurių kiekvienas tiki, kad jis yra teisingas tam tikru procentu. Šie procentai yra neurono svoris. Kuo didesnis svoris, tuo didesnė tikimybė, kad šis neuronas yra teisingas.

Dabar mes pateiksime programai savavališką vaizdą ir paleisime kiekvieną neuroną per jį:

Jei x:=0–29, atlikite y:=0–29, pradėkite n:=neuro_web[i].memory; m:=neuro_web[i].input; if ((abs(m-n)<120)) then // Порог разницы цвета if m<250 then neuro_web[i].weight:=neuro_web[i].weight+1; // Кроме того, не будем учитывать белые пиксели, чтобы не получать лишних баллов в весах if m<>0 tada pradėkite, jei m<250 then n:=round((n+(n+m)/2)/2); neuro_web[i].memory:=n; end else if n<>0 tada jei m<250 then n:=round((n+(n+m)/2)/2); neuro_web[i].memory:=n; end;

Kai tik baigsis paskutinio neurono ciklas, iš visų jų išsirinksime didžiausią svorį turintį:

Jei neuro_web[i].weight>max, tada prasideda max:=neuro_web[i].weight; max_n:=i; galas;

Remdamasi šia max_n reikšme, programa mums pasakys, ką, jos nuomone, mes praleidome.
Iš pradžių tai ne visada bus tiesa, todėl reikia sukurti mokymosi algoritmą.

S:=InputBox("Įveskite raidę", 'programa mano, kad tai raidė '+neuro_web.name, neuro_web.name); for i:=0 iki 32 do pradeda //Mes pereiname per neuronus, jei neuro_web[i].name=s then begin //Norimame neurone atnaujiname atmintį nuo x:=0 iki 29 do start for y:= Nuo 0 iki 29 pradėti p.Canvas.Pixels:=RGB(neuro_web[i].memory,neuro_web[i].memory, neuro_web[i].memory); //Parašykite naują atminties pikselio reikšmę end; galas; p.SaveToFile(ExtractFilePath(Application.ExeName)+"\res\"+ neuro_web[i].name+.bmp");

Atminties atnaujinimą atliksime taip:

N:=apvalus(n+(n+m)/2);

Tie. jei neurono atmintyje nėra nurodyto taško, bet mokytojas sako, kad jis yra šioje raidėje, mes jį prisimename, bet ne visiškai, o tik pusę. Tolimesniam mokymuisi šios pamokos poveikis padidės.

Štai keletas G raidės pakartojimų:

Su šiuo mūsų programa yra paruošta.

Išsilavinimas
Pradėkime treniruotis.
Atidarome raidžių vaizdus ir kantriai nurodome programos klaidas:

Po kurio laiko programa pradės nuosekliai atpažinti net anksčiau nežinomas raides:

Išvada
Programa turi vieną didelį trūkumą – mūsų neuroninis tinklas labai kvailas, neapsaugotas nuo vartotojo klaidų treniruočių metu, o atpažinimo algoritmai paprasti kaip pagaliukas.
Tačiau tai suteikia pagrindinių žinių apie neuroninių tinklų veikimą.

Jei šis straipsnis sudomins gerbiamus Habros gyventojus, tai tęsiu ciklą, palaipsniui komplikuodamas sistemą, įvesdamas papildomus ryšius ir svorius, apsvarstysiu keletą populiarių neuroninių tinklų architektūrų ir t.t.

Galite pasijuokti iš mūsų naujai gimusio intelekto atsisiųsdami programą kartu su šaltinio kodu

Iš vc.ru apie tai, kaip keliais žingsniais sukurti paprastą neuroninį tinklą ir išmokyti atpažinti žinomus verslininkus nuotraukose.

0 veiksmas. Supraskime, kaip veikia neuroniniai tinklai

Paprasčiausias būdas suprasti neuroninių tinklų veikimo principus – pasitelkus „Google“ edukacinio projekto „Teachable Machine“ pavyzdį.

„Techable Machine“ kaip įvesties duomenis naudoja vaizdą iš nešiojamojo kompiuterio kameros – tai turi apdoroti neuroninis tinklas. Kaip išvesties duomenis – ką neuroninis tinklas turėtų daryti apdorojęs gaunamus duomenis – galite naudoti gif arba garsą.

Pavyzdžiui, galite išmokyti Teachable Machine pasakyti „Labas“, kai delnas pakeltas aukštyn. Iškėlus nykštį į viršų - „Šaunu“, o nustebusiu veidu pramerkta burna - „Oho“.

Pirmiausia reikia išmokyti neuroninį tinklą. Norėdami tai padaryti, pakelkite delną ir paspauskite mygtuką „Trauk žaliai“ - paslauga padaro kelias dešimtis nuotraukų, kad rastų piešinį vaizduose. Tokių vaizdų rinkinys paprastai vadinamas „duomenų rinkiniu“.

Dabar belieka pasirinkti veiksmą, kurį reikia iškviesti atpažįstant vaizdą – pasakyti frazę, parodyti GIF ar paleisti garsą. Panašiai mes mokome neuroninį tinklą atpažinti nustebusį veidą ir nykštį.

Kai neuroninis tinklas yra išmokytas, jis gali būti naudojamas. „Teachable Machine“ rodo „pasitikėjimo“ koeficientą – kiek sistema „pasitiki“ tuo, kad ji mokoma vieno iš įgūdžių.

1 veiksmas. Kompiuterio paruošimas darbui su neuroniniu tinklu

Dabar sukursime savo neuroninį tinklą, kuris siųsdamas vaizdą praneš apie tai, kas pavaizduota paveikslėlyje. Pirmiausia išmokysime neuroninį tinklą atpažinti paveikslėlyje esančias gėles: ramunėlę, saulėgrąžą, kiaulpienę, tulpę ar rožę.

Norėdami sukurti savo neuroninį tinklą, jums reikės Python, vienos iš minimalistiškiausių ir labiausiai paplitusių programavimo kalbų, ir TensorFlow, Google atviros bibliotekos neuroniniams tinklams kurti ir mokyti.

Python diegimas

Dalintis