Neuralis halozat - ismeretlen adat

 ( Nyosigomboc | 2008. március 8., szombat - 19:43 )

A kovetkezo problemara keresek valamilyen neuralis halozat strukturat, vagy modszert:

Vannak meresi adatok, es van valami elvart kimenet. Erre szeretnek tanitani egy neuralis halot (ellenorzott tanulassal). Sajnos a dolog jellegebol adodoan nem mindig van 1-1 bemeneten adat. Vagy azert, mert akkor meg egyaltalan nem mertuk, vagy azert, mert epp hianyzik. A felismeresi szakaszban is elofordulhat olyan, hogy az egyik bemenet ismeretlen.
Tobbretegu perceptronra gondoltam (szigmoiddal), de ha van jobb, ebbol tudok engedni.

Mivel a meresi adatok pozitiv szamok, nagyon elutne, ha egyszeruen 0-at adnek a bemenetre arra az idore. Foleg azert, mert a tenyleges ertek valahol a legutobb mert ertek korul lehet (mar ha volt ilyen).

Azzal megkerulom a problemat, ha azon a szakaszon, ahol meg nem volt meres - visszamenoleg - kipotolom az elso meres eredmenyevel. Illetve a nem mert szakaszon a ket pont kozt linearisan interpolalom.

A kerdesem az lenne, hogy van-e valami olyan modszer, amivel a neuralis halo olyan modba kerul, hogy nem figyel arra a bemenetere (mas struktura, mas tanitasi modszer peldaul).

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Nem vagyok egy neuronháló guru, de belegondolva, hogy minden neuron egy skaláris szorzat, az egész meg egy folytonos függvény...
Nem tudom elképzelni, hogy csak úgy egyszerűen dimenziót csökkents.

Én azt mondanám, hogy dobd ki azokat a mintákat amik hiányosak.
Ha így vagy úgy az összes minta hiányos, az szívás...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

Ez nem valami jo hir.
Arra gondoltam, hogy valahogy ki lehetne hagyni azokat a node-okat, aminek ismeretlen a bemenete. De az ugye ugyanaz, mint ha 0-at kuldenek be. Aztan arra, hogy kiatlagolom/kiegeszitem, de azzal az a baj, hogy lehet, hogy hulyesegre fog ratanulni. Aztan arra, hogy kiegeszitem, de a back propagation-nel nem tanitom azt, aminek hianyos a bemenete (igy talan nem maszik el, es nem tanul hulyeseget), de nem tudom, hogy jo lenne-e.
Lehet, hogy elofeldolgozaskor osszesitem valahogy a mereseket, es csak arra tanitom.. de attol tartok, hogy tul sok informacio veszne el.
----
400 MHz CPU, 64MiB RAM, 2GiB Flash, 480x640
honlap készítés

Nem ugyanaz a kidobás, mintha 0-t raksz a helyére. Az utóbbival elmászatod a háló tanulását (kivéve persze ha
1. nem fontos a paraméter, akkor meg hagyd ki
2. A 0 jó közelítő érték a várt bemenetre)

Üdv,
BaZso

En se ertek hozza :)
De mi volna, ha minden bement melle adnal meg egy bementet "ervenyes adat" neven, ami ket erteket vehet fel ertelem szeruen.

Ez egy érdekes gondolat, játszunk el vele:

Ha viszonylag kevés olyan adat van, ahol nincs adat, akkor a "nincs érvényes adat" állapotok nem lesznek jól betanítva.
Nosza, csináljunk a teljes adatokból hiányosakat. Máris van adat, lehet tanítani.
De hoppá: te (Nyosigomboc) azt várod, hogy hiányos adatokból is jó eredményt kapjál. Ezzel lényegében azt mondod, hogy az az adat felesleges a jó eredményhez. Ha felesleges, akkor hagyjuk ki, és kész.
Ha nem felesleges, akkor meg kár szenvedni azokkal az esetekkel, amikor nincs meg, hiszen úgyse kaphatunk jó eredményt...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

Nem muszaj minden bemeneti jelet felhasznalni, es nem muszaj minden mintat sem. Ezzel viszont - erzesem szerint - sok info veszne el.
Minel tobb bemeno jelet hasznalok, annal tobb lesz a hianyos minta.
Az adott mintak egy idopontban keszulnek, es nem lehet egyszerre mindent merni (es nem en dontom el, hogy mikor mit merek, hanem a feladat jellegebol adodoan vagy van vagy nincs, ez egy jelre nagyjabol ciklikusan valtozik). Igy a tobbi adat hianyozni fog.
Ha keson jovok ra, hogy x-t is kellett volna nezni, akkor ertelemszeruen az x jel 1. merese elott mindenutt hianyozni fog.
----
400 MHz CPU, 64MiB RAM, 2GiB Flash, 480x640
honlap készítés

