Wpisany przez Tomasz Lubiński,
27 lipca 2005 18:39
Pojedynczy neuron nie wystarcza do rozwiązywania skomplikowanych zadań, dlatego też łączy się je tworząc sieć neuronową. Przykładowy model, którym będziemy się zajmować to sieć jednokierunkowa. Mamy tutaj m neuronów połączonych z n neuronami warstwy następnej bez sprzężeń zwrotnych i połączeń między neuronami z tej samej warstwy. Warstw możemy mieć k. Pierwsza warstwa to warstwa wejściowa ostatnia to wyjściowa, pozostałe to tzw. warstwy wewnętrzne lub ukryte. Zazwyczaj taka sieć posiada jedną warstwę neuronów wejściowych, jedną wartwę neuronów wyjściowych oraz jedną warstwę ukrytą. Dzięki zwiększaniu ilości warstw można rozwiązywać coraz bardziej skomplikowane problemy, aczkolwiek zwiększa się czas działania i uczenia sieci.
Obliczenia dla takiej sieci następują identycznie jak dla pojedynczego neuronu. A zatem mamy dane wartości x1, x2, ... xn. Na ich podstawie obliczamy wartości neuronów (perceptronów) w warstwie ukrytej. A więc:
z_1=f(x_1*w_{11}^1 + x_2*w_{21}^1 + ... + x_n*w_{n1}^1)\\
...
gdzie funkcja f jest funkcją aktywacji neuronu (liniowa (rzadko), sigmoidalna, tangens hiperboliczny, Gaussa lub signum). Kolejną warstwę (w naszym wypadku wyjściową, ale może to być kolejna warstwa ukryta) obliczamy podobnie:
y_1=f(z_1*w_{11}^2 + z_2*w_{21}^2)\\
...
Implementacje
Autor | Język programowania | Komentarz | Otwórz | Pobierz | Ocena |
Tomasz Lubiński | Delphi/Pascal | Borland Delphi 5 | .pas | .pas | ***** / 3 |
Poprawiony: 26 września 2012 19:25
Praktyka pokazuje, że nie jest to zdanie prawdziwe. Zwykle powinniśmy pozostać przy klasycznych trzech warstwach natomiast zwiększyć liczbę neuronów.
Pozdrawiam.
Dobrze jest to opisane w "Sieci neuronowe w ujęciu algorytmicznym" Osowskiego. IMO dobra pozycja.