Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sieci neuronowe
Forum PHP.pl > Inne > Hydepark
markuz
Witam,

Ostatnio coraz częściej spotykam się z terminem sieci neuronowych. Zagłębiając się w temacie okazało się, że nad nimi pracuje się już od kilkudziesięciu lat.
Temat okazał się dla mnie ciekawy - jednak gorzej z praktyką (napisanie czegokolwiek wymaga dużej wiedzy).

Ktoś z Was miał styczność z sieciami neuronowymi? Może posiadacie jakieś ciekawe materiały na ten temat?
Czy warto w to brnąć? smile.gif
solificati
Ale chcesz pracować nad sieciami neuronowymi czy z nich korzystać? Jeśli korzystać to jest to strasznie proste, właśnie na tym polega ich urok.
markuz
Oczywiście, że korzystać. Wielu ludzi pracuje nad ich rozwojem i posiadają wiedzę którą musiałbym nabywać przez lata żeby cokolwiek włożyć od siebie (a nawet nie wiadomo czy cokolwiek by się udało włożyć).

Z drugiej strony chciałbym poznać przynajmniej podstawy działania takich sieci. Znalazłem materiały które są już nieco stare (lata '90) ale po polsku. Nowszych jak na razie się nie doszukałem. Odpaliłem prostą sieć w PHP która uczy się f XOR`a (git) - i jakoś działa. Gorzej jak chce ją nauczyć czegoś innego (brak wiedzy teoretycznej) wink.gif

Pytanie dotyczy również waszego doświadczenia odnośnie tych sieci. Jak wrażenia? Co sprawia trudność? Jak z wydajnością?
tzm
Ty chcesz w php implementować sieci neuronowe? Nie widzę tego za bardzo...
Po pierwsze poczytaj o działaniu samego mózgu.. to taka podstawa podstaw znać choć powierzchownie terminologie jaka występuje w neurologii jeśli chce się działać w tej materii.
Raz widziałem schemat bazy danych programu który się uczył... dziesiątki tysięcy, jak nie setki i miliony relacji między komórkami bazy.
Idealnie jest jeśli program sam potrafi skojarzyć N informacji i je poskładać w całość, to nie koniecznie ma związek z nauką co raczej zapamiętywaniem i tak też bym to ujął. Program musi pamiętać że informacja X ma związek z informacją Y która do pełni okazałości i zrozumienia potrzebuję N innych informacji.
Kurde że nie pamiętam jak się książka nazywała którą czytałem w ostatnie wakacje.. świetne wprowadzenie w temat tam było a z 300 stron, 150 było poświęcone biologii i neurologii właśnie.

Tędy droga Panie, powodzenia ( choć rozważył bym bardziej wydaje języki niż PHP )
markuz
@tzm Zdaję sobie sprawę, że PHP w tym przypadku jest słabym rozwiązaniem - skrypt na git podałem tylko dla przykładu. Dzięki za rady - gdyby przypomniała Ci się nazwa książki to chętnie skorzystam.
solificati
Cytat(tzm @ 26.02.2015, 16:42:22 ) *
Ty chcesz w php implementować sieci neuronowe? Nie widzę tego za bardzo...
Po pierwsze poczytaj o działaniu samego mózgu.. to taka podstawa podstaw znać choć powierzchownie terminologie jaka występuje w neurologii jeśli chce się działać w tej materii.
Raz widziałem schemat bazy danych programu który się uczył... dziesiątki tysięcy, jak nie setki i miliony relacji między komórkami bazy.
Idealnie jest jeśli program sam potrafi skojarzyć N informacji i je poskładać w całość, to nie koniecznie ma związek z nauką co raczej zapamiętywaniem i tak też bym to ujął. Program musi pamiętać że informacja X ma związek z informacją Y która do pełni okazałości i zrozumienia potrzebuję N innych informacji.
Kurde że nie pamiętam jak się książka nazywała którą czytałem w ostatnie wakacje.. świetne wprowadzenie w temat tam było a z 300 stron, 150 było poświęcone biologii i neurologii właśnie.

Tędy droga Panie, powodzenia ( choć rozważył bym bardziej wydaje języki niż PHP )

Sieci neuronowe mało mają wspólnego z neurologią. Bardziej przez analogię się tak nazywają, nie ma sensu uczyć się nawet terminologii bo SSN wprowadzają swoje definicje.
Sądząc po opowieści o milionach relacji mam wrażenie, że mówisz o czymś innym. SSN mają za zadanie po prostu modelować nieznaną funkcję.

@markuz, wszystko zależy do czego chcesz użyć takiej sieci. SSN sprawdzają się w maszynowym uczeniu z nadzorem oraz w klasyfikacji. W ogólności, masz jakąś funkcję, znasz część wyników - możesz wytrenować sieć, by realizowała tą funkcję i być może będzie ją realizowała na danych spoza testów. Na przykład: funkcja zmiany obrazka w literę, czyli OCR. Uczysz sieć na iluś parach obrazek-litera, które wiesz, że są poprawne. Potem taką sięc uruchamiasz na innych obrazkach liter i powinna mniej więcej powiedzieć co to za litera.

Sieci neuronowe już nie są cool, więc nowej, praktycznej literatury jest mało. Ale zwykłe Metody i techniki sztucznej inteligencji z PWN Ci wystarczą. W uczeniu maszynowym jedno jest pewne - największa sztuka to dopasować metodę do problemu, nie spodziewaj się prostych receptur.
markuz
Cytat
Sieci neuronowe już nie są cool

Coś je wyparło? Przecież nadal istnieją problemy które ciężko ogarnąć zwykłymi algorytmami. Hmm?
tzm
Cytat(solificati @ 26.02.2015, 17:48:03 ) *
...



Hm.. możliwe. Kłócił się nie będę bo mogłem dać gafę, sprawdzę i potwierdzę co to za relację były bo biblioteka z której korzystam powinna mieć historię online, jak nie to podejdę któregoś dnia i w karcie sprawdzę autora i tytuł.
solificati
Cytat(markuz @ 26.02.2015, 18:26:47 ) *
Coś je wyparło? Przecież nadal istnieją problemy które ciężko ogarnąć zwykłymi algorytmami. Hmm?

Przecież zawsze było mnóstwo technik uczenia maszynowego.
Teraz cool są kernel methods, w szczególności SVM w problemach klasyfikacji. W problemach predykcji już się przekonano, że SNN nie są dobrym rozwiązaniem.
sazian
@tzm to wygląda bardziej na sieć bayesowską, ale coś mi się kojarzy że te same się nie uczą 
tzm
Asocjacja, asocjacyjne techniki uczenia się -> o tym pisałem wyżej...
Aczkolwiek schemat który widziałem wtedy w związku z asocjacją był podobny do tego wygooglowanego pod hasłem sieci neuronowe:

http://informatyka.wroc.pl/sites/default/f...93/art2rys4.JPG

Tylko... kilka set razy większy i bardziej zawiły. Logika mi podpowiada że istnieje związek między jednym a drugim aczkolwiek nie znam się...
solificati
Znajdowanie reguł asocjacyjnych i SSN to prawie odwrotne rzeczy. W pierwszym mamy de facto całą dziedzinę problemu z wynikami i odnajdujemy formułę przekształcenia. W przypadku sieci neuronowych mamy tylko zbiór danych uczących, chcemy ekstrapolować funkcję i wcale nas forma tej funkcji nie obchodzi, jest ukryta w strukturze sieci neuronowej.

Dla przykładu: mamy bazę danych wszystkich zakupów wszystkich klientów. Reguły asocjacyjne pozwolą nam wywnioskować dlaczego klienci kupują określone rzeczy - na przykład wyjdzie, że mężczyźni po czterdziestce kupują piwo, rodziny z przedmieść kupują duże paczki sera etc. Tylko taką wiedzę możemy wynieść z tych danych. Jak przychodzi facet po 40tce, to mówimy "pewnie kupi piwo", bo wyszło nam z danych, że faceci kupują alkohol, Ci po czterdziestce jak już to wolą piwo i faceci z samochodem lubią zielone rzeczy (tak, data mining daje też takie wyniki).
SSN można wytrenować na takich danych i wyjdzie nam magiczna funkcja Klient -> lista towarów. Nie wiemy czemu taka lista wychodzi, ale zwykle wychodzi. Dzięki temu możemy tej funkcji podać nowy rodzaj klienta i da nam listę zakupów, które powinien kupić. Na przykład mamy sklep na przedmieściach, trenujemy SSN, podajemy profile klientów z centrum i widzimy co by kupili i możemy wziąć to pod uwagę przed otwarciem sklepu w centrum. Jeśli mieliśmy dobry zbiór danych treningowych to może nawet coś wyjdzie.

Ogólnie data mining i machine learning czasem korzystają z podobnych narzędzi, ale ich cele są różne.
tzm
No ok, całkowicie zrozumiałe ale jedno mnie zastanawia... jeśli umiałbyś / kto kolwiek by umiał napisać algorytm który w zasadzie - przewidzi co dana osoba kupi to chyba wykraczamy trochę poza naukę i idziemy w kierunku sfcfi. Nawet człowiek na podstawie profilu klienta nie jest w stanie jednoznacznie stwierdzić co dana osoba kupi. Przykład z bajki rzuciłeś, staram się go przetworzyć na coś bardziej przyziemnego niż przewidywanie listy zakupów. Dałbyś przykład bardziej z życia wzięty a nie pytanie co kupi gość w garniturze z nie ogoloną brodą.
solificati
W AI ogólnie chodzi o balans poprawności i kosztów. Jasne, system, który przewidzi to o czym piszesz miałby pewnie nieskończone koszty (cośtam determinizm, cośtam fizyka kwantowa i tak dalej), ale mniej poprawne systemy już działają - system reklam google, system sugestii na amazonie. Te systemy potrafią wyciągać poprawne wnioski, na które raczej żaden człowiek by nie wpadł. Wypluwa też całkiem złe dane - urok AI.

SNN sprawdzają się, jak mówiłem na modelowaniu nieznanych (lub skomplikowanych) funkcji.
Używa się ich w
- sterowaniu; na przykład w sterowaniu predykcyjnym musimy mieć model obiektu - na przykład pomieszczenia i rozkładu temperatur, jak on reaguje na otwieranie drzwi, wchodzących ludzi i zmianę pogody na zewnątrz - jasne, można zatrudnić piętnastu fizyków, żeby rozpisali równania różniczkowe stanu a później taki stan obliczać dwa dni, tyle, że musimy ten stan obliczać co sekundę),
- klasyfikacji, ale głównie w rozpoznawaniu wzorców co daje tysiąc zastosowań: OCR, w ogóle rozpoznawanie obrazu w robotyce, filtrowanie danych (na przykład mamy stream danych analitycznych i SNN wykryje nam anomalie),
- predykcji, często w szeregach czasowych - masz pomiary na przykład cen akcji za ostatni miesiąc, SNN wypluwa jutrzejszą cenę (oczywiście przykład średni, bo nie masz w modelu najważniejszych danych czyli tego całego ludzko-nieracjonalno-politycznego śmietnika)

