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í.
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.
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.
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.
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