Neurónové siete od jednoduchých po zložité. Jednoducho povedané o komplexe: čo sú neurónové siete? Klasifikácia a rozpoznávanie "obrázkov"

Na špičkovej technológii je zábavné, že je stará tisíce rokov! Napríklad kalkul vynašli nezávisle Newton a Leibniz pred viac ako 300 rokmi. To, čo sa kedysi považovalo za mágiu, je dnes dobre známe. A, samozrejme, všetci vieme, že geometriu vynašiel Euclid pred niekoľkými tisíckami rokov. Trik je v tom, že často trvá roky, kým sa niečo stane „populárnym“. Skvelým príkladom sú neurónové siete. Všetci sme počuli o neurónových sieťach a o tom, čo sľubujú, ale z nejakého dôvodu nevidíme obvyklé programy založené na nich. Dôvodom je, že skutočnou povahou neurónových sietí je extrémne zložitá matematika a je potrebné pochopiť a dokázať zložité vety, ktoré ju pokrývajú, a možno je potrebná znalosť teórie pravdepodobnosti a kombinatorickej analýzy, nehovoriac o fyziológii a neurológii. .

Podnetom na vytvorenie akejkoľvek technológie pre osobu alebo ľudí je vytvorenie Killer programu s jej pomocou. Všetci už vieme, ako DOOM funguje, t.j. pomocou stromov BSP. John Carmack ich však vtedy nevymyslel, čítal o nich v článku napísanom v roku 1960. Tento článok popisuje teóriu technológie BSP. John urobil ďalší krok tým, že pochopil, ako sa dajú použiť stromy BSP a zrodil sa DOOM. Mám podozrenie, že podobnú renesanciu zažijú v najbližších rokoch neurónové siete. Počítače sú dostatočne rýchle na to, aby ich napodobnili, dizajnéri VLSI ich vytvárajú priamo v kremíku a na túto tému sú vydané stovky kníh. A keďže sú neurónové siete tou najmatematickejšou entitou, akú poznáme, nie sú viazané na žiadnu fyzickú reprezentáciu a môžeme ich vytvárať pomocou softvér alebo vytvorte skutočné kremíkové modely. Hlavná vec je, že podstatou neurónovej siete je abstraktný model.

V mnohých ohľadoch už boli limity digitálnej výpočtovej techniky realizované. Samozrejme ich vylepšíme a urobíme ešte rýchlejšie, menšie a lacnejšie, ale digitálne počítače budú vždy schopné vnímať len digitálne informácie, keďže sú založené na binárnom výpočtovom modeli. Neurónové siete sú však založené na rôznych výpočtových modeloch. Sú založené na vysokoúrovňovom distribuovanom, pravdepodobnostnom modeli, ktorý nie je potrebný na nájdenie riešenia problému spôsobom počítačový program; modeluje sieť buniek, ktoré dokážu nájsť, identifikovať alebo korelovať možné spôsoby riešenia problému „biologickejším“ spôsobom, vyriešiť problém po malých kúskoch a sčítať výsledky. Tento článok je prehľadom technológie neurónových sietí, kde budú na niekoľkých stranách čo najpodrobnejšie rozobraté.

biologické analógy

Neurónové siete boli inšpirované naším vlastným mozgom. Doslova - niečí mozog v niečí hlave raz povedal: "Zaujíma ma, ako pracujem?", a potom pristúpil k vytvoreniu jednoduchého modelu seba samého. Zvláštne, však? Štandardný model nervového uzla, založený na zjednodušenom modeli ľudského neurónu, bol vynájdený pred viac ako päťdesiatimi rokmi. Pozrite sa na obrázok 1.0. Ako vidíte, neurón má tri hlavné časti:

  • Dentrite(y) (Dendrite) .................... Zodpovedá za zber prichádzajúcich signálov
  • Soma (Soma) ................................ Zodpovedá za hlavné spracovanie a sumarizáciu signálov
  • Axon (Axon) ................................... Zodpovedá za signalizáciu iným dendritom.

Priemerný ľudský mozog obsahuje asi 100 miliárd alebo 10 až 11. mocninu neurónov a každý z nich má až 10 000 spojení cez dendrity. Signály sa prenášajú pomocou elektrochemických procesov na báze sodíka, draslíka a iónov. Signály sa prenášajú vytváraním potenciálneho rozdielu spôsobeného týmito iónmi, ale chémia je tu irelevantná a signály možno považovať za jednoduché elektrické impulzy prechádzajúce z axónu do dendritu. Pripojenie jedného dendritu k cudziemu axónu sa nazýva synapsia a to sú hlavné body prenosu impulzov.

Ako teda neurón funguje? Na túto otázku neexistuje jednoduchá odpoveď, no pre naše účely postačí nasledujúce vysvetlenie. Dendrity zbierajú signály prijaté z iných neurónov, potom somas vykonajú súčet a výpočet signálov a údajov a nakoniec na základe výsledku spracovania môžu „povedať“ axónom, aby signál odovzdali ďalej. Prenos ďalej závisí od množstva faktorov, ale toto správanie môžeme modelovať ako prenosovú funkciu, ktorá preberá vstup, spracováva ho a pripravuje výstup, ak sú splnené vlastnosti prenosovej funkcie. Okrem toho v skutočných neurónoch je výstup údajov nelineárny, to znamená, že signály nie sú digitálne, ale analógové. V skutočnosti neuróny nepretržite prijímajú a vysielajú signály a ich skutočný model závisí od frekvencie a musí byť analyzovaný v S-doméne (frekvenčná doména). Skutočnú prenosovú funkciu jednoduchého biologického neurónu v skutočnosti modelujeme my.

Teraz máme určitú predstavu o tom, čo sú neuróny a čo sa vlastne snažíme modelovať. Odbočme na chvíľu a porozprávajme sa o tom, ako môžeme využiť neurónové siete vo videohrách.

Hry

Zdá sa, že neurónové siete sú odpoveďou na všetky naše potreby. Ak by sme mohli preniesť postavy a slová do malých herných mozgov, predstavte si, aké by to bolo skvelé. Model neurónovej siete nám poskytuje hrubú štruktúru neurónov, ale neposkytuje nám vysokú úroveň inteligencie a dedukčnej funkčnosti, aspoň v klasickom zmysle slova. Vymyslieť spôsoby, ako použiť technológiu neurónových sietí na hernú umelú inteligenciu, si vyžaduje trochu premýšľania, ale keď to urobíte, môžete ju použiť v spojení s deterministickými algoritmami, fuzzy logikou a genetickými algoritmami na vytvorenie veľmi robustného a pokročilého myslenia AI. vaše hry. Výsledok bude nepochybne lepší ako čokoľvek, čo môžete dosiahnuť stovkami blokov if-else alebo skriptovacích skriptov. Neurónové siete sa dajú použiť napríklad na:

Skenovanie a rozpoznávanie prostredia Neurónová sieť môže prijímať informácie vo forme zraku alebo sluchu. Tieto informácie sa potom môžu použiť na vytvorenie odpovede alebo odpovede alebo na trénovanie siete. Tieto odpovede môžu byť zobrazené v reálnom čase a aktualizované, aby sa zlepšili odpovede.

Pamäť- neurónová sieť môže byť použitá ako forma pamäte pre herné postavy. Neurónové siete sa môžu učiť zo skúseností a dopĺňať súbor odpovedí a reakcií.

kontrola správania- výstup neurónovej siete možno použiť na ovládanie akcií hernej postavy. Vstupmi môžu byť rôzne premenné herného enginu. Potom bude sieť schopná ovládať správanie hernej postavy.

Mapovanie odozvy- neurónové siete fungujú naozaj dobre s "asociáciami", čo je v podstate väzba jedného priestoru na druhý. Asociácia prichádza v dvoch variantoch: auto-asociácia, ktorá spája vstup so sebou samým, a hetero-asociácia, ktorá spája vstup s niečím iným. Väzba odozvy využíva neurónové siete ako back-end alebo výstup na vytvorenie ďalšej vrstvy nepriamej kontroly nad správaním objektu. Typicky by sme mohli mať množstvo riadiacich premenných, ale jasné odpovede máme len na množstvo špecifických kombinácií, na ktorých môžeme trénovať sieť. Použitím neurónovej siete ako výstupu však môžeme získať ďalšie odpovede, ktoré sú približne v rovnakej oblasti ako tie naše dobre definované.

Uvedené príklady sa môžu zdať trochu nejasné, ale sú. Faktom je, že neurónové siete sú nástrojom, ktorý môžeme používať, ako chceme. Kľúčom je, že ich používanie uľahčuje vytváranie AI a spraví správanie postáv hráčov rozumnejším.

Neurónové siete 101

V tejto časti si zopakujeme hlavné pojmy a koncepty používané pri diskusii o neurónových sieťach. Nie je to také jednoduché, pretože neurónové siete sú skutočne produktom niekoľkých rôznych disciplín a každá z nich nesie svoj vlastný špecifický slovník. Bohužiaľ, slovná zásoba týkajúca sa neurónových sietí je priesečníkom slovníkov všetkých týchto disciplín, takže jednoducho nemôžeme zvážiť všetko. Teória neurónových sietí je tiež plná hardvéru, ktorý je nadbytočný, čo znamená, že veľa ľudí znovu objavuje koleso. To ovplyvnilo vytvorenie množstva architektúr neurónových sietí naraz, z ktorých každá má svoje meno. Pokúsim sa opísať všeobecné pojmy a situácie, aby som sa neutopil v pomenovaní. V tomto článku sa pozrieme na niektoré siete, ktoré sú dostatočne odlišné na to, aby mali rôzne názvy. Pri čítaní sa príliš netrápte, ak nedokážete okamžite pochopiť všetky pojmy a pojmy, len si ich prečítajte, potom sa ich pokúsime opäť obsiahnuť v kontexte článku. Začnime...

Teraz, keď sme videli „biologickú“ verziu neurónu, pozrime sa na základy umelého neurónu, aby sme položili základy pre naše uvažovanie. Ryža. 2.0 je grafický štandard pre "neuronódu" alebo umelý neurón. Ako vidíte, má niekoľko vstupov označených X1 - Xn a B. Tieto vstupy majú priradenú váhu W1-Wn a je k nim pripojená ab. Okrem toho je tu sumárne zapojenie Y a jeden výstup y. Výstup y v neuróne je založený na prenosovej funkcii alebo „aktivácii“, ktorá je funkciou vstupu neuródy do siete. Prichádzajúce dáta pochádzajú z X a z B, ktoré sú spojené so susednými uzlami. Myšlienka je, že B je „minulosť“, „pamäť“. Základná operácia neurónu je takáto: vstup z X sa vynásobí jeho pridruženou hmotnosťou a sčíta sa. Výstup súčtu je vstupom na aktiváciu Ya. Aktivácia je potom privedená do aktivačnej funkcie fa(x) a konečný výstup je y. Rovnica pre to všetko je:

ur. 1,0

n
Ya \u003d B * b + e Xi * wi
i = 1 AND

y = fa (Ya)

O rôznych formách fa(x) sa bude diskutovať o chvíľu.

Pred pokračovaním by sme sa mali porozprávať o úvodnom Xi, váhach Wi a ich príslušných oblastiach. Vo väčšine prípadov vstupy obsahujú kladné a záporné čísla v množine (- ¥, + vstupy = I). Mnohé neurónové siete však používajú jednoduché dvojhodnotové hodnoty (ako true/false). Dôvodom na použitie takejto jednoduchej schémy je to, že nakoniec sa všetky zložité údaje skonvertujú na čistú binárnu reprezentáciu. Okrem toho v mnohých prípadoch musíme vyriešiť problémy s počítačom, ako je rozpoznávanie hlasu, ktoré sú vhodné pre dvojhodnotové reprezentácie. Nie je však vytesaná do kameňa. V oboch prípadoch sú hodnoty používané v divalentnom systéme primárne 0 a 1 v binárnom systéme alebo -1 a 1 v bipolárnom systéme. Oba systémy sú podobné až na to, že bipolárna reprezentácia je matematicky vhodnejšia ako binárna. Váhy Wi na každom vstupe sú zvyčajne medzi (-Ґ, +Ґ) a nazývajú sa "vzrušujúce" alebo "inhibujúce" pre kladné a záporné hodnoty. Dodatočný vstup B, ktorý sa vždy volá s 1,0 a vynásobí sa b, kde b je jeho váha.

Pokračujeme v našej analýze a po nájdení aktivácie Ya pre neurózu sa táto aplikuje na aktivačnú funkciu a možno vypočítať výsledok. Existuje množstvo aktivačných funkcií s rôznym využitím. Hlavné aktivačné funkcie Fa(x):

Rovnice pre každú z nich sú pomerne jednoduché, ale každá vyhovuje svojmu vlastnému modelu alebo má svoj vlastný súbor parametrov.

Funkcia krok za krokom (krokom) sa používa v mnohých neurónových sieťach a modeloch na dosiahnutie danej kritickosti vstupného signálu. Účelom faktora q je modelovať kritickú úroveň vstupného signálu, na ktorý musí neurón reagovať.

Funkcia lineárnej (lineárnej) aktivácie sa používa, keď chceme, aby výstup neuródy čo najbližšie sledoval aktiváciu vstupu. Podobná funkcia môže byť použitá na vytvorenie lineárnych systémov, ako je pohyb s konštantnou rýchlosťou. Nakoniec, exponenciálna funkcia je kľúčom k pokročilým neurónovým sieťam, jediným spôsobom, ako vytvoriť neurónové siete, ktoré môžu poskytovať nelineárne reakcie a modelovať nelineárne procesy. Funkcia exponenciálnej aktivácie je vidličkou vo vývoji neurónových sietí, pretože pomocou krokových a lineárnych funkcií nikdy nedokážeme vytvoriť neurónovú sieť, ktorá dáva nelineárnu odozvu. Nie sme však povinní používať túto konkrétnu funkciu. V závislosti od požadovaných vlastností siete možno použiť aj hyperbolické, logaritmické a transcendentálne funkcie. Nakoniec, ak chceme, môžeme použiť všetky takéto funkcie.

Ako môžete hádať, jeden neurón toho veľa neurobí, takže musíte vytvoriť skupinu neurónov a vrstvu neurónov, ako je znázornené na obr. 3.0. Obrázok znázorňuje malú jednovrstvovú neurónovú sieť. Neurónová sieť na obr. 3.0 obsahuje množstvo vstupných a výstupných uzlov. Podľa konvencie ide o jednovrstvovú neurónovú sieť, pretože vstupná vrstva sa ignoruje, pokiaľ nejde o jedinú vrstvu v sieti. V tomto prípade je vstupná vrstva zároveň aj výstupnou vrstvou, takže sieť je jednovrstvová. Ryža. 4.0 ukazuje dvojvrstvovú neurónovú sieť. Všimnite si, že vstupná vrstva sa stále neberie do úvahy a vnútorná vrstva sa nazýva "skrytá". Výstupná vrstva sa nazýva výstup vrstvy odozvy. Teoreticky neexistuje obmedzenie počtu vrstiev v neurónovej sieti, môže byť však veľmi ťažké opísať vzťahy medzi jednotlivými vrstvami a prijateľné tréningové metódy. Najlepšia cesta vytvorenie viacvrstvovej neurónovej siete - urobte z každej siete jednu alebo dve vrstvy a potom ich spojte ako komponenty alebo funkčné bloky.

