• Nie Znaleziono Wyników

Sieć neuronowa typu Elmana

N/A
N/A
Protected

Academic year: 2021

Share "Sieć neuronowa typu Elmana"

Copied!
12
0
0

Pełen tekst

(1)

Sieć neuronowa typu Elmana

Sieć Elmana jest przykładem sieci neuronowej ze sprzężeniem zwrotnym. W swo- jej konstrukcji składa się z dwóch warstw. Pierwsza – ukryta, jest warstwą, któ- rej sygnały wyjściowe są kierowane jako wejścia dla neuronów warstwy drugiej oraz jako sygnał zwrotny na wejście do sieci. Sygnały zwrotne tworzą tak zwaną warstwę kontekstową. Przekazane sygnały do warstwy kontekstowej nie mają wag.

Rysunek 1: Schemat sieci Elmana.

Jeżeli wejście do sieci jest N wymiarowe, oraz liczba neuronów w warstwie ukrytej wynosi K, to w kolejnym przejściu przez sieć wektor wejściowy będzie miał wymiar N + K. Ponieważ ostatnie K sygnałów pochodzi z poprzedniej iteracji sieci stosuje się indeksowanie względem czasu. Przyjmijmy (dla uprosz- czenia zapisu), że jeżeli rozważamy wartość w czasie t to indeks czasowy może być pominięty. Wartości brane z poprzedniej iteracji, czyli w czasie t − 1 zapi- sywane są wraz z indeksem czasowym.

(2)

Jeżeli przez x1 oznaczymy wektor wejściowy do sieci, to otrzymujemy

x1 = [x10(t), . . . , x1N(t), x1N +1(t), . . . , x1N +K(t)]

= [x10(t), . . . , x1N(t), y11(t − 1), . . . , y1K(t − 1)],

gdzie [y11(t − 1), . . . , y1K(t − 1)] jest wektorem wyjściowym warstwy pierwszej z poprzedniej iteracji. W czasie t = 0, [x1N +1(t), . . . , x1N +K(t)] ≡ 0.

Wartości wyjściowe z pierwszej wartstwy, to wektor K− elementowy y1 taki, że

y1 = [y11, . . . , yK1],

gdzie yi1 = f (net1i), dla i = 1, 2, . . . , K. f oznacza funkcję aktywacji wspólną dla każdego neuronu warstwy pierwszej.

net1i =

N

X

j=0

x1jw1ij +

K

X

j=1

x1N +jw1i N +j

jest wartścią sumatora dla i = 1, 2, . . . , K. Indeksy przy wartościach wag ozna- czają: górny – numer warstwy, dwa dolne – na przykład ij – określają: i – do którego neuronu prowadzi dane połączenie oraz j – z którego wejścia poda- wany jest sygnał. Wektor y1 wzbogacony o bias stanowi wektor wejściowy dla neuronów warstwy drugiej. Jeżeli przez x2 oznaczymy wektor wejściowy do neuronów wartstwy drugiej to mamy, że

x2 = y1 = [y10, y11, . . . , y1K], gdzie y10 = 1 oznacza bias.

Niech M oznacza liczbę neuronów w warstwie drugiej. Wówczas wyjściem z sieci będzie wektor

y2 = [y21, . . . , yM2 ],

gdzie wartości y12, . . . , y2M są kolejnymi wartościami wyjściowymi neuronów warstwy drugiej wyliczane następująco

yi2 = f (net2i) = f (

M

X

j=0

x2jw2ji)

gdzie i = 1, 2, . . . , M . Podobnie jak w warstwie pierwszej f oznacza funkcję aktywacji wspólną dla neuronów drugiej warstwy. Należy zaznaczyć, że funkcje aktywacji mogą być różne dla kolejnych warstw.

(3)

Uczenie sieci neuronowej typu Elmana

Zgodnie z definicją, sieć neuronową stanowi zbiór neuronów wzajemnie ze sobą powiązanych. Każda sieć neuronowa posiada wejścia (służące do wprowadzania wartości zmiennych obserwowanych na zewnątrz) oraz wyjścia (które wyzna- czają wynik obliczeń). Dodatkowo niektóre połączenia między neuronami mają przypisaną pewną wartość liczbową zwaną wagą.

