2024. április 16., kedd

Gyorskeresés

Köv. megálló a hype vonaton

Írta: | Kulcsszavak: ML . AI

[ ÚJ BEJEGYZÉS ]

Volt régebben ez a bejegyzésem az ML témában, és egy ideig nem foglalkoztam a témával, de az a hobbiprojektem, amit ott leírtam, még mindig fut, és már 2020 van szóval muszáj nekem is Skynet kompatibilisnek lennem. Na jó, nem. Az igazság annyi, hogy belefutottam 3Blue1Brown zseniális csatornájába, ott is ebbe az ML sorozatba, ill. munkában is nagyon nyomják az ML-t, én meg szerettem volna megérteni pontosan, mit is csinál egy ilyen ML program, hátha tudok belőle valamit hasznosítani. Nem akarom ismételni magam, az előző bejegyzésben már pár sorban leírtam miről szól az egész.

A matektól eléggé elszörnyedtem, úgyhogy uzsgyi google, és találtam is egy nagyon egyszerű 1 rétegű ML implementációt C++-ban. Ugye az előző "részben" teljes képeket elemeztem, ami lassú volt, és nem is adott megfelelő végeredményt. Eleinte azon gondolkodtam, hogyan tudnám ezeket a képeket megetetni ezzel a viszonylag egyszerű kóddal, de ha a Tensorflow nem tudott vele mit kezdeni, akkor ez sem lesz képes.

Mint említettem, munkában nyomják a témát, és volt egy 6 részes tréning. Ott említette az előadó, hogy arcfelismerésnél nem az arc képét adják be a ML algoritmusnak, hanem az arcot leíró jellemzőket /vagy valami ilyesmi, bevallom nem mindig figyeltem :D /. A lényeg a lényeg, elkezdtem gondolkodni, milyen paramétereim vannak. A kis színes képekből egyértelmű, hogy van sebesség és irány. A sebesség hasznos, eddig is használtam klasszifikálásra, de az irány sajnos nem annyira, mert a nem valid estekben nincs jellemző irány /a valid esetekben van uralkodó szélirány/. Kis agyalás után beugrott, hogy van még az SAD paraméter. Ez a sum of absolute differences, az abszolút különbségek összege, amit akkor kapunk, mikor a mozgásvektort határozzuk meg. Ezt utólag sajnos nem lehet kinyerni, tehát csak miután elkezdtem gyűjteni ezt is, azokkal az adatokkal tudtam tanítani a modellt.

A modellben 3 neuront használtam a rejtett rétegen, mert 3 a magyar igazság. Igazából 3 paraméterem volt, a sebesség, a legkisebb és legnagyobb SAD. Ekkor volt 54 mintám, ami nevetségesen kevés, és még nem tudtam, hogy a min és max SAD között majdnem R=1 korreláció van, szóval elég lenne 2 paramétert használni, de 3 mégis csak fancybb.

Itt jegyezném meg, hogy a C++ kódban valami hiba van a keverés környékén, stackoverflow-n valaki írt is megoldást, ami nekem nem működött, keverés nélkül viszont teljesen jó eredményt ad.

Tehát ott tartunk, hogy tanítanánk fel a modellt. Mivel ez egy 2 osztályos klasszifikációs probléma, a kimeneten szigmoid függvényt használtam, a rejtett rétegen pedig kipróbáltam a lineáris és szigmoid függvényeket is. Végül a lineáris mellett döntöttem, mert gyorsabb volt, és jobb eredményt is adott, mint a szigmoid.

Eltelt pár hét, és most kijelenthetem, igencsak bevált az ML-esítés. Lett 348 mintánk, lehet elemezni. Először nézzük meg a SAD min és max közti összefüggést:

Ez csak azért fontos, mert mikor vizualizálni akarjuk az eredményeket, nem mindegy hány dimenzióban tesszük azt. Ugye nekem továbbra is 3 paraméterrel kell etetnem az algoritmust, de ha összefüggés van 2 között, akkor elég annyival kevesebb dimenzióban vizualizálni, most épp kettőben.

Lineáris aktivációval 54 minta alapján

Szigmoid aktivációval 54 minta alapján

Lineáris aktivációval az összes minta alapján

Szigmoid aktivációval az összes minta alapján

Mivel béna vagyok grafikonokból, és nem tudok értelmeset rajzolni, megpróbálom elmagyarázni mi látható. Vízszintesen a legkisebb SAD érték /1 pixel = 5000/, függőlegesen pedig a sebesség látható /1pixel = 0,2 km/h/, a bal felső sarokból kiindulva. A valid értékek a jobb felső sarokból mennek át a bal alsóból nem validba. A színezés pedig a 0-1 valószínűséget jelenti. Annyi látható a képeken, hogy minél több adattal etetjük az algoritmust, annál biztosabb a dolgában, annál szűkebb a 0-1 valószínűség közti átmeneti sáv.

Még adós vagyok egy képpel, az pedig a valós adatok elhelyezkedése a vizualizáción. Na ilyenem nincs, de itt egy excel :DDD /ha esetleg sikerül rávarázsolnom, frissítem a bejegyzést/. A képeken a fehér négyzetek a valid, a fekete négyzetek az invalid értékek. Azért itt hagyom az excellel gyártott képet is. Pirossal vannak a valid, kékkel az invalid értékek.

Látható, hogy nem egy nagy was ist das elválasztani az adatokat akár egy egyszerű képlettel is, de mennyire menő már, hogy odarakhatod valamihez, hogy powered by AI :D

UI: Remélem nem írtam sok hülyeséget, nem értek a témához.

Hozzászólások

(#1) UnA


UnA
Korrektor

ML = Machine Learning.

Gondoltam, hátha másnak sem jön át elsőre, hogy miről akart szólni a cikk :)

(#2) weiss válasza UnA (#1) üzenetére


weiss
addikt

Kösz a kiegészítést. Gondoltam egyértelmű a közegből. :)

I did nothing, the pavement was his enemy!

További hozzászólások megtekintése...
Copyright © 2000-2024 PROHARDVER Informatikai Kft.