Dobre, teraz sa bavme o „dočasnosti“ alebo o téme času. Všetci vieme, že náš mozog je v porovnaní s digitálnym počítačom dosť pomalý. V skutočnosti náš mozog produkuje jeden cyklus na milisekundovom meradle, zatiaľ čo čas pre digitálny počítač sa meria v nanosekundách a takmer už v subnanosekundách. To znamená, že cesta signálu od neurónu k neurónu nejaký čas trvá. Toto je tiež modelované v umelých neurónoch v tom zmysle, že robíme výpočty vrstvu po vrstve a výsledky vydávame postupne. To pomáha modelovať časové oneskorenie prítomné v biologických systémoch, ako je náš mozog.

S predbežnou diskusiou sme takmer hotoví, poďme sa porozprávať o niektorých konceptoch na vysokej úrovni a potom skončíme niekoľkými ďalšími termínmi. Otázka, ktorú by ste si mali položiť, je „aký je zmysel neurónových sietí? To je dobrá otázka a je ťažké na ňu definitívne odpovedať. Rozšírená otázka - "Čo chcete urobiť, aby neurónové siete robili?" V podstate zobrazujú techniku, ktorá pomáha odrážať jeden priestor vo vzťahu k druhému. Neuróny sú v podstate typom pamäte. A ako pri každej pamäti, na ich opis môžeme použiť niekoľko vhodných výrazov. neuróny majú STM (krátkodobú pamäť) aj LTM (dlhodobú pamäť). STM je schopnosť neurónovej siete zapamätať si niečo, čo sa práve naučila, a LTM je schopnosť neurónovej siete zapamätať si niečo, čo sa naučila pred nejakým časom vo svetle informácií, ktoré práve dostala. Tým sa dostávame ku konceptu plasticity alebo inými slovami ku konceptu, ako sa bude neurónová sieť správať s informáciami alebo pri učení. Dokáže sa neurónová sieť dozvedieť viac informácií a naďalej si správne „pamätať“ predtým naučené informácie? Ak áno, potom sa neurónové siete stanú nestabilnými, pretože nakoniec budú obsahovať toľko informácií, že dáta sa budú donekonečna prelínať a prekrývať. Tým sa dostávame k ďalšej požiadavke – stabilite. Pointa je, že chceme, aby neurónová sieť mala dobrý LTM, dobrý STM, bola flexibilná a stabilná. Samozrejme, niektoré neurónové siete nie sú analogické s pamäťou, sú zamerané hlavne na funkčné mapovanie a tieto pojmy sa na ne nevzťahujú, ale základnú predstavu máte. Teraz, keď už vieme o vyššie uvedených pojmoch súvisiacich s pamäťou, dokončime prehľad niekoľkých matematických faktorov, ktoré pomôžu vyhodnotiť a pochopiť tieto vlastnosti.

Jednou z hlavných aplikácií neurónových sietí je vytvorenie pamäťového mechanizmu, ktorý dokáže spracovať neúplné alebo fuzzy vstupné dáta a vrátiť výsledok. Výsledkom môže byť samotný vstup (asociácia) alebo úplne odlišná odozva od vstupu (heteroasociácia). Je tiež možné prekryť N-rozmerný priestor na M-rozmernom a nelineárnom načítavaní dát. To znamená, že neurónová sieť je akousi hyperpriestorovou pamäťovou jednotkou, pretože môže pripojiť vstupný N-prvok k výstupnému M-prvku, kde M sa môže, ale nemusí rovnať N.

Neurónové siete v podstate rozdeľujú N-rozmerný priestor na oblasti, ktoré jedinečne mapujú vstupy na výstupy alebo klasifikujú vstupy do rôznych tried. Potom, ako sa budú zvyšovať hodnoty (vektory) prichádzajúcich dát (nazvime to S), logicky vyplýva, že pre neurónové siete bude ťažšie oddeľovať informácie. A keďže sú neurónové siete naplnené informáciami, vstupné hodnoty, ktoré si treba „zapamätať“, sa budú prekrývať, keďže vstupný priestor nemôže obsahovať všetky oddelené dáta v nekonečnom množstve rozmerov. Toto prekrytie znamená, že niektoré položky nie sú také silné, ako by mohli byť. Aj keď to nie je problém v mnohých prípadoch, je to problém pri modelovaní pamäťových neurónových sietí; Predpokladajme na ilustráciu konceptu, že sa pokúšame pripojiť N-množinu vstupných vektorov k nejakej množine výstupov. Výstupná súprava nepredstavuje taký problém pre správne fungovanie ako výstupná súprava S.

Ak je vstupná množina S striktne binárna, potom uvažujeme o postupnostiach v tvare 1101010 ... 10110. Povedzme, že naše vstupné dáta majú každý len 3 bity, takže celý vstupný priestor pozostáva z vektorov:

v0 = (0,0,0), v1 = (0,0,1), v2 = (0,1,0), v3 = (0,1,1), v4 = (1,0,0), v5 = (1,0,1), v6 = (1,1,0),

Pre väčšiu presnosť je základom pre túto sadu vektorov:

v = (1,0,0) * b2 + (0,1,0) * b1 + (0,0,1) * b0, kde bi môže nadobúdať hodnoty 0 alebo 1.

Napríklad, ak predpokladáme, že B2=1, B1=0 a B0=1, dostaneme nasledujúci vektor:

v = (1,0,0) * 1 + (0,1,0) * 0 + (0,0,1) * 1 = (1,0,0) + (0,0,0) + (0,0,1) = (1,0 ,1), čo je Vs nášho možného vstupného poľa

Základom je špeciálny sčítaný vektor popisujúci pole vektorov v priestore. Takže V opisuje všetky vektory v našom priestore. Vo všeobecnosti, bez zachádzania do zdĺhavého vysvetľovania, čím ortogonálnejšie sú vektory vo vstupnom poli, tým lepšie sa budú šíriť v neurónovej sieti a tým lepšie ich možno nazvať. Ortogonalita sa týka nezávislosti vektorov, inými slovami, ak sú dva vektory ortogonálne, ich bodový súčin je nula, ich premietanie na seba je nulové a nemožno ich vzájomne opísať. V poli v je veľa ortogonálnych vektorov, ale prichádzajú v malých skupinách, napríklad V0 je ortogonálne ku všetkým vektorom, takže ho môžeme vždy zahrnúť. Ale ak zahrnieme V1 do poľa S, potom si s ním zachovajú ortogonalitu iba vektory V2 a V4:

v0 = (0,0,0), v1 = (0,0,1), v2= (0,1,0), v4 = (1,0,0)

prečo? Pretože Vi - Vj pre všetky i,j od 0...3 sa rovná nule. Inými slovami, bodový súčin všetkých párov vektorov je 0, takže všetky musia byť ortogonálne. Takže toto pole je veľmi dobré ako vstupné pole neurónovej siete. Pole však:

v6 = (1,1,0), v7 = (1,1,1)

potenciálne zlé, pretože vstupy v6-v7 sú nenulové, v binárnom systéme je to 1. Ďalšou otázkou je, či môžeme túto ortogonalitu zmerať? Odpoveď je áno. V binárnom systéme vektorov existuje miera nazývaná Hammingova vzdialenosť. Používa sa na meranie N-rozmernej vzdialenosti medzi binárnymi vektormi. Toto je jednoducho počet bitov, ktoré sa líšia medzi týmito dvoma vektormi. Napríklad vektory:

v0 = (0,0,0), v1 = (0,0,1)

majú medzi sebou Hammingovu vzdialenosť 1 a

v2 = (0,1,0), v4 = (1,0,0)

majú Hammingovu vzdialenosť 2.

Hammingovu vzdialenosť môžeme použiť ako mieru ortogonality v binárnych vektorových systémoch. A môže nám pomôcť určiť, či naše vstupné množiny údajov majú priesečníky. Určenie ortogonality s bežnými vstupnými vektormi je ťažšie, ale princíp je rovnaký. Dosť bolo konceptov a terminológie, poďme ďalej a pozrime sa na skutočné neurónové siete, ktoré niečo robia, a možno ich na konci tohto článku môžete použiť na zlepšenie AI vašej hry. Pozrieme sa na neurónové siete používané na vykonávanie logických funkcií, klasifikáciu vstupov a ich priradenie k výstupom.

Čistá logika

Prvé umelé neurónové siete boli vytvorené v roku 1943. McCulloch a Pitts. Pozostávali z množstva neurónov a používali sa najmä na výpočet jednoduchých logických funkcií ako AND, OR, XOR a ich kombinácií. Ryža. 5.0. predstavuje hlavné neuróny McCullocha a Pittsa s dvoma vstupmi. Ak ste elektrotechnik, okamžite uvidíte ich podobnú podobnosť s tranzistormi. V každom prípade McCulloch-Pitts neuróny nemajú žiadne spojenia a jednoduchá aktivačná funkcia Fmp(x) je:

fmp (x) = 1, ak xq
0, ifx< q

Neurónový uzol MP (McCulloch-Pitts) funguje sčítaním súčinu vstupov Xi a váh Wi a ako výsledok funkcie Fmp(x) berie Ya. Skorý výskum McCulloch-Pittsa sa zameral na budovanie zložitých logických obvodov s modelmi neuród. Okrem toho jedným z pravidiel modelovania neurónov je, že prenos signálu z neurónu na neurón trvá jeden časový krok. Pomáha to byť bližšie k modelu prirodzených neurónov. Poďme sa pozrieť na niekoľko príkladov MP neurónových sietí, ktoré implementujú základnú logickú funkcionalitu. Booleovská funkcia AND má nasledujúcu pravdivostnú tabuľku:

Môžeme to modelovať pomocou dvoch vstupných MP neurónových sietí s váhami w1=1, w2=2 a q=2. Táto neurónová sieť je znázornená na obr. 6.0a. Ako vidíte, všetky kombinácie vstupov fungujú správne. Napríklad, ak sa pokúsime nastaviť vstupy X1=0, Y1=1, aktivácia bude:

X1*w1 + X2*w2 = (1)*(1) + (0)*(1) = 1,0

Ak použijeme 1,0 pre aktivačnú funkciu Fmp(x), výsledok je 0, čo je správna odpoveď. Ako ďalší príklad, ak sa pokúsime nastaviť vstupy X1=1, X2=1, aktivácia bude:

X1*w1 + X2*w2 = (1)*(1) + (1)*(1) = 2,0

Ak do aktivačnej funkcie Fmp(x) zadáme 2,0, výsledok je 1,0, čo je správne. V ostatných prípadoch to bude fungovať podobne. Funkcia OR je podobná, ale citlivosť q sa zmení na 1,0 namiesto 2,0, ako to bolo v AND. Môžete sa pokúsiť spustiť údaje sami prostredníctvom tabuliek pravdy, aby ste videli výsledky.

Sieť XOR je trochu iná, pretože odvtedy má v skutočnosti 2 vrstvy výsledky predúpravaďalej spracovávané vo výstupnom neuróne. Toto je dobrý príklad toho, prečo neurónová sieť potrebuje na vyriešenie určitých problémov viac ako jednu vrstvu. XOR je všeobecný problém neurónovej siete, ktorý sa bežne používa na testovanie výkonu siete. V každom prípade je XOR lineárne neoddeliteľný do samostatnej vrstvy, treba ho rozložiť na menšie etapy, ktorých výsledky sa sčítajú. Tabuľka pravdy pre XOR vyzerá takto:

XOR je pravdivé iba vtedy, keď sú vstupy odlišné, čo je problém, pretože oba vstupy sa vzťahujú na rovnaký výstup. XOR je lineárne neoddeliteľný, ako je znázornené na obr. 7,0. Ako vidíte, neexistuje spôsob, ako priamo oddeliť správnu odpoveď. Ide o to, že správnu odpoveď môžeme oddeliť dvoma riadkami a presne to robí druhá vrstva. Prvá vrstva predspracuje dáta alebo vyrieši časť problému a zvyšná vrstva dokončí výpočet. S odkazom na obr. 6.0 vidíme, že váhy sú Wq=1, W2=-1, W3=1, W4=-1, W5=1, W6=1. Sieť funguje nasledovne: vrstva sa vypočíta, ak X1 a X2 sú protiklady, výsledky v prípadoch (0,1) alebo (1,0) sú potravou pre druhú vrstvu, ktorá ich spočíta a ak je pravdivá, odovzdá ich ďalej. V podstate sme vytvorili booleovskú funkciu:

z = ((X1 A NIE X2) ALEBO (NIE X1 A X2))

Ak chcete experimentovať so základnými neurónmi McCulloch-Pitts, nasledujúci zoznam je kompletný dvojvstupový neurónový stimulátor.

// SIMULÁTOR MCULLOCCH PITTS
// ZAHŔŇA
/////////////////////////////////////////////////////

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

// HLAVNÉ
/////////////////////////////////////////////////////

void main (void )
{
plávajúci prah, // toto je theta termín používaný na prahovanie súčtu
w1, w2, // tieto držia váhy
x1, x2, // vstupy do neuródy
y_in, // súčet aktivácie vstupu
y_out; // konečný výstup neurody

printf( "nMcCulloch-Pitts Single Neurode Simulator.n") ;
printf("nZadajte prah?");
scanf("%f" ,& prahová hodnota) ;

printf( "nZadajte hodnotu hmotnosti w1?") ;
scanf("%f" ,&w1) ;

printf( "nZadajte hodnotu hmotnosti w2?") ;
scanf("%f" ,& w2) ;

printf("nnBeginning Simulation:" ) ;

// vstup do hlavnej slučky udalostí

zatiaľ čo (1)
{
printf( "nnParmácie simulácie: prah=%f, W=(%f,%f) n", prahová hodnota, w1, w2);

// vyžiadanie vstupov od užívateľa
printf("nZadajte vstup pre X1?");
scanf("%f" ,& x1) ;

printf("nZadajte vstup pre X2?");
scanf("%f" ,& x2) ;

// aktivácia výpočtu
y_in = x1* w1 + x2* w2;

// zadanie výsledku do aktivačnej funkcie (jednoduchý binárny krok)
if (y_in >= prah)
y_out = (float ) 1,0 ;
inak
y_out = (float ) 0,0 ;

// vytlačenie výsledku
printf("Výstup nNeurody je %fn" , y_out) ;

// skús to znova
printf( "Chceš pokračovať Y alebo N?") ;
char ans[8];
scanf("%s" , ans) ;

if (toupper(ans[ 0 ] ) != "Y" )
prestávka ;
) // koniec chvíle

printf("nnSimulation Complete.n");
) // koniec hlavného