Az a gond, hogy ha a hiányos jelet kiegészíted (mondjuk interpolálod), akkor félő, hogy rossz tanuló példát kapsz. Ennél meg az is jobb, ha kihagyod.

Egyébként bármilyen furcsán hangzik, de a több tanító példa nem biztos, hogy jobb, főleg, ha azok nem egyenletesen helyezkednek el a problématérben. Az új példák hatására a háló esetleg "elmászhat" és rossz eredményt ad régi példákra.
Az mindenképp fontos, hogy a bemenetek közül egyenletes eloszlással válassz. Az se baj, ha egy bemenet többször szerepel.

Ezzel azt akarom mondani, hogy amíg a lehetséges bemenetek közül mindenfélét tudsz prezentálni, addig nyugodtan dobd ki a hiányos mintákat tanítás közben.

Persze mikor majd használni akarod a hálót, akkor ezekkel is kezdened kell valamit, de ha a bemenetek időben folytonos függvények, akkor az interpoláció működhet.

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

Erre is gondoltam, de ezzel az a baj, hogy a sok "analog" jel melle kerulne egy csomo "digitalis", es a neuralis halo nem tudom hogy kezelne a dolgot.
----
400 MHz CPU, 64MiB RAM, 2GiB Flash, 480x640
honlap készítés

Ismeretlen értékek? Még a végén öntudatra ébred ;)
--
A linux felhasználóbarát. mindössze megválogatja a barátait...

És ha gépi tanulással próbálnád megtalálni a hiányzó értékeket?

--
The Net is indeed vast and infinite...
http://gablog.eu

Idokozben beszeltem egyik imerosommel, o is hasonlot ajanlott:
Legyen 2 NN egymas utan. Az elso egeszitse ki a hianyos mintakat, a masik hasznalja ennek a kimenetet bemenetkent, es viselkedjen ugy, mint ha normalis ertekek mentek volna be.
Nem probaltam meg ki (ahhoz elobb be kell inditani az adatgyujtest), de eddig ez tetszik a legjobban.

Azert, ha van meg valakinek otlete, ne tartsa magaban!
----
400 MHz CPU, 64MiB RAM, 2GiB Flash, 480x640
honlap készítés

Nehany megjegyzes.

1. Jol ertem u.n. "feedforward" halora gondolsz:
http://documents.wolfram.com/applications/neuralnetworks/NeuralNetworkTheory/2.5.1.html

Ha igen, akkor egyetlen "hidden layer" is elegendo, kerdes csak a neuronok szama.
Cybenko es Funahashi kb. 15 evvel ezelott irtak errol.

2. Hatarolo fuggvenynek a tanh() elonyosebb a szigmoid helyett (derivalhatosag).

3. "Tanulas", mint olyan ertelmetlen. Hanem a nemlinearis hibafuggveny egy megfelelo lokalis minimumat keressuk (nem tudjuk hol van a globalis).
Ehhez vagy "simulated annealing", vagy sok Newton-Raphson, vagy a ketto kombinacioja szukseges.

4. Az eredmenyt (a halozat parametereit) verifikalni kell, de nem szazalek szamitassal!

5. Az idonkent nem mert bemenetekrol, meg az jut az eszembe, hogy mit is varsz a halotol valos idoben?

2.
Szigmoid: http://mathworld.wolfram.com/SigmoidFunction.html
Egyébként a te linkeden is ez van, mi a gond a deriválhatósággal?

3.
A "tanulás" bevett terminológia.
Egy függvény (jelen esetben hibafüggvény) lokális minimumának megtalálására elég sok módszer van, csak ebből sok a gyakorlatban nem alkalmazható neurális hálókra. Csak gondolj bele a paramétertér dimenziószámába.
Az első (és talán leggyakrabban használt) módszer a backpropagation, aminek lényege, hogy a "tanító" mintákra összeveti a kapott eredményt a várt eredménnyel, és a hibát "visszapropagálja", ezáltal arra a mintára a háló jó(/jobb) eredményt ad. Innen a "tanítás" kifejezés...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

2. Szvsz egyszerubb a derivalt tanh() eseten, valamint 0 es nem 0.5 korul hatarol. Ez neha szep.
Az oldalt csak azert linkeltem, hogy egyertelmu legyen milyen halorol beszelunk
("singel layer feed-forward NN"). Fogalmam sincs mi van az oldalon ezen kivul.

3. Sajnos. Hivhatnank akar nevelesnek is, az se kisebb hulyeseg. Vegye be aki hagyta meghonosodni :)
A backprop a Newton-Raphson egy torzitott formaja, mely "ossze-vissza" konvergal, neha-neha atugrik egy-egy helyi minimumot...
A regi naiv NN idok mar elmultak, 15 evvel ezelotti eredmenyek meg csak nem akarnak beszivarogni kis hazankba.

