Praca magisterska



Pobieranie 1,5 Mb.
Strona12/16
Data24.02.2019
Rozmiar1,5 Mb.
1   ...   8   9   10   11   12   13   14   15   16

przy czym oczywiście





Indeksy górne przy wagach neuronu z jednej strony określają numerację neuronów, do którego wagi należą (m) z drugiej zaś numerację kroków określających kolejne pokazy.

Jeśli pokusić się o intuicyjną interpretację samouczenia sieci to można to określić jako stwierdzenie: „wzmocnieniu ulegają w niej te wagi, które są aktywne (duże ) w sytuacji, gdy „ich” neuron jest pobudzony (duże )”. Tego też wynika, że sieci uczona taką strategią należy do klasy sieci autoasocjacyjnych.

Stosując prawa Hebba jako regułę uczenia uzyskuje się takie dopasowanie wag aby korelacja pomiędzy sygnałem wejściowym a zapamiętanym w formie wag wzorcem sygnału, na który dany neuron ma reagować. Stąd nazwa klasy takich strategii uczenia określana mianem uczenie korelacyjne (ang. correlation learning).

Sieć swoje działanie opiera na grupowaniu sygnałów wejściowych w klasy podobieństwa (ang. cluster) w trakcie procesu uczenia, by następnie nadchodzące sygnały klasyfikować pod względem podobieństwa do określonej klasy (dany neuron – reprezentant klasy – posiada największą wartość wyjscia).
Nasz program zawiera przykład, który obrazuje uczenie sieci neuronowej oparte o strategię reguł Hebba. Pozwala on w sposób krokowy bądź ciągły (cykle prezentacji sygnału wejściowego) obserwować zmiany wartości wag dwuwejściowych neuronów rzutowane na płaszczyznę.
struktury danych algorytmu:

LN - liczna neuronów w sieci

eta - współczynnik uczenia

lPokaz - liczba pokazów sygnału uczącego wykonanych w danej ćwiartce układu współrzędnych

lNeuron - liczba neuronów które w bieżącym kroku znajdują się w danej ćwiartce układu współrzędnych

cbxCiasno - przełącznik czy wagi początkowe mają być losowane z przedziału [-2,2] czy [-10,10] wokół losowego punktu startowego

wagi - tablica wag rozmiar tablicy jest ustalany przez wartość zmiennej LN, neurony posiadają po dwa wejścia więc wagi na neuron jest dwie

cbxLosowe - przełącznik czy ćwiartka układu współrzędnych do prezentacji ma być losowana czy zadana arbitralnie

sygnaly - wektor zawierający współrzędne punktu (sygnału) uczącego sieć

pobudzenie - tablica odpowiedzi neuronów w danym kroku przy ustalonej tablicy wag oraz zadanym sygnale uczącym


{ ile neuronów będzie uczestniczyć w pokazie }

LN := Trunc(enLiczbaNeuronow.Value);


{ ustalenie początkowej wartości współczynnika uczenia }

eta := 0.1;


{ wyczyszczenie informacji o położeniu neuronów w odpowiednich ćwiartkach układu współrzędnych }

for i := 1 to 4 do begin

lPokaz[i] := 0; lNeuron[i] := 0;

end;
for i := 1 to LN do

moc[i] := 0.0;
{ początkowe wartości wag ułożone wokół punktu startowego (x,y) }

Randomize;

x := 16.0*Random-8.0;

y := 16.0*Random-8.0;

for i := 1 to LN do

if not cbxCiasno then begin

wagi[i,1] := 20.0*Random-10.0;

wagi[i,2] := 20.0*Random-10.0;

moc[i] := sqr(wagi[i,1]) + sqr(wagi[i,2]);

end


else begin

wagi[i,1] := x-2.0*Random;

wagi[i,2] := y-2.0*Random;

moc[i] := sqr(wagi[i,1]) + sqr(wagi[i,2]);

end;
{ główna pętla losowania punktu uczącego, modyfikacji wag oraz wizualizacji tego procesu na ekranie }s

while True do

begin
{ wyczyszczenie obrazka }

.....


{ rysunek sieci }

for i := 1 to LN do begin

ix := pbrAuto.XRToPoint(wagi[i,1]);

iy := pbrAuto.YRToPoint(wagi[i,2]);

pbrAuto.Canvas.Polygon([Point(ix-2,iy-2),Point(ix+2,iy-2),Point(ix+2,iy+2),Point(ix-2,iy+2)]);

end;
{ losowanie ćwiartki lub wskazanie arbitralne przez użytkownika oraz wylosowanie punktu jako sygnału uczącego }

.....

{ zliczanie liczby pokazow }



.....

{ rysunek sygnału uczącego }

.....

{ wyliczenie pobudzenia neuronów przez wyznaczone sygnały }



.....

{ określenie maksymalnego pobudzenia }

max := 0.0;

for i := 1 to LN do begin

pobudzenie[i] := wagi[i,1]*sygnaly[1] + wagi[i,2]*sygnaly[2];

pobudzenie[i] := 4.0*pobudzenie[i]/moc[i];

if pobudzenie[i] > max then

max := pobudzenie[i];

end;
{ zerowanie liczników neuronów dla odpowiednich ćwiartek układu współrzędnych }

for i := 1 to 4 do lNeuron[i] := 0;


{ samouczenie sieci w oparciu o wyznaczone parametry pobudzenia }

for i := 1 to LN do begin

{ zapamiętanie starych wartości wag }

wagiOld[i,1] := wagi[i,1];

wagiOld[i,2] := wagi[i,2];

if pobudzenie[i] < 0.2 * max then pobudzenie[i] := 0.3 * pobudzenie[i];

if pobudzenie[i] < 0.0 then pobudzenie[i] := 0.1 * pobudzenie[i];

wagi[i,1] := wagi[i,1] + eta * pobudzenie[i] * (sygnaly[1]-wagi[i,1]);

wagi[i,2] := wagi[i,2] + eta * pobudzenie[i] * (sygnaly[2]-wagi[i,2]);

moc[i] := moc[i] + Sqr(wagi[i,1]) + Sqr(wagi[i,2]);

end;
{ zliczanie liczby neuronów w odpowiednich ćwiartkach }

.....


{ opisanie legendy uczenia w danym kroku }

WypiszLiczbyPN;


{ zerowanie liczników neuronów dla odpowiednich ćwiartek układu współrzędnych }

for i := 1 to 4 do lNeuron[i] := 0;

{ rysunek nowych wartości wag oraz obrazowanie zmiany }

.....


{ rysunek zmiany }

.....


{ rysunek starych pozycji w kolorach Czerwonym - pobudzany i Niebieskim - pobudzany przeciwnie }

.....


{ zliczanie liczby neuronów w odpowiednich ćwiartkach }

.....


{ opisanie legendy uczenia w danym kroku }

WypiszLiczbyPN;


{ zmniejszenie współczynnika uczenia }

eta := eta * 0.99;



end;




1   ...   8   9   10   11   12   13   14   15   16


©operacji.org 2019
wyślij wiadomość

    Strona główna