Sieć Hamminga - klasyfikator
Sieć Hamminga - klasyfikator
Wstęp teoretyczny | Symulacja
Przedmiot:Przemysłowe zastosowania sztucznej inteligencji
Projekt:Sieć Hamminga - klasyfikator
Autorzy:Stanisław Kamiński, Marcin Samborski
Wydział:EAIiE
Kierunek:Elektronika i Telekomunikacja
Opiekun:mgr inż. Adam Gołda


Opis działania klasyfikatora Hamminga

Projekt ten opisuje własności, zastosowania i proces tworzenia sieci Hamminga, działającej jako klasyfikator sygnałów.

Warto zauważyć, że opisana tutaj sieć różni się nieco od tej spotykanej w literaturze fachowej. Różnice wynikają z faktu, że naszą sieć tworzyliśmy pod kątem zaprogramowania jej w Matlabie (tudzież późniejszej implementacji). Sieć, mimo różnic, działa jednak prawidłowo.

Jakie sygnały przetwarza sieć Hamminga?

Sieć ta, chociaż wewnętrznie działa analogowo, przetwarza sygnały binarne - chociaż na wejściu mogą być one "zaszumione", czyli w praktyce mogą przyjmować wartości ciągłe.

Jak wygląda i z czego składa się sieć Hamminga?

Sieć Hamminga

Powyższy rysunek przedstawia sieć Hamminga. Można wyróżnić dwie podstawowe części tej sieci:

Łatwo zauważyć, że w obu tych warstwach znajduje się jednakowa ilość neuronów.

Jak działa sieć?

Neurony warstwy wejściowej są zaprogramowane do rozpoznawania określonej liczby wzorców - ilość neuronów w tej warstwie odpowiada ilości wzorców, które sieć ma rozpoznawać (M neuronów - M wzorców). Na wyjściu tych neuronów realizowana jest funkcja będąca odwzorowaniem stopnia podobieństwa sygnału wejściowego do danego wzorca.

Warstwa wyjściowa sieci odpowiedzialna jest za "zdecydowanie", który ze wzorców jest najbliższy sygnałowi testowemu. Dzieje się to dzięki temu, że najbardziej wysterowany neuron warstwy drugiej "wyhamowuje" odpowiedzi pozostałych (zwykle dzieje się to po kilku cyklach obliczeniowych, w trakcie których na wejściach x(i) musi panować stan "0").

Na prawidłowo wysterowanym wyjściu używany jest kod "1 z M", wskazujący odpowiedź sieci. Aby to osiągnąć, należy użyć odpowiedniej funkcji przejścia neuronu - u nas najużyteczniejsza okazało się funkcja

Funkcja

Jak tworzone są wagi połączeń?

Wagi wejść neuronów pierwszej warstwy

Wagi te ustawiane są w taki sposób, aby maksymalne wysterowanie każdego neuronu miało taką samą wartość i występowało dla dokładnie jednego wzorca. Aby to uzyskać, nie trzeba przeprowadzać procesu uczenia sieci, wystarczy określić wagi matematycznie.

Wagi wejść pierwszej warstwy

gdzie:

Wzór staje się oczywisty, kiedy przypomnimy sobie, że iloczyn wag i pobudzeń neuronu można interpretować jako kosinus kąta między wektorem wag i wektorem pobudzeń. W ten sposób, jeśli oba wektory są identyczne, wyjście neuronu przyjmie wartość "1"; dla różnych wektorów wyjście przyjmie wartość z zakresu od -1 do 1.

Wagi wejść neuronów drugiej warstwy

Przede wszystkim musimy określić, ile wejść ma każdy z neuronów warstwy drugiej.

Każdy neuron warstwy drugiej połączony jest:

Przykładowa sieć

Aby poznać działanie klasyfikatora Hamminga, stworzyliśmy w Matlabie sieć, której zadaniem jest rozpoznawanie jednego z ośmiu znaków zapisanych w "pamięci" sieci. Poniższy rysunek prezentuje używany zestaw znaków:

Znaki użyte jako wzorce

Mimo, że matryce przedstawiające te znaki są dwuwymiarowe (3x5 pikseli), znacznie wygodniejsze (dla dalszych obliczeń) było zapisanie ich jako pojedynczego wiersza (15 pozycji). Czarne prostokąty to "1", białe to "0". Aby dalsze obliczenia były poprawne, każdy wiersz został unormowany.

Ponieważ chcemy klasyfikować osiem znaków, nasza sieć będzie złożona z 16 neuronów pogrupowanych po 8 w dwóch warstwach.

Wagi połączeń warstwy wejściowej są predefiniowane, jest to po prostu transponowana macierz znaków - uprzednio unormowana, nie trzeba tego robić drugi raz (jest teraz normowana po kolumnach).

Wagi połączeń warstwy drugiej zostały przygotowane zgodnie z podaną wcześniej zależnością, przy czym sprzężenia między neuronami należącymi do tej warstwy zostały ustalone na -1/8. Koniecznie należy pamiętać o unormowaniu wierszy tej macierzy!

Przyjęta przez nas funkcja aktywacji neuronu to "miękkie przejście", czyli:

Funkcja

Arbitralnie przyjęliśmy, że do ustabilizowania sieci wystarczy 15 cykli obliczeniowych w drugiej warstwie; zauważyliśmy jednak, że dla bardzo zaszumionych znaków ilość ta może okazać się niewystarczająca. Optymalnie byłoby sprawdzać, czy w danym cyklu nie są wyzerowane wszystkie wyjścia poza jednym, ale niestety trudno wtedy z góry przewidzieć czas obliczeń - a przy pracach DSP bardzo istotna jest predykcyjność czasu.

Ostatnim etapem eksperymentu było "zaszumienie" znaków i sprawdzenie, jak sieć sprawuje się w tak "utrudnionych" warunkach. Szum jest "analogowy", generowany funkcją rand().

Podsumowanie

Stworzona przez nas sieć pracuje zgodnie z założeniami - tzn. jeśli tylko jest to możliwe, prawidłowo identyfikuje "zaszumiony" znak. Myli się w sytuacjach, w których odczytanie prawidłowego znaku jest calkowicie niemożliwe, oraz gdy dwa neurony dają podobnie wysoki sygnał (identyfikacja znaku w takim przypadku wymagałaby po prostu większej liczby cykli obliczeniowych).

Gotowy m-plik z komentarzami można ściągnąć stąd.

Cały projekt można ściągnąć stąd.

Bibliografia

(C) Copyright 2004

Wstęp teoretyczny | Symulacja