"3. Sajnos. Hivhatnank akar nevelesnek is, az se kisebb hulyeseg. Vegye be aki hagyta meghonosodni :)"

Mivel angolul is "teaching method", az ebbéli aggájaidat kéretik Paul Werbos úrral megbeszélni. :)

"A backprop a Newton-Raphson egy torzitott formaja"
Ha azt nézzük, hogy derivált irányba lépked, hát legyen.

"neha-neha atugrik egy-egy helyi minimumot..."
Csak úgy mint a Newton Raphson.

"A regi naiv NN idok mar elmultak, 15 evvel ezelotti eredmenyek meg csak nem akarnak beszivarogni kis hazankba."
Most már igazán érdekelne egy link Newton-Raphson-ra NN témában.

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

"Mivel angolul is "teaching method", az ebbéli aggájaidat kéretik Paul Werbos úrral megbeszélni. :)"
Szerintem o mar tudja, hogy amit 30 eve kitalalt, az sok szempontbol tulhaladott mara. (Az "aggaly"-t ly-al irjak.) Ugye nem gondolod, hogy az egeshez flogisztonra van szukseg? Pedig ~350 eve errol irtak. :)

""neha-neha atugrik egy-egy helyi minimumot..."
Csak úgy mint a Newton Raphson."
Na de kollega...
Aze' van benne derivalt, mert az szabalyozza a lepeshosszt, nehogy atess a "lo" tulso oldalara.

"Most már igazán érdekelne egy link Newton-Raphson-ra NN témában."
Semmi kulonos:
1. (random) inicializaljuk a halo parametereit
2. A minimalizalando fv. a szumma hiba az osszes bemenet-vektorra
3. Keressuk azt a parameterkeszlet azon ertekeit, melynel a fenti fv-nek minimuma van.
4. Az inicialo ertekektol fuggoen megy mas-mas lokalis minimumba, de mivel a gradiens metodus piszok gyors, ezert rettenetes mennyisegut probalkozhatunk adott ido alatt. Ugyhogy hadd fusson, es kozben gyujtsuk ki a legkisebb minimumot adot, a tobbi eredmeny pedig eldobhato.

"Az "aggaly"-t ly-al irjak."
Az igaz, de szerintem még á-val is. :)

"Aze' van benne derivalt, mert az szabalyozza a lepeshosszt, nehogy atess a "lo" tulso oldalara."
Azé' van benne derivált, hogy a jó irányba lépjen, szerintem fel tudnék írni olyan fv-t amiben adott pontról indulva a Newton módszer átugorja a lokális minimumot, de persze lehet, hogy tévedek.

"3. Keressuk azt a parameterkeszlet azon ertekeit, melynel a fenti fv-nek minimuma van."
Itt nekem annyi gondom van, hogy nem tűnik triviálisnak egy NN hibafüggvényének a deriváltja.

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

Szerintem a legjobb, amit tehetsz, hogy csak olyan pontokkal tanitod a halot, amihez van jo kimenet...

Erzesem szerint minden bemenet hordoz valamennyi plusz informaciot, de mindegyik keveset (es majdnem mind hianyos valahol (a szamolt ertekeket kiveve)).
Szoval felhasznalhatok keves bemenetet, es akkor sok hianytalan mintam lesz, keves informacioval.
Ahogy felhasznalhatok sok - hianyos - bemenetet is. Akkor ezekkel nyilvan kezdeni kell valamit.
----
"Heavy Mental" - Pratchett
honlap készítés

Eloszor azt hittem, hogy van erre valami normalis, altalanos megoldas. Ugy tunik, nincs.

Plusz info, nem tudom, hogy segit-e: a (hianyos) bemenetek jovobeli erteket (vagy valtozasat) kell megtippelnie a halozatnak. Ezek idoben (lassan) valtozo ertekek.

----
"Heavy Mental" - Pratchett
honlap készítés

A hianytalan bemenetek a hianyos bemenetekbol szarmaztatott adatok (sulyozott atlag pl).
----
"Heavy Mental" - Pratchett
honlap készítés

Tkp. mivel is nezel szembe?
Van n db meresi csatornad, ezekbol bizonyos idopontokban tetszoleges k db nem mert, es a k-n db mertbol kell megmondani az adott idoponthoz tartozo k db nem mert ertekeket?

Sajnos a kerdesedre nem adhato 'tudomanyos' valasz. Jo lenne ha, amennyiben nem allamtitok, pontosan leirnad mirol is van szo. Minden reszlet fontos lehet, minden informacio az adataidrol segit.

A legfontosabb majd a verifikalas lesz a vegen...