Sieci neuronowe

Sieć neuronowa to połączenie elementów zwanych sztucznymi neuronami, które tworzą co najmniej trzy warstwy: wejściową, ukrytą i wyjściową, przy czym warstw ukrytych może być wiele. Neurony sieci przetwarzają informacje dzięki temu, że ich połączeniom nadaje się parametry, zwane wagami, które modyfikuje się podczas działania sieci. Modyfikowanie wag nazywane jest „uczeniem się” sieci. W procesie uczenia się sieci tkwi istota i rzeczywista wartość sieci neuronowych.

Sieci neuronowe

sn2Badania dotyczące sieci neuronowych mają swoje podstawy w badaniach neurofizjologicznych i biocybernetycznych. Matematyczny model sztucznego neuronu został opisany przez Warrena McCullocha i Waltera H. Pittsa w roku 1943. Opis ten stał się inspiracją do późniejszych badań nad sieciami neuronowymi – m.in. stanowił podstawy teoretyczne pierwszego prototypu sieci neuropodobnej, zwanego Perceptronem, zbudowanego w 1958 r. przez Arturo Rosenblatha i Charlesa Wightmana. Perceptron był urządzeniem elektromechanicznym, które miało za zadanie rozpoznawanie znaków alfanumerycznych. Składał się z 8 elementów nazywanych komórkami nerwowymi oraz 512 połączeń, które były ustalane losowo. Szybkość działania Perceptronu wynosiła 103 połączenia na sekundę. Perceptron poprawnie rozpoznawał jedynie proste znaki. Słabo radził sobie ze znakami złożonymi, miał jednak dwie bardzo ciekawe cechy. Zachowywał poprawność działania nawet wtedy, gdy część jego elementów została uszkodzona oraz „uczył” się rozpoznawania znaków w sytuacjach, gdy na wejściu pojawiały się dane cząstkowe.

Sieci neuronowePerceptron był siecią jednowarstwową. Sieci tego typu, jak wykazali M. Minsky i S. Papert (1969), miały szereg ograniczeń. Publikacja tych autorów na około dekadę wstrzymała badania nad sieciami neuropodobnymi. W drugiej połowie lat 80. zaczęto budować nieliniowe i wielowarstwowe sieci neuronowe, które nie miały ograniczeń wykazanych przez Minskego i Paperta. Rozwój technologii układów scalonych o dużej skali integracji sprawił, że budowano sieci coraz bardziej złożone, wykazujące w przypadku pewnych klas problemów zdecydowaną przewagę w stosunku do komputerów klasycznych.

Uczenie się sieci

Sieci neuronoweW procesie uczenia się sieci nie projektuje się algorytmu kolejnego przetwarzania danych wejściowych, lecz stawia się sieci przykładowe zadanie (rozpoznawanie kształtów, pisma ręcznego, twarzy, dźwięków itp.), a następnie zgodnie z założoną strategią uczenia modyfikuje się połączenia elementów sieci, a dokładniej współczynniki wagowe połączeń. Uczenie sieci nie przebiega według jednej, wybranej strategii. Jest to raczej postępowanie metodą prób i błędów. Podaje się na wejściu sieci różne wzorce, a sieć na podstawie różnicy wyniku wyjściowego w stosunku do wzorca modyfikuje wagi połączeń. Wyróżnia się dwie metody uczenia sieci:

  • uczenie nadzorowane, zwane również „uczeniem z nauczycielem”, które polega na porównaniu sygnału wyjściowego sieci ze znanymi prawidłowymi odpowiedziami,
  • uczenie bez nadzoru, zwane również „uczeniem bez nauczyciela”, które polega na tym, że sieć, na podstawie zależności w podawanych danych wejściowych, musi stworzyć własne kategorie w celu właściwego rozpoznawania sygnałów wejściowych.

Odpowiednie wytrenowanie sieci neuronowej jest kluczowym elementem jej właściwego funkcjonowania. Sieć za bardzo wytrenowana nie będzie w stanie rozpoznawać danych zbliżonych do wzorca oraz uogólniać wyników. W swoim działaniu taka sieć neuronowa będzie podobna do algorytmów klasycznych. Sieć za mało wytrenowana będzie z kolei popełniać zbyt dużo błędów, przez co użyteczność takiej sieci będzie znikoma.

Zastosowania sieci neuronowych

Sieci neuronowe znajdują zastosowania m.in. w: diagnostyce medycznej, rozpoznawaniu obrazów, mowy i pisma, kompresji danych, prognozowaniu oraz modelowaniu różnych zjawisk i procesów. Uniwersalność sieci neuronowych pozwala na ich efektywne stosowanie w technice, ekonomii i finansach, medycynie, geologii, matematyce, informatyce.