Sposób uczenia sieci neuronowej zależy od jej rodzaju. Nauka sieci neuro- nowej typu Elmana jest pracedurą zmiany wartości wag. Zmiana wartości wag prowadzona jest w taki sposób aby zminimalizować wartość błędu. Funkcja błędu jest funkcją wielu zmiennych, jej argumentami są wszystkie wagi sieci.

Procedura uczenia odbywa się za pomocą zbioru uczącego. Przyjmijmy, dla ustalenia uwagi, tak jak w poprzedniej sekcji, że rozważana przez nas sieć posiada N wejść, K neuronów w warstwie pierwszej, K neuronów tworzących warstwę kontekstową oraz M neuronów w warstwie ostatniej. Konstrukcja sieci Elmana zakłada, że za wyjątkiem połączeń zwrotnych każde połączenie posiada wagę. Zbiorem uczącym nazywamy zbiór

L = {V, T },

gdzie V jest zbiorem wektorów wejściowych do sieci, zaś T jest zbiorem żąda- nych wektorów wyjściowych. Zakładając, że liczba elementów w zbiorze uczą- cym (liczba wzorców) wynosi C, możemy zapisać, że

V = {v1, . . . , vC},

gdzie vi = [v1i, . . . , vNi ], i = 1, . . . , C oraz

T = {t1, . . . , tC},

gdzie ti = [ti1, . . . , tiM], i = 1, . . . , C.

Modyfikacja wag realizowana przez procedurę uczenia ma na celu takie ustalenie ich wartości aby bez ich zmiany dla każdego elementu zbioru V war- tość na wyjściu z sieci była równa odpowiadającemu mu wektorowi ze zbioru T .

(4)

Innymi słowy, jeżeli przyjmiemy że wektor wejściowy do sieci Elmana x1 = vi, to ma zachodzić y2 = ti dla każdego i = 1, . . . , C.

Na początku procedury uczenia zakłada się, że wagi przyjmują losowe war- tości z ustalonego przedziału (najczęściej [−1, 1]). Dla zadanego zbioru uczą- cego definiujemy funkcję błędu

E(w) =

C

X

i=1 M

X

j=1

tij − yj2(vi)2, (1) gdzie

w oznacza wektor wszystkich wag sieci,

tij oznacza j -tą współrzędną i -tego wzorca, zaś

y2j(vi) oznacza wartość wyjściową j -tego neuronu warstwy drugiej, pod wa- runkiem że do sieci został na wejście podany wektor vi.

Funkcja błędu (1) jest nieujemna. Jej minimum wynosi 0. Procedura ucze- nia ma na celu taką modyfikcję wag, aby wartość funkcji błędu (1) osiągnęła wartość jak najbliższą zeru. W praktyce określa się parametr ε, którego war- tość jest mała, bliska zeru. ε określa maksymalny, akceptowalny przez nas błąd.

Procedura uczenia sieci kończy się gdy zrealizowany został cel. Celem tym jest wyznaczenie takich wartości wag aby bez ich zmiany wartość błędu (1) była nie większa od ε. Oznacza to, że dla każdego elementu zbioru V wartość na wyjściu z sieci niewiele różniła się od odpowiadającej jej wartości wektora ze zbioru T .

Realizacja procedury uczenia może przebiegać różnymi metodami. Najczę- ściej stosowanymi metodami są metody gradietowe. Zaliczamy do nich metodę najszybszego spadku i metodę Levenbergua - Marquarda. Różnica między tymi metodami polega na sposobie modyfikacji wartości wag.

Uczenie sieci neuronowej typu Elmana metodą gradien- tową najszybszego spadku

Metoda gradientowa najszybszego spadku jest iteracyjną metodą szukania mi- nimum funkcji celu. Realizację algorytmu rozpoczynamy od ustalonego punktu

(5)

początkowego. Następnie w kolejnych krokach wyliczamy kolejne argumenty funkcji celu. Dla kolejnych argumentów wartość funkcji maleje aż do osią- gnięcia wartości ε, czyli największej, akceptowalnej wartości błędu. Wówczas algorytm kończy działanie. Gdyby procedura była kontynuowana, zmieniała- by wynik o coraz mniejszą wartość i w kolejnych krokach algorytm zwracałby prawie ten sam argument. Dzieje się tak dlatego, że wyliczanie kolejnych argu- mentów funkcji celu jest realizowane na podstawie wartości gradientu funkcji celu, który przyjmuje wartości coraz bliższe zeru dla punktów leżących w bli- skiej odległości od ekstermum funkcji.