Główną wadą SNN jest to, że są taką czarną skrzynką. Dobierasz rozmiar - na oko, trenujesz i masz funkcję. Sama funkcja nic nie mówi o problemie ani o rozwiązaniu, ot - działa. (Choć ostatnio pojawiają się głosy, że przy wielu warstwach SNN, można uzyskać jakieś odnajdowanie relacji czy pozyskiwanie wiedzy).
Wazniak96
Cytat(tzm @ 26.02.2015, 23:29:24 ) *
pytanie co kupi gość w garniturze z nie ogoloną brodą.

obstawiam z doświadczenia, że ćwiartkę i tymbarka wink.gif

Swoją sprawą... Przykład z klientami możemy zauważyć w reklamach googla. Wiecie może z czego oni korzystają? Pytanie czysto z ciekawości. tongue.gif
solificati
Tysiąca rzeczy. No dobra, przesadzam, ale wszystko zależy do czego. Decyzja o wyświetleniu reklamy ma wiele etapów i na każdym są wykorzystane różne techniki. Najpierw klasyfikacja użytkownika, oszacowanie klikalności podzbioru reklam dla uzytkownika a potem ocenić regresję klikalności w jakimś okresie czasu.

"Klikalność", zarządzam nowe słowo!
mate87
Miałem z tego jeden semestr na studiach, ogólnie rzecz biorąc wydaje się to trudne, ale jak już ogarniesz o co chodzi, to robi się to dosyć łatwo, przynajmniej na tyle na ile miałem to na studiach tongue.gif
Kaze
Witam, też ostatnio zainteresowałem się tematem i wbrew pozorom tak jak kolega wyżej mówi wydaje się trudne ale później idzie już łatwiej (do czasu aż trzeba neurony uczyć). Przeczytałem trochę informacji z różnych stron i na jednej autor ciekawie napisał, że aby lepiej zrozumieć jak to działa należy zapomnieć o tym czego uczą nas w typowej informatyce, chodzi o stan 0 albo 1. Tutaj coś takiego nie występuje.
W skrócie zwykły program musi mieć w góry określone dane wejściowe np. rodzaj ubrania, płeć, wiek, status społeczny itd. Wszystkich możliwych kombinacji mogło by być setki albo i tysiące, miliony jak byśmy zawarli więcej danych na wejściu, wtedy zawsze uzyskamy konkretną odpowiedz bo wszystko zdefiniowaliśmy (tylko ile czasu by to zajęło).
Sieć neuronowa nie potrzebuje znać wszystkich możliwych danych wejściowych żeby określić "jakieś" dane na wyjściu. Pytanie tylko w jakim stopniu będą poprawne z tym co chcemy uzyskać. Tu wszystko opiera się na procesie uczenia, czyli jak sieć ma reagować na dane wejściowe aby uzyskać pożądany rezultat.

