Sieci neuronowe – zastosowanie, budowa

Tekst przeczytasz w: 6 minut.
Sieci neuronowe to rodzina algorytmów, coraz bardziej popularna w zadaniach z obszaru predykcji, klasyfikacji czy grupowania. Znajdują one zastosowanie w wielu branżach. Możemy wykorzystać sieci neuronowe np. do systemów kontroli produkcji, prognozowania sprzedaży oraz cen, identyfikacji wartościowych segmentów klientów, czy wykrywania niebezpiecznych ładunków na lotniskach.

Sprawdź również:

Algorytmy, o których mowa, to sztuczne sieci neuronowe (ANN, ang. Artificial Neural Networks). Ich działanie inspirowane jest naturalnymi sieciami neuronowymi, czyli po prostu układem nerwowym. Jest on zbudowany z miliardów neuronów, które tworzą ogromne sieci połączeń z innymi komórkami nerwowymi. Poprzez te połączenia, tzw. synapsy, neurony przekazują sobie sygnały, umożliwiając tym samym przetwarzanie informacji oraz generowanie odpowiednich reakcji. Najbardziej aktywne połączenia są wzmacniane, „uczą się” wykonywać określone zadania i tym samym tworzą w obrębie układu nerwowego wyspecjalizowane sieci.

Funkcjonowanie mózgu jest niedoścignionym modelem dla działania komputerów, jednak sztuczne sieci neuronowe szybko się rozwijają, co pozwala na coraz szersze ich wykorzystanie. W niektórych kwestiach mogą one być nawet bardziej efektywne od ludzkiego mózgu. Jednak takie zadania jak odróżnianie rodzajów zwierząt czy faktur materiałów może okazać się bardzo obciążające obliczeniowo, a uzyskiwane wyniki nie zawsze będą poprawne.

 

Sieci neuronowe – budowa

Podstawową jednostką sztucznych sieci neuronowych są neurony. Tworzą one w sieci co najmniej trzy warstwy.

  • Warstwa wejściowa – każda zmienna użyta w danej sieci neuronowej będzie miała odpowiadający jej neuron w tej warstwie. Neurony warstwy wejściowej przejmują jedynie wartości pojedynczej zmiennej (lub kategorii, w przypadku zmiennych jakościowych) i nie modyfikując ich, przekazują do kolejnej warstwy. 
  • Warstwa ukryta – odpowiada za odebranie wartości z poprzedniej warstwy, przetworzenie ich i przekazanie do kolejnej. Warstw ukrytych może być wiele, a ilość ich neuronów zależy od użytkownika. Im ich więcej, tym większa moc obliczeniowa i elastyczność sieci, ale rośnie też ryzyko przeuczenia się sieci.
  • Warstwa wyjściowa (wynikowa) – łączy wszystkie wartości z ostatniej warstwy ukrytej i przekazuje finalną wartość w formie jednego neuronu dla zmiennej ilościowej lub tylu neuronów, ile kategorii posiada zmienna jakościowa.

Jak jednak dokładnie tworzone są sieci w obrębie tych warstw i neuronów ich tworzących? Każdy neuron z danej warstwy połączony jest ze wszystkimi neuronami warstwy następnej. W sieciach jednokierunkowych nie występują połączenia między neuronami w ramach jednej warstwy, nie ma też możliwości wystąpienia połączenia omijającego kolejną warstwę (np. bezpośrednie połączenie między neuronami warstwy wejściowej i wyjściowej). Istnieją jednak sieci neuronowe o bardziej skomplikowanej strukturze, np. sieci rekurencyjne, dopuszczające możliwość połączeń o charakterze sprzężeń zwrotnych.

Przykład jednokierunkowej sieci neuronowej z jedną warstwą ukrytą

Rysunek 1. Przykład jednokierunkowej sieci neuronowej z jedną warstwą ukrytą

 

Działanie neuronu

Zasady działania pojedynczego neuronu zależą od jego roli w sieci neuronowej. Neurony warstwy wejściowej mają proste zadanie – przekazać wartość danej zmiennej do neuronów warstwy ukrytej. Jeśli zmienna jest ilościowa, w sieci obecny będzie jeden neuron jej odpowiadający i przyjmować będzie odpowiednią wartość liczbową, np. liczbę lat współpracy z klientem. W przypadku zmiennej jakościowej, każdej jej kategorii przypisany będzie jeden neuron, przekazujący wartość zero-jedynkowo – np. jeśli mamy klientów z trzech różnych miast (1=Kraków, 2=Warszawa, 3=Wrocław), a sieć analizować będzie przypadek klienta z Krakowa, to neuron, w którym Miasto=1 przyjmować będzie wartość 1, natomiast neurony gdzie Miasto=2 oraz Miasto=3 przyjmować będą wartość 0.