W rozważanym przez nas przypadku uczenia sieci, funkcją której minimum szukamy, jest funkcja błędu dana wzorem (1)

E(w) =

C

X

i=1 M

X

j=1

tij − yj2(vi)2,

gdzie

w oznacza wektor wszystkich wag sieci,

tij oznacza j -tą współrzędną i -tego wzorca, zaś

y2j(vi) oznacza wartość wyjściową j -tego neuronu warstwy drugiej, pod wa- runkiem że do sieci został na wejście podany wektor vi.

Argumentem początkowym dla działania algorytmu będzie wektor począt- kowych wartości wag w(0). Niech η > 0, będzie ustaloną stałą zwaną współ- czynnikiem uczenia. Wzór na modyfikację wag dla metody gradientowej naj- szybszego spadku przyjmuje postac

w(t + 1) = w(t) − η 5 E(w(t)), (2)

gdzie

t = 0, 1, . . . oznacza indeks czasowy, w(t) oznacza wetor wag w czasie t, η jest współczynnikiem uczenia.

Przyjmijmy, bez zmniejszania ogólności rozważań, że uczona przez nas sieć ma N wymiarowy wektor wejściowy, K neuronów w pierwszej warstwie i jeden neuron w warstwie wyjściowej. Wówczas wektor wag ma (N +K +1)×K +K +1

(6)

elementów. Istotnie w = [w101 , . . . , w11N +K, . . . , w1K0, . . . , wKN +K1 , w210, . . . , w21K].

Przy takich założeniach funkcja błędu przyjmuje postać

E(w101 , . . . , w11N +K, . . . , wK01 , . . . , w1KN +K, w102 , . . . , w21K) =

C

X

i=1

ti1− y12(vi)2. Celem uczenia jest osiągnięcie takiego stanu, aby odpowiedź sieci na dany sygnał wejściowy vi była jak najbardziej zbliżona do odpowiedzi wzorcowej ti dla wszystkich i = 1, 2, . . . , C. Aby to nastąpiło należy odpowiednio modyfi- kować wagi aż do momentu, gdy wartość funkcji błędu będzie równa zeru (w praktyce proces uczenia kończy się, gdy błąd zmaleje poniżej pewnej zadanej wartości ε).

Korekcja wag może następować w sposób przyrostowy (aktualizacja wag bezpośrednio po podaniu każdej pary uczącej) lub w sposób grupowy (korek- ta wag następuje po podaniu całego zestawu uczącego). Metody gradientowe mogą być realizowane przy założeniu różniczkowalności funkcji celu. W roz- ważanym przypadku ogranicza to klasę możliwych do zastosowania funkcji aktywacji. Najczęściej przyjmuje się (my również przyjmiemy takie założenie), że stosowaną funkcją aktywacji jest funkcja sigmoidalna z wartością β = 1, czyli funkcja dana wzorem f (x) = 1+ exp(−x)1 .

W metodach gradientowych do aktualizowania wektora wag wykorzystuje się informacje o gradiencie funkcji błędu (składowymi wektora gradientu są pochodne cząstkowe funkcji błędu po poszczególnych wagach sieci). Gradient wskazuje kierunek najszybszego wzrostu wartości funkcji. Zatem stosowany przez nas algorytm najszybszego spadku jako kierunek minimalizacji przyj- muje kierunek ujemnego wektora gradientu funkcji błędu, który w przypadku rozważanej sieci przyjmuje postać

∇E =

"

∂E

∂w101 , . . . , ∂E

∂w1N +K1 , . . . , ∂E

∂w1K0, . . . , ∂E

∂wKN +K1 , ∂E

∂w210, . . . , ∂E

∂w21K

#

. (3)

Według tego algorytmu modyfikacja pojedynczej wagi odbywa się zgodnie z poniższym wzorem

wijq(t + 1) = wqij(t) − η ∇∂E(w(t))

∂wqij(t)

!

, (4)

(7)

gdzie wqij ∈nw110, . . . , w11N +K, . . . , wK01 , . . . , wKN +K1 , w210, . . . , w1K2 o.

Uczenie sieci rozpoczynamy losując początkowy wektor wag. Dla tak otrzy- manej sieci obliczana jest wartość funkcji błędu oraz gradient, a następnie następuje modyfikacja wektora wag o pewną wielkość proporcjonalną do od- powiedniej składowej wektora gradientu ze znakiem przeciwnym. Powtarzamy takie postępowania, dopóki wartść funkcji błędu będzie większa od ustalonego na początku ε.

