Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Działanie sieci neuronowej

song77 06 Mar 2014 23:22 1809 13
  • #1 06 Mar 2014 23:22
    song77
    Poziom 10  

    Witam,

    Chcę dla zdobycia doświadczenia zrobić sieć neuronową. Na początku pojawił się jednak problem.
    Jakie przedziały wartości są najczęściej ustawiane na wejściu, a jakie w wagach ?
    Pytam bo w sieci brak jest praktycznych obliczeń.

    Pozdrawiam.

    0 13
  • #2 07 Mar 2014 14:20
    staviq
    Poziom 11  

    Co konkretnie chcesz sieciami neuronowymi liczyć ?

    Nie oczekuj ze ktoś Ci poda "przedziały wartości", albo jakiekolwiek inne parametry wejściowe dla nieznanego algorytmu...

    Jeśli chcesz stworzyć siec neuronowa musisz mieć jakiś zamysł co do wyniku końcowego, jeśli chcesz siecią neuronową odróżniać marchewkę od pomidora to wtedy określasz jakimi informacjami na temat warzyw dysponujesz i dopiero zaczynasz się zastanawiać nad stałymi dla algorytmu, tworzysz prototyp, patrzysz jakie wyniki dostarcza algorytm i jeśli zakres wyników jest zbyt wąski, albo zbyt szeroki, to dopasowujesz "przedziały wartości".

    0
  • #3 07 Mar 2014 18:25
    song77
    Poziom 10  

    Dla przykładu którego podałeś:
    marchewka i pomidor mają inny kolor (załóżmy, że chcemy porównywać cechą koloru).
    W obydwu przypadkach istnieje jakaś wartość koloru czerwonego.
    Jakie wtedy wartości wprowadzić na wejście sieci i jakie wagi ?

    0
  • #4 07 Mar 2014 19:44
    staviq
    Poziom 11  

    Kolega dalej pisze zbyt ogólnie.

    Istnieje masa implementacji sieci neuronowych bo sieci neuronowe to koncepcja a nie gotowy algorytm.

    Generalnie i bardzo ogólnie, powinno to działać tak:

    Danymi wejściowymi są zdjęcia warzyw.
    Oczekiwanym rezultatem jest określenie czy na zadanym na wejściu zdjęciu znajduje się marchewka, czy nie ( zapomnijmy na chwile o pomidorze ).
    I trzeci element pomocniczy, załóżmy ze jest to człowiek.

    To co można osiągnąć przez sieci neuronowe to zbliżona do prawdy informacja "to jest marchewka" "to nie jest marchewka", ale siec neuronowa na samym początku niema pojęcia co jest czym i naturą sieci neuronowej jest to, ze się uczy, to jest jej główna zaleta, a żeby się uczyła, ktoś lub coś musie jej pomóc weryfikować przypuszczenia, stąd element pomocniczy człowiek.

    Przebieg takiego algorytmu wygląda w uproszczeniu następująco:

    1. Na wejście podajemy zdjęcie warzywa o którym człowiek wie że jest/nie jest marchewką
    2. Siec zbiera maksymalną możliwą ilość informacji na temat zdjęcia ( np. rozmiar i proporcje obrysu Convex Hull obszarów o podobnym kolorze )
    3. Sieć próbuje rozpoznać ( w przypadku pierwszego wykonania zwyczajnie losuje wynik ) co jest na zdjęciu
    4. Sieć zwraca wynik: to jest/nie jest marchewka.
    5. Człowiek sprawdza poprawność wyniku i informuje sieć neuronową że wynik jest poprawny nie poprawny.
    6. Sieć neuronowa:
    6.1. Jeśli wynik był poprawny, porównuje zebrane w 2. informacje z poprzednimi poprawnymi wynikami i szuka części wspólnych, części wspólne zapamiętuje.
    6.2 Jeśli wynik był niepoprawny, porównuje zebrane w 2. informacje z poprzednimi błędnymi wynikami, szuka części wspólnych i informacje o podobieństwach zapamiętuje

    W następnych iteracji, sieć w trakcie wykonywania punktu 2. porównuje zebrane informacje z informacjami zebranymi w punktach 6.1 i 6.2 poprzednich iteracji i jeśli więcej podobieństw znaleziono z niepoprawnymi danymi, wynik będzie "to nie jest marchewka", jeśli z poprawnymi - "to jest marchewka"

    I ja tu osobiście dalej nie widzę miejsca na "wagi".

    Przypuszczam, że Kolega myli sieci neuronowe z algorytmami genetycznymi.

    0
  • #5 07 Mar 2014 20:40
    song77
    Poziom 10  

    staviq napisał:
    2. Siec zbiera maksymalną możliwą ilość informacji na temat zdjęcia ( np. rozmiar i proporcje obrysu Convex Hull obszarów o podobnym kolorze )
    Czyli dane: rozmiar,Convex Hull = np.0..255
    Jak rozumiem, razem z powyższymi zakresami danych, nie może być jednocześnie kolejne wejście innego typu np. binarne (0/1) ?


    staviq napisał:
    I ja tu osobiście dalej nie widzę miejsca na "wagi".

    Przypuszczam, że Kolega myli sieci neuronowe z algorytmami genetycznymi.

    Możesz to bardziej wyjaśnić ?

    0
  • #7 07 Mar 2014 22:34
    staviq
    Poziom 11  

    song77 napisał:
    staviq napisał:
    2. Siec zbiera maksymalną możliwą ilość informacji na temat zdjęcia ( np. rozmiar i proporcje obrysu Convex Hull obszarów o podobnym kolorze )
    Czyli dane: rozmiar,Convex Hull = np.0..255
    Jak rozumiem, razem z powyższymi zakresami danych, nie może być jednocześnie kolejne wejście innego typu np. binarne (0/1) ?


    staviq napisał:
    I ja tu osobiście dalej nie widzę miejsca na "wagi".

    Przypuszczam, że Kolega myli sieci neuronowe z algorytmami genetycznymi.

    Możesz to bardziej wyjaśnić ?


    Wejście jest tylko jedno, jeśli "wejść" czy rodzajów danych wejściowych jest wiele rożnych to jest to już kilka sieci neuronowych, które można połączyć razem, natomiast "informacji" przetwarzanych w ramach jednego zestawu danych może być nieskończoność, ale zawsze taka sama ilość rodzajów ( np, zawsze zbieramy informacje o rozmiarach, kształtach i odległości grup pixeli o podobnym kolorze. ) w każdym przebiegu.

    Czy mogę bardziej wyjaśnić - mogę :) W sieciach neuronowych absolutnie nigdy nie modyfikujemy danych, nie ma tutaj czegoś takiego jak "wagi", po prostu projektujemy algorytm tak, żeby zbierał i porównywał informacje, a algorytm sam się uczy jaka informacja daje największe prawdopodobieństwo poprawnego wyniku.

    Jeśli chcemy mieć "wagi", czyli statycznie modyfikować dane wejściowe/przejściowe/wyjściowe, to przestaje to być siec neuronowa, ponieważ algorytm przestaje posiadać największe zalety sieci neuronowych - brak konieczności ręcznej pre-interpretacji danych wejsciowych.

    Co do danych binarnych, teoretycznie dane binarne czy inne w ramach algebry Boole'a, mogą być danymi wejściowymi dal sieci neuronowych, ale zazwyczaj mija się to z celem, sieć neuronowa nie zdąży się "rozpędzić" na danych binarnych, bo jeśli dokładnie liczę, to mniej więcej po 3 przebiegach dochodzi do perfekcji i w praktyce to jest mało optymalna metoda przetwarzania danych binarnych a w teorii, niczego nas to nie nauczy, bo algorytm nic nie będzie przetwarzał, nie będzie miał okazji do bycia siecią neuronową.

    0
  • #8 08 Mar 2014 18:13
    song77
    Poziom 10  

    staviq napisał:
    Czy mogę bardziej wyjaśnić - mogę :) W sieciach neuronowych absolutnie nigdy nie modyfikujemy danych, nie ma tutaj czegoś takiego jak "wagi", po prostu projektujemy algorytm tak, żeby zbierał i porównywał informacje, a algorytm sam się uczy jaka informacja daje największe prawdopodobieństwo poprawnego wyniku.

    To teraz już w ogóle nie rozumiem Twojej wypowiedzi na temat wag.
    Przecież sieci neuronowe posiadają wagi, przynajmniej tak wyczytałem z internetu i pdf kolegi wyżej.

    I jaka jest różnica między sieciami neuronowymi a algorytmami genetycznymi o których wspomniałeś ?

    0
  • #9 08 Mar 2014 18:30
    staviq
    Poziom 11  

    W uproszczeniu:

    Sieci neuronowe po jednym przebiegu zwracają wynik. Kolejne przebiegi dla kolejnych danych "uczą" siec neuronowa i kolejne wyniki są coraz bardziej poprawne.

    Algorytmy genetyczne są wieloprzebiegowe i nie "uczą" się, swoje dane wyjściowe przekazują ponownie na wejście, modyfikując je w sposób losowy ( ale określony przez algorytm ) i algorytm wykonuje kolejne przebiegi tak długo, aż osiągnie określony przez człowieka wynik. Algorytmy genetyczne są z założenia wielowątkowe ( równolegle przetwarzają ten sam zestaw danych z losowymi modyfikacjami ) i jeśli algorytm widzi ze efekt oddala się od oczekiwanego po kilku przebiegach "gen" zostaje zignorowany ( z założenia chcemy żeby ilość danych pomiędzy przebiegami była mniej więcej stała. Bez "ubijania" genów przyrost informacji będzie wykładniczy a wynik potrzebujemy tylko jeden, lub parę ).

    Co do samych "wag", sieci neuronowe, algorytmy genetyczne i inne algorytmy próbujące być zbliżone do sztucznej inteligencji wymagają drobnych manipulacji danymi. Jeśli algorytm wykrywania marchewki zbyt dużo czasu spędza porównując dane o których my wiemy ze są mało potrzebne ( np. fragmenty zdjęcia blisko krawędzi, my wiemy ze marchewka będzie raczej na środku zdjęcia ) można zastosować "wagi" dla przetwarzanych informacji, ale nie jest to częścią algorytmu, jedynie optymalizacją obliczeniową.

    Nikt, absolutnie nikt, nie będzie w stanie podać Koledze gotowych wartości dla jakichkolwiek parametrów jeśli nie ma chociażby szkicu algorytmu i konkretów na temat tego jakie dane będą przetwarzane i jakie informacje o tych danych będą brane pod uwagę.

    0
  • #10 13 Mar 2014 11:32
    song77
    Poziom 10  

    Czy jest możliwość sekwencyjnej odpowiedzi sieci ?
    Czyli sieć na wyjściu wykona serię różnych reakcji (np.zaświecenie diody, a następnie drugiej diody).

    0
  • #11 30 Mar 2014 21:25
    song77
    Poziom 10  

    Po dłuższej nieobecności ponownie zapytam:
    Jakie wartości stosuje się do obliczeń ?

    Wynik=suma(we*wagi)
    we - jak zakładam, przedział liczb całkowitych
    wagi - 0..1, -1..1 ?

    gdyby obliczyć wynik dla powyższych założeń to wartości wyniku byłyby duże jeśli zakładamy wiele we.
    Jednak na teoretycznych wykresach wynik jest w przedziałach 0..1 lub -1..1.
    Więc jak to jest ?

    Pytam, bo nie znalazłem w internecie praktycznych obliczeń.

    0
  • #12 31 Mar 2014 16:33
    Paweł Es.
    Pomocny dla użytkowników

    song77 napisał:
    Po dłuższej nieobecności ponownie zapytam:
    Jakie wartości stosuje się do obliczeń ?

    Wynik=suma(we*wagi)
    we - jak zakładam, przedział liczb całkowitych
    wagi - 0..1, -1..1 ?

    gdyby obliczyć wynik dla powyższych założeń to wartości wyniku byłyby duże jeśli zakładamy wiele we.
    Jednak na teoretycznych wykresach wynik jest w przedziałach 0..1 lub -1..1.
    Więc jak to jest ?

    Pytam, bo nie znalazłem w internecie praktycznych obliczeń.


    Wynik, to nie jest prosta suma, tj.

    suma=x1*w1+x2*w2+...+xn*wn

    tylko odpowiedź tzw. funkcji aktywacji, na której wejście podajesz sumę ważoną wejść.

    Funkcja ta tylko w nielicznej ilości przypadków jest liniowa, a w pozostałych przypadkach jest nieliniowa, np:
    http://pl.wikipedia.org/wiki/Funkcja_aktywacji" target="_blank" rel="nofollow" class="postlink ">Różne funkcje aktywacji

    Funkcja aktywacji niejako ogranicza sumę wejściową do zakresu standardowego jaki założyłeś.

    Co do skalowania wartości wejściowych, to to jest zależne od rodzaju sygnałów wejściowych i sposobu realizacji samego "neuronu".

    Ogólnie musisz określić zakres zmienności danej cechy (min max) i przeskalować to na sygnał wejściowy neuronu jaki sobie założysz (tj. wszystkie wejścia mają zakres standardowy np. od 0 do 1, a poszczególne cechy są skalowane do tego zakresu)

    Wagi wejściowe na początek losujesz z zakresu 0 do 1 (lub -1 do 1), a następne wartości otrzymujesz w procesie uczenia sieci, tj. podajesz na wejście dany wzorzec a potem na podstawie stanu wyjścia odpowiednio modyfikujesz wagi
    (wzory na różne metody uczenia sieci można znaleźć w Sieci).

    0
  • #13 31 Mar 2014 19:21
    song77
    Poziom 10  

    Nie wszystko rozumiem :(
    Załóżmy że mamy 4 wejścia na których są przedziały 0..255. Wagi 0..1.
    Jak powinny wyglądać wtedy obliczenia ?

    0
  • #14 01 Kwi 2014 19:15
    Paweł Es.
    Pomocny dla użytkowników

    suma = (x1*w1 + x2 * w2 + x3 * w3 +x4*w4)/256

    $$wy =255 * \frac{1}{1+e^{(-\beta*suma)}}$$

    β - określa nachylenie przebiegu funkcji sigmoidalnej, można w nim zawrzeć to
    dzielenie przez 256

    Na wyjściu otrzymujesz sygnał 0-255.

    0