W kolejnych warstwach, czyli ukrytych oraz wyjściowej, zasady działania neuronów są nieco bardziej skomplikowane. Większość neuronów w tych warstwach łączy ze sobą wartości wejściowe z neuronów warstwy poprzedzającej i stosuje tzw. funkcję aktywacyjną do połączonych wartości wejściowych. Dodatkowo każdemu połączeniu między neuronami przypisywana jest waga – im większa, tym wartość danego neuronu bardziej wpływa na efekt końcowy, czyli finalną wartość warstwy wynikowej (rys. 2). W naszym przykładzie może okazać się, że największą wagę dla neuronów warstwy ukrytej będzie miało nie to, ile lat trwa współpraca z klientem, lecz z jakiego jest miasta, lub nawet jeszcze bardziej szczegółowo – czy klient jest z Warszawy, czy nie.

Przykładowy diagram sieci z wagami synaptycznymi

Rysunek 2. Przykładowy diagram sieci z wagami synaptycznymi

Łączenie wartości wejściowych w ramach pojedynczego neuronu odbywa się za pomocą tzw. funkcji łączącej. Jest to zazwyczaj suma wartości neuronów poprzedniej warstwy przemnożona przez odpowiadające im wagi synaptyczne.

Wartość, którą neuron przyjmie i przekaże dalej, jeśli nie jest to jeszcze warstwa wynikowa, zależy od funkcji aktywacyjnej. Najpopularniejszymi funkcjami aktywacji są np. funkcja logistyczna oraz tangens hiperboliczny.

Działanie funkcji aktywacji przedstawione jest na rysunku 3. Niebieskie koło to funkcja łącząca, wyliczana na podstawie wartości neuronów poprzedniej warstwy – x, z uwzględnieniem ich poszczególnych wag – w. Wynikiem tej funkcji jest wartość neuronu – y, która dla neuronów z kolejnej warstwy będzie stanowić jedną z wartości x.

Jeśli jednak byłby to diagram neuronu z warstwy wyjściowej, y będzie wynikiem działania całej sieci neuronowej, który otrzyma analityk.

Diagram funkcji aktywacji

Rysunek 3. Diagram funkcji aktywacji

Na rysunkach 1 i 2 można zauważyć pewien dodatkowy typ neuronu, tzw. błąd obciążony, który reprezentuje możliwość popełnienia błędu. Te neurony pojawiają się w warstwie wejściowej oraz warstwach ukrytych. Dzięki uwzględnieniu takiego obciążenia, nawet jeśli do neuronu wpłynęły informacje o sumie zerowej, przekaże on dalej pewną wartość – w tym przypadku, będzie ona równa wartości neuronu błędu poprzedniej warstwy.

 

Sieci neuronowe – uczenie się

Wróćmy do naszego przykładu z rysunku 1. Zastanówmy się, w jaki sposób sieć neuronowa może przewidywać przychód z umowy z różnymi klientami na podstawie lat współpracy oraz ich lokalizacji (Kraków, Warszawa, Wrocław). Już intuicyjnie można się domyślać, że oprócz posiadania danych dla zmiennych wejściowych, dobrze również mieć pewne dane dla zmiennej celu (z warstwy wyjściowej). Sieć neuronowa, na podstawie posiadanych informacji dotyczących charakterystyki klienta oraz tego, jaki przychód generuje współpraca z nim, będzie mogła przewidywać, na jakie przychody można liczyć z danym profilem klienta. Może to pomóc w określeniu strategii rozwoju firmy – może okazać się, że np. bardziej lukratywne będzie zadbanie o długoletnich klientów ze stolicy. Innym przykładem jej użyteczności jest przewidywanie przychodów w kolejnych latach, w zależności od tego, z jakimi klientami udało nam się nawiązać i kontynuować współpracę.

Uczenie się sieci dokonuje się poprzez korektę wag. Na początku procesu, wagi wybierane są losowo. Następnie sieć, w kolejnych krokach uczenia, koryguje wartości poszczególnych wag synaptycznych, aby zwiększyć prawdopodobieństwo poprawnego oszacowania zmiennej wynikowej, czyli zmniejszyć błąd prognozy. Proces ten może być bardzo czasochłonny, szczególnie w przypadku dużych zbiorów.