Metody gradientowe optymalizacji wymagają określenia wektora gradientu funkcji błędu względem wag wszystkich warstw sieci. Nie ma z tym problemu jeśli chodzi o warstwę ostatnią, gdyż wartość gradientu otrzymujemy tu bez- pośrednio (na podstawie wektora wyjściowego sieci i sygnałów wzorcowych).

W przypadku pozostałych warstw należy zastosować metodę wstecznej propa- gacji błędu.

Nazwa „propagacja wsteczna” pochodzi od sposobu obliczania błędów na poszczególnych warstwach sieci, gdyż jest on niejako obliczany od końca. Naj- pierw liczymy błąd w warstwie ostatniej. Błąd dla neuronów w warstwie wcze- śniejszej obliczany jest jako pewna funkcja błędów neuronów warstwy poprze- dzającej. Sygnał błędu jest propagowany od warstwy ostatniej, aż do warstwy wejściowej, a więc wstecz.

Załóżmy, że procedura aktualizacji wag jest realizowana dla każdego wzorca osobno. Niech c ∈ {1, 2, . . . , C} będzie ustalonym numerem wzorca. Wówczas błąd dla c -tego wzorca jest określona następująco

E(w) = 1 2

tc− y12(vc)2. (5)

Wartość pochodnej cząstkowej błędu (5) liczona dla wagi warstwy drugiej, czyli w1i2, gdze i = 1, 2, . . . , K przyjmuje postać

∂E

∂w1i2 = 12(tc− y12(vc))2|w2

1i

= − (tc− y12(vc)) (y12(vc)) |w2

1i

= − (tc− y12(vc)) (f (x20w210+ · · · + x2Kw1K2 )) |w2

1i

= − (tc− y12(vc)) y12(vc)(1 − y12(vc)) (x20w102 + · · · + x2Kw21K) |w2

1i

= − (tc− y12(vc)) y12(vc)(1 − y12(vc))x2i.

(6)

(8)

W przypadku pochodnej cząstkowej błędu (5) liczonej dla wag warstwy pierwszej, czyli wij1 ∈ {w101 , . . . , w1N +K1 , . . . , wK01 , . . . , w1KN +K}, procedura jest bardziej skąplikowana. Wynika to z dwóch powodów. Po pierwsze, liczenie po- chodnej po wagach warstwy wewnętrznej jest tym bardziej skąplikowane, im jest to warstwa dalsza od końca. Dzieje się tak dlatego, że wartość wyjścio- wa z sieci jest wynikiem złożenia wielu funkcji aktywacji. Po drugie, liczenie pochodnej po wagach warstwy pierwszej musi uwzględniać sprzężenie zwrot- ne sieci Elmana. Ponadto aby odróżnić wartości z kolejnych przebiegów sieci musimy wprowadzić indeks czasowy w miejsce vc.

Bez zmniejszania ogólności rozważań rozważmy przypadek dla wagi w1bc, gdzie w1bc∈ {w110, . . . , w11N +K, . . . , w1K0, . . . , wKN +K1 }. Indeksy0bc0zostały wpro- wadzone celowo zamiast indeksów 0ij 0, aby zaznaczyć że waga wbc1, po której liczymy pochodną cząstkową nie zmienia się w trakcie obliczeń. Mamy wówczas

∂E

∂w1bc = 12(tc− y12(t))2|w1

bc

= − (tc− y12(t)) (y12(t)) |w1

bc

= − (tc− y12(t)) (f (x20(t)w102 + · · · + x2K(t)w21K)) |w1

bc

= − (tc− y12(t)) y12(t)(1 − y12(t))x20(t)w102 + · · · + x2K(t)w21K

| {z }

net21(t)

|w1

bc

(7) W tym miejscu kończą się obliczenia dla warstwy wyjściowej a my liczymy dalej. Ponieważ

x2i(t) = yi1(t),

gdzie i = 1, . . . , K, co oznacza, że sygnał wejściowy dla warstwy drugiej jest tym samym co wyjściowy z warstwy pierwszej oraz

y1i(t) = f

N +K

X

j=0

x1j(t)w1ij

| {z }

net1i(t)

= f

N

X

j=0

x1j(t)w1ij +

K

X

j=1

yj1(t − 1)wi N +j1

, (8)

gdzie i = 1, . . . , K, otrzymujemy