Toto uzatvára našu diskusiu o základných stavebných kameňoch MP neurónovej siete, prejdime ku zložitejším neurónovým sieťam, ako sú tie, ktoré sa používajú na klasifikáciu vstupných vektorov.

Klasifikácia a rozpoznávanie "obrázkov"

Konečne sme pripravení pozrieť sa na skutočné neurónové siete, ktoré našli nejaké využitie! Aby sme prešli k následnej diskusii o Hebbových a Hopfieldových neurónových sieťach, analyzujeme všeobecnú štruktúru neurónových sietí, ktorá bude ilustrovať množstvo konceptov, ako je lineárna separovateľnosť, bipolárne reprezentácie a analógie medzi neurónovými sieťami a pamäťami. Najprv sa pozrime na obr. 8.0, ktorý predstavuje základný model neurónovej siete, ktorý budeme používať. Ako vidíte, ide o sieť s jedným uzlom s tromi vstupmi vrátane offsetu B a jedným výstupom. Chceme vidieť, ako použiť túto sieť na implementáciu logickej operácie AND, ktorú sme tak ľahko implementovali v neurónoch McCulloch-Pitts.

Začnime s použitím bipolárnych reprezentácií, takže všetky 0 sú nahradené -1. Pravdivostná tabuľka pre logické AND pri použití bipolárnych vstupov a výstupov je uvedená nižšie:

A tu je funkcia aktivácie fc(x), ktorú budeme používať:


fc (x) = 1, ak x i q
- 1, ak x< q

Všimnite si, že funkcia je krokom k bipolárnemu výstupu. Skôr ako budem pokračovať, dovoľte mi zasadiť semená do vášho mozgu: miešanie a snímanie skončí tým istým, dávajú nám ďalší stupeň slobody v našich neurónoch, ktorý im umožňuje vytvárať reakcie, ktoré bez neho nemožno dosiahnuť. Čoskoro to uvidíte.

Jedna neuróda na obr. 8.0 sa nám snaží urobiť klasifikáciu. Povie nám, či náš príspevok patrí do tejto triedy alebo nie. Napríklad, či ide o obrázok stromu alebo nie. Alebo v našom prípade (jednoduché logické AND) je to trieda +1 alebo -1? Toto je základ väčšiny neurónových sietí, a preto som hovoril o lineárnej separovateľnosti. Musíme dospieť k lineárnemu oddeleniu priestoru, ktorý bude korelovať naše vstupy a výstupy tak, aby existovalo pevné oddelenie priestoru, ktorý ich oddeľuje. Takže musíme prísť so správnymi hodnotami váhy a skreslenia, ktoré to urobia za nás. Ale ako to urobíme? Je to len pokus-omyl, alebo existuje nejaká metodika? Odpoveď je, že existuje množstvo metód na trénovanie neurónovej siete. Tieto metódy fungujú na rôznych matematických príkladoch a dajú sa dokázať, ale v tejto chvíli budeme brať len hodnoty, ktoré fungujú, bez toho, aby sme brali do úvahy proces ich získavania. Tieto cvičenia nás privedú k učeniu algoritmov a zložitejším sieťam, ako sú tie, ktoré sú tu uvedené.

Dobre, snažíme sa nájsť váhy Wi a bias B, ktoré poskytnú správny výsledok pre rôzne vstupy s aktivačnou funkciou Fc(x). Napíšme súhrnnú aktiváciu nášho neurónu a uvidíme, či dokážeme vytvoriť nejaké vzťahy medzi hmotnosťou a vstupom, ktoré nám môžu pomôcť. Vzhľadom na vstupy X1 a X2 s váhami W1 a W2 spolu s B=1 a odchýlkou ​​b dostaneme nasledujúci vzorec:

X1*w1 + X2*w2 + B*b=q

Keďže B je vždy 1,0, vzorec sa zjednoduší na:

X1*w1 + X2*w2 + b=q

X2 = -X1*w1/w2 + (q -b)/w2 (riešenie v zmysle X2)

Čo to je? To je riadok! A ak je ľavá strana väčšia alebo rovná q, teda (X1*W1+X2*W2+b), potom neuroda odpovie 1, inak dá výsledok -1. Tie. čiara je hranicou riešenia. Ryža. 9.0 to ilustruje. Na grafe môžete vidieť, že sklon čiary je -w1/w2 a zachytenie X2 je (q-b)/w2. Teraz je jasné, prečo sa môžeme zbaviť q? Je súčasťou konštanty a vždy môžeme škálovať b, aby sme dosiahli akúkoľvek stratu, takže budeme predpokladať, že Q = 0, a ako výsledok dostaneme rovnicu:

X2 \u003d -X1 * w1 / w2 - b / w

Chceme nájsť váhy W1 a W2 a odchýlku b také, aby oddeľovali naše výstupy alebo ich klasifikovali do špeciálnych oddielov bez prekrývania. Toto je kľúč k lineárnej oddeliteľnosti. Ryža. 9.0 ukazuje počet rozhodovacích hraníc, ktoré budú stačiť, takže si môžete vziať ktorúkoľvek z nich. Zoberme si tie najjednoduchšie:

W1=W2=1

S týmito hodnotami sa hranica rozhodnutia stáva:

X2 = -X1*w1/w2 - b/w2 -> X2 = -1*X1 + 1

Sklon je -1 a pretína X2 = 1. Ak do tejto rovnice zapojíme vstupné vektory pre logické AND a použijeme aktiváciu Fc(x), dostaneme správny výstup. Napríklad, ak X2+X1-1 > 0, potom odpoveď neuródy bude -1. Skúsme s naším vstupom AND a uvidíme, čo sa stane:

ako vidíte, neurónové siete s príslušnou váhou a zaujatosťou riešia problém dokonale. Okrem toho existuje celá rodina závaží, ktoré to urobia rovnako dobre (posúvanie hraníc rozhodovania v smere kolmom na seba). Je tu však dôležitý bod. Bez offsetu alebo citlivosti budú možné len priame prechody, napr intercept X2 by mal byť 0. Toto je veľmi dôležité a to je hlavný dôvod použitia citlivosti alebo skreslenia, takže tento príklad bol dôležitý, pretože jasne ukazuje túto skutočnosť. Takže, viac k veci - ako nájsť správne hodnoty hmotnosti? Áno, teraz máme geometrické analógie a toto je začiatok hľadania algoritmu.

Hebbov tréning

Teraz sme pripravení vidieť prvý algoritmus učenia a jeho aplikáciu v neurónovej sieti. Jeden z najjednoduchších algoritmov učenia bol vynájdený Donaldom Hebbom a je založený na použití vstupných vektorov na zmenu hmotnosti tak, aby váha vytvárala čo najlepšie lineárne oddelenie vstupov a výstupov. Bohužiaľ, algoritmus funguje dobre. Pre ortogonálne vstupy to skutočne funguje dobre, ale pre neortogonálne vstupy sa algoritmus rozpadá. Aj keď algoritmus nevedie k správnym váham pre všetky vstupy, je jadrom väčšiny učiacich sa algoritmov, takže začneme s ním.

Predtým, ako uvidíte algoritmus, nezabudnite, že je určený len pre jednu neurónu, jednovrstvovú neurónovú sieť. Môžete samozrejme umiestniť veľa neuród do jednej vrstvy, ale všetky budú fungovať paralelne a možno ich trénovať paralelne. Namiesto použitia jediného váhového vektora používajú multi-neuronódy váhovú maticu. Algoritmus je v každom prípade jednoduchý, vyzerá asi takto:

  • Vstup je v bipolárnom tvare I=(-1,1,0,... -1,1) a obsahuje k prvkov.
  • Vstupných vektorov je N a ich množinu budeme označovať ako J-element, napr. Ij.
  • Výstupy sa budú nazývať Yj a existuje K výstupov, každý pre jeden vstup Ij.
  • Váhy W1-Wk sú obsiahnuté v jednom vektore W=(w1, w2,...wk)

Krok 1. Inicializujte všetky naše váhy na 0 a nechajte ich byť obsiahnuté vo vektore W z N záznamov. Tiež inicializujte posun b na 0.

Krok 2. Od j=1 do n vykonajte:

b = b + yj (kde y je požadovaný výsledok

w = w + Ij * yj (Pamätajte, že ide o vektorovú operáciu)

Algoritmus nie je nič iné ako akýsi „akumulátor“. Posúvanie hraníc rozhodovania je založené na zmenách vstupov a výstupov. Jediným problémom je, že v niektorých prípadoch sa hranica neposunie dostatočne rýchlo (alebo vôbec) a „učenie“ sa neuskutoční.

Ako teda využijeme Hebbovo učenie? Odpoveď na túto otázku je rovnaká ako v predchádzajúcej neurónovej sieti, až na to, že teraz máme algoritmickú metódu na trénovanie siete a táto sieť sa nazýva Hebbian Net. Ako príklad si vezmime našu platnú booleovskú funkciu a uvidíme, či algoritmus dokáže nájsť pre ňu správnu váhu a hodnoty odchýlky. Súčet nižšie je ekvivalentný spusteniu algoritmu:

w = + + + = [(-1, -1)*(-1)] + [(-1, 1)*(-1)] + [(1, -1)*(-1)] + [ (1, 1)*(1)] = (2,2)

b = y1 + y2 + y3 + y4 = (-1) + (-1) + (-1) + (1) = -2

Teda W1=2, W2=2 a b=2. Toto sú jednoducho škálované verzie hodnôt W1=1, W2=2, B=-1, ktoré sme získali v predchádzajúcej časti. Pomocou tohto jednoduchého algoritmu môžeme trénovať neurónovú sieť (z jednej neuródy), aby reagovala na množstvo vstupov alebo ich klasifikovala ako pravda/nepravda alebo 1/-1. A teraz, ak by sme mali pole takýchto neurónov, mohli by sme vytvoriť sieť, ktorá nielen definuje vstupy ako áno / nie, ale tiež spája vstupy s určitými vzormi. Toto je jeden zo základov ďalšej štruktúry neurónových sietí, Hopfieldových sietí.

Hopfieldove algoritmy

John Hopfield je fyzik, ktorý sa rád hrá s neurónovými sieťami (čo je pre nás dobré). Prišiel s jednoduchým (prinajmenšom relatívne), ale efektívnym modelom neurónovej siete s názvom Hopfieldova sieť. Používa sa na priradenie, ak zadáte vektor x, tak dostanete x ako výstup (dúfam). Hopfieldova sieť je znázornená na obrázku 10.0. Ide o jednovrstvovú sieť s určitým počtom neurónov, ktorý sa rovná počtu vstupov Xi. Sieť je plne prepojená, čo znamená, že každá neuróna je prepojená s každou ďalšou neurózou a vstupy sú zároveň aj výstupy. Môže sa vám to zdať zvláštne, pretože zobrazí sa Spätná väzba. Spätná väzba je jednou z kľúčových vlastností siete Hopfield a je jedným zo základných základov pre dosiahnutie správneho výsledku.

Hopfieldova sieť je iteratívna autoasociatívna pamäť. Na dosiahnutie správneho výsledku môže trvať jeden až niekoľko cyklov. Dovoľte mi objasniť: Hopfieldova sieť prijíma vstup a potom ho dáva späť a výsledný výstup môže alebo nemusí byť požadovaným vstupom. Táto spätná väzba môže prejsť niekoľkokrát, kým sa vráti vstupný vektor. Funkčná postupnosť Hopfieldovej siete: najprv určte váhu našich vstupov, ktoré chceme spojiť, potom zadajte vstupný vektor a uvidíte, čo dáva aktivačná funkcia. Ak je výsledok rovnaký ako náš pôvodný vstup, potom všetko fungovalo, ak nie, vezmeme výsledný vektor a privedieme ho do siete. Teraz sa pozrime na maticu váh a učiaci algoritmus používaný v Hopfieldových sieťach.

Algoritmus učenia pre Hopfieldovu sieť je založený na Hebbovom pravidle a jednoducho sčítava výsledok. Keďže však Hopfieldove siete majú viacero vstupných neurónov, váha už nie je pole váh, ale pole polí, ktoré sú kompaktne obsiahnuté v jednej matici. Matica váh W pre Hopfieldovu sieť je teda vytvorená na základe tejto rovnice:

  • Vstupné vektory sú v bipolárnom tvare I = (-1,1,... -1,1) a obsahujú k prvkov.
  • Vstupných vektorov je N a ich množinu budeme označovať ako j-prvok I, t.j. Ij.
  • Výstupy sa budú nazývať Yj a existuje k výstupov, každý pre svoj vlastný vstup Ij.
  • Hmotnostná matica W je štvorcová a odvtedy má rozmer kxk máme k vstupov.

k
W (kxk) = e Iit x Ii
i = 1

Poznámka: každý vonkajší produkt bude mať rozmery K x K, pretože násobíme stĺpcový vektor a riadkový vektor.

A Wii = 0 pre všetky i

Aktivačná funkcia fh(x) je zobrazená nižšie:

fh (x) = 1, ak x i 0
0, ifx< 0

fh (x) je kroková funkcia s binárnym výsledkom. To znamená, že každý vstup musí byť binárny, ale už sme povedali, že vstupy sú bipolárne? No áno, je a nie je. Keď sa vygeneruje matica váh, prevedieme všetky vstupné vektory do bipolárneho formátu, ale pre bežné operácie používame binárnu verziu vstupu a výstupu, ako sieť Hopfield je tiež binárna. Táto konverzia je voliteľná, ale trochu uľahčuje diskusiu o sieti. Každopádne, pozrime sa na príklad. Povedzme, že chceme vytvoriť 4 uzly siete Hopfield a chceme, aby volali tieto vektory:

I1=(0,0,1,0), I2=(1,0,0,0), I3=(0,1,0,1) Poznámka: sú ortogonálne

Prevedením na bipolárne hodnoty dostaneme:

I1* = (-1, -1,1, -1), I2* = (1, -1, -1, -1), I3* = (-1,1, -1,1)

Teraz musíme vypočítať W1, W2, W3, kde Wi je súčinom transpozície každého vstupu so sebou samým.

W1= [ I1* t x I1* ] = (— 1 , - 1 , 1 , - 1 ) t x (— 1 , — 1 , 1 , — 1 ) =
1 1 — 1 1
1 1 — 1 1
— 1 — 1 1 — 1
1 1 — 1 1 W2 = [ I2* t x I2* ] = (1 , — 1 , — 1 , — 1 ) t x (1 , — 1 , — 1 , — 1 ) =
1 — 1 — 1 — 1
— 1 1 1 1
— 1 1 1 1
— 1 1 1 1

W3 = [ I3* t x I3* ] = (- 1 , 1 , - 1 , 1 ) t x (- 1 , 1 , - 1 , 1 ) =
1 — 1 1 — 1
— 1 1 — 1 1
1 — 1 1 — 1
— 1 1 — 1 1

Vynulovaním hlavnej uhlopriečky získame výslednú maticu hmotnosti:

W=
0 — 1 — 1 — 1
— 1 0 — 1 3
— 1 — 1 0 — 1
— 1 3 — 1 0

Wow, teraz poďme tancovať. Zadáme naše pôvodné vektory a pozrieme sa na výsledky. Ak to chcete urobiť, jednoducho vynásobte vstupy maticou a spracujte každý výstup pomocou funkcie Fh(x). Tu sú výsledky:

, — 1 ) a fh((0 , — 1 , — 1 , — 1 ) ) = (1 , 0 , 0 , 0 )