Ograniczenia sieci neuronowych

Sieci neuronowe są narzędziem bardzo użytecznym i wygodnym. Istnieje jednak szereg zagadnień, w których zastosowanie sieci neuronowych nie przynosi spodziewanych efektów np.:

  • Manipulacje na symbolach – przetwarzanie informacji w postaci symbolicznej jest bardzo trudne do przeprowadzenia przy użyciu sieci neuronowej.
  • Obliczenia, w których wymagana jest duża dokładność – sieć neuronowa daje zawsze wyniki przybliżone. Dokładność tego przybliżenia jest zadawalająca np. przy przetwarzaniu sygnałów, analizie obrazów, rozpoznawaniu mowy, prognozowaniu wartości notowań giełdowych, sterowaniu robotów. Nie jest jednak wystarczająca w przypadku precyzyjnych obliczeń inżynierskich, czy obsługi kont bankowych.
  • Zadania wymagające wieloetapowego rozumowania - sieci neuronowe na ogół usiłują rozwiązywać problemy jednokrokowo. Jeśli istnieje konieczność przeprowadzenia ciągu rozumowań, sieci neuronowe są nieprzydatne, a wszelkie próby ich zastosowań w tym zakresie prowadziły do niepowodzeń.

 

Projekt SyNAPSE

Mikroprocesory stosowane we współczesnych komputerach nie są w stanie samodzielnie uczyć się i rozwijać. Każda funkcja wykonywana przez mikroprocesor musi być zaprogramowana przez ludzkiego programistę. W niedługim czasie sytuacja może ulec radykalnej zmianie.

W roku 2008 firma IBM oraz agencja DARPA (USA) rozpoczęły projekt SyNAPSE, który ma na celu stworzenie neurokomputera, który działałby podobne jak ludzki mózg. W roku 2011 firma IBM zaprezentowała mikroprocesor nowej generacji (są to tzw. układy neuromorficzne) złożony z 256 neuronów, 262144 synaps i 256 aksonów. W roku 2014 zaprezentowano drugą generację mikroprocesora.

Sieci neuronowe

Mikroprocesor drugiej generacji (chip o nazwie TrueNorth) charakteryzuje się następującymi parametrami:

  • 1 000 000 programowalnych neuronów,
  • 256 000 000 programowalnych synaps,
  • 4096 neurosynaptycznych rdzeni,
  • 5 400 000 000 tranzystorów,
  • 400 000 000 000 operacji synaptycznych na sekundę,
  • 72 mW (miliwatów) zapotrzebowania na energię, przy maksymalnym obciążeniu.

 

Ludzki mózg składa się z ok. 10 miliardów neuronów oraz 10 bilionów synaps. Jak zapowiada Dharmendra Modha (menadżer IBM cognitive computing initiative), finalnym osiągnięciem projektu SyNAPSE powinno być zbudowanie mózgu w pudełku, który miałby:

  • objętość nie większą niż 2 dcm3,
  • 100 trylionów połączeń synaptycznych,
  • zapotrzebowanie na energię nie większe niż 1kW (kilowat).

 

Sieci neuronowe są bardzo użytecznym narzędziem w wielu zastosowaniach, nie są jednak tak uniwersalne, jak klasyczne komputery. Jak pisze Ryszard Tadeusiewicz „… entuzjastom łatwo jest wskazać zadania, których rozwiązania za pomocą sieci okazały się znacząco lepsze, niż rozwiązania uzyskane przez klasyczne komputery, zaś malkontenci bez trudu wskażą zadania, dla których rozwiązania wykorzystujące sieci okazały się groteskowo niepoprawne. Prawda, jak zwykle, leży pośrodku”.

Warto przeczytać:

  1. R. A. Kosiński, Sztuczne sieci neuronowe, WNT, 2015.
  2. R. Tadeusiewicz (red.), Wprowadzenie do sieci neuronowych, Kraków, 2001.
  3. R. Tadeusiewicz, B. Leper, B. Borowik, T. Gąciarz, Odkrywanie właściwości sieci neuronowych: przy użyciu programów w języku C#, Wydawnictwo PAU, 2007.
  4. R. Tadeusiewicz, Sieci neuronowe.
  5. E. Gately, Sieci neuronowe, WIG PRESS, 1999.
  6. D. Rutkowska, M. Piliński, L. Rutkowski, Sieci neuronowe, algorytmy genetyczne i systemy rozmyte, PWN, 1997.

Warto obejrzeć:
https://www.youtube.com/watch?v=puRpCawSzSg
https://www.coursera.org/course/neuralnets
https://www.youtube.com/watch?v=DG5-UyRBQD4
https://www.youtube.com/watch?v=gcK_5x2KsLA