W majowym numerze Projektowania i Konstrukcji Inżynierskich przedstawiałem algorytmy ewolucyjne jako jedno z narzędzi sztucznej inteligencji, czy też raczej „inteligencji obliczeniowej” przydatne w pracy inżyniera. Wspomniałem wtedy również o tym, że algorytmy ewolucyjne nie są jedyną, z tzw. miękkich metod obliczeń, godną zainteresowania.
Sztuczne sieci neuronowe zostały stworzone na potrzeby nauk biologicznych. Modele matematyczne miały symulować działanie rzeczywistych neuronów i pomóc w lepszym zrozumieniu działania mózgu. Jak to jednak często bywa, coś, co zostało stworzone na potrzeby wąskiej dziedziny wiedzy, zupełnie przypadkiem okazało się wynalazkiem mogącym zainteresować wielu ludzi z różnych dziedzin – od przemysłu, poprzez ekonomię i branżę IT, aż po producentów urządzeń szpiegowskich. Dzięki swoim zaletom – umiejętności generalizacji problemów i aproksymacji – sztuczne sieci neuronowe są, moim zdaniem, narzędziem wartym poświęcenia uwagi.
Układ nerwowy człowieka składa się z około 100 miliardów neuronów różnego typu. Każdy neuron za pomocą dendrytów może być połączony z innymi neuronami. Neurony mają różne kształty oraz właściwości i mogą spełniać różne funkcje w układzie nerwowym. Typowy neuron składa się z ciała komórkowego, jądra oraz wypustek nazywanych dendrytami. Jedna z wypustek jest grubsza i jest nazywana aksonem. Dendryty to „wejścia” do neuronu – to przez nie komórka otrzymuje sygnały od innych komórek nerwowych, przetwarza je, a następnie przesyła dalej za pomocą jednego aksonu. Tak więc neuron jest obiektem przetwarzającym sygnały wejściowe w jeden sygnał wyjściowy. Tak też działa jeden z podstawowych modeli matematycznych jakim jest neuron McCullocha i Pittsa wprowadzony w 1943 roku. Oblicza on sumę ważoną sygnałów wejściowych od innych neuronów i daje na wyjściu wartość 1 lub 0 w zależności od tego, czy suma przekroczyła ustaloną wartość progową, czy też nie.

W przypadku neuronu McCullocha i Pittsa aby nastąpiła aktywacja neuronu suma ważona wejść do neuronu musi osiągnąć lub przekroczyć wartość progową. Stosowane są różne rodzaje funkcji aktywacji – liniowe oraz nieliniowe. Najbardziej popularne są sieci, których neurony posiadają funkcję aktywacji będącą nieliniową, monotoniczną, rosnącą funkcją rzeczywistą.

Neurony w organizmach żywych połączone są ze sobą w ogromny i skomplikowany system nerwowy. Pragnieniem naukowców zajmujących się badaniem działania układów nerwowych było stworzenie sztucznego systemu składającego się z wielu połączonych ze sobą sztucznych neuronów. Początkowo sztuczne sieci neuronowe były jak najbardziej rzeczywiste – sztuczne neurony były ze sobą połączone drucikami, tak, że sztuczna sieć neuronowa stanowiła jedną wielką plątaninę kabli. Tworzenie takiego „mózgu elektronowego” było pracochłonne i obarczone dużym ryzykiem popełnienia błędu. Stąd też ten obszar działalności stanowił jedynie domenę kilku pasjonatów. Nikt nie przewidywał, że badania nad sztucznymi sieciami neuronowymi przestaną być zabawą szaleńców i że same sieci neuronowe znajdą się w centrum zainteresowania informatyków, ekonomistów oraz inżynierów. A stało się tak na skutek wynalezienia mikroprocesora i komputerów osobistych. W dowolnym języku oprogramowania można było tworzyć neurony o dowolnych funkcjach aktywacji i łączyć je w sztuczne (teraz już raczej „wirtualne”) sieci neuronowe o najprzeróżniejszej architekturze. Najpopularniejsze i najlepiej poznane są sieci jednokomórkowe wielowarstwowe o sigmoidalnych funkcjach aktywacji.

Są one złożone z warstw, między którymi komunikacja zachodzi tylko w jednym kierunku. Neurony w warstwie nie są połączone ze sobą, a jedynie z neuronami warstwy poprzedniej i następnej. Przepływ sygnałów następuje tylko w jednym kierunku.
Sieci takie składają się z warstwy wejściowej, jednej lub kilku warstw ukrytych oraz warstwy wyjściowej. Neurony warstwy wejściowej posiadają najczęściej liniową funkcję aktywacji i służą jedynie do przekazania informacji wejściowej dalej w głąb sieci. W neuronach warstw ukrytych oraz warstwy wyjściowej następuje właściwe przetwarzanie danych podanych na wejście. Sieci te są bardzo popularne, głównie ze względu na ich prostotę, oraz ponieważ metody ich uczenia są łatwe do zrealizowania w praktyce. Stworzenie sztucznej sieci neuronowej nie jest trudne. Nie trzeba nawet znać żadnego języka oprogramowania, wystarczy wykorzystać jeden z wielu komercyjnych lub całkowicie darmowych programów dostępnych w internecie. Cała sztuka polega na takim dobraniu parametrów sieci neuronowej, aby było możliwe zastosowanie jej do rozwiązania interesującego nas problemu. Najłatwiej jest to jednak wytłumaczyć na przykładzie.
Jednokierunkową sieć neuronową o dwóch warstwach ukrytych wykorzystano do aproksymacji wytrzymałości zmęczeniowej wału dwustronnie zginanego z karbem w zależności od rodzaju materiału z którego wykonany był wał. Na wejście sieci podawano własności mechaniczne materiału, wymiary karbu, geometrię wału oraz przyłożony moment gnący. Na wyjściu sieci oczekiwano predykcji dotyczącej liczby cykli potrzebnej do złamania wału.

