Skocz do zawartości

Sztuczna sieć neuronowa


Sutikku

Rekomendowane odpowiedzi

Pierwszy raz o sztucznej sieci neuronowej usłyszałem (w sumie zobaczyłem) w tym filmiku

Temat mnie trochę zaciekawił, trochę poczytałem, trochę pooglądałem. Naprawdę ciekawa sprawa.

W opisie tamtego filmiku, jest link który jakoś obrazuje, w jaki sposób wygląda w tym algorytmie sieć neuronowa. Tutaj.

Podejrzewam, że coś podobnego można stworzyć w Game Makerze. Więc ten temat założyłem, w celu wysłuchania czyjegoś zdania na ten temat, a może nawet ktoś chciałby się podzielić pomysłem, jak by to miało wyglądać? I czy jeśli ktoś to ogarnia, byłby tak miły trochę to wyjaśnić?

Odnośnik do komentarza
Udostępnij na innych stronach

Lepiej, do Quake 2 stworzono boty, które uczą się w ten sposób grać. http://homepages.paradise.net.nz/nickamy/n...about.htm#about

Kiedyś na tym grałem sporo czasu i faktycznie po paru tygodniach grania z nimi miałem coraz większe problemy ich pokonać.

Odnośnik do komentarza
Udostępnij na innych stronach

Zrobilem kiedyś perceptron, który sprawdza, czy na obrazku jest litera 'L'. Tutaj

Perceptron to model neuronu, ma kilka/set wejść i jedno wyjście. Żeby się nauczył czegoś, trzeba mu dać przykłady, na które znasz odpowiedź. Potem, gdy neuron się już nauczy, możesz mu pokazywać nowe litery, a on rozpozna, czy to litera 'L', czy nie. Jeśli nie rozpozna, to po prostu poprawi swoje 'rozumienie' o literze 'L' i będzie lepiej zgadywać kolejne litery.

 

Sieci neuronowe to teoretycznie potężne narzędzie, pozwalające komputerowi robić rzeczy, które do tej pory były zarezerwowane dla człowieka (czytanie, rozpoznawanie mowy, obrazów itp.) Jest sieć, która nauczyła się grać w Civilizations IV, inna bezbłędnie odczytuje kody reCaptcha.

Odnośnik do komentarza
Udostępnij na innych stronach

Też miałem na studiach sieci ale tam była tylko zabawa programikiem zgadującym pismo. I wyjaśnienie jak to mniej więcej działa i faktycznie było to nudne ale taka jest specyfika nauczania w szkołach :P

 

Zakładam że jakbyś sam się nauczył i wykorzystał to do napisania jakiegoś bota to miałbyś niesamowity ubaw.

Odnośnik do komentarza
Udostępnij na innych stronach

Kurcze pomimo wszystkiego trudno mi to zrozumieć. Czy to wygląda mniej więcej tak?

Idę prosto-zginąłem.

Przed chwilą zginąłem idąc prosto. Idę w lewo.

O udało mi się. Będę szedł w lewo.

 

Wiem, że napisane językiem jak dla idioty, ale dobrze to staram się zrozumieć?

Odnośnik do komentarza
Udostępnij na innych stronach

Hmmm, poczytałem o tym i niby coś tam zrozumiałem (akurat tego z plecakiem to nie). Jednak w sumie to za dużo mi to nie dało (oprócz wiedzy czym jest problem Komiwojażera).

EDIT;

Hmm, ten link:

.

Kolejna próba zrozumienia tego niesamowitego czegoś.

Od samochodu wychodzi 9 lin. Jest też 9 wejść. Jeżeli linia jest blisko ściany wysyła wiadomość, ona idzie dalej od wejścia. Jeśli jest dużo sygnałów to wiadomości idą dalej i wtedy już dzieje się akcja np. skręt w prawo. Tak?

Odnośnik do komentarza
Udostępnij na innych stronach

Skoro już jesteśmy przy tym filmiku, to jak by mógł wyglądać kod, na to aby takie linie dochodziły do ścian?

Tzn. bo na początku pomyślałem, że może po prostu idą do najbliższego punktu ściany, ale nie dość, że wszystkie by szły do jednej i tej samej, to jeszcze, troszkę dziwne by to było. One są stałe, i tylko się sprawdza jak duża część wychodzi poza ściany? Na przykład połowa linii jest poza ścianą, więc wejście to 0.5. Z tym, że też nie mam pojęcia jak takie sprawdzanie by wyglądało. Bo naszła mnie chęć zrobienia czegoś podobnego.

Odnośnik do komentarza
Udostępnij na innych stronach

Akurat narysowanie takich lini w GM to żaden problem zobacz artykuł "wyszukiwanie binarne" w komentarzach jest przykład jak zastosować to do rysowania cieni ze źródła światła. https://gmclan.org/index.php?czytajart=74 To podobne jest zagadnienie, ja to wykorzystuję często do zrobienia strzelania.

