Warsztat.GD

Programowanie => Sztuczna inteligencja => Wątek zaczęty przez: Tryllion w Grudzień 09, 2009, 15:20:10

Tytuł: AI które się uczy.
Wiadomość wysłana przez: Tryllion w Grudzień 09, 2009, 15:20:10
Witam

Postanowiłem zrobić program o którym z dawien dawna marzyłem. Program który zaczyna jako tabula rasa, z czasem zaś przerasta swego nauczyciela.  ;)

Pierwsze pytanie jest o literaturę, o samym AI(działanie sieci, uczenie, zbiory rozmyte, algorytmy) jestem myślę dobrze poinformowany, niestety o konkretnych zastosowaniach nie wiem za wiele. Czy mógł by ktoś polecić konkretną pozycję, która jemu samemu pomogła. Oczywiście mam parę na oku, czyli to co akurat jest w bibliotece, jednak czytanie na chybił trafił jest może nie bezproduktywne ale na pewno mało efektywne.

Teraz o problemie. Wymyśliłem prostą grę, pozbawioną elementów poruszania się, organizacji przestrzennej jednostek etc tak aby uprościć zadanie AI.
Rozpoczynamy z określoną pulą możliwych ruchów, powiedzmy A- buduj food B-hoduj X C-sprzedaj , celem niech będzie uzbieranie jakieś kwoty. Oczywiście więcej fooda kosztują Xy wydajniejsze.

Pytanie jak nauczyć i jak zaprojektować system który znajdzie optymalną drogę między kosztem a przyszłym przychodem. No i oczywiście który będzie analizować poczynania przeciwnika.

Myślę na początek nad prostym systemem wagowym i tablicą ruchów. IF przeciwnik ma się cienko THEN warto poczekać skoro dysponuję jednostką wydajniejszą ale brak mi jeszcze fooda, itd.

Proszę o jakieś wskazówki, proponowane techniki, algorytmy, może przykłady. Sam oczywiście także przeczesuję książki i google, ale myślę nie zawadzi zapytać.
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: Wladekprogramista w Grudzień 09, 2009, 15:59:34
Na początek trzeba się nauczyć jakiegoś języka typu c/c++
A jak się go nauczysz ,  i opanujesz , to wtedy zrozumiesz , że niektóre pytania zadane przez ciebie są banalne i ogólnikowe.
Większość rzeczy które podałeś , rozwiązują się same , podczas projektowania gry/programu.
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: Liosan w Grudzień 09, 2009, 16:07:03
Zignorujmy post poprzednika :)

Do uczenia się nadają się, oprócz rzeczy które wymieniłeś, drzewa decyzyjne; ale do nich potrzebujesz dyskretnego opisu stanu (analogicznie jak do sieci neuronowych potrzebujesz ciągłych  funkcji wejścia).

Jeśli dobrze rozumiem, wziąłeś sobie prostą grę (i to "grę" w sensie teorii gier), i chcesz do niej napisać system, który wyprodukuje Ci AI? Akurat do tak prostej gry napisałbym AI z palca... ale rozumiem, że nie to jest celem ćwiczenia.

Jak zaprojektować system? Wybrać jakieś rozwiązanie i zobaczyć czy się sprawdza :) Jak nauczyć? Rozegrać 1000 partii i użyć ich jako danych treningowych :) Z czym masz problem? Gdzie podpiąć back-propagation ?

Liosan
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: MadBonsai w Grudzień 09, 2009, 16:10:33
Na początek trzeba się nauczyć jakiegoś języka typu c/c++
A jak się go nauczysz ,  i opanujesz , to wtedy zrozumiesz , że niektóre pytania zadane przez ciebie są banalne i ogólnikowe.
Większość rzeczy które podałeś , rozwiązują się same , podczas projektowania gry/programu.
Przepraszam, ale w którym miejscu Tryllion napisał, że nie umie programować? I że akurat kod natywny potrzebny do życia? :P

Odnośnie pytania. Przyszło mi do łba: czy można by jakoś użyć algorytm mrówkowy? ;) Mrówka tutaj to próbna inwestycja, operacja. Jeśli powiedzie się, to następnym razem wysyłamy "większą mrówkę" - podobną operację o większym koszcie. Oczywiście nie wiem, czy to się to przyda - zależy od rodzaju symulacji, bardziej chyba przydałoby się przy symulowaniu chłopów ścinającym owies kosą, ale mniejsza ;)
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: Wladekprogramista w Grudzień 09, 2009, 16:21:24
Jak nauczyć? Rozegrać 1000 partii i użyć ich jako danych treningowych :) Z czym masz problem? Gdzie podpiąć back-propagation ?
No właśnie ja też nie wiem z czym koleś ma problem.
Może nie umie zapisywać wyników walk różnych AI.
Albo nie umie stworzyć odpowiednich struktur przechowujących dane.
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: mihu w Grudzień 09, 2009, 16:35:59
Jak nauczyć? Rozegrać 1000 partii i użyć ich jako danych treningowych :) Z czym masz problem? Gdzie podpiąć back-propagation ?
No właśnie ja też nie wiem z czym koleś ma problem.
Może nie umie zapisywać wyników walk różnych AI.
Albo nie umie stworzyć odpowiednich struktur przechowujących dane.
Nie chcę być niemiły, ale z twoich wypowiedzi wynika, że autor tematu wie dużo więcej od ciebie. Obawiam się, że to ty masz problem ze zrozumieniem treści.

Mam pomysł - przejrzyj jeszcze raz temat i zastanów się, czy rozumiesz większość użytych sformułowań:
- sieci neuronowe
- zbiory rozmyte
- back-propagation
- funkcja ciągła, dyskretna
- drzewo decyzyjne
- teoria gier
- algorytm mrówkowy

Jeśli nie rozumiesz wszystkich/części powyższych terminów (tak jak ja), to nie wypowiadaj się na tematy, o których nie masz pojęcia! Proszę!
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: Wladekprogramista w Grudzień 09, 2009, 16:47:32
Jeśli nie rozumiesz wszystkich/części powyższych terminów (tak jak ja), to nie wypowiadaj się na tematy, o których nie masz pojęcia! Proszę!
Masz racją , wszystkich nie znam  . Ale pisze bo kiedyś czytałem , i się tym interesowałem.
Przeczytałem większość żeczy z http://www.algorytm.org/ (http://www.algorytm.org/) .
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: lucypher w Grudzień 09, 2009, 16:58:00
Jeśli nie rozumiesz wszystkich/części powyższych terminów (tak jak ja), to nie wypowiadaj się na tematy, o których nie masz pojęcia! Proszę!
Masz racją , wszystkich nie znam  . Ale pisze bo kiedyś czytałem , i się tym interesowałem.
Przeczytałem większość żeczy z http://www.algorytm.org/ (http://www.algorytm.org/) .

GTFO do słownika ortograficznego.

Hm, czy przypadkiem Quake 2 nie miał botów które się uczyły?
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: Wladekprogramista w Grudzień 09, 2009, 17:10:42
Hm, czy przypadkiem Quake 2 nie miał botów które się uczyły?
Zależy o jaki poziom inteligencji chodzi , i co dla ciebie jest inteligencją.
Jeśli brać za odnośnik twój poziom inteligencji , to masz rację , Quake 2 miał uczące się boty.
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: Kuba D. w Grudzień 09, 2009, 17:13:46
Wiele do dyskusji nie wniosę ale o ile pamiętam w "Perełkach..." było dosyć o różnych algorytmach i podejściach do AI i to zarówno tych prostych jak i bardziej zaawansowanych.
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: maciek_slon w Grudzień 09, 2009, 17:49:47
Rozpoczynamy z określoną pulą możliwych ruchów, powiedzmy A- buduj food B-hoduj X C-sprzedaj , celem niech będzie uzbieranie jakieś kwoty. Oczywiście więcej fooda kosztują Xy wydajniejsze.

A tutaj mi przychodzi na myśl wprost programowanie liniowe :P Znienawidzone przeze mnie na uczelni, ale do takich celów jak znalazł, chociaż może się okazać że jest zbyt hard-coded a za mało uczące :P
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: Liosan w Grudzień 09, 2009, 18:00:09
A tutaj mi przychodzi na myśl wprost programowanie liniowe :P
Też mi się kojarzy, ale nie jestem pewien czy zadziała... może :) Na pewno nie jest to algorytm uczący się...

Nie-adaptywnych podejść można wymyślić kilka, mini-max a nawet A* się nadadzą :) Ale chyba nie o to autor pyta...

Liosan
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: lucypher w Grudzień 09, 2009, 18:36:49
Hm, czy przypadkiem Quake 2 nie miał botów które się uczyły?
Zależy o jaki poziom inteligencji chodzi , i co dla ciebie jest inteligencją.
Jeśli brać za odnośnik twój poziom inteligencji , to masz rację , Quake 2 miał uczące się boty.

Dude, STFU jeżeli nie masz nic mądrego do powiedzenia.

Wracając do tematu, nie wiem czy się przyda, ale tutaj (http://homepages.paradise.net.nz/nickamy/neuralbot/nb_about.htm#about) jest info o tym bocie z Q2 ;)
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: siso w Grudzień 09, 2009, 19:02:26
Wydaje mi się, że mógłbyś spróbować wykorzystać tu technikę GoCap (Game Observation Capture), opisaną skrótowo np. w Perełkach, t.3, o czym nadmienił Kuba D.

Powinieneś wyposażyć swój system w coś na kształt "trenera", który będzie normalnym aktorem z funkcją sterowania przez użytkownika. W trybie uczenia tworzysz i udoskonalasz zasady, które są odpowiedzią na konkretne stany wejścia. Im więcej cykli uczenia wykonasz, tym bardziej klarowne zasady uzyskasz. W końcu system powinien uzyskać stabilność, kiedy większość decyzji AI jest zgodna z oczekiwanym rezultatem danej akcji.

Zaletą tej metody, jak twierdzą ci, co ją wykorzystują, jest bardzo duży realizm wyuczonych zachowań. Niestety, z racji wymogu nauczyciela, nie nadaje się do uczenia automatycznego.
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: Charibo w Grudzień 09, 2009, 21:11:46
Hm, czy przypadkiem Quake 2 nie miał botów które się uczyły?
Zależy o jaki poziom inteligencji chodzi , i co dla ciebie jest inteligencją.
Jeśli brać za odnośnik twój poziom inteligencji , to masz rację , Quake 2 miał uczące się boty.
Wladekprogramista: otrzymujesz ostrzeżenie za całokształt twórczości. Opamiętaj się, bo nie tylko w tym, ale w wielu innych wątkach robisz oborę. Wyzywasz ludzi, a belki we własnym oku nie widzisz.
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: Wladekprogramista w Grudzień 09, 2009, 21:49:01
...Wyzywasz ludzi,..
Hm... Ciekawe ...
Jeśli "Jeśli brać za odnośnik twój poziom inteligencji , to masz rację , Quake 2 miał uczące się boty." to jest obrażanie ludzi ,
To dla ciebie GTFO , STFU jest ok ?
Obore to niekiedy może i robię  , z tym się zgodzę.

Dadane
Zresztą jak ludzie klną , albo robią oborę to nic , a ja jak zawsze dostaje ,jak czarna owca , szary kruk , itp

Dadane
A wesz tylko gada o tej ortografii , i np. nic w moim ostatnim temacie ciekawego nie wniósł.
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: Khaine w Grudzień 09, 2009, 22:12:03
Cytuj
Witam

Postanowiłem zrobić program o którym z dawien dawna marzyłem. Program który zaczyna jako tabula rasa, z czasem zaś przerasta swego nauczyciela.  Wink

Pierwsze pytanie jest o literaturę, o samym AI(działanie sieci, uczenie, zbiory rozmyte, algorytmy) jestem myślę dobrze poinformowany, niestety o konkretnych zastosowaniach nie wiem za wiele. Czy mógł by ktoś polecić konkretną pozycję, która jemu samemu pomogła. Oczywiście mam parę na oku, czyli to co akurat jest w bibliotece, jednak czytanie na chybił trafił jest może nie bezproduktywne ale na pewno mało efektywne.

Teraz o problemie. Wymyśliłem prostą grę, pozbawioną elementów poruszania się, organizacji przestrzennej jednostek etc tak aby uprościć zadanie AI.
Rozpoczynamy z określoną pulą możliwych ruchów, powiedzmy A- buduj food B-hoduj X C-sprzedaj , celem niech będzie uzbieranie jakieś kwoty. Oczywiście więcej fooda kosztują Xy wydajniejsze.

Pytanie jak nauczyć i jak zaprojektować system który znajdzie optymalną drogę między kosztem a przyszłym przychodem. No i oczywiście który będzie analizować poczynania przeciwnika.

Myślę na początek nad prostym systemem wagowym i tablicą ruchów. IF przeciwnik ma się cienko THEN warto poczekać skoro dysponuję jednostką wydajniejszą ale brak mi jeszcze fooda, itd.

Proszę o jakieś wskazówki, proponowane techniki, algorytmy, może przykłady. Sam oczywiście także przeczesuję książki i google, ale myślę nie zawadzi zapytać.
Proponowal bym, jak juz wczesniej koledzy nadmienili, sieci neuronowe. Pewnie wystarczy n-warstwowa siec z propagacja wsteczna. Jesli bys chcial cos lepszego to zapoznaj sie z SONN'ami. Charakteryzuja sie m.in. tym, ze potrafia w 100% rozpoznac wzorzec i maja duzo wiekszy % 'nieomylnosci', no i, co ciekawe mozna taka siec zwinac do jednej warstwy -_- (glowy nie dam czy kazda, nie pamietam :P). Oczywiscie sieci neuronowe, a szczegolnie SONN'y do najszybszych rozwiazan AI nie naleza.
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: Liosan w Grudzień 09, 2009, 23:16:30
A propos szybkości sieci neuronowych, fajna jest biblioteka FANN. A o SONNach nie słyszałem, obadam :) (self-organizing czy self-optimizing? czy to to samo?)

Wladek, nie rób obory. Dostałeś ostrzeżenie, wystarczy. Za to doceniam posta bez ortów :)

Liosan
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: Charibo w Grudzień 09, 2009, 23:30:50
...Wyzywasz ludzi,..
Hm... Ciekawe ...
(...)to jest obrażanie ludzi(...). Obore to niekiedy może i robię  , z tym się zgodzę.
Cieszę się, że się zgadzamy i że widzisz swoje błędy. Obyśmy nie musieli więcej interweniować. :)
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: kosmatkao w Grudzień 09, 2009, 23:38:03
Też uważam, że prosta sieć neuronowa na początku wystarczy. Wiem z doświadczenia bo nie tylko czytałem ale też zastosowałem w grze, gdzie było dużo parametrów rozgrywki i mało chęci na pisanie pełnego algorytmu decyzyjnego. A uczyłem się z tej świetnej strony: http://nrn.prv.pl/

PS: Jeśli dobrze zaprojektujesz i użyjesz SSN to otrzymasz błyskawiczny, rozszerzalny, łatwy do podziału na poziomy trudności, uczący się (sam lub od kogoś) algorytm, który Cię zaskoczy;)
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: Khaine w Grudzień 10, 2009, 00:05:21
Cytuj
A o SONNach nie słyszałem, obadam Smiley (self-organizing czy self-optimizing? czy to to samo?)
SONN - self optimizing neural networks ;) Te sieci buduja automatycznie swoja topologie - taka ciekawostka i zarazem potezny ficzer.
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: Kos w Grudzień 10, 2009, 00:13:41
Ho, ciekawe! Dzięki za keyword.
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: Tryllion w Grudzień 10, 2009, 14:15:17
O widzę duży odzew, dzięki.  :)

Najpierw do zgryźliwych, nie chodzi o programowanie i nie jest tak że podczas programu wyjdzie co i jak, już się w życiu narobiłem projektów gdzie zaczynało się z zieloną głową z nadzieją że jakoś to będzie, a potem reorganizacja kodu zajmowała 3 razy więcej czasu co cały projekt.
Lepiej najpierw zrozumieć problematykę.

Problem jest natury metodologicznej, jaką przyjąć metodę rozwiązywania problemu i jakich użyć narzędzi.
Trochę to dziwne ale potrafię stworzyć sieć, uczyłem się ich struktury i sposobu uczenia, np. wspomnianej przez kogoś propagacji wstecznej. Otrzymywałem jakieś tam wyniki, ale to były suche liczby, teraz natomiast kiedy stoję przed konkretnym problemem to sciana.  ???

Podsumowując, chodzi mi o ogólne wytyczne, o ogólny kocept, na szczegóły przyjdzie czas.

Po pierwsze co to znaczy że program się uczy ?
(Jeszcze o samej grze, wydaje się prosta, ale myślę że dzięki np. losowym wartością początkowym, albo zróżnicowanym bonusą sytuacja może stać się dostatecznie dynamiczna aby tworzenie tabeli IF THEN nie miało sensu ;) )

Wymyśliłem takie zasadnicze podejścia tworzenia AI:
 - albo program analizuje obecną sytuację swoją i przeciwników i porównuje profity jakie przyniesie dana akcja
 - albo np. dokonuje losowej akcji, po czym po całej grze ocenia swoje postępowanie wstecz, przy kolejnej grze wyszukuje w bazi pamięci podobne zdarzenia i dokonuje wyboru opierając się na doświadczeniu
 - albo np. rozgrywa w "głowie" wirtualne partie, coś jak w szachach, wszystkie możliwe kombinacje po czym wybiera ruch najbardziej efektywny
 
Takie 3 podejścia, te 2 wydaje się najbardziej zbliżone do nauki, ale pytanie jest takie czy nie stworzy to zupełnego deblia, jeśli np. przeciwnik podłoży się w 1 partii, to komputer nauczy się idiotycznej zagrywki i w kolejnej partii przegra.

Hmm jakieś pomysły czym jest nauka w AI, jakiś pomysł jak ją zasymulować ?
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: siso w Grudzień 10, 2009, 14:46:57
Cytuj
Hmm jakieś pomysły czym jest nauka w AI, jakiś pomysł jak ją zasymulować ?
Hmmm, nauka to zawsze jest zbieranie informacji i budowanie na ich podstawie jakiegoś modelu. Czy to będzie sień neuronowa, zbiór zasad czy cokolwiek innego - ogólnie zawsze jest to baza wiedzy, do której ładujesz dane w odpowiednim formacie w procesie uczenia i otrzymujesz odpowiedzi na stawiane pytania w procesie wnioskowania. W sieciach trochę mniej się to rzuca w oczy niż przy regułach if-then, ale sprowadza się do podobnego założenia. Metody postępowania przy różnych modelach będą oczywiście różne.

Zanim uzyskasz odpowiedź na postawione pytanie, najpierw IMO musisz odpowiedzieć na inne: z czego konkretnie chcesz swoje AI zbudować?
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: Tryllion w Grudzień 10, 2009, 20:14:10
Szerze powiem iż jest mi to obojętne, ponieważ mimo znajomości podstaw, nie wiem, jakoś nigdzie takowych informacji nie moge znaleźć, co też dana metoda wniesie do mojej AI.

Wymieniłem 3 zadania które powinna realizować AI, to jest przeprowadzić analizę obecnej sytuacji, prostym algorytmem obliczeniowym, przewidzieć wszystkie możliwe posunięcia przeciwnika i własne oraz po rozgrywce ocenić się samym.
Jeśli np. takie zadania dla mojej prostej gry potrafiła by odpowiednio zaprojektowana sieć neuronowa, to jestem za siecią, tylko jak ?
Tutaj zaczyna się dla mnie czysta magia, jak z teorii przejść do praktyki ?  ???

dodano:
kosmatkao
http://nrn.prv.pl/ ciekawa stron, ale ja to już wiem, teraz chodzi jak to konkretnie zastosować w AI  ;)

Kuba D.
W takim razie zajrzę do perełek.
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: Vipa w Grudzień 10, 2009, 20:29:06
Można w sumie pakować dane do gałęzi i bez badania wszystkich możliwości z góry usuwać te błędne. Słowem coś pokroju opisanego przez Liosana drzewka.
Na podobnej zasadzie kiedyś robiło się szachy na komputery 8bit z 64 kb ramu. W sumie na tej samej zasadzie działa Saper. Badasz możliwości, odrzucasz z góry błędne, resztę dzielisz na priorytety. Te badasz od najniższego, znowu odrzucając błędne. I tak w koło Macieju aż trafisz na jedyną poprawną odpowiedź.

Pamiętam, że bodajże jak robiłem szachy na Atari, to stopień trudności komputera polegał na głębokości badania. Badań jest za każdym razem n, więc nawet arcymistrz potrafił popełnić błąd, ale popełniał go znacznie rzadziej niż arcycymbał. Proste.

Nie wiem czy do końca zrozumiałem co chcesz zrobić, ale nauka w tym przypadku polega na deklaracji z góry błędnych zachowań w uzależnieniu od zachowania przeciwnika. Po ludzku, na przykładzie: na początku można wystawić piechura przeciwko czołgom. A nuż się uda. Dopiero jak sobie nie poradzi, zrezygnować z tego kroku przy następnych planowanych posunięciach.

Algorytmów tutaj nie ma. Do szachów napiszesz co innego jak do Command & Conquer. Są co prawda usystematyzowane metody, ale one także potrafią się nie sprawdzić. Po prostu napisz to sam, zastanawiając się dlaczego to co robi komputerowy gracz nie daje rezultatów i dodając kolejne warunki (najprostsza metoda).
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: Tryllion w Grudzień 15, 2009, 17:36:04
Cytuj
na początku można wystawić piechura przeciwko czołgom. A nuż się uda. Dopiero jak sobie nie poradzi, zrezygnować z tego kroku przy następnych planowanych posunięciach.
O coś takiego mniej więcej mi chodziło. Na razie robię tak iż zapisuje swoje poczynania do bazy danych, nie ocenia ich, ale przy kolejnej podobnej sytuacji będzie już znać efekt swoich poczynań.

Cytuj
Algorytmów tutaj nie ma. Do szachów napiszesz co innego jak do Command & Conquer. Są co prawda usystematyzowane metody, ale one także potrafią się nie sprawdzić. Po prostu napisz to sam, zastanawiając się dlaczego to co robi komputerowy gracz nie daje rezultatów i dodając kolejne warunki (najprostsza metoda).
rozumiem, w takim razie myślę iż od tego zacznę i zobaczę na ile sobie taki system radzi, a w razie czego będę całość rozbudowywać.
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: GorskY.exe w Grudzień 16, 2009, 17:41:40
W jakiejś polskiej książce o siechach neuronowych (bodajże przegląd konkretnych przypadków zastosowania i efektów - w różnych dziedzinach) był całkiem niezły przykład zastosowania wielowarstwowej sieci neuronowej z propagacją wsteczną.

Autor stworzył prościutką "gierkę" polegającą na trafianiu czołgiem w cel (pozycja czołgu i celu losowana, sterowaniem było - o ile pamiętam - kąt lufy i siła strzału - takie uproszczone scorched earth). Dane uczące zbierał też metodą losową :P Losowanie kąta lufy i siły strzału i symulacja (przy wyłączonym renderowaniu grafiki), czy trafi w cel. Jak trafi - siup do wora z danymi uczącymi (razem z pozycjami czołgu i celu). Jak nie - do kosza, nowe losowanie, i tak w kółko. Podobno noc na średnim komputerze wystarczyła żeby zebrać dane uczące do nauczenia sieci z 90% celnością. Wada - jak zmienisz lekko zachowanie środowiska (np. wzór na trajektorię pocisku, dodasz wiatr, etc.), to sieć może stać się inwalidą ;)
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: rm-f w Grudzień 16, 2009, 17:47:06
Podobno noc na średnim komputerze wystarczyła żeby zebrać dane uczące do nauczenia sieci z 90% celnością. Wada - jak zmienisz lekko zachowanie środowiska (np. wzór na trajektorię pocisku, dodasz wiatr, etc.), to sieć może stać się inwalidą ;)
Racja, ale ten przykład jest nietrafione... szybciej jest napisać algorytm. :)
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: Khaine w Grudzień 16, 2009, 18:57:06
Cytuj
W jakiejś polskiej książce o siechach neuronowych (bodajże przegląd konkretnych przypadków zastosowania i efektów - w różnych dziedzinach) był całkiem niezły przykład zastosowania wielowarstwowej sieci neuronowej z propagacją wsteczną.

Autor stworzył prościutką "gierkę" polegającą na trafianiu czołgiem w cel (pozycja czołgu i celu losowana, sterowaniem było - o ile pamiętam - kąt lufy i siła strzału - takie uproszczone scorched earth). Dane uczące zbierał też metodą losową Tongue Losowanie kąta lufy i siły strzału i symulacja (przy wyłączonym renderowaniu grafiki), czy trafi w cel. Jak trafi - siup do wora z danymi uczącymi (razem z pozycjami czołgu i celu). Jak nie - do kosza, nowe losowanie, i tak w kółko. Podobno noc na średnim komputerze wystarczyła żeby zebrać dane uczące do nauczenia sieci z 90% celnością. Wada - jak zmienisz lekko zachowanie środowiska (np. wzór na trajektorię pocisku, dodasz wiatr, etc.), to sieć może stać się inwalidą Wink
Tez napisalem taka 'gre', z tym, ze moja siec uczyla sie znacznie szybciej. Po kilku rundach siec strzelala bezblednie. Wszystko zalezy od wspolczynnika uczenia. A jesli chodzi o zmienne zachowanie srodowiska to naturalnym jest, ze siec zglupieje, gdyz beda nowe-inne dane wejsciowe. Wtedy bedzie musiala sie uczyc od nowa. Tylko, ze moze byc cieko napisac siec, ktora ma rozne dane wejsciowe. Jesli juz to rone sieci.

Cytuj
Podobno noc na średnim komputerze wystarczyła żeby zebrać dane uczące do nauczenia sieci z 90% celnością. Wada - jak zmienisz lekko zachowanie środowiska (np. wzór na trajektorię pocisku, dodasz wiatr, etc.), to sieć może stać się inwalidą Wink
Racja, ale ten przykład jest nietrafione... szybciej jest napisać algorytm. Smiley
A od kiedy siec neuronowa to nie jest algorytm?
Poza tym jest to dobry przyklad, a w zasadzie punkt zaczepienia, dla kogos kto chce sie zapoznac z sieciami neuronowymi w grach.
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: rm-f w Grudzień 16, 2009, 19:07:51
A od kiedy siec neuronowa to nie jest algorytm?
Można powiedzieć że szczególny przypadek.

Cytuj
Poza tym jest to dobry przyklad, a w zasadzie punkt zaczepienia, dla kogos kto chce sie zapoznac z sieciami neuronowymi w grach.
Jak ktoś chce, to nie potrzebuje takiego punktu, znajdzie "papiery".
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: Khaine w Grudzień 16, 2009, 19:13:45
Cytuj
Jak ktoś chce, to nie potrzebuje takiego punktu, znajdzie "papiery".
tylko, ze ten przyklad jest z 'papierow'. A po drugie, po co od nowa odkrywac kolo? Jak kto lubi, jeden woli wzorowac sie na czyims kodzie a potem zrozumiec o co chodzi, drugi woli przeczytac 'papiery' i potem implementowac.
Ja na studiach mialem ta druga wersje. Model matematyczny i zadanie implementacji na przyszly tydzien.
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: matmis w Grudzień 18, 2009, 13:54:10
Teraz o problemie. Wymyśliłem prostą grę, pozbawioną elementów poruszania się, organizacji przestrzennej jednostek etc tak aby uprościć zadanie AI.
Rozpoczynamy z określoną pulą możliwych ruchów, powiedzmy A- buduj food B-hoduj X C-sprzedaj , celem niech będzie uzbieranie jakieś kwoty. Oczywiście więcej fooda kosztują Xy wydajniejsze.

Pytanie jak nauczyć i jak zaprojektować system który znajdzie optymalną drogę między kosztem a przyszłym przychodem. No i oczywiście który będzie analizować poczynania przeciwnika.
Opis gry jest zbyt mglisty, żeby tak z miejsca to rozwiązać. Myślę, że co powinieneś sprawdzić dalej to rozmiar przestrzeni stanów gry, i czy nie ma jakiś szczególnych własności. Czy poczynania graczy są niezależne, czy też jakoś wpływają na siebie wzajemnie?
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: JCoder w Luty 22, 2010, 13:53:22
Mnie tu bardziej pasuje "reinforcement learning" niż SSN.
SSN są niezłe do aproksymacji i klasyfikacji (choć wcale nienajlepsze), ale do podejmowania dyskretnych decyzji w czasie nadają się raczej słabo, szczególnie jeśli wejścia też masz dyskretne. Jeśli nie wiesz nic w temacie, to chyba najlepiej zacząć od wikipedii, tam masz nieco linków.
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: Kosz85 w Luty 23, 2010, 01:28:04
Ta gra, to bardzo uproszczona gra rynkowa, gdzie produkujesz, ponosisz koszty i sprzedajesz. Najrozsądniejsze wydają się więc narzędzia kierowane właśnie do tych celów. Logika rozmyta, drzewa decyzyjne, analizy z aspiracjami (jak przy wspomaganiu decyzji). Pytanie też, czy środowisko i zasady rynku są stałe, czy zmienne.


Mnie tu bardziej pasuje "reinforcement learning" niż SSN.

Sorki ale nie mogę przejść obojętnie obok tego stwierdzenia, co ma piernik do wiatraka? Uczenie przez wzmacnianie, może być równie dobrze użyte do sieci neuronowych. Wiele razy używałem Q-lerning, SARS, itp z siecią neuronową do aproksymacji funkcji oceny. Chyba nie zastosowałbyś do skomplikowanego problemu uczenia z Q-lerningiem, tablicy do aproksymacji? :D Zdajesz sobie sprawę ile by to zajęło pamięci? Wyjścia sieci zawsze możesz zdyskretyzować, w czym problem?
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: JCoder w Luty 23, 2010, 11:43:09
Cytuj
Chyba nie zastosowałbyś do skomplikowanego problemu uczenia z Q-lerningiem, tablicy do aproksymacji? Cheesy Zdajesz sobie sprawę ile by to zajęło pamięci?

A gdzie ja tu pisałem coś o tablicach do aproksymacji? Właśnie napisałem, że SSNy nadają się nieźle do aproksymacji. I niestety właściwie tylko do tego. Bo już do problemu postawionego w pytaniu są lepsze algorytmy, do klasyfikacji też są lepsze...
 

Chodziło mi tylko o bardziej ogólne spojrzenie. Gość chce zrobić algorytm, który SAM się uczy, więc uczenie przez wzmacnianie jest ogólną odpowiedzią na jego pytanie i dobrym miejscem startowym, natomiast SSN to tylko jedna z bardzo, bardzo wielu kokretnych możliwości. Zresztą od SSNów się odchodzi, bo do klasyfikacji nadają się słabo, do prognozowania też słabo... w zasadzie tylko do aproksymacji f. ciągłych się nadają dobrze. To jest taki temat, którym podniecano się 20 lat temu, wierząc że się uda zrobić z tego "prawdziwą" inteligencję. No i świetna pożywka do robienia setek niewiele wartych artykułów. Trochę jak teraz modne są ontologie :D


Cytuj
Wyjścia sieci zawsze możesz zdyskretyzować, w czym problem?

W tym problem, że taka sieć będzie działała słabiej niż algorytmy, które biorą pod uwagę strukturę problemu i które z założenia operują na dyskretnych danych. Natomiast słusznie można SSN użyć jako jednej z cegiełek całego systemu. Można, choć nie trzeba. Funkcję oceny można aproksymować po prostu wzorem wynikającym z "fizyki problemu". Algorytmy ogólne takie jak SSN czy AE, które nie korzystają z tej wiedzy najczęściej działają dużo wolniej i dają gorsze wyniki niż heurystyki częściowo korzystające z tej wiedzy. Ot, algorytmy dla leniwych programistów i pracowitych komputerów ;) Spróbuj rozwiązać układ równań algorytmem ewolucyjnym a później za pomocą metody Gaussa-Raphsona i zobacz różnice w szybkości i dokładności... AE zostanie zmiażdżony, niezależnie od postaci równania.
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: Kosz85 w Luty 23, 2010, 15:45:59
A gdzie ja tu pisałem coś o tablicach do aproksymacji? Właśnie napisałem, że SSNy nadają się nieźle do aproksymacji. I niestety właściwie tylko do tego. Bo już do problemu postawionego w pytaniu są lepsze algorytmy, do klasyfikacji też są lepsze...
To źle Cię zrozumiałem, napisałeś w takim tonie jakbyś poprzez zastosowanie uczenia przez wzmacnianie wykluczał użycie SSN, co jak oboje wiemy nie ma nic do siebie, stąd moje zdziwienie.
 
Chodziło mi tylko o bardziej ogólne spojrzenie. Gość chce zrobić algorytm, który SAM się uczy, więc uczenie przez wzmacnianie jest ogólną odpowiedzią na jego pytanie i dobrym miejscem startowym, natomiast SSN to tylko jedna z bardzo, bardzo wielu kokretnych możliwości. Zresztą od SSNów się odchodzi, bo do klasyfikacji nadają się słabo, do prognozowania też słabo... w zasadzie tylko do aproksymacji f. ciągłych się nadają dobrze. To jest taki temat, którym podniecano się 20 lat temu, wierząc że się uda zrobić z tego "prawdziwą" inteligencję. No i świetna pożywka do robienia setek niewiele wartych artykułów. Trochę jak teraz modne są ontologie :D
20 lat temu to właśnie SSN było w odwrocie (po chwilowym zachwycie), dopóki nie zastosowano wstecznej propagacji, moim zdaniem teraz SSN  zaczynają wracać do łask. Wciąż prowadzi się nowe badania, a ostatnio coraz popularniejsze (jeśli chodzi o badania) zdają się być sieci spajkujące, czy też impulsowe (Spiking Neural Networks). Jest kilka dziedzin w których używa się sieci neuronowych i nie ma dobrych alternatyw. Do klasyfikacji najczęściej używa się SVM'ów, które notabene pochodzą od sieci neuronowych, co na pewno wiesz. Wydaje mi się że za wcześnie skreślasz sieci neuronowe.

Cytuj
Wyjścia sieci zawsze możesz zdyskretyzować, w czym problem?
W tym problem, że taka sieć będzie działała słabiej niż algorytmy, które biorą pod uwagę strukturę problemu i które z założenia operują na dyskretnych danych. Natomiast słusznie można SSN użyć jako jednej z cegiełek całego systemu. Można, choć nie trzeba. Funkcję oceny można aproksymować po prostu wzorem wynikającym z "fizyki problemu". Algorytmy ogólne takie jak SSN czy AE, które nie korzystają z tej wiedzy najczęściej działają dużo wolniej i dają gorsze wyniki niż heurystyki częściowo korzystające z tej wiedzy. Ot, algorytmy dla leniwych programistów i pracowitych komputerów ;) Spróbuj rozwiązać układ równań algorytmem ewolucyjnym a później za pomocą metody Gaussa-Raphsona i zobacz różnice w szybkości i dokładności... AE zostanie zmiażdżony, niezależnie od postaci równania.
Po części się zgodzę, ale nie byłoby dyskusji bez opozycyjnej postawy :) Nie zawsze masz wzór na "fizykę problemu" (model), zwykle nie masz, dodatkowo nie zawsze jest on stały. Co do wydajności, faktycznie nie są to demony szybkości, ale tragedii też nie ma, dla SSN najbardziej kosztowne jest przecież samo uczenie. Dodatkowo wchodzimy w erę systemów wieloprocesorowych i obliczeń na karcie graficznej, zarówno AE jak i SSN świetnie się skalują na wiele procesorów, przypuszczam, że podobne właściwości specyficznej heurystyki może być ciężko osiągnąć. Podajesz przykład rozwiązywania równań, spróbuj nauczyć metodę Gaussa-Raphsona rozpoznawania twarzy, albo znajdź to rozwiązanie dla tych równań z elementami nie ciągłymi :P Trzeba być świadomym zalet i ograniczeń metod, to jasne. Jak coś można rozwiązać wprost, lub są metody szybsze np Armijo, czy Simplex dla równań liniowych. Poza tym wiele problemów nie ma tak łatwo osiągalnych rozwiązań i nie masz wyjścia jak jedynie użyć AE lub podobnych.
Mówimy tu o grach, w wielu grach można znaleźć heurystki, ale w jeszcze większej ilości znalezienie takiej heurystyki jest bardzo ciężkie i wtedy lepiej zastosować te ogólne narzędzia. Czasami jak np. w wielu samochodówkach, rozwiązanie typu sieć neuronowa jest po prostu rozwiązaniem najprostszym, a dla innych jak np kółko i krzyżyk, raczej mało naturalnym :) Poza tym sieć neuronowa potrafi wyłuskać czasem takie niuanse, których w żaden sposób nie zawrzesz w heurystyce, bo będziesz kierować się własną intuicją, zamiast zyskiem. Jest to zarówno wada jak i zaleta, bo czasem nie wiesz do jakiego efektu Cię to doprowadzi.

W podanym problemie prawdopodobnie drzewo decyzyjne by wystarczyło, a jeśli jest model rynku, to heurystyka, lub wręcz rozwiązanie równania, bo pewnie do tego by się to sprowadzało. Natomiast jeśli nie znamy zasad rynku i są one różne, to w zasadzie jakiś Q-lerning + SSN byłby bardzo dobry. Mamy tylko kilka decyzji, więc sieć nie będzie zbyt wiele razy uruchamiana, i jesteśmy w stanie przypisać sieci na wejście jasne informacje o stanie naszych finansów, budynków, zysków z poprzedniej operacji itp.
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: Khaine w Luty 23, 2010, 20:25:29
JCoder, pisałem o tym już w innym wątku, być może go nie widziałeś. Poczytaj o SONN'ach, może nieco zmienisz zdanie na ten temat. Mój znajomy, pisze sieć neuronową dla szpitala, która ma za zadanie wykrycie prawdopodobieństwa zawału serca u pacjenta. Jak do tej pory ta sieć ma ponad 80% skuteczności. Jak tamtejsi lekarze to zobaczyli to, w skrócie rzecz ujmując, wymiękli bo ich metody dawały (jeśli dobrze pamiętam) ok 50%. Trzeba jeszcze zauważyć taką rzecz jak to, że organizm każdego człowieka jest inny i jeden może dostać zawał a inny nie spełniając pewne 'warunki'. Zmodyfikowane SONN'y są też używane do rozpoznawania tablic rejestracyjnych samochodów przekraczających dozwoloną prędkość oraz rozpoznawanie głosu. Uważam, że to dość dobrze świadczy o stosowaniu sieci neuronowych i raczej nie odchodzi się od tego pomysłu. Tym bardziej, że jak wspomniał kosz85, dopóki nie wymyślono propagacji wstecznej sieci raczej słabo się nadawały do użytku.
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: JCoder w Luty 24, 2010, 10:33:02
Ok, zgadzam się, jednak nie są tam wykorzystywane TYLKO SONNy. Tzn. SONN jest znowu jakimś tam elementem układanki. Przynajmniej w rozpoznawaniu obrazów jest jeszcze cała masa algorytmów wstępnej obróbki, segmentacji, detekcji cech i dopiero na bardzo zredukowanym wektorze wejściowym zapuszcza się klasyfikację (mam kumpla, który tym się zajmuje, i w badaniach wyszło im, że SVMy są do tego zadania wyraźnie lepsze). Dlatego zawsze warto poszukiwać metod na ułatwienie zadania takim super-ogólnym algorytmom - i niestety to jest zwykle najtrudniejsza część zadania. Często też połączenie dwóch lub więcej heurystyk potrafi zdziałać cuda - właśnie przykładem tego są wszelkiej maści metaheurystyki typu VNS - które z jednej strony są nadal niemal tak samo ogólne jak AE, ale z drugiej strony potrafią wykorzystać już trochę właśności modelu (np. dzięki wspinaczce, którą najczęściej daje się zaimplementować dużo efektywniej,  jeśli znasz model, niż losowo strzelać wokół aż się trafi lepszy punkt).
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: siso w Luty 24, 2010, 15:06:53
Cytuj
Przynajmniej w rozpoznawaniu obrazów jest jeszcze cała masa algorytmów wstępnej obróbki, segmentacji, detekcji cech i dopiero na bardzo zredukowanym wektorze wejściowym zapuszcza się klasyfikację
Raczej ciężko by było zapuścić rozpoznawanie na wektorze nie zredukowanym. Powodzenia w uczeniu sieci, która miała by na surowych danych operować :)
Po co robić alorytmem ogólnym na około coś, co dużo lepiej zrobić algorytmem do tego konkretnego celu przeznaczonym. Siła sieci objawi się dopiero wtedy, kiedy ilość wymiarów przestrzeni jest dostosowana do typu problemu - ani za dużo, bo ciężko się uczy (lub się nie da), ani za mało, bo coś się z pewnoscią pominie. I jeżeli dobierze się typ sieci do problemu, ma to szanse działać całkiem nieźle. Udało mi się uzyskać kiedyś całkiem przyzwoite rezultaty w 12-wymiarowej przestrzeni najprostszym z możliwych Kohonenem.

Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: JCoder w Luty 24, 2010, 16:57:23
Cytuj
Powodzenia w uczeniu sieci, która miała by na surowych danych operować

Hmm, swoją drogą, to nie-sztuczne sieci neuronowe sobie całkiem nieźle jakoś z tym radzą. Tylko mają trochę więcej neuronów i te neurony trochę inaczej działają.
Tytuł: Odp: AI które się uczy.
Wiadomość wysłana przez: siso w Luty 24, 2010, 17:04:21
Cytuj
Powodzenia w uczeniu sieci, która miała by na surowych danych operować

Hmm, swoją drogą, to nie-sztuczne sieci neuronowe sobie całkiem nieźle jakoś z tym radzą. Tylko mają trochę więcej neuronów i te neurony trochę inaczej działają.
I jeszcze mają "trochę" więcej połączeń między sobą, co daje "trochę" większą wydajność przetwarzania ;)