∂E

∂w1bc = − (tc− y21(t)) y21(t)(1 − y21(t)) (x20(t)w210+ · · · + x2K(t)w1K2 ) |w1

bc

= − (tc− y12(t)) y12(t)(1 − y12(t)) (f (net11(t))w112 + · · · + f (net1K(t))w21K) |w1

bc

(9)

(9)

Ze wzoru (8) wynika, że wartości net11(t), . . . , net1K(t) zależą od w1bc przez sygnały sprzężenia zwrotnego, zatem

∂E

∂w1bc = − (tc− y21(t)) y12(t)(1 − y21(t))

w211f0(net11(t)) net11(t)|w1

bc+ · · · + w21Kf0(net1K(t)) net1K(t)|w1 bc

. (10)

Policzmy teraz ile wynosi net1i(t)|w1

bc, gdzie i = 1, . . . , K

net1i(t)|w1

bc = PNj=0x1j(t)wij1

wbc1 + w1i N +1f0(net11(t − 1))net11(t − 1)

wbc1

+ · · · + wi N +K1 f0(net1K(t − 1))net1K(t − 1)

w1bc.

(11) Wzór (10) wraz z wyliczonymi wartościami net11(t)|w1

bc, . . . , net1K(t)|w1 bc

danymi wzorem (11) wyznacza ostateczną formułę na wyliczenie ∂w∂E1 bc

. Należy podkreślić, że wzór (11) jest podany w formie rekurencyjnej zależności. Wy- liczenie net11(1)|w1

bc, . . . , net1K(1)|w1

bc w pierwszym przebiegu odbywa się bez użycia formuły rekurencyjnej, gdyż w tym przebiegu nie ma jeszcze zależności od poprzedniego przebiegu sieci. Dzieje się tak, ponieważ na początku działania sieci wartości x1N +1(1), . . . , x1N +K(1) są równe zero.

Omówiona powyżej metoda gradientowa najszybszego spadku jest metodą która aktualizując wagi uwzględnia w danym momencie obliczeniowym zależ- ność od jednego wzorca uczącego. Algorytm Levenberga-Marquardta działa inaczej, gdyż modyfikuje wagi w sposób grupowy, czyli po podaniu wszystkich wektorów uczących. Jest bardziej efektywny, gdyż łączy w sobie zbieżność algo- rytmu Gaussa-Newtona 1 blisko minimum oraz metodę najszybszego spadku, która bardzo szybko zmniejsza błąd gdy rozwiązanie jest dalekie.

1nieliniowa metoda najmniejszych kwadratów, por. http://www.ekonometria.com/nmnk.htm

(10)

Uczenie sieci neuronowej typu Elmana metodą Levenber- gua - Marquarda

Algorytm Levenberga-Marquardta2 jest modyfikacją algorytmu Gaussa – New- tona, w której kierunek minimalizacji d(w(t)) przyjmuje postać

d(w(t)) = −[∇2E(w(t − 1))]−1∇E(w(t − 1)). (12) W takim przypadku równanie zmiany wag przyjmuje postać

w(t + 1) = w(t) − [∇2E(w(t))]−1∇E(w(t)). (13) Jeżeli przyjmiemy, że funkcja celu jest dana wzorem

E(w) =

C

X

i=1 M

X

j=1

tij − yj2(vi)2, (14)

to gradient ∇E oraz hesjan ∇2E tej funkcji mogła być obliczane następująco

∇E(w(t)) = JT(w(t))ε(w(t)) (15)

2E(w(t)) = JT(w(t))J (w(t)) + S(w(t)), (16) gdzie J jest jakobianem, czyli macierzą pierwszych pochodnych cząstkowych błędu każdej próbki w poszczególnych neuronach ostatniej warstwy

eij = (tij− y2j(vi))

2na podstwie http://www.kik.pcz.czest.pl/nn/jednokier.php?art=14

(11)

po wszystkich wagach w sieci

J (w) =

∂e11

∂w110 . . . ∂w1∂e11 1 N +K

. . . ∂w∂e111 K0

. . . ∂w1∂e11 K N +K

∂e11

∂w102 . . . ∂w∂e211 M K

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

∂e1M

∂w110 . . . ∂w∂e1 1M 1 N +K

. . . ∂w∂e1M1 K0

. . . ∂w1∂e1M K N +K

∂e1M

∂w102 . . . ∂w∂e21M M K

∂e21