Odnośnik do komentarza
Udostępnij na innych stronach

Niezbędna jest wiedza na temat uczenia sieci neuronowych - bez tego są one bezużyteczne. Są trzy typy uczenia, każdy wymaga innego algorytmu do modyfikowania wag neuronów. W dodatku przy sieciach wielowarstwowych dochodzi algorytm propagacji wstecznej, który w ogóle jest kosmosem i nawet ja jeszcze nie całkiem ogarniam, jak on dokładnie działa. Na początek spróbuj zbudować pojedynczy perceptron, później weź się za bardziej skomplikowane rzeczy.

 

Oczywiście rozumiem, że algorytmy genetyczne masz już przerobione : P

Odnośnik do komentarza
Udostępnij na innych stronach

Staram się uczyć analizując perceptron który zrobiłeś tylko nie mogę zrozumieć pewnej pętli w skrypcie SpriteToGrid

GML
for(i = 0; i < 32; i += 1)

{

for(j = 0; j < 32; j += 1)

{

ds_grid_set(global.netgrid,i,j,(surface_getpixel(global.surf,i,j)) != c_white)

}

}

Do czego ona służy, co ona robi?

Odnośnik do komentarza
Udostępnij na innych stronach

Ten surface (surf) jest tłumaczony na wejście perceptronu (netgrid). Jeśli dany piksel nie jest koloru białego, ustawia dane wejście perceptronu na 1, wpp na 0. Wyobraź sobie ten perceptron jako drzewko, którego liściami jest surface na jednej płaszczyźnie, a pniem jest wyjście perceptronu.

Odnośnik do komentarza
Udostępnij na innych stronach

A jeśli chodzi o to:

GML
for(i = 0; i < 32; i += 1)

{

for(j = 0; j < 32; j += 1)

{

sum += ds_grid_get(global.netgrid,i,j)*ds_grid_get(global.wetgrid,i,j) //suma wazona

}

}

Tutaj dodaje do sumy, obliczenie czy jest to literka L? Z tym, że nie od razu tylko po pikselu?
Odnośnik do komentarza
Udostępnij na innych stronach

Jeżeli ta suma przekroczy pewną wartość ustaloną przez funkcję aktywacji, perceptron uzna, że obrazek reprezentuje literę L. Suma jest ważona, czyli im ważniejsze wejście wg perceptronu, tym większy wkład w rozpoznawanie litery ma to wejście. Możesz zobaczyć to na tym szarym obrazku obok wejścia - w pewnym sensie, jest to wyobrażenie litery L wg perceptronu.

Odnośnik do komentarza
Udostępnij na innych stronach

Przyjmijmy, że mamy pole 9x9. A jego pole wygląda tak:

1-0-0

1-0-0 Wspaniała literka L!

1-1-0

Perceptron wie, że jest to literka L, bo już się nauczył.

Jeśli potem pokaże pole

1-0-0

1-0-0

1-1-1

To nie wykryje, dopóki mu nie powiem, że jest to L?

Odnośnik do komentarza
Udostępnij na innych stronach

EDIT: nie doczytałem

 

EDIT2: perceptron powinien domyślić się, że to też jest litera L. Jeżeli powiesz mu, że to rzeczywiście litera L, to nic się nie zmieni, jednakże jeśli perceptron dowie się (od uczącego), że popełnił błąd, poprawi swoje wagi wg algorytmu.

Odnośnik do komentarza
Udostępnij na innych stronach

Myślę, że byłby całkiem dobry do przewidywania pogody, dajesz mu na wejście dane nt pogody z ostatnich 30 dni, a ten domyśli się, jaka pogoda będzie jutro. Choć nie sądzę, żeby jego dokładność była zniewalająca.

Pojedyncze perceptrony można łączyć w sieci. Możesz np. zrobić 32 perceptrony, każdy będzie rozpoznawał inny znak. Funkcję aktywacji stosujesz wtedy tylko do sprawdzania, czy wg danego perceptronu rysunek przedstawia odpowiadający perceptronowi znak, do samego sprawdzania, jaki jest to znak wg sieci funkcja aktywacji jest zbędna - perceptron z największą sumą wyjściową wygrywa. Jeśli jakieś perceptrony pomylą się w rozpoznawaniu litery, poprawiasz tylko te błędne perceptrony, pozostałe pozostawiasz w spokoju.

Odnośnik do komentarza
Udostępnij na innych stronach

Znalazłem osom artykuł http://software.com.pl/sieci-neuronowe-w-grach/ po przeczytaniu, mniej więcej wiem o co chodzi autorowi i się nieźle tym zaciekawiłem. Zacznę to głębiej analizować i może stworzę sobie coś prostego w GM jak mi się uda.

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...