A já bych chtěl zase nějaký do kódu zapsaný praktický příklad ... :)
Jinak, díky za pěkně podanou teorii.
Dělal jsem diplomku na Neuronové sítě v aplikačním nasazení. Do tét problematiky mě dostal učitel ve druháku na střední škole no a po čase mi to došlo, že jde jen o marketing neuronová síť je obyčejný analogový počítač. ( ještě , že Táta schovával skripta, ze své doby studia na FEI VUT) Analogový počítač se skládá ze zesilovačů, které mají různé zesílení, jsou integrační, derivační, lineární atp. tedy defakto vždy jde o základní interpretaci neuronu. Takže kdo chce pochopit jak to funguje bez keců okolo ať vytáhne stará skripta a má hned jasno.
Jedina vyhoda je pocet neuronu a ze je to software, tj neni potreba pro kazdou verzi stavet obvod. Jinak "neuro" chipy se take prodavaji ajsou castecne rekonfigurovatelne a ano neni to nic jineho nez varianta analogoveho pocitace v podobe chipu
navic neuronova sit bez nauceni resp uciciho algoritmu je k nicemu
A odkud je má vytáhnout?* :D
*nenápadné pošťouchnutí ve stylu oscannuj a hoď na uložto
Doufam, ze takto polopaticky bude vysvetlovana problematika i v dalsich dilech. Snad konecne pochopim jak vlastne back propagation a nebo jine algoritmy uceni funguji. Diky.
Backpropagation (nebo aspoň její základní myšlenka) je celkem jednoduchá záležitost. U váhy každého vstupu každého neuronu spočítáme derivaci toho, jak ovlivňuje celkovou chybu na tréninkové množině. A v každém kroku posuneme váhu ve směru příslušné derivace. Prostě normální gradientní metoda, nic jiného v tom není. Po deseti milionech iterací uvíznete v nějakém lokálním minimu... Ale na to aby se spočítal třeba XOR to stačí. Samozřejmě pak jsou různá vylepšení, přidává se setrvačnost, v případě uvíznutí se s tím "zatřese", v případě přibližného nalezení minima se to "ochlazuje", řeší se automaticky počet vrstev a počet neuronů v každé vrstvě atd. atd. Jsem zvědavý, s čím autor přijde, až ukáže nějaký příklad. Abych řekl pravdu, na matfyzu byly ty praktické příklady, co jsme programovali, spíš demotivační.
zajemci najdou na webu hafo prikladu.
na zdejsim prikladu s muzi a zenami si muzete vytrenovat sit
na vstupni parametry vyska, delka vlasu a vytrenovana sit
vam pak bude vyhazovat vysledek muz, zena.
Ale jo, urcite se to da vygooglit. Ale od toho je tenhle serial, aby clovel googlit nemusel a mel to vysvetlene "pro blby" a v cestine a mohl si to precist bez velke dusevni namahy i treba v praci behem buildu projektu :-)
Priklad muz/zena je prave ten demotivacni priklad, kdy sit se bude desne dlouho ucit to, na co i kazdy polointeliget navrhne 1000x lepsi algoritmus. Nic proti tomu prikladu, na vysvetleni, jak funguje perceptron, je to ok. Ale neni to priklad motivujici (ktery ocekavam v nejakem z dalsich dilu a ktery jsem nedostal pred x lety ve skole). Motivujici priklad je takovy, aby clovek zjistil, ze sit je i na neco dobra. Ze spocita i neco, kde neni elementarni navrhnout nejaky lepsi algoritmus.
Treba pekny priklad byl ten s genetickymi algoritmy na 3 kruznice.
ja jsem si kdysi hral s prikladem pro rozeznavani pismenka A.
byla dana matice 5x5 pseudo-pixelu a kazdy pixel mohl mit hodnotu
sedi 0 az 255 a sit se naucila a pak mela rici zda je v matici pismenko A.
napriklad ciste A vypadalo v hex takto:
00 00 FF 00 00
00 FF 00 FF 00
00 FF 00 FF 00
00 FF FF FF 00
00 FF 00 FF 00
Jo, tohle jsou presne ty demotivacni pripady. Ja jsem si treba kdysi sam naprogramoval backpropagation a reseni XOR problemu. Krasne se to asi po 10000 iteracich vypocitalo. Ale pak jsem si uvedomil, ze to mam vlastne spatne. Treninkovou mnozinu jsem mel v matici 2x2 {((0,0),0), ((0,1),1), ((1,0),1), ((1,1),0)} a ta sit, mrcha jedna, se to naucila ne pres primky x = 1 a y = 1 (ocekavane reseni xor), ale pres dve rovnobezky x + y = 0.5 a x + y = 1.5. No ale hlavne me krkalo, ze se tady neco strasne slozite pocita a pritom kdejake ucho navrhne algoritmus na miru.
To same je s tim pismenkem A. Staci ho posunout nebo trochu zarotovat nebo dat do perspektivy nebo zmensit nebo udelat misto cerne na bile negativ a uz ho ta sit nenajde. Jo kdyby tohle sit umela, tak bych tleskal. Fixni pismenko s fixni barvou (coz predpokladam dela ta sit) vypocita i suma rozdilu od predepsane barvy pixelu.
Prave na pismenka je to celkem dobry. Myslim na tom funguji (nebo fungovaly) OCRka.
s tim A to byl primitivni priklad, pokud by se vzaly vhodnejsi vstupni
parametry nez pixely, tak by to mohlo rozeznavat i rotovane A, deformovane atd.
na rozpoznavanie su dobre konvolucne neuronove siete, rucne pisane cislice rozpoznavaju skoro so 100percentnou uspesnostou
Ano, sit, ktera by poznavala pismenka po nejakych transformacich by uz byl velmi zajimavy priklad. (Aspon pro me.) Idealne treba jako kdyby to cetlo nafocene SPZ, ale uz i treba jen kdyby to zvladalo posun a zaroven i rotaci nejakeho fixniho pismenka 5 x 5 pixelu... Ale obavam se, ze nejekym normalnim modelem s backpropagation by si clovek ani neskrtnul.
Backpropagation je na toto pouzitie absolutne nevhodna. Na taketo veci sa skor pouzivaju rozne "SOM" siete. Napriklad Kohonenova.
To se řeší poměrně snadno (alespoň teoreticky) :)
V rámci školního projektu jsem řešil rozpoznávání tvarů v obrázku pomocí neuronové sítě.
Zásadní pro řešení je, jak objekt popsat. Pokud ho popíšu maticí, pak při pootočení objektu jej již nemůžu popsat, protože matice mi popisuje objekt o konkrétní velikosti v konkrétní poloze. Proto je lepší objekt popsat pomocí vlastností, na které nemá změna měřítka, pootočení, případně umístění objektu vliv.
Já jsem používal tzv. invariantní momenty
(M. K. Hu, "Visual Pattern Recognition by Moment Invariants", IRE Trans. Info. Theory, vol. IT-8, pp.179–187, 1962), které popisují objekt nezávisle na jeho pozici, velikosti či natočení.
Síti se poté předkládají pro trénování objekty popsané těmito invariatními momenty. A při rozpoznávání pak vytahuji z obrazu objekty, spočítám invarianty a ty pak nechám vyhodnotit neuronovou sítí.
Pro upřesnění dodám, že můj projekt rozpoznával čtverec, obdélník, kruh, trojúhelník, hvězdičku. A rozpoznával jsem to pomocí sítě, která měla 7 vstupů(invarianty), 5 neuronů ve vnitřní vrstvě a tři neurony ve výstupní vrstvě(binárně kódovaný typ objektu, tj. např 000 čtverec, 001 obdélník, atd.)
Tak si představ, že je to něco jako sklon funkce. f(x) = x má (všude stejnou) derivaci 1. Konstanta 0. -x má 1. 2x má dva. Takže gradientní metoda znamená, že všemi váhami pohneš tím směrem, kterým se snižuje chyba. (Asi jako když půjdeš pořád přímo dolů, čím je svah prudší, tím rychleji, a budeš doufat, že dojdeš do nejhlubšího místa na světě.) U neuronové sítě s vhodně zvolenou aktivační funkcí se ty derivace i dají celkem v pohodě spočítat.
Průbeh funkce je výška cesty do kopce, po rovnice zkopce a tak. Derivace je průběh stoupání, tj. hodně, skoro nula, mínus.
Možná by se ti mohla líbit brmiversity - http://video.hrach.eu/index.php?akce=7
Diky za link, az bude cas urcite zkouknu.
Vecer sem nakonec k backpropagation nasel pochopitelny vysvetleni ... konecne ... vzdycky jsem mel totiz "stesti" a skoncil u textu psanych pravdepodobne nejakou formou mimozemstanstiny ... viz http://www.matematica.ciens.ucv.ve/dcrespin/Pub/backprop.pdf
Celkem by me zajimalo, jestli se treba v praxi nepouzivaji geneticke algoritmy na nalezeni nejlepsi neurovone site pro dany problem.
V praxi nevim, ale ve skole nam rikali, ze se to takhle delat da.
Jasne. Asi najkrajsi priklad na toto je http://is.gd/polyworld - Naozaj stoji za zhliadnutie!
Přečetl jsem jen začátek "Neurony v přírodě" (to je ale češtin) a dál už jsem nemohl. Idkyž připustím, že se jedná o velmi zjednodušující popis, musím konstatovat, že takto neuron nefunguje. Jak pak mám věřit zbytku článku, resp. seriálu, o neuronových sítích, kterým nerozumím?
Autor v článku dle mého názoru nepopisuje neuron McCulloch/Pitts, ale novější model, tzv. Perceptron.
Neuron McCulloch/Pitts, má 1..n vstupů, jeden inhibiční vstup, vnitřní potenciál a výstup. Vstupy se sčítají a pokud přesáhnou vnitřní potenciál a zároveň není signál na inhibičním vstupu, na výstupu je 1. V ostatních případech je na výstupu 0.