Autor Wątek: AI które się uczy.  (Przeczytany 8052 razy)

Offline rm-f

  • Użytkownik
    • Tu trolluje

# 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".

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Khaine

  • Użytkownik

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

Offline matmis

  • Użytkownik

# 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?

Offline JCoder

  • Użytkownik

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

Offline Kosz85

  • Użytkownik

# 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?

Offline JCoder

  • Użytkownik

# 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.
« Ostatnia zmiana: Luty 23, 2010, 12:08:42 wysłana przez JCoder »

Offline Kosz85

  • Użytkownik

# 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.
« Ostatnia zmiana: Luty 23, 2010, 15:50:37 wysłana przez Kosz85 »

Offline Khaine

  • Użytkownik

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

Offline JCoder

  • Użytkownik

# 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).

Offline siso

  • Użytkownik

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


Offline JCoder

  • Użytkownik

# 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ą.

Offline siso

  • Użytkownik

# 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 ;)