∂w110 . . . ∂w1∂e21

1 N +K . . . ∂w∂e121

K0 . . . ∂w1∂e21 K N +K

∂e21

∂w102 . . . ∂w∂e221 M K

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

∂e2M

∂w110 . . . ∂w∂e1 2M 1 N +K

. . . ∂w∂e2M1 K0

. . . ∂w1∂e2M K N +K

∂e2M

∂w102 . . . ∂w∂e22M M K

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

∂eC1

∂w110 . . . ∂w∂e1 C1 1 N +K

. . . ∂w∂e1C1 K0

. . . ∂w1∂eC1 K N +K

∂eC1

∂w102 . . . ∂w∂e2C1 M K

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

∂eCM

∂w110 . . . ∂w∂e1 CM 1 N +K

. . . ∂w∂eCM1 K0

. . . ∂w1∂eCM K N +K

∂eCM

∂w102 . . . ∂w∂e2CM M K

(17) natomiast e(w(t)) jest wektorem błędu poszczególnych próbek na każdym neu- ronie w warstwie ostatniej

e(w) =

e11 . . . e1M e21 . . . e2M . . . eC1 . . . eCM

(18)

Elementy macierzy J (w) danej wzorem (17) są wyliczane tak samo jak w przypadku metody gradientowej najszybszego spadku. Dla pochodnych cząst- kowych funkcji błędu liczonych po wagach warstwy drugiej stosujemy wzór (6), zaś dla pochodnych cząstkowych funkcji błędu liczonych po wagach warstwy pierwszej stosujemy wzór (10).

W metodzie Gaussa – Newtona zakłada się, że wartość S(w(t)) ≈ 0, czyli

(12)

równanie (13) przyjmuje postać

w(t + 1) = w(t) − [JT(w(t))J (w(t))]−1JT(w(t))e(w(t)). (19) Wspomnianą modyfikacją Levenberga-Marquardta do metody Gaussa – Newtona jest założenie

S(w(t)) ≈ µI, (20)

gdzie µ jest parametrem algorytmu, I to macierz jednostkowa.

Po zastosowaniu modyfikacji danej równaniem (20) modyfikacja wag w me- todzie Levenberga-Marquardta wyglada następująco

w(t + 1) = w(t) − [JT(w(t))J (w(t)) + µI]−1JT(w(t))e(w(t)) (21) czyli kierunek minimalizacji d(w(t)) przyjmuje postać

d(w(t)) = −[JT(w(t))J (w(t)) + µI]−1JT(w(t))e(w(t)). (22) Parametr algorytmu µ zawiera się w przedziale (0, . . . ) i jest zmienny w trakcie uczenia. Jest on mnożony przez współczynnik β, β > 1, jeżeli przy- puszczalny następny krok zwiększa wartość błędu E danego wzorem (1) lub dzielony przez β jeżeli przypuszczalny następny krok zmniejsza tą wartość.

Można zauważyć, że kiedy µ przyjmuje ”duże” wartości, algorytm staje się metodą najszybszego spadku (z krokiem 1/µ), a dla małych wartości µ staje się algorytmem Gaussa – Newtona.

Cytaty

Powiązane dokumenty

Żeby dowiedzieć się więcej na temat tego, co dzieje się w konkretnej grupie, możesz przeprowadzić ćwiczenie – poproś uczniów, żeby wyobrazili sobie hipotetyczną

The error caused by substitution by the limit error calculated for the coverage factor 2 for the expanded uncertainty obtained from t-distribution (corresponding

Nagród się tu nie przyznaje, formą wyróżnienia jest wybór filmu jako tematu do obrad i dyskusji „okrą­.. głego stołu” - seminarium

Film „Rok diabła” jest bardzo dobry przykładem jak wprowadzanie mylnych tropów co do konwencji oraz charakteru materiałów może być elementem budującym absurd świata

[r]

Z asada nauki z nauczycielem opiera się na fakcie, że w trakcie procesu uczenia, oprócz danych w ejściow ych (sym ptom ów ) sieci, zostaje pokazany stan jej w

W metodzie Delta-Eddington energia promieniowania rozproszonego do przodu w wąskim kącie bryłowym jest sztucznie usuwana z promieniowania rozproszonego (nie dając wkładu

” Narodowy płatnik tak nisko wycenia procedurę leczenia odwykowego osób uzależnionych od nikotyny, że zamykane są kolejne poradnie antynikotynowe