I3 x W = (— 2 , 3 , - 2 , 3 ) a fh ((— 2 , 3 , — 2 , 3 ) ) = (0 , 1 , 0 , 1 )

Vstupy boli perfektne "zapamätané", ako sa patrí, pretože sú ortogonálne. Ako posledný príklad predpokladajme, že náš vstup (sluch, zrak atď.) je trochu „hlučný“ a obsahuje jednu chybu. Vezmime I3=(0,1,0,1) a pridáme nejaký šum t.j. I3 šum = (0,1,1,1). Teraz sa pozrime, čo sa stane, ak zavedieme tento „hlučný“ vektor do siete Hopfield:

Šum I3 x W = (-3, 2, -2, 2) a Fh ((-3,2, -2, 2)) = (0,1, 0,1)

Prekvapivo je pôvodný vektor "zapamätaný". Je to výborné. Týmto spôsobom máme možnosť vytvoriť "pamäť", ktorá je naplnená bitovými vzormi, ktoré vyzerajú ako stromy (dub, smútočná vŕba, smrek atď.), a ak zadáme iný strom, napríklad vŕbu, ktorá bola nie v sieti, naša sieť bude (dúfajme) vydávať informácie o tom, ako si „myslí“, že vŕba vyzerá. Toto je jedna zo silných stránok asociatívnych pamätí: nemusíme trénovať sieť na každý možný vstup, stačí nám trénovať sieť na „asociácie“. Vstupy "zavrieť" sa potom zvyčajne uložia ako pôvodne naučený vstup. Je základom rozpoznávania obrazu a hlasu. Nepýtajte sa ma, kde som vzal prirovnanie k "stromu". V každom prípade som na koniec nášho článku zaradil autoasociačný simulátor Hopfieldovej siete, ktorý umožňuje vytvárať siete až 16 neurónov.

Mozgovo mŕtvy...

To je všetko, na čo sa dnes pozrieme. Dúfal som, že sa dostanem k preceptrónovým sieťam, ale dobre. Dúfam, že ste aspoň trochu pochopili, čo sú neurónové siete a ako vytvárať fungujúce programy na ich modelovanie. Pokryli sme základné pojmy a koncepty, niektoré matematické základy a niektoré z najbežnejších sieťových modelov. O neurónových sieťach sa však treba dozvedieť oveľa viac. Sú to perceptróny, fuzzy asociatívna pamäť alebo FAM, obojsmerná asociatívna pamäť alebo BAM, Kohonenove mapy, algoritmus spätného šírenia siete, teória adaptívnej rezonančnej siete a mnoho ďalších. To je všetko, moja neurónová sieť ma volá, aby som hral!

Príklad programu pre neurónovú sieť so zdrojovým kódom v C++.

O neurónových sieťach je to tu dobre a podrobne napísané. Skúsme prísť na to, ako programovať neurónové siete a ako to funguje. Jednou z úloh riešených neurónovými sieťami je úloha klasifikácie. Program demonštruje fungovanie neurónovej siete, ktorá klasifikuje farbu.

Počítač prijal trojzložkový model reprezentácie farieb RGB, pre každý komponent je pridelený jeden bajt. plná farba je reprezentovaná 24 bitmi, čo dáva 16 miliónov odtieňov. Osoba môže pripísať ktorýkoľvek z týchto odtieňov jednej z menovaných farieb. Takže úloha znie:

Dané InColor – farba RGB (24 bitov)

klasifikovať farbu, t.j. priraďte ho jednej z farieb daných množinou M=( čierna, červená, zelená, žltá, modrá, fialová, azúrová, biela).

OutColor - farba zo sady M

Riešenie číslo 1. (digitálne)

Vytvorte pole 16777216 prvkov

Riešenie číslo 2. (analógové)

napíšte funkciu ako

int8 GetColor (farba DWORD)
{
dvojitá červená = (double(((Farba>>16)&0xFF)))/255*100;
double Green = (double(((Farba>>8)&0xFF)))/255*100;
dvojitá modrá = (double((Farba&0xFF)))/255*100;
dvojitá úroveň = červená;
if (Zelená > Úroveň)
Úroveň=zelená;
if (Modrá > Úroveň)
úroveň=modrá;
Úroveň = Úroveň * 0,7;
int8 OutColor = 0;
if (Červená > Úroveň)
vonkajšia farba |= 1;
if (Zelená > Úroveň)
vonkajšia farba |= 2;
if (Modrá > Úroveň)
vonkajšia farba |= 4;
vrátiť OutColor;
}

Toto bude fungovať, ak je možné problém opísať jednoduchými rovnicami, ale ak je funkcia taká zložitá, že ju možno opísať. nepožičiava, tu prichádzajú na pomoc neurónové siete.

Riešenie číslo 3. (neurónová sieť)

Najjednoduchšia neurónová sieť. Jednovrstvový perceptrón.

Všetko neurónové je uzavreté v triede CNeuroNet

Každý neurón má 3 vstupy, kde sa napájajú intenzity farebných zložiek. (R,G,B) v rozsahu (0 - 1). Celkovo je 8 neurónov podľa počtu farieb vo výstupnej sade. V dôsledku prevádzky siete je na výstupe každého neurónu generovaný signál v rozsahu (0 - 1), čo znamená pravdepodobnosť, že táto farba je na vstupe. Vyberieme maximum a dostaneme odpoveď.

Neuróny majú funkciu aktivácie sigmatu ActiveSigm(). Funkcia ActiveSigmPro(), odvodená od sigmoidnej aktivačnej funkcie, sa používa na trénovanie neurónovej siete pomocou metódy spätného šírenia.

Prvý riadok zobrazuje intenzitu farieb. nižšie je tabuľka váhových koeficientov (4 ks). V poslednom stĺpci hodnota na výstupe neurónov. Zmeňte farbu, vyberte správnu odpoveď zo zoznamu, použite tlačidlo Učiť zavolajte funkciu učenia. AutoTeach zavolá procedúru automatického učenia, 1000-krát, náhodnú farbu určí vzorec z riešenia číslo 2 a zavolá sa funkcia učenia.

stiahnuť zdrojový kód a program pre neurónovú sieť

Programovanie umelých neurónových sietí – píšem v C++ v objektovo orientovanej paradigme

Pre jednoduché neuroarchitektúry (štruktúry), metódy a úlohy je možné použiť akýkoľvek jazyk (dokonca aj Basic), ale pre zložité projekty sa ukážu ako najvhodnejšie objektovo orientované programovacie jazyky (napríklad C++). Používam C++, v prípade potreby (na časovo najnáročnejších miestach programu) prepisovanie jednotlivých funkcií (vyžadujúce rýchlejšie výpočty) v inline assembleri.

Ukážeme si výhody objektovo orientovaného prístupu k programovaniu neurónových sietí. Neurónová sieť môže mať mnoho variantov neurónov a/alebo vrstiev (pozri poznámku o moderných možnostiach zostavenia konvolučnej neurónovej siete z veľkého počtu vrstiev a neurónov rôznych typov). Niektoré bežné funkcie neurónov alebo vrstiev môžu byť presunuté do abstraktnej triedy predkov, čím sa z nej generujú (zdedia) triedy pre určité typy neurónov/vrstiev (tieto podradené triedy budú popisovať a implementovať vlastnosti a správanie, ktoré sú už jedinečné pre konkrétny typ neurón alebo vrstva). Je teda zabezpečená eliminácia viacnásobnej duplikácie spoločných (identických) vecí v texte programu a možnosť napísať riadiaci kód programu, ktorý je flexibilnejší a nezávislý od konkrétnych typov neurónov/vrstiev pomocou princípov polymorfizmu.

Ako príklad uvažujme nomenklatúru tried na popis vrstiev neurónovej siete v jednom z programov, ktoré som vyvinul. Existujú 3 hlavné hierarchie - jedna pre triedy deskriptorov štruktúry vrstiev (reťazec dedičnosti troch tried), druhá pre nelineárne funkcie neurónov (základná trieda a desať potomkov z nej), tretia pre vrstvy samých seba (reťazec 5 základných stredných tried a 12 skutočných tried, ktoré sa oddelili od tohto reťazca na jeho rôznych úrovniach).

Neurálne siete

v texte programu je na popis správania sieťových vrstiev použitých (implementovaných) 31 tried, ale iba 12 z nich implementuje skutočné vrstvy a zvyšné triedy:

  • alebo abstraktné, definujúce všeobecné správanie, umožňujúce v budúcnosti jednoduchšie vytvárať nových potomkov (nové typy vrstiev) a zvyšovať mieru invariantnosti riadiacej logiky (implementácie fungovania neurónovej siete) k rôznym vrstvám, ktoré tvoria sieť;
  • alebo, naopak, sú podriadené a sú súčasťou vrstvy ako jej „komponent“ (inštancia objektového deskriptora štruktúry a charakteristík vrstvy a inštancia objektu, ktorá implementuje nelineárnu funkciu neurónov ).

Fungovanie vytvorenej neurónovej siete je naprogramované prostredníctvom volaní metód a vlastností abstraktných tried bez ohľadu na to, ktorá konkrétna detská trieda implementuje tú či onú vrstvu neurónovej siete.

Tie. logika riadenia je tu oddelená od konkrétneho obsahu a je viazaná len na všeobecné, invariantné základy. O konkrétnych triedach je potrebné poznať iba kód "konštruktora" neurónovej siete - fungujúci iba v čase vytvorenia nová sieť na základe nastavení špecifikovaných v rozhraní alebo pri načítaní predtým uloženej siete zo súboru. Pridanie nových typov neurónových vrstiev do programu nepovedie k prepracovaniu algoritmov (logiky) pre prácu a trénovanie siete, ale bude si vyžadovať len malé doplnenie kódu mechanizmov na vytváranie (alebo čítanie zo súboru) neurónová sieť.

Neexistujú žiadne abstrakcie (triedy) pre jednotlivé neuróny - iba pre vrstvy. Ak potrebujete umiestniť jeden neurón na nejakú (konkrétne na výstupnú) vrstvu, potom sa do inštancie triedy požadovanej neurónovej vrstvy pri vytvorení odovzdá iba počítadlo počtu neurónov rovné jednej.

Objektovo orientovaný dizajn a programovanie teda poskytuje väčšiu flexibilitu pri implementácii princípu „rozdeľuj a panuj“ v porovnaní so štruktúrovaným programovaním prostredníctvom:

  • odstránenie spoločných fragmentov kódu do tried predkov (princíp dedenia),
  • zabezpečenie potrebného utajenia informácií (princíp zapuzdrenia),
  • budovanie-získanie univerzálnej, od konkrétnych implementácií tried, externej riadiacej logiky (princíp polymorfizmu).
  • dosiahnutie medziplatformového odstránenia častí závislých od hardvéru alebo platformy do tried potomkov (ich počet sa môže meniť pre každú konkrétnu implementáciu softvéru a hardvéru, pričom počet základných tried predkov a všetka logika na vysokej úrovni bude rovnaký a nezmenené).

Pre dnešné úlohy vývoja flexibilných a výkonných neuromodelovacích nástrojov je to všetko veľmi užitočné.

Pozrite si aj príspevok o projektoch špeciálnych jazykov na popis ANN.

neurálne siete,
metódy analýzy údajov:
od výskumu po vývoj a implementáciu

Domov
Služby
Neurálne siete
základné myšlienky
schopnosti
Výhody
Oblasti použitia
ako použiť

Presnosť riešenia
NS a AI
programy
články
Blog
O autorovi / kontakty

Jemné ladenie vesmíru je jedinečná kombinácia mnohých vlastností vesmíru tak, že iba ona môže zabezpečiť existenciu pozorovateľného vesmíru. Dokonca aj minimálne odchýlky v zložení alebo hodnotách týchto vlastností sú nezlučiteľné s existenciou vesmíru.

Koncept jemného ladenia vesmíru sa zvyčajne zvažuje v slabej formulácii: berú sa do úvahy hodnoty iba niekoľkých svetových konštánt a záver sa robí iba o nemožnosti existencie ľudstva s ich odchýlkami. Takýto obmedzený prístup stimuluje nábožensky podfarbené pokusy vysvetliť tento jav, napr. antropický princíp deklarujúc Bohom danú účelnosť Vesmíru, obsiahnutú v existencii človeka.

Jemné doladenie vesmíru je najpôsobivejšie z apercepcií modernej kozmológie: žiadna iná sa s ním nemôže porovnávať, pokiaľ ide o silu a presvedčivosť dôkazov o Veľkej slepej uličke, že vesmír je usporiadaný kategoricky odlišne od spôsobu modernej vedy. si to predstavuje a skúma v rámci tohto pohľadu. Nie málo konštánt, ale vo všeobecnosti nepredstaviteľne obrovské množstvo rôznych faktov, ak by sa ktorákoľvek z nich čo i len nepatrne líšila od pozorovaných, znemožnila by existenciu života a vesmíru. Hodnoty vlastností elementárnych častíc (hmotnosti, náboje, polčasy rozpadu...), vlastnosti fundamentálnych interakcií, vlastnosti látok (áno, aspoň voda) – to všetko a ešte oveľa, oveľa viac je starostlivo vybrané práve aby Vesmír existoval. Ktorákoľvek z miliónov týchto skutočností, ak by bola iná, by ju priviedla k neexistencii. Alebo aspoň (v slabej formulácii) - k nemožnosti života v ňom.

Umelá neurónová sieť

Uvedomenie si toho úplne ničí zaužívaný „vedecký obraz sveta“ z éry Veľkej slepej uličky. Ale, ako už bolo povedané, existuje tu apercepcia: ľudia si to odmietajú uvedomiť.