Aby jak najlepiej wykorzystać posiadane zasoby zarówno ilości posiadanych danych, jak i mocy obliczeniowej, zastosować można poniższe typy uczenia się.

  • Całym zbiorem – wagi aktualizowane są na podstawie całego zbioru danych. Ten typ najlepiej minimalizuje błąd całkowity, ale wymaga wielokrotnych powtórzeń, stąd najlepiej sprawdza się dla małych zbiorów danych.
  • Jednostkowo – wagi aktualizowane są rekord po rekordzie, czyli dla każdej obserwacji po kolei. Ten sposób najlepiej sprawdzi się w przypadku dużych zbiorów danych.
  • Podzbiorem – zbiór dzielony jest na równej wielkości podzbiory, a wagi aktualizowane są po przejściu algorytmu przez jedną grupę. Ten kompromis między pierwszym a drugim typem uczenia się zalecany jest dla zbiorów średniej wielkości.

Przeuczenie sieci neuronowych

Równie ważne, jak zoptymalizowanie uczenia się sieci, jest kontrolowanie tego, czy nie dochodzi do jej przeuczenia. Jest to sytuacja, w której sieć neuronowa tak „skupia się” na wykorzystywanym zbiorze danych, że przestaje być uniwersalna. Taka przeuczona sieć nauczy się „na pamięć” swojego pierwszego zbioru danych i w jego obrębie wyniki będzie przewidywać perfekcyjnie. Jeśli natomiast dodalibyśmy do niej nowe rekordy (w praktyce wiemy, że niekoniecznie muszą one być w pełni spójne z dotychczasowymi danymi), to przewidywanie ich wartości zmiennej celu mogłoby być zupełnie nietrafione.

Aby zapobiec takiej sytuacji, przed rozpoczęciem procesu uczenia się, dokonywany jest podział na podzbiory. Głównym zbiorem jest zbiór uczący – na jego podstawie określona zostanie ilość neuronów oraz wagi ich połączeń. Równocześnie, na podstawie zbioru testującego, weryfikowana jest ilość błędnych wyników. Z założenia, każda korekta wag po ich losowym przypisaniu, powinna skutkować mniejszą ilością popełnianych błędów, niezależnie od zbioru danych.

Jeśli w którymś momencie, spadek liczby błędów zauważalny będzie tylko w zbiorze uczącym, to znaczy, że sieć zaczyna się przeuczać, zamiast uczyć się uogólniać występujące zależności. Otrzymany model zweryfikować można na ostatnim podzbiorze – zbiorze walidacyjnym. Porównywane są tutaj przewidywane wartości z wartościami rzeczywistymi – z wykorzystaniem rekordów, które nie były wcześniej w ogóle zaangażowane w proces uczenia. W ten sposób zweryfikować można dokładność modelu. Z walidacyjnego zbioru danych można w niektórych przypadkach zrezygnować, gdyż ogranicza on liczbę danych, na których sieć może się uczyć.

 

Podsumowanie

Sztuczne sieci neuronowe są systemami przetwarzania informacji, które sprawdzą się w takich zadaniach jak predykcja, klasyfikacja czy grupowanie. Na podstawie dostarczonego zbioru danych uczą się wykonywać określone zadanie, a otrzymany w ten sposób model można później generalizować, czyli wykorzystywać na innych zbiorach z danymi zmiennymi. Istotną zaletą sieci neuronowych jest ich niewielka restrykcyjność, jeśli chodzi o charakter wykorzystywanych danych. Większa ilość danych do uczenia się jest oczywiście przez sieć preferowana, jednak można ją wykorzystać nawet do mniejszych zbiorów danych.

Zakres nadzoru nad budowaniem modelu i procesem uczenia się sieci neuronowej w dużej mierze zależy od użytkownika. Może on zdefiniować jedynie zmienne niezależne (czynniki i współzmienne) oraz zmienne zależne (celu). W razie potrzeby można jednak modyfikować takie aspekty jak podział na podzbiory, architektura sieci (ilość warstw, liczba neuronów, rodzaj funkcji aktywacji itp.), typ uczenia się, czy nawet kryteria zatrzymania (np. czas czy maksymalna liczba kroków bez zmniejszenia błędu). Tak duża elastyczność sztucznych sieci neuronowych powoduje, że ich zastosowanie jest naprawdę szerokie, co dobitnie potwierdza aktualny dynamiczny rozwój sztucznej inteligencji.


Oceń artykuł:

Udostępnij artykuł w social mediach



Zostańmy w kontakcie!

Chcesz dostawać wiadomości o nowych wpisach na blogu i webinarach z zakresu analizy danych? Zapisz się na powiadomienia e-mail.

Ustawienia dostępności
Zwiększ wysokość linii
Zwiększ odległość między literami
Wyłącz animacje
Przewodnik czytania
Czytnik
Większy kursor