Rysunek 5 przedstawia wynik predykcji wytrzymałości zmęczeniowej, w zależności od wartości przyłożonego momentu i rodzaju użytego materiału. Czerwoną linią zaznaczono odpowiedź sieci neuronowej natomiast punkty na wykresie oznaczają wyniki testów przeprowadzonych w celu weryfikacji zgodności działania sieci. Można zauważyć, że odpowiedź sieci neuronowej mieści się wewnątrz obszaru pokrytego przez wyniki rzeczywistych testów.

W przedstawianym zadaniu wykorzystano zdolności generalizacji i aproksymacji sztucznych sieci neuronowych. Jeden z etapów tworzenia sieci to jej tzw. „trenowanie”. Proces ten polega na podawaniu na wejście pewnych danych – w tym konkretnym przypadku były to dane materiałowe, geometryczne oraz warunki obciążenia – i takiej zmianie parametrów sieci, aby uzyskać na jej wyjściu pożądaną wartość. Odpowiedź sieci na zadany wektor wartości wejściowych jest porównywana z wartością pożądaną. Jeżeli odpowiedź jest poprawna to nie ma podstaw do wprowadzania zmian parametrów sieci. W przeciwnym przypadku należy zmienić wartości parametrów w taki sposób, aby zmniejszyć lub całkowicie zredukować błąd sieci. Błąd sieci jest to różnica pomiędzy wartościami sygnału oczekiwanego oraz sygnału uzyskanego na wyjściu sieci. Czyli, przedstawiając problem bardziej obrazowo, zadaniem sieci podczas procesu trenowania było „nauczenie się” lub inaczej „zapamiętanie” „pokazywanych” jej przykładów. Trenowanie sieci – zmiana jej parametrów – odbywa się automatycznie i jedynym zadaniem użytkownika jest przygotowanie odpowiedniej, reprezentatywnej grupy przykładów wykorzystanych do trenowania. Kilka krzywych zmęczeniowych wybranych do wytrenowania omawianej sieci zostało pokazanych na rysunku 6. Należy zwrócić uwagę, żeby do testowania sieci (sprawdzania poprawności jej działania) wziąć wyniki testów rzeczywistych, które nigdy wcześniej nie zostały użyte w procesie trenowania sieci. Tylko w ten sposób można ocenić jej zdolność aproksymacji.

Wspomniałem, że zadaniem użytkownika jest „jedynie” przygotowanie danych potrzebnych do wytrenowania i przetestowania sztucznej sieci neuronowej. W zasadzie można powiedzieć, że całe zachowanie sieci neuronowej zależy od jej architektury oraz zbioru parametrów dobieranych w procesie uczenia. Sztuczne sieci neuronowe posiadają zdolność aproksymacji, nie potrafią jednak skutecznie działać poza obszarem pokazanym podczas procesu testowania. W dużym uproszczeniu można więc powiedzieć, że sztuczna sieć neuronowa będzie dobrze działała w obszarze pomiędzy np. krzywą jasnozieloną i jasnoniebieską (Rys. 6), ale jest bardzo prawdopodobne, że nie będzie możliwe uzyskanie prawidłowych wyników dla obszaru powyżej linii jasnozielonej i poniżej linii jasnoniebieskiej.
I to jest właśnie główna wada jednokierunkowych wielowarstwowych sztucznych sieci neuronowych – są one bardzo wrażliwe na liczbę i rodzaj przykładów użytych podczas trenowania sieci. Zalet jest jednak wiele. Po pierwsze łatwość tworzenia – budowania sieci. Ta sama architektura może zostać wykorzystana zarówno przez inżyniera elektronika, jak i przez ekonomistę. Wszystko zależy jedynie od rodzaju problemów użytych do trenowania sieci. Taką samą sieć (o takiej samej budowie i strukturze) można wykorzystać do aproksymacji krzywych zmęczeniowych lub do próby przewidywania wartości częstości drgań własnych wału. Jedyna różnica będzie tkwiła wewnątrz sieci – w wartościach jej parametrów i w kształcie funkcji aktywacji, które zostały dobrane w procesie trenowania.
Kolejna zaleta to „pamięć” sieci. Nic nie stoi na przeszkodzie aby w dowolnym momencie „nauczyć” sieć nowych, dodatkowych, przykładów (np. wznowić proces trenowania z dodatkowymi krzywymi zmęczeniowymi). Jeżeli proces trenowania zostanie przeprowadzony poprawnie parametry sieci neuronowej zostaną zaktualizowane o nowe dane, bez jednoczesnej utraty informacji o poprzednich etapach trenowania. Sieć neuronowa to nie tylko narzędzie służące do aproksymacji, odpowiednio wytrenowana może służyć jako klasyfikator, pozwalający ocenić np. stopień zniszczenia powłoki lakierniczej lub stopień zanieczyszczenia jakiejś cieczy. Sieć neuronowa może również znaleźć zastosowanie w rozpoznawaniu obrazów – czytanie pisma odręcznego, kodów pocztowych itp. Za wszystkimi tymi aplikacjami stoi człowiek; jego wiedza i doświadczenie mają wpływ na przygotowanie zbiorów potrzebnych do wytrenowania i przetestowania sieci, a od sposobu w jaki sieć została wytrenowana zależy sukces lub ewentualna porażka przedsięwzięcia.
Antoni Skrobol
artykuł pochodzi z wydania 7/8 (22/23) lipiec/sierpień 2009