Vysvetlenie jemného ladenia v ITV

ITV stanovuje, že vesmír pozostáva iba z informácií. Pozorovateľ pozoruje pozorované, prijíma informácie – a to je všetko, čo tvorí Vesmír. Informácia, ktorá je len popisom niečoho, môže byť čokoľvek, ak by vznikla sama od seba. Informácia však sama o sebe nie je ničím a nemôže nič opísať, na to sú vždy potrebné určité podmienky, ktoré obmedzujú obsah informácie.

Vesmír je teda súborom podmienených volieb konkrétnych pozorovateľných informácií zo širokého spektra informácií, ktoré sú v princípe možné. Existencia vesmíru je posledným kritériom pre všetky tieto voľby: sú také, pokiaľ vesmír existuje, ak by boli iné, vesmír by neexistoval.

Toto je jemné ladenie vesmíru: hodnoty svetových konštánt a vo všeobecnosti všetky vlastnosti vesmíru boli určené skutočnosťou existencie vesmíru, nikto ich špeciálne nevybral, nie sú odvodené z akejkoľvek jedinej konštanty, neexistuje spôsob, ako stanoviť ich iné zloženie a iné hodnoty.

Analyzujeme neurónovú sieť. C#

V tomto článku navrhujem rozobrať činnosť neurónových sietí a s pomocou učiteľa hodiť jeden z najjednoduchších variantov učenia sa neurónovej siete.

Pár slov by sa malo venovať zariadeniu tejto veľmi „skvelej“ a „hroznej“ neurónovej siete. Ľudia dlho chodili tam a späť a uvažovali nad otázkou: (aký je zmysel života?)
Ako sa dajú rozpoznať vzory?

Odpovedí bolo veľa. Existujú rôzne heuristiky, porovnávania vzorov a oveľa, oveľa viac. Jednou z odpovedí bola neurónová sieť. [Mimochodom, neurónová sieť dokáže rozpoznať nielen obrázky]

Takže. Štruktúra neurónovej siete. Predstavte si tento obrázok: pavúk utkal sieť a sieť chytila ​​muchu. Miesto, ktoré mucha zasiahla, je neurón, ktorý bol „čo najbližšie“ k cieľu. Neurónová sieť sa skladá z neurónov, ktoré „opisujú“
šance na udalosť. Popis "pravdepodobnosti" udalosti (každého neurónu) môže byť uložený (napríklad) v samostatnom súbore.

Teraz prejdime k hlavnej téme rozhovoru tohto večera.

Ako funguje neurónová sieť.

Ako sa to učí a rozpoznáva?

Príklad štruktúry neurónovej siete je jasne viditeľný na tomto obrázku:

Vstup prijíma množinu vstupných signálov X. Ktoré sú vynásobené množinou váh W (Xi * Wi). V neuróne sa vypočíta súčet súčinov a na výstup sa odošle určitý počet.
Po spočítaní hodnôt všetkých neurónov sa vykoná hľadanie najväčšej hodnoty. Toto je najvyššia hodnota a považuje sa za správnu odpoveď na otázku. Program vytvorí obraz, ktorý je opísaný nájdeným neurónom.
V režime učenia má používateľ možnosť opraviť výsledok (na základe svojich skúseností) a následne program prepočíta váhy neurónov.
Vzorec prepočtu je približne takýto: W[i] = W[i] + Rýchlosť*Delta*X[i] - tu
W[i] — hmotnosť i-tého prvku,
Rýchlosť - rýchlosť učenia,
Delta - znamienko (-1 alebo 1),
X[i] — hodnota i-tého vstupného signálu (v mnohých prípadoch 0 alebo 1)

Prečo sa používa delta?

Uvažujme o takomto prípade.

Vstupom do programu je obrázok s číslom 6.

Aký programovací jazyk by sa mal použiť na písanie neurónových sietí?

Neurónová sieť rozpoznala číslo 8. Používateľ opraví číslo o 6. Čo sa v programe deje ďalej?

Program prepočíta údaje pre dva neuróny popisujúce číslo 6 a číslo 8 a pre neurón popisujúci číslo 6 bude delta rovná 1 a pre 8 = -1

Ako je nastavený parameter rýchlosti?

Tento parameter, čím menšie témy, tým dlhšia a presnejšia (kvalitnejšia) bude sieť trénovaná a čím väčšia, tým rýchlejšia a „povrchnejšia“ sieť bude trénovaná.

Parameter Speed ​​je možné nastaviť manuálne, užívateľom aj počas vykonávania programu (napríklad const)

Ako vidíte, musia byť definované aj váhy postáv. Ako sú v prvom rade definované? v skutočnosti je tu tiež všetko jednoduché. Sú určené úplne náhodne, vyhnete sa tak „zaujatosti“ neurónovej siete. Zvyčajne je interval náhodných hodnôt malý -0,4…0,4 alebo -0,3…0,2 atď.

Teraz prejdime k najzaujímavejšej časti. Ako to kódovať!

Vytvorme dve triedy – triedu Neuron a triedu Network (Neuron a Net)

Poďme si popísať hlavné úlohy triedy Neuron:

— Reakcia na vstupný signál

- súhrn

- Úprava

(ako dodatočne môžete pridať čítanie zo súboru, vytváranie počiatočné hodnoty, konzervácia. Nechajme to na „svedomie“ čitateľov)

Premenné v triede Neuron:symbol
- Identifikátor "identifikácia" - LastY

- Opísaný obrázok - symbolsymbol

Umelá inteligencia, neurónové siete, strojové učenie – čo všetky tieto dnes populárne pojmy skutočne znamenajú? Pre väčšinu nezasvätených ľudí, čo som aj ja, sa vždy zdali niečo fantastické, no v skutočnosti ich podstata leží na povrchu. Dostal som nápad napísať jednoduchý jazyk o umelých neurónových sieťach. Naučte sa sami a povedzte ostatným, čo je táto technológia, ako funguje, zvážte jej históriu a perspektívy. V tomto článku som sa snažil nedostať do džungle, ale jednoducho a s obľubou rozprávať o tejto perspektívnej oblasti vo svete špičkových technológií.

Trochu histórie

Po prvýkrát vznikol koncept umelých neurónových sietí (ANN) pri pokuse o modelovanie procesov mozgu. Za prvý veľký prelom v tejto oblasti možno považovať vytvorenie modelu neurónovej siete McCulloch-Pitts v roku 1943. Vedci najprv vyvinuli model umelého neurónu. Navrhli tiež vybudovanie siete týchto prvkov na vykonávanie logických operácií. Ale čo je najdôležitejšie, vedci dokázali, že takáto sieť je schopná učiť sa.

Ďalším dôležitým krokom bol vývoj prvého algoritmu výpočtu ANN Donaldom Hebbom v roku 1949, ktorý sa stal základom pre niekoľko nasledujúcich desaťročí. V roku 1958 Frank Rosenblatt vyvinul parceptrón, systém, ktorý napodobňuje mozgové procesy. Kedysi táto technológia nemala analógy a stále je základom v neurónových sieťach. V roku 1986 takmer súčasne, nezávisle od seba, americkí a sovietski vedci výrazne zlepšili základnú metódu výučby viacvrstvového perceptrónu. V roku 2007 utrpeli neurónové siete znovuzrodenie. Britský počítačový vedec Geoffrey Hinton bol priekopníkom algoritmu hlbokého učenia pre viacvrstvové neurónové siete, ktorý sa teraz napríklad používa na prevádzku bezpilotných vozidiel.

Stručne o hlavnom

Vo všeobecnom zmysle slova sú neurónové siete matematické modely, ktoré fungujú na princípe sietí nervových buniek v živočíšnom organizme. ANN môžu byť implementované v programovateľných aj hardvérových riešeniach. Pre uľahčenie vnímania môže byť neurón reprezentovaný ako druh bunky, ktorá má veľa vstupov a jeden výstup. To, koľko prichádzajúcich signálov sa vytvorí na výstupný signál, je určené výpočtovým algoritmom. Efektívne hodnoty sú privádzané do každého neurónového vstupu, ktoré sú potom distribuované pozdĺž interneuronálnych spojení (synopsy). Synapsie majú jeden parameter – váhu, vďaka ktorej sa mení vstupná informácia pri prechode z jedného neurónu na druhý. Najjednoduchší spôsob, ako pochopiť, ako neurónové siete fungujú, je použiť miešanie farieb ako príklad. Modrý, zelený a červený neurón majú rôznu váhu. Informácie tohto neurónu, ktorého váha bude dominantná v nasledujúcom neuróne.

Samotná neurónová sieť je systémom mnohých takýchto neurónov (procesorov). Samostatne sú tieto procesory celkom jednoduché (oveľa jednoduchšie ako procesory osobný počítač), ale keď sú pripojené do veľkého systému, neuróny sú schopné vykonávať veľmi zložité úlohy.

V závislosti od oblasti použitia môže byť neurónová sieť interpretovaná rôznymi spôsobmi, napríklad v zmysle strojové učenie ANN je metóda rozpoznávania vzorov. Z matematického hľadiska ide o viacparametrový problém. Z pohľadu kybernetiky - model adaptívneho riadenia robotiky. Pre umela inteligencia ANN je základným komponentom pre modelovanie prirodzenej inteligencie pomocou výpočtových algoritmov.

Hlavnou výhodou neurónových sietí oproti konvenčným výpočtovým algoritmom je ich schopnosť trénovania. Vo všeobecnom zmysle slova učenie spočíva v hľadaní správnych koeficientov komunikácie medzi neurónmi, ako aj v zovšeobecňovaní údajov a identifikácii zložitých vzťahov medzi vstupnými a výstupnými signálmi. V skutočnosti úspešné trénovanie neurónovej siete znamená, že systém bude schopný identifikovať správny výsledok na základe údajov, ktoré nie sú v trénovacej sade.

Dnešná pozícia

A bez ohľadu na to, aká sľubná by táto technológia bola, zatiaľ sú ANN stále veľmi vzdialené schopnostiam ľudského mozgu a myslenia. Napriek tomu sa neurónové siete už využívajú v mnohých oblastiach ľudskej činnosti. Zatiaľ nie sú schopní robiť vysoko inteligentné rozhodnutia, ale dokážu nahradiť človeka tam, kde ho predtým potrebovali. Medzi početné oblasti použitia ANN patrí: vytváranie samoučiacich sa systémov výrobných procesov, bezpilotné vozidlá, systémy rozpoznávania obrazu, inteligentné bezpečnostné systémy, robotika, systémy monitorovania kvality, rozhrania hlasovej interakcie, analytické systémy a mnohé ďalšie. Takáto široká distribúcia neurónových sietí je okrem iného spôsobená vznikom rôznymi spôsobmi urýchlenie učenia ANN.

K dnešnému dňu je trh s neurónovými sieťami obrovský – ide o miliardy a miliardy dolárov. Ako ukazuje prax, väčšina technológií neurónových sietí na celom svete sa od seba len málo líši. Využitie neurónových sietí je však veľmi nákladné cvičenie, ktoré si vo väčšine prípadov môžu dovoliť len veľké spoločnosti. Na vývoj, tréning a testovanie neurónových sietí je potrebný veľký výpočtový výkon, je zrejmé, že veľkí hráči na IT trhu toho majú dostatok. Medzi hlavné spoločnosti, ktoré vedú vývoj v tejto oblasti, patrí divízia Google DeepMind, divízia Microsoft Research, IBM, Facebook a Baidu.

To všetko je, samozrejme, dobré: neurónové siete sa rozvíjajú, trh rastie, ale hlavná úloha doteraz nebola vyriešená. Ľudstvu sa nepodarilo vytvoriť technológiu, ktorá by sa čo i len približovala schopnostiam ľudského mozgu. Pozrime sa na hlavné rozdiely medzi ľudským mozgom a umelými neurónovými sieťami.

Prečo sú neurónové siete stále ďaleko od ľudského mozgu?

Najdôležitejším rozdielom, ktorý radikálne mení princíp a účinnosť systému, je rozdielny prenos signálov v umelých neurónových sieťach a v biologickej sieti neurónov. Faktom je, že v ANN neuróny prenášajú hodnoty, ktoré sú skutočnými hodnotami, to znamená čísla. V ľudskom mozgu sa impulzy prenášajú s pevnou amplitúdou a tieto impulzy sú takmer okamžité. Z toho vyplýva rad výhod ľudskej siete neurónov.

Po prvé, komunikačné linky v mozgu sú oveľa efektívnejšie a hospodárnejšie ako tie v ANN. Po druhé, impulzný obvod zaisťuje jednoduchosť implementácie technológie: namiesto zložitých výpočtových mechanizmov stačí použiť analógové obvody. V konečnom dôsledku sú impulzné siete chránené pred rušením zvuku. Reálne čísla sú ovplyvnené šumom, čo zvyšuje pravdepodobnosť chyby.

Výsledok

Samozrejme, v poslednom desaťročí nastal skutočný boom vo vývoji neurónových sietí. Je to spôsobené predovšetkým skutočnosťou, že proces učenia ANN sa stal oveľa rýchlejším a jednoduchším. Taktiež sa začali aktívne rozvíjať takzvané „predtrénované“ neurónové siete, ktoré môžu výrazne urýchliť proces implementácie technológie. A ak je ešte priskoro povedať, či neurónové siete budú niekedy schopné plne reprodukovať schopnosti ľudského mozgu, pravdepodobnosť, že v nasledujúcom desaťročí budú ANN schopné nahradiť človeka v štvrtine existujúcich profesií, sa čoraz viac podobá pravda.

Pre tých, ktorí chcú vedieť viac

  • Veľká neurónová vojna: Čo Google skutočne chystá
  • Ako môžu kognitívne počítače zmeniť našu budúcnosť

Čo urobíme? Pokúsime sa vytvoriť jednoduchú a veľmi malú neurónovú sieť, ktorú sme vysvetliť a učiť rozlišovať čokoľvek. Zároveň nepôjdeme do histórie a matematickej džungle (takéto informácie sa dajú veľmi ľahko nájsť) - namiesto toho sa pokúsime vysvetliť úlohu (nie skutočnosť, že uspejeme) vám a sebe pomocou nákresov a kódu .
Mnohé výrazy v neurónových sieťach súvisia s biológiou, takže začnime od začiatku:

Mozog je zložitá vec, ale dá sa rozdeliť aj na niekoľko hlavných častí a operácií:

Príčinným činidlom môže byť interné(napríklad obrázok alebo nápad):

Teraz sa pozrime na základné a zjednodušené časti mozog:

Mozog je ako káblová sieť.

Neuron- hlavná jednotka výpočtu v mozgu, prijíma a spracováva chemické signály iných neurónov a v závislosti od množstva faktorov buď nerobí nič, alebo generuje elektrický impulz, čiže akčný potenciál, ktorý potom vysiela signály do susedných neuróny cez synapsie súvisiace neuróny:

Sny, spomienky, samoregulačné pohyby, reflexy a vo všeobecnosti všetko, čo si myslíte alebo robíte - všetko sa deje vďaka tomuto procesu: milióny alebo dokonca miliardy neurónov pracujú na rôzne úrovne a vytvárajú spojenia, ktoré vytvárajú rôzne paralelné subsystémy a predstavujú biologickú neurónovú sieť. net.

Samozrejme, všetko sú to zjednodušenia a zovšeobecnenia, no vďaka nim môžeme popísať jednoduché
neurónová sieť:

A opíšte to formalizované pomocou grafu:

Tu je potrebné nejaké vysvetlenie. Kruhy sú neuróny a čiary sú spojenia medzi nimi, a aby sa to v tomto štádiu nekomplikovalo, prepojenia predstavujú priamy tok informácií zľava doprava. Prvý neurón je momentálne aktívny a je zvýraznený sivou farbou. Priradili sme mu aj číslo (1 ak to funguje, 0 ak nie). Čísla medzi neurónmi ukazujú váha spojenia.

Vyššie uvedené grafy zobrazujú čas siete, pre presnejšie zobrazenie ho musíte rozdeliť do časových intervalov:

Ak chcete vytvoriť svoju vlastnú neurónovú sieť, musíte pochopiť, ako váhy ovplyvňujú neuróny a ako sa neuróny učia. Ako príklad si zoberme králika (testovacieho králika) a dajme ho do podmienok klasického pokusu.

Keď na nich smeruje bezpečný prúd vzduchu, králiky, podobne ako ľudia, blikajú:

Tento model správania je možné nakresliť pomocou grafov:

Rovnako ako v predchádzajúcom diagrame, tieto grafy zobrazujú iba okamih, kedy králik cíti nádych a my teda zakódovať puff ako boolovská hodnota. Okrem toho na základe hodnoty hmotnosti vypočítame, či druhý neurón vystrelí. Ak sa rovná 1, potom senzorický neurón vystrelí, žmurkneme; ak je váha menšia ako 1, nežmurkáme: druhý neurón limit— 1.

Predstavme si ešte jeden prvok – bezpečný zvukový signál:

Záujem králikov môžeme modelovať takto:

Hlavný rozdiel je v tom, že teraz je hmotnosť nula, tak sme nedostali žmurkajúceho králika, teda aspoň zatiaľ nie. Teraz naučíme králika blikať na povel, miešať
dráždivé látky (pípanie a dych):

Je dôležité, aby tieto udalosti nastali v inom čase éra, v grafoch to bude vyzerať takto:

Samotný zvuk nič nerobí, ale prúdenie vzduchu stále spôsobuje, že králik žmurká, a to ukazujeme cez váhy krát podnety (červenou farbou). Vzdelávanie komplexné správanie možno zjednodušiť ako postupnú zmenu hmotnosti medzi pripojenými neurónmi v priebehu času.

Ak chcete trénovať králika, zopakujte kroky:

Pri prvých troch pokusoch budú diagramy vyzerať takto:

Všimnite si, že váha pre zvukový podnet sa zvyšuje po každom opakovaní (zvýraznená červenou farbou), táto hodnota je teraz ľubovoľná - zvolili sme 0,30, ale číslo môže byť akékoľvek, dokonca aj záporné. Po treťom opakovaní už zmenu v správaní králika nezaznamenáte, no po štvrtom opakovaní sa stane niečo úžasné – správanie sa zmení.

Odstránili sme vystavenie vzduchu, ale králik stále žmurká, keď počuje pípnutie! Naša posledná schéma môže vysvetliť toto správanie:

Cvičili sme králika reagovať na zvuk žmurkaním.

V skutočnom experimente tohto druhu môže byť na dosiahnutie výsledku potrebných viac ako 60 opakovaní.

Teraz opustíme biologický svet mozgu a králikov a pokúsime sa tomu všetko prispôsobiť
Naučil sa vytvárať umelú neurónovú sieť. Najprv skúsme urobiť jednoduchú úlohu.

Povedzme, že máme stroj so štyrmi tlačidlami, ktorý vydáva jedlo po stlačení toho správneho.
tlačidlá (dobre, alebo energie, ak ste robot). Úlohou je zistiť, ktoré tlačidlo dáva odmenu:

Čo robí tlačidlo po stlačení môžeme (schematicky) znázorniť takto:

Je lepšie vyriešiť takýto problém ako celok, takže sa pozrime na všetky možné výsledky vrátane toho správneho:

Kliknutím na 3. tlačidlo dostanete večeru.

Aby sme mohli reprodukovať neurónovú sieť v kóde, musíme najprv vytvoriť model alebo graf, na ktorý je možné sieť mapovať. Tu je jeden vhodný graf pre úlohu, okrem toho dobre zobrazuje svoj biologický náprotivok:

Táto neurónová sieť jednoducho prijíma vstup – v tomto prípade to bude vnímanie toho, ktoré tlačidlo bolo stlačené. Ďalej sieť nahradí vstupné informácie váhami a na základe pridania vrstvy vyvodí záver. Znie to trochu mätúce, ale pozrime sa, ako je tlačidlo znázornené v našom modeli:

Všimnite si, že všetky váhy sú 0, takže neurónová sieť, podobne ako bábätko, je úplne prázdna, ale plne prepojená.

Vonkajšiu udalosť teda spárujeme so vstupnou vrstvou neurónovej siete a vypočítame hodnotu na jej výstupe. Môže, ale nemusí sa zhodovať s realitou, ale toto budeme zatiaľ ignorovať a začneme popisovať úlohu spôsobom zrozumiteľným pre počítač. Začnime zadaním váh (použijeme JavaScript):

Vstupy var = ; var váhy = ; // Pre pohodlie je možné tieto vektory zavolať

Ďalším krokom je vytvorenie funkcie, ktorá zhromažďuje vstupné hodnoty a váhy a vypočítava výstupnú hodnotu:

Function valueNeuralNetwork(inputVector, weightVector)( var result = 0; inputVector.forEach(function(inputValue,weightIndex) (layerValue = inputValue*weightVector; result += layerValue; )); return (result.toFixed(2)); ) / / Môže sa zdať zložité, ale všetko, čo robí, je spárovať páry hmotnosť/vstup a pridať výsledok

Ako sa očakávalo, ak spustíme tento kód, dostaneme rovnaký výsledok ako v našom modeli alebo grafe…

Vyhodnotiť NeuralNetwork (vstupy, váhy); // 0,00

Živý príklad: Neural Net 001. Ďalším krokom pri zlepšovaní našej neurónovej siete bude spôsob, ako skontrolovať, či je jej vlastný výstup alebo výsledné hodnoty porovnateľné s reálnou situáciou, najskôr zakódujme túto konkrétnu realitu do premennej:

Aby sme zistili nezrovnalosti (a koľko), pridáme chybovú funkciu:

Chyba = realita – výstup neurónovej siete

Pomocou neho môžeme vyhodnotiť výkon našej neurónovej siete:

Čo je však dôležitejšie, čo so situáciami, keď realita dáva pozitívny výsledok?

Teraz vieme, že náš model neurónovej siete nefunguje (a vieme ako), skvelé! A to je skvelé, pretože teraz môžeme použiť chybovú funkciu na kontrolu nášho tréningu. Ale to všetko dáva zmysel, ak predefinujeme chybovú funkciu takto:

chyba= Požadovaný výstup- Výstup neurónovej siete

Jemná, ale dôležitá divergencia, ktorá ticho naznačuje, že budeme
použiť minulé výsledky na porovnanie s budúcimi činnosťami
(a na učenie, ako uvidíme neskôr). Toto existuje aj v reálnom živote, úplné
opakujúce sa vzory, takže sa môže stať evolučnou stratégiou (dobre, v
väčšina prípadov).

var vstup = ; var váhy = ; vardesiredResult = 1;

A nová funkcia:

Funkcia vyhodnotiťNeuralNetError(požadovaný,aktuálny) ( return (požadovaný - skutočný); ) // Po vyhodnotení siete aj chyby by sme dostali: // "Výstup neurálnej siete: 0.00 Chyba: 1"

Živý príklad: Neural Net 002. Poďme si to zhrnúť. Začali sme úlohou, urobili sme jej jednoduchý model v podobe biologickej neurónovej siete a dostali sme spôsob, ako zmerať jej výkon v porovnaní s realitou či želaným výsledkom. Teraz musíme nájsť spôsob, ako túto nezrovnalosť napraviť – proces, ktorý možno pre počítače aj pre ľudí považovať za učenie.

Ako trénovať neurónovú sieť?

Základom tréningu biologických aj umelých neurónových sietí je opakovanie.
a algoritmy učenia, takže s nimi budeme pracovať samostatne. Začnime s
algoritmy učenia.

V prírode sa algoritmy učenia chápu ako zmeny fyzikálnych alebo chemických
charakteristiky neurónov po experimentoch:

Dramatická ilustrácia toho, ako sa dva neuróny v priebehu času menia v kóde a našom modeli „algoritmu učenia“ znamená, že v priebehu času zmeníme veci, aby sme si uľahčili život. Pridajme teda premennú, ktorá ukáže, o koľko je život jednoduchší:

Var rate = 0,20; // Čím väčšia hodnota, tým rýchlejší bude proces učenia :)

A čo sa tým zmení?

Tým sa zmení hmotnosť (rovnako ako králik!), najmä hmotnosť výstupu, ktorý chceme získať:

Ako nakódovať takýto algoritmus je vaša voľba, pre jednoduchosť pridávam k váhe faktor učenia, tu je vo forme funkcie:

Funkcia learn(inputVector, weightVector) ( weightVector.forEach(function(weight, index, weights) ( if (inputVector > 0) (weights = weight + learningRate; ) )); )

Pri použití táto tréningová funkcia jednoducho pridá našu rýchlosť učenia k vektoru hmotnosti aktívny neurón, pred a po tréningovom kruhu (alebo opakovaní) budú výsledky nasledovné:

// Pôvodný vektor hmotnosti: // Neurónový Čistý výstup: 0.00 Chyba: 1 learn(input, weights); // Nový vektor hmotnosti: // Neurónový čistý výstup: 0,20 Chyba: 0,8 // Ak to nie je zrejmé, výstup neurónovej siete je blízko 1 (produkuje kura) – čo sme chceli, takže môžeme konštatovať, že sa pohybujú správnym smerom

Živý príklad: Neural Net 003. Dobre, teraz, keď ideme správnym smerom, posledným kúskom tejto skladačky bude implementácia opakovaní.

Nie je to také ťažké, v prírode robíme to isté znova a znova, ale v kóde iba špecifikujeme počet opakovaní:

Var pokusy = 6;

A zavedenie funkcie počtu opakovaní do našej tréningovej neurónovej siete bude vyzerať takto:

Funkčný sled (skúšky) ( pre (i = 0; i< trials; i++) { neuralNetResult = evaluateNeuralNetwork(input, weights); learn(input, weights); } }

A tu je naša záverečná správa:

Neurónový čistý výstup: 0,00 Chyba: 1,00 Váhový vektor: Neurónový Čistý výstup: 0,20 Chyba: 0,80 Váhový vektor: Neurónový Čistý výstup: 0,40 Chyba: 0,60 Váhový vektor: Neurónový Čistý výstup: 0,60 Chyba: 0,40 Váhový vektor: Neurónový Čistý výstup: 0,8 : 0,20 Váhový vektor: Neurónový Čistý výstup: 1,00 Chyba: 0,00 Váhový vektor: // Kuracia večera !

Živý príklad: Neural Net 004. Teraz máme vektor hmotnosti, ktorý vytvorí iba jeden výsledok (kura na večeru), ak sa vstupný vektor zhoduje s realitou (stlačením tretieho tlačidla). Takže čo je skvelé, čo sme práve urobili?

V tomto konkrétnom prípade naša neurónová sieť (po tréningu) dokáže rozpoznať vstup a povedať, čo povedie k požadovanému výsledku (ešte budeme musieť naprogramovať konkrétne situácie):

Navyše je to škálovateľný model, hračka a nástroj pre naše učenie sa s vami. Mohli sme sa dozvedieť niečo nové o strojovom učení, neurónových sieťach a umelej inteligencii. Upozornenie pre používateľov:

  • Mechanizmus na ukladanie naučených váh nie je k dispozícii, takže táto neurónová sieť zabudne všetko, čo vie. Pri aktualizácii alebo opätovnom spustení kódu potrebujete aspoň šesť úspešných opakovaní, aby sa sieť naplno natrénovala, ak si myslíte, že človek alebo stroj stlačí tlačidlá v náhodnom poradí... Bude to chvíľu trvať.
  • Biologické siete na učenie sa dôležitých vecí majú rýchlosť učenia 1, takže bude potrebné iba jedno úspešné opakovanie.
  • Existuje algoritmus učenia, ktorý je veľmi podobný biologickým neurónom, má chytľavý názov: widroff-hoffovo pravidlo, alebo widroff-hoff tréning.
  • Neurónové prahy (v našom príklade 1) a efekty rekvalifikácie (pri veľkom počte opakovaní bude výsledok väčší ako 1) sa neberú do úvahy, ale sú svojou povahou veľmi dôležité a sú zodpovedné za veľké a zložité bloky behaviorálnych reakcií. . Rovnako aj záporné váhy.

Poznámky a bibliografia na ďalšie čítanie

Snažil som sa vyhnúť matematike a striktným pojmom, ale ak by vás to zaujímalo, vytvorili sme perceptrón, ktorý je definovaný ako algoritmus učenia pod dohľadom (učenie pod dohľadom) duálnych klasifikátorov – ťažkých vecí. Biologická štruktúra mozgu nie je jednoduchá téma, jednak pre nepresnosti, jednak pre jeho zložitosť. Je lepšie začať s Neurovedou (Purves) a Kognitívnou Neurovedou (Gazzaniga). Upravil som a prispôsobil príklad králika z Gateway to Memory (Gluck), ktorý je zároveň skvelým sprievodcom svetom grafov. Ďalší úžasný zdroj, Úvod do neurónových sietí (Gurney), je skvelý pre všetky vaše potreby AI.
A teraz v Pythone! Ďakujeme Ilya Andshmidtovi za poskytnutie verzie Pythonu:

Vstupy = váhy = požadovaný_výsledok = 1 miera učenia = 0,2 pokusov = 6 defhodnota_neurálna_sieť (vstupné_pole, pole váh): výsledok = 0 pre i v rozsahu (len(vstupné_pole)): hodnota_vrstvy = pole_vstupu[i] * váha_pole[i] výsledok += hodnota_vrstvy print("evaluate_neural_network: " + str(výsledok)) print("váhy: " + str(váhy)) return result def vyhodnotiť_chybu(požadovaný, skutočný): chyba = požadovaný - skutočný print("chyba_vyhodnotenia: " + str(chyba) ) return error def learn(input_array, weight_array): print("learning...") for i in range(len(input_array)): if input_array[i] > 0: weight_array[i] += learning_rate def train(trials ): pre i v rozsahu (skúšky): neural_net_result = vyhodnotiť_neurálnu_sieť (vstupy, váhy) učiť sa (vstupy, váhy) trénovať (skúšky)

A teraz CHOĎ! Za túto verziu patrí zásluha Kieranovi Maherovi.

Import hlavného balíka ("fmt" "math") func main() ( fmt.Println("Vytváranie vstupov a váh ...") inputs:= float64(0,00, 0,00, 1,00, 0,00) weights:= float64(0,00, 0,00, 0,00, 0,00) požadované:= 1,00 rýchlosť učenia:= 0,20 pokusov:= 6 vlak (pokusy, vstupy, váhy, požadované, rýchlosť učenia) ) func train (pokusy int, vstupy float64, váhy float64, požadované float64, rýchlosť učenia float64) ( pre 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(" Error: ") fmt.Print(math.Round(errorResult*100) / 100) fmt.Print(" ") } } func learn(inputVector float64, weightVector float64, learningRate float64) float64 { for index, inputValue:= range inputVector { if inputValue >0,00 ( weightVector = weightVector + learningRate ) ) return weightVector ) func vyhodnotiť (inputVector float64, weightVector float64) float64 ( result:= 0,00 pre index, inputValue:= rozsah inputVector ( layerValue:= inputValue * inputValue + weightVector výsledok = výsledok weightVector) ) func vyhodnotitError(požadovaný float64, skutočný float64) float64 (požadovaný návrat - skutočný)

V poslednej dobe existuje pomerne veľa riešení pomocou neurónových sietí: aplikácie, služby, programy využívajú tento druh sietí na urýchlenie riešenia rôznych problémov. Ale čo je neurónová sieť? Redaktori AIN.UA sa rozhodli zistiť, čo je táto populárna technológia zač, odkiaľ pochádza a ako funguje.

Je ťažké nazvať neurónové siete čerstvým technologickým trendom. Prvé hľadanie vedeckých myšlienok v tejto oblasti sa datuje do polovice 20. storočia, keď sa poprední umelci tej doby rozhodli, že by bolo pekné postaviť počítač na základe prírodných výdobytkov matky prírody. Najmä kopírovaním niektorých princípov ľudského mozgu.

Vytvorenie technickej obdoby nášho prírodného biopočítača nebolo jednoduché, prechádzalo obdobiami zvýšeného záujmu a úpadku. Vysvetľuje to skutočnosť, že úroveň technického pokroku v 50. rokoch, keď sa všetko začalo, nedržalo krok s letom vedeckého myslenia: dizajn prvých neurónových sietí im neumožnil dosiahnuť ich plný potenciál.

A ako to funguje

Priemerný ľudský mozog pozostáva z približne 86 miliárd prepojených neurónov jednotný systém na príjem, spracovanie a ďalší prenos údajov. V tejto sieti každý neurón funguje ako niečo ako mikroprocesor, do ktorého sú priťahované dendrity - procesy na prijímanie impulzov. Existuje aj výstup v podobe axónu, ktorý prenáša prijaté impulzy na ďalšie neuróny.

Umelo vytvorená neurónová sieť (ANN) napodobňuje proces spracovania informácií biologického analógu a je súborom miniprocesorov rozdelených do troch skupín:

  • Vstupné body (senzory) sú neuróny, cez ktoré do ANN vstupujú informácie na spracovanie.
  • Výstupné body (reaktívne) sú neuróny, prostredníctvom ktorých ANN vytvára konečný výsledok.
  • Skryté neuróny (asociatívne) - pracovné pole neurónov umiestnených medzi vstupnými a výstupnými bodmi.

Hlavná práca na spracovaní informácií prebieha na úrovni skrytých (asociatívnych) neurónov. Ich pole je usporiadané do niekoľkých vrstiev a čím je ich viac, tým presnejšie spracovanie dát dokáže vyprodukovať ANN.

Schéma perceptrónu - najjednoduchšia jednovrstvová neurónová sieť

Nedá sa naprogramovať

Charakteristickým znakom neurónových sietí je fakt, že nie sú naprogramované, ale trénované. Na základe toho sú ANN rozdelené do troch kategórií – trénovateľné, samoučiace sa, ako aj ANN zmiešaného typu.

Trénovaná neurónová sieť, podobne ako dieťa, ktoré sa učí o svete, si neustále vyžaduje pozornosť a spätnú väzbu od svojho tvorcu. Pri práci s ním výskumník poskytne ANN pole údajov, po ktorom jej ponúkne riešenie problému s vopred určenou odpoveďou. Obidve riešenia – pôvodne správne a navrhnuté neurónovou sieťou – sú porovnané. Ak rozdiel medzi nimi prekročí prípustný chybový faktor, výskumník upraví neurónovú sieť, po ktorej sa proces učenia obnoví.

Samoučiace sa ANN sa učia svet bez tútorov, pričom na učenie používajú daný algoritmus. Po prijatí úlohy samotná neurónová sieť hľadá odpoveď, opravuje chyby a v prípade potreby sa „vráti“ pozdĺž reťazca asociatívnych neurónov k poslednému správnemu kroku, aby mohol začať odznova.

Video nižšie je výsledkom 24-hodinovej samovzdelávacej relácie INS v hre Super Mario, ktorej cieľom bolo dosiahnuť maximálne skóre, ktoré sa udeľuje pri prechode cez úroveň. Čím ďalej sa jej podarilo zájsť, tým vyššie bolo konečné skóre. Ako vstupy výskumník použil prvky mapy a protivníkov a ako výstupy akcie dostupné hráčovi.

Ale toto isté, mierne prispôsobené ANN je zvládnuté za volantom inej hry - Mario Kart.

Sami sa môžete vyskúšať v úlohe testera neurónovej siete pomocou jednoduchej, ktorá simuluje pohyb áut s autopilotom. Autá sa pohybujú pod kontrolou dvoch neurónových sietí a riadia sa základnými pravidlami – stále vpred a vyhnúť sa kolízii.

Vašou úlohou je vytvárať im prekážky a vidieť, ako si s nimi autopilot úspešne poradí, ako aj psychicky sa pripraviť na objavenie sa podobných dronov od Uberu a konkurenčných spoločností v uliciach vášho mesta.

Základom všetkého sú algoritmy vytvorené prírodou

Keď už hovoríme o neurónových sieťach a ich tréningu, nemožno nespomenúť taký prírodný jav, akým je mravčí algoritmus, ktorý môžete vidieť doslova na dvore svojho domu.

Pri pohybe pri hľadaní potravy z hniezda a späť si mravce neustále hľadajú tú najergonomickejšiu cestu a v prípade rušenia prispôsobujú svoju trasu zmenenej situácii. Počas pohybu zanecháva mravec za sebou stopu špeciálneho feromónu. Následní lovci potravy sledujú trasu, ktorú zanechal priekopník, a tiež ju nasýtia biologickým „majákom“.

Predpokladajme, že mravce majú na ceste za potravou prekážku, ktorú je možné obísť z pravej alebo ľavej strany. Na ľavej strane je vzdialenosť k zdroju potravy kratšia. Napriek tomu, že počas prvých iterácií budú mravce prechádzať na oboch stranách bariéry, saturácia ľavého feromónu bude vďaka krátkej vzdialenosti prebiehať rýchlejšie.

Čo to znamená? V neskorších iteráciách bude ľavá cesta, ako najergonomickejšia, jediná, ktorá sa použije, keď sa mravce kŕmiace sa kŕmia. Podobne prebieha proces učenia v umelej neurónovej sieti.

Prečo ANN stále nie je AI

Bez ohľadu na to, aká „inteligentná“ je neurónová sieť, nezostáva umelou inteligenciou, ale nástrojom na úlohy klasifikácie údajov. Samozrejme, môžeme sa čudovať, ako vyhľadávač rozpozná určitú kombináciu slov a potom na základe nej vyberie obrázky s mačkami, ktoré potrebujeme, ale to nie je výsledok mentálnej činnosti neuropočítača, ale len synergia viacerých klasifikátorov.

Sieť neurónov v ľudskom mozgu, napriek tvrdohlavému presvedčeniu každej staršej generácie o degradácii tej mladšej, zostáva oveľa zložitejšia ako formálna štruktúra ANN a tiež kvôli obrovskému počtu a variabilite spojení, je schopný riešiť problémy neštandardným spôsobom, mimo vzorcov načrtnutých pravidlami a vzorcami.

Jednoducho povedané, Alexander Veľký by mohol gordický uzol preťať aj teraz. Neurónová sieť nie je.

AIN.UA už skôr informovala o nemeckom umelcovi, ktorý vyvinul potlač oblečenia, ktorá má chrániť ľudí pred rozpoznávaním tváre prostredníctvom neurónových sietí.

Ak chcete dostávať novinky na Facebooku, kliknite na "páči sa mi to"

Umelá neurónová sieť je súbor neurónov, ktoré sa navzájom ovplyvňujú. Sú schopní prijímať, spracovávať a vytvárať dáta. Je ťažké si to predstaviť ako prácu ľudského mozgu. Neurónová sieť v našom mozgu funguje tak, že si teraz môžete prečítať toto: naše neuróny rozpoznávajú písmená a dávajú ich do slov.

Umelá neurónová sieť je ako mozog. Pôvodne bol naprogramovaný na zjednodušenie niektorých zložitých výpočtových procesov. Dnes majú neurónové siete oveľa viac možností. Niektoré z nich máte vo svojom smartfóne. Ďalšia časť už zaznamenala vo svojej databáze, že ste otvorili tento článok. Ako sa to všetko deje a prečo, čítajte ďalej.

Ako to všetko začalo

Ľudia skutočne chceli pochopiť, odkiaľ pochádza ľudská myseľ a ako funguje mozog. V polovici minulého storočia to pochopil kanadský neuropsychológ Donald Hebb. Hebb študoval vzájomnú interakciu neurónov, skúmal princíp, na základe ktorého sa spájajú do skupín (vedecky - súbory) a navrhol prvý algoritmus vo vede na trénovanie neurónových sietí.

O niekoľko rokov neskôr skupina amerických vedcov vymodelovala umelú neurónovú sieť, ktorá dokázala rozlíšiť hranaté tvary od iných tvarov.

Ako funguje neurónová sieť?

Vedci zistili, že neurónová sieť je súbor vrstiev neurónov, z ktorých každá je zodpovedná za rozpoznanie špecifického kritéria: tvar, farba, veľkosť, textúra, zvuk, hlasitosť atď. Rok čo rok sú výsledkom miliónov experimentov a ton výpočtov najjednoduchšia sieť pribúdali ďalšie a ďalšie vrstvy neurónov. V práci sa striedajú. Prvý napríklad určuje, či štvorec je alebo nie je štvorec, druhý chápe, či je štvorec červený alebo nie, tretí vypočítava veľkosť štvorca atď. Nie štvorce, nie červené a nevhodne veľké postavy spadajú do nových skupín neurónov a sú nimi skúmané.

Čo sú neurónové siete a čo dokážu?

Vedci vyvinuli neurónové siete, aby sa naučili rozlišovať medzi zložitými obrázkami, videami, textami a rečou. V súčasnosti existuje veľké množstvo typov neurónových sietí. Sú klasifikované v závislosti od architektúry - sady dátových parametrov a váhy týchto parametrov, určitá priorita. Nižšie sú uvedené niektoré z nich.

Konvolučné neurónové siete

Neuróny sú rozdelené do skupín, každá skupina vypočítava charakteristiku, ktorá jej bola pridelená. V roku 1993 francúzsky vedec Jan LeCun ukázal svetu LeNet 1, prvú konvolučnú neurónovú sieť, ktorá dokázala rýchlo a presne rozpoznať čísla napísané rukou na papieri. Presvedčte sa sami:

Dnes sa konvolučné neurónové siete využívajú najmä na multimediálne účely: pracujú s grafikou, zvukom a videom.

Rekurentné neurónové siete

Neuróny si neustále pamätajú informácie a na základe týchto údajov vytvárajú ďalšie akcie. V roku 1997 nemeckí vedci upravili najjednoduchšie rekurentné siete na siete s dlhou krátkodobou pamäťou. Na ich základe boli potom vyvinuté siete s riadenými rekurentnými neurónmi.

Dnes sa pomocou takýchto sietí píšu a prekladajú texty, programujú sa roboty, ktoré vedú zmysluplné dialógy s človekom, vytvárajú sa kódy pre stránky a programy.

Použitie tohto druhu neurónových sietí je schopnosť analyzovať a generovať údaje, zostavovať databázy a dokonca aj predpovedať.

V roku 2015 spoločnosť SwiftKey uviedla na trh prvú klávesnicu na svete poháňanú rekurentnou neurónovou sieťou s riadenými neurónmi. Potom systém poskytoval rady v procese písania na základe posledných zadaných slov. Minulý rok vývojári trénovali neurónovú sieť, aby sa naučila kontext napísaného textu a rady sa stali zmysluplnými a užitočnými:

Kombinované neurónové siete (konvolučné + rekurentné)

Takéto neurónové siete sú schopné pochopiť, čo je na obrázku a opísať to. A naopak: nakreslite obrázky podľa popisu. Najjasnejší príklad predviedol Kyle Macdonald, ktorý si zobral neurónovú sieť na prechádzku po Amsterdame. Sieť okamžite určila, čo sa nachádza pred ňou. A takmer vždy presne:

Neurónové siete sa neustále učia.

Prostredníctvom tohto procesu:

1. Skype zaviedol možnosť simultánneho prekladu pre 10 jazykov. Medzi ktorými sú na chvíľu ruština a japončina - jedna z najťažších na svete. Samozrejme, kvalita prekladu si vyžaduje vážne zlepšenie, ale už samotný fakt, že už teraz môžete komunikovať s kolegami z Japonska v ruštine a máte istotu, že vám bude rozumieť, je inšpiratívny.

2. Yandex vytvoril dva vyhľadávacie algoritmy založené na neurónových sieťach: Palekh a Korolev. Prvý z nich pomohol nájsť najrelevantnejšie stránky pre nízkofrekvenčné dopyty. "Palekh" študoval názvy stránok a porovnával ich význam s významom žiadostí. Na základe Palecha sa objavil Korolev. Tento algoritmus vyhodnocuje nielen nadpis, ale aj celý textový obsah stránky. Vyhľadávanie je čoraz presnejšie a majitelia stránok začínajú k obsahu stránok pristupovať inteligentnejšie.

3. Kolegovia SEO špecialistov z Yandexu vytvorili hudobnú neurónovú sieť: skladá poéziu a píše hudbu. Neuroskupina sa symbolicky volá Neurona a majú už aj svoj prvý album:

4. Google Inbox používa na odpoveď na správu neurónové siete. Vývoj technológií je v plnom prúde a dnes už sieť študuje korešpondenciu a generuje možné možnosti odpoveď. Nemôžete strácať čas písaním a nebáť sa zabudnúť na nejakú dôležitú dohodu.

5. YouTube používa na hodnotenie videí neurónové siete a to podľa dvoch princípov naraz: jedna neurónová sieť študuje videá a reakcie publika na ne, druhá robí prieskum používateľov a ich preferencií. Preto sú odporúčania YouTube vždy na tému.

6. Facebook aktívne pracuje na DeepText AI – komunikačnom programe, ktorý rozumie žargónu a čistí chaty od obscénnych slovníkov.

7. Aplikácie ako Prisma a Fabby, postavené na neurónových sieťach, vytvárajú obrázky a videá:

Colorize obnoví farbu čiernobielym fotografiám (prekvapte babičku!).

MakeUp Plus vyberá perfektný rúž pre dievčatá zo skutočnej škály skutočných značiek: Bobbi Brown, Clinique, Lancome a YSL sú už na trhu.

Apple a Microsoft neustále inovujú svoje neurálne Siri a Contana.

Umelá neurónová sieť

Zatiaľ len plnia naše príkazy, no v blízkej budúcnosti začnú preberať iniciatívu: dávať odporúčania a predvídať naše túžby.

A čo nás ešte čaká v budúcnosti?

Samoučiace sa neurónové siete môžu nahradiť ľudí: začnú s copywritermi a korektormi. Už teraz roboti vytvárajú texty so zmyslom a bez chýb. A robia to oveľa rýchlejšie ako ľudia. Pokračovať budú s pracovníkmi call centier, technickej podpory, moderátormi a správcami verejnosti v sociálnych sieťach. Neurónové siete sa už vedia naučiť scenár a zahrať ho hlasom. A čo v iných oblastiach?

Poľnohospodársky sektor

Neurónová sieť bude implementovaná v špeciálnych zariadeniach. Kombajny budú autopilotovať, skenovať rastliny a študovať pôdu a prenášať dáta do neurónovej siete. Tá sa rozhodne – polievať, prihnojovať alebo postrekovať pred škodcami. Namiesto niekoľkých desiatok pracovníkov budú potrební maximálne dvaja špecialisti: dozorný a technický.

Liek

Microsoft teraz aktívne pracuje na vytvorení lieku na rakovinu. Vedci sa zaoberajú bioprogramovaním – snažia sa digitalizovať proces vzniku a vývoja nádorov. Keď sa všetko podarí, programátori budú schopní nájsť spôsob, ako takýto proces zablokovať, analogicky sa vytvorí liek.

marketing

Marketing je vysoko personalizovaný. Neurónové siete už dokážu v priebehu niekoľkých sekúnd určiť, ktorý používateľ, aký obsah a za akú cenu sa má zobraziť. V budúcnosti sa účasť obchodníka na tomto procese zníži na minimum: neurónové siete budú predpovedať dopyty na základe údajov o správaní používateľov, skenovať trh a vydávať najvhodnejšie ponuky v čase, keď človek uvažuje o kúpe.

Elektronický obchod

Elektronický obchod bude implementovaný všade. Už nemusíte chodiť do internetového obchodu pomocou odkazu: jedným kliknutím si môžete kúpiť všetko, kde to vidíte.

Napríklad tento článok čítate o niekoľko rokov neskôr. Veľmi sa vám páči rúž na obrazovke z aplikácie MakeUp Plus (pozri vyššie). Kliknete naň a prejdete rovno do košíka. Alebo si pozrite video o najnovší model Hololens (Okuliare pre zmiešanú realitu) a objednajte si priamo z YouTube.

Takmer v každej oblasti budú ocenení špecialisti so znalosťami alebo aspoň porozumením štruktúre neurónových sietí, strojového učenia a systémov umelej inteligencie. Budeme existovať bok po boku s robotmi. A čím viac o nich budeme vedieť, tým pokojnejšie budeme žiť.

P.S. Zinaida Falls je neurónová sieť Yandex, ktorá píše poéziu. Ohodnoťte prácu, ktorú stroj napísal, keď ste sa naučili Majakovského (pravopis a interpunkcia sa zachovali):

« to»

toto je
len
niečo
nabudúce
a moc
tá osoba
je tam všetko alebo nie
všade naokolo je krv
obchod
priberať
sláva pri
pôda
s prasknutím v zobáku

Pôsobivé, však?

Neurónové siete pre figuríny

Dnes na každom rohu, sem-tam, vykrikujú o výhodách neurónových sietí. Ale čo to je, len málokto skutočne chápe. Ak sa pre vysvetlenia obrátite na Wikipédiu, zatočí sa vám hlava z výšky tam vybudovaných citadelov vedeckých pojmov a definícií. Ak máte ďaleko od genetického inžinierstva a neprehľadný suchý jazyk vysokoškolských učebníc spôsobuje len zmätok a žiadne nápady, potom sa pokúsme spoločne pochopiť problém neurónových sietí.

Ak sa ľudský mozog skladá z neurónov, potom sa podmienečne zhodneme, že elektronický neurón je akousi pomyselnou schránkou, ktorá má veľa vstupov a jeden výstup.

Vnútorný algoritmus neurónu určuje postup spracovania a analýzy prijatých informácií a ich premenu na jeden užitočný súbor vedomostí. Podľa toho, ako dobre fungujú vstupy a výstupy, celý systém buď rýchlo myslí, alebo naopak môže spomaliť.

Dôležité

Pri písaní primárneho kódu musíte svoje činy vysvetliť doslova na prstoch. Ak pracujeme napríklad s obrázkami, tak v prvej fáze bude pre nás hodnota jeho veľkosť a trieda. Ak nám prvá charakteristika hovorí o počte vstupov, potom druhá pomôže samotnej neurónovej sieti vysporiadať sa s informáciami.

Neurónové siete: čo to je a ako to funguje

V ideálnom prípade po načítaní primárnych údajov a porovnaní topológie tried bude potom neurónová sieť schopná sama klasifikovať nové informácie. Povedzme, že sa rozhodneme nahrať obrázok s rozmermi 3 x 5 pixelov. Jednoduchá aritmetika nám povie, že tam bude 3*5=15 vstupov. A samotná klasifikácia určí celkový počet výjazdov, t.j. neuróny. Ďalší príklad: neurónová sieť potrebuje rozpoznať písmeno „C“. Zadaná prahová hodnota je úplná zhoda do písmena, bude to vyžadovať jeden neurón s počtom vstupov rovným veľkosti obrázka.

Ako na každom tréningu by mal byť žiak potrestaný za nesprávnu odpoveď, ale za správnu nič nedáme. Ak program vníma správnu odpoveď ako False, potom zvýšime vstupnú váhu na každej synapsii. Ak naopak pri nesprávnom výsledku program považuje výsledok za pozitívny alebo True, odpočítame váhu od každého vstupu do neurónu. Logickejšie je začať sa učiť spoznávaním symbolu, ktorý potrebujeme. Prvý výsledok bude nesprávny, avšak miernou korekciou kódu bude program pri ďalšej práci fungovať správne. Uvedený príklad algoritmu na zostavenie kódu pre neurónovú sieť sa nazýva parsetrón.

neurálne siete

Neurónové siete pre figuríny

Dnes na každom rohu, sem-tam, vykrikujú o výhodách neurónových sietí. Ale čo to je, len málokto skutočne chápe.

Písanie vlastnej neurónovej siete: sprievodca krok za krokom

Ak sa pre vysvetlenia obrátite na Wikipédiu, zatočí sa vám hlava z výšky tam vybudovaných citadelov vedeckých pojmov a definícií. Ak máte ďaleko od genetického inžinierstva a neprehľadný suchý jazyk vysokoškolských učebníc spôsobuje len zmätok a žiadne nápady, potom sa pokúsme spoločne pochopiť problém neurónových sietí.

Aby ste pochopili problém, musíte zistiť hlavnú príčinu, ktorá leží úplne na povrchu. Keď si spomíname na Sarah Connor, s otrasom chápeme, že kedysi priekopníci vývoja počítačov Warren McCulloch a Walter Pitts sledovali sebecký cieľ vytvoriť prvú umelú inteligenciu.

Neurónové siete sú elektronickým prototypom samoučiaceho sa systému. Neurónová sieť podobne ako dieťa nasáva informácie, prežúva ich, získava skúsenosti a učí sa. V procese učenia sa takáto sieť rozvíja, rastie a môže samostatne vyvodzovať závery a rozhodovať sa.

Ak sa ľudský mozog skladá z neurónov, potom sa podmienečne zhodneme, že elektronický neurón je akousi pomyselnou schránkou, ktorá má veľa vstupov a jeden výstup. Vnútorný algoritmus neurónu určuje postup spracovania a analýzy prijatých informácií a ich premenu na jeden užitočný súbor vedomostí. Podľa toho, ako dobre fungujú vstupy a výstupy, celý systém buď rýchlo myslí, alebo naopak môže spomaliť.

Dôležité: V neurónových sieťach sa spravidla používajú analógové informácie.

Opakujeme, že vstupných tokov informácií môže byť mnoho (vo vedeckej terminológii sa toto spojenie počiatočnej informácie a nášho „neurónu“ nazýva synapsie) a všetky majú rôznu povahu a majú nerovnaký význam. Napríklad, človek vníma svet okolo seba prostredníctvom orgánov zraku, hmatu a čuchu. Je logické, že zrak je dôležitejší ako čuch. Na základe rôznych životných situácií využívame určité zmyslové orgány: v úplnej tme vystupuje do popredia hmat a sluch. Synapsie v neurónových sieťach podľa rovnakej analógie v rôznych situáciách budú mať rôzny význam, ktorý sa zvyčajne označuje váhou spojenia. Pri písaní kódu je nastavený minimálny prah pre odovzdávanie informácií. Ak je váha spojenia vyššia ako špecifikovaná hodnota, potom je výsledok kontroly neurónom kladný (a rovná sa jednej v binárnom systéme), ak je menší, potom je záporný. Je logické, že čím vyššie je latka nastavená, tým bude práca neurónovej siete presnejšia, no bude to trvať dlhšie.

Aby neurónová sieť fungovala správne, musíte stráviť čas jej trénovaním - to je hlavný rozdiel od jednoduchých programovateľných algoritmov. Rovnako ako malé dieťa, aj neurónová sieť potrebuje počiatočnú informačnú základňu, ale ak je počiatočný kód napísaný správne, potom samotná neurónová sieť bude vedieť nielen správne vybrať z dostupných informácií, ale aj vybudovať nezávislé predpoklady.

Pri písaní primárneho kódu musíte svoje činy vysvetliť doslova na prstoch. Ak pracujeme napríklad s obrázkami, tak v prvej fáze bude pre nás hodnota jeho veľkosť a trieda. Ak nám prvá charakteristika hovorí o počte vstupov, potom druhá pomôže samotnej neurónovej sieti vysporiadať sa s informáciami. V ideálnom prípade po načítaní primárnych údajov a porovnaní topológie tried bude potom neurónová sieť schopná sama klasifikovať nové informácie. Povedzme, že sa rozhodneme nahrať obrázok s rozmermi 3 x 5 pixelov. Jednoduchá aritmetika nám povie, že tam bude 3*5=15 vstupov. A samotná klasifikácia určí celkový počet výjazdov, t.j. neuróny. Ďalší príklad: neurónová sieť potrebuje rozpoznať písmeno „C“. Zadaná prahová hodnota je úplná zhoda do písmena, bude to vyžadovať jeden neurón s počtom vstupov rovným veľkosti obrázka.

Povedzme, že veľkosť bude rovnaká 3x5 pixelov. Nakŕmením programu rôznymi obrázkami písmen alebo číslic ho naučíme určiť obrázok postavy, ktorú potrebujeme.

Ako na každom tréningu by mal byť žiak potrestaný za nesprávnu odpoveď, ale za správnu nič nedáme. Ak program vníma správnu odpoveď ako False, potom zvýšime vstupnú váhu na každej synapsii. Ak naopak pri nesprávnom výsledku program považuje výsledok za pozitívny alebo True, odpočítame váhu od každého vstupu do neurónu. Logickejšie je začať sa učiť spoznávaním symbolu, ktorý potrebujeme. Prvý výsledok bude nesprávny, avšak miernou korekciou kódu bude program pri ďalšej práci fungovať správne.

Uvedený príklad algoritmu na zostavenie kódu pre neurónovú sieť sa nazýva parsetrón.

Existujú aj komplexnejšie možnosti fungovania neurónových sietí s návratom nesprávnych údajov, ich analýzou a logickými závermi samotnej siete. Napríklad online prediktor budúcnosti je celkom naprogramovaná neurónová sieť. Takéto programy sú schopné učiť sa s učiteľom aj bez neho a nazývajú sa adaptívnou rezonanciou. Ich podstata spočíva v tom, že neuróny už majú svoje predstavy o očakávaní, aké informácie chcú dostávať a v akej forme. Medzi očakávaním a realitou je tenký prah takzvanej bdelosti neurónov, ktorý pomáha sieti správne klasifikovať prichádzajúce informácie a nevynechať ani jeden pixel. Vlastnosťou AR neurónovej siete je, že sa od samého začiatku učí sama, nezávisle určuje prah neurónovej bdelosti. Čo zase zohráva úlohu pri klasifikácii informácií: čím je sieť ostražitejšia, tým je dôslednejšia.

Získali sme úplné základy vedomostí o tom, čo sú neurónové siete. Teraz sa pokúsme zhrnúť prijaté informácie. takže, neurálne siete je elektronickým prototypom ľudského myslenia. Pozostávajú z elektronických neurónov a synapsií – informačných tokov na vstupe a výstupe z neurónu. Neurónové siete sa programujú podľa princípu učenia sa s učiteľom (programátor, ktorý nahráva primárne informácie) alebo samostatne (na základe predpokladov a očakávaní z prijatých informácií, ktoré určuje ten istý programátor). Pomocou neurónovej siete môžete vytvoriť akýkoľvek systém: od jednoduchej detekcie vzorov na pixelových obrázkoch až po psychodiagnostiku a ekonomické analýzy.

neurálne siete,
metódy analýzy údajov:
od výskumu po vývoj a implementáciu

Domov
Služby
Neurálne siete
základné myšlienky
schopnosti
Výhody

Ako použiť
programovanie
presnosť riešenia
NS a AI
programy
články
Blog
O autorovi / kontakty