Spróbowałem zbudować sieć właśnie w php gdyż to język w którym mi osobiście się szybko pisze smile.gif i szybko można przeglądać bazę z poziomu phpmyadmin.
Aktualnie udało mi się stworzyć neurony i zapisać ich wartości w bazie danych tak żeby można było namacalnie zaobserwować zachodzące zmiany w wartościach.
W bazie mam dwie tabele:
- pierwsza określa pojedyncze neurony z informacjami o nich
- druga przechowuje wszystkie możliwe wartości (wagi) połączeń między nimi dla każdego z nich

Udało mi się ją nawet uczyć dla dwóch warstw (bez warstwy ukrytej), nad nauką wielowarstwowej sieci będę musiał jeszcze popracować gdyż nie do końca rozumiem przekładając na prostszy język jak to trzeba liczyć smile.gif
MarikaG
A może macie jakieś lektury o sieciach neuronowych do polecenia? Chętnie poczytam. To pojęcie obiło mi się wcześniej o uszy, ale wiele o nich nie wiem.
Kaze
Do oglądania (bardzo fajny wykład prof. Ryszarda Tadeusiewicza) :
https://www.youtube.com/watch?v=WGBHeTvq_oU
https://www.youtube.com/watch?v=O0I9KtgxXxQ

Do czytania:
http://sknbo.ue.poznan.pl/neuro/ssn/pliki/czesc1.html
http://www.k0pper.republika.pl/sieci.htm
i jeszcze kilkanaście stron można znaleźć w google opisujących dużo teorii wink.gif
sazian
"metody i techniki sztucznej inteligencji"
O$iek
Na tej podstronie jest też garść ciekawych linków, prac https://developer.nvidia.com/deep-learning
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.