Sieci neuronowe

menu icon

Sieci neuronowe

Sieci neuronowe odzwierciedlają zachowanie ludzkiego mózgu, umożliwiając programom komputerowym rozpoznawanie wzorców i rozwiązywanie typowych problemów w dziedzinach sztucznej inteligencji, uczenia maszynowego i głębokiego uczenia.

Czym są sieci neuronowe?

Sieci neuronowe, znane również jako sztuczne sieci neuronowe (ANN) lub symulowane sieci neuronowe (SNN) są częścią funkcji uczenia maszynowego i stanowią podstawę algorytmów uczenia głębokiego. Ich nazwa i struktura są wzorowane na ludzkim mózgu i naśladują sposób, w jaki biologiczne neurony komunikują się między sobą.

Sztuczne sieci neuronowe (ANN) składają się z warstw węzłów, obejmujących warstwę wejściową, jedną lub więcej warstw ukrytych oraz warstwę wyjściową. Każdy węzeł (sztuczny neuron) łączy się z innym i ma powiązaną wagę oraz próg. Jeśli wyjście dowolnego pojedynczego węzła przekracza określoną wartość progową, węzeł ten jest aktywowany podczas wysyłania danych do kolejnej warstwy sieci. W przeciwnym razie żadne dane nie są przekazywane do następnej warstwy sieci.

Schemat wizualny warstwy wejściowej, warstw ukrytych i warstwy wyjściowej jednokierunkowej sieci neuronowej

Sieci neuronowe opierają się na danych szkoleniowych, aby z upływem czasu uczyć się i poprawiać swoją dokładność. Gdy już ją osiągną, stają się potężnym narzędziem wykorzystywanym w informatyce i mechanizmach sztucznej inteligencji, które umożliwia błyskawiczne klasyfikowanie i podział danych na klastry. Zadania, takie jak rozpoznawanie mowy czy obrazów, trwają wtedy zaledwie kilka minut w porównaniu z godzinami identyfikacji przeprowadzanej odręcznie przez ekspertów. Jedną z najbardziej znanych sieci neuronowych jest algorytm wyszukiwania Google.

Jak działają sieci neuronowe?

O każdym pojedynczym węźle należy myśleć jak o modelu regresji liniowej złożonym z danych wejściowych, wag, odchyleń (lub wartości progowych) i danych wyjściowych. Formuła wyglądałby mniej więcej tak:

Formuła matematyczna służąca do sumowania

∑wixi + obciążenie = w1x1 + w2x2 + w3x3 + obciążenie

Formuła matematyczna używana do określenia danych wyjściowych

wyjście = f(x) = 1 jeśli ∑w1x1 + b> = 0; 0 jeśli ∑w1x1 + b < 0

Po określeniu warstwy wejściowej przypisywane są wagi. Wagi te pomagają określić znaczenie każdej zmiennej, przy czym większe z nich mają większy wpływ na wynik wyjściowy w porównaniu do innych danych wejściowych. Wszystkie dane wejściowe są następnie mnożone przez swoje odpowiednie wagi, a potem sumowane. Następnie wyniki są przepuszczane przez funkcję aktywacji, która określa wartość wyjściową. Jeśli wartość wyjściowa przekroczy dany próg, to „wyzwoli” (lub aktywuje) węzeł, który przekaże dane do następnej warstwy w sieci. W ten sposób dane wyjściowe jednego węzła stają się danymi wejściowymi kolejnego węzła. Ten proces przekazywania danych z jednej warstwy do następnej definiuje sieć neuronową jako sieć jednokierunkową (feedforward).

Zobaczmy, jak może wyglądać pojedynczy węzeł, korzystając z wartości binarnych. Możemy zastosować tę koncepcję do bardziej namacalnego przykładu, np. czy mam dzisiaj pójść surfować (Tak: 1, Nie: 0). Decyzja o tym, czy iść, czy nie iść jest naszym przewidywanym wynikiem, czyli wartością y-hat. Załóżmy, że istnieją trzy czynniki wpływające na podjęcie decyzji:

  1. Czy są dziś dobre fale? (Tak: 1, Nie: 0)
  2. Czy line-up jest pusty? (Tak: 1, Nie: 0)
  3. Czy ostatnio miał miejsce atak rekina? (Tak: 0, Nie: 1)

Następnie przyjmijmy następujące założenia, dające nam następujące dane wejściowe:

  • X1 = 1, ponieważ są dzisiaj fale
  • X2 = 0, ponieważ nie ma tłumów
  • X3 = 1, ponieważ ostatnio nie było ataku rekina

Teraz musimy przypisać pewne wagi, aby określić ważność każdej zmiennej. Większe wagi oznaczają, że konkretne zmienne mają większe znaczenie dla decyzji lub wyniku.

  • W1 = 5, ponieważ duże fale nie pojawiają się często
  • W2 = 2, ponieważ nie przeszkadzają Ci tłumy
  • W3 = 4, ponieważ boisz się rekinów

Na koniec, przyjmijmy również wartość progową 3, co przełoży się na wartość obciążenia równą -3. Mając wszystkie dane wejściowe, możemy zacząć wstawiać wartości do formuły, aby uzyskać pożądany wynik.

Y-hat = (1*5) + (0*2) + (1*4) - 3 = 6

Jeśli użyjemy funkcji aktywacji, wspomnianej na początku tego artykułu, możemy stwierdzić, że wynik na wyjściu tego węzła wyniesie 1, ponieważ 6 jest większe niż 0. W tym przypadku pójdziesz surfować; ale jeśli zmodyfikujemy wagi lub próg, możemy uzyskać różne wyniki z tego modelu. Kiedy obserwujemy jedną decyzję, tak jak w powyższym przykładzie, widzimy, jak sieć neuronowa może podejmować coraz bardziej złożone decyzje w zależności od wyników z poprzednich decyzji lub warstw.

W powyższym przykładzie użyliśmy perceptronów, aby zilustrować niektóre elementy matematyki mające tutaj zastosowanie, ale sieci neuronowe wykorzystują neurony sigmoidalne, które wyróżniają się tym, że mają wartości z przedziału od 0 do 1. Ponieważ sieci neuronowe zachowują się podobnie do drzew decyzyjnych, kaskadując dane z jednego węzła do drugiego, posiadanie x wartości z przedziału od 0 do 1 zmniejsza wpływ dowolnej zmiany w pojedynczej zmiennej na wynik wyjściowy dowolnego węzła, a tym samym na wynik wyjściowy sieci neuronowej.

Kiedy zaczynamy myśleć o bardziej praktycznych przypadkach użycia sieci neuronowych, takich jak rozpoznawanie obrazów lub klasyfikacja, do szkolenia algorytmu będziemy wykorzystywać uczenie nadzorowane, czyli zestawy danych z etykietami. Podczas szkolenia modelu będziemy chcieli ocenić jego dokładność, korzystając z funkcji celu (lub straty). Jest ona również powszechnie nazywana błędem średniokwadratowym (MSE). W poniższym równaniu:

  • i oznacza indeks próbki,
  • y-hat to przewidywany wynik,
  • y to wartość bieżąca, a
  • m to ilość próbek.
Formuła matematyczna używana do określania funkcji celu

Funkcja celu = 𝑀𝑆𝐸 =1/2𝑚 ∑129_(𝑖 =1)^𝑚▒(𝑦 ̂^((𝑖) )−𝑦^((𝑖) ) )^2

Ostatecznie dążymy do minimalizacji naszej funkcji celu, aby zapewnić poprawność dopasowania dla danej obserwacji. W miarę jak model dostosowuje swoje wagi i obciążenie, wykorzystuje on funkcję celu i uczenie przez wzmacnianie, aby osiągnąć punkt zbieżności, czyli lokalne minimum. Proces, w którym algorytm dostosowuje swoje wagi odbywa się poprzez spadek gradientu, co pozwala modelowi określić kierunek, w którym należy podążać, aby zredukować błędy (lub zminimalizować funkcję celu). Z każdym szkoleniem parametry modelu dostosowują się, aby stopniowo zbiegać do minimum.

Wykres liniowy ilustrujący punkt zbieżności

Więcej informacji na temat koncepcji związanych z sieciami neuronowymi zawiera artykuł w serwisie IBM Developer.

Większość głębokich sieci neuronowych jest sieciami jednokierunkowymi (feedforward), co oznacza, że przepływają one tylko w jednym kierunku: od wejścia do wyjścia. Można jednak również szkolić model poprzez wsteczną propagację; to znaczy, poruszać się w przeciwnym kierunku: od wyjścia do wejścia. Propagacja wsteczna pozwala nam obliczyć i przyporządkować błąd związany z każdym neuronem, co pozwala nam odpowiednio dostosować i dopasować parametry modelu/modeli.

Rodzaje sieci neuronowych

Sieci neuronowe mogą być klasyfikowane na różne typy, które są wykorzystywane do różnych celów. Poniższa lista nie jest wprawdzie pełna, jednak jest reprezentatywna i przedstawia najczęstsze typy sieci neuronowych, które można napotkać w powszechnym użyciu:

Najstarszą siecią neuronową jest perceptron, stworzony przez Franka Rosenblatta w 1958 roku. Ma on jeden neuron i jest najprostszą formą sieci neuronowej:

Prosty schemat perceptronu z liniami i niebieskim kołem

Sieci neuronowe jednokierunkowe, czyli perceptrony wielowarstwowe (MLP), są tym, na czym przede wszystkim skupiamy się w tym artykule. Składają się one z warstwy wejściowej, warstwy lub warstw ukrytych oraz warstwy wyjściowej. Chociaż te sieci neuronowe są również powszechnie określane mianem MLP, należy pamiętać, że w rzeczywistości składają się one z neuronów sigmoidalnych, a nie perceptronów, ponieważ większość problemów w świecie rzeczywistym jest nieliniowa. Do trenowania tych modeli wykorzystuje się dane. Stanowią one podstawę widzenia komputerowego, przetwarzania języka naturalnego i innych sieci neuronowych.

Konwolucyjne sieci neuronowe (CNN) są podobne do sieci jednokierunkowych, ale są one zazwyczaj wykorzystywane do rozpoznawania obrazów, rozpoznawania wzorców i/lub widzenia komputerowego. Sieci te wykorzystują zasady algebry liniowej, a w szczególności mnożenie macierzy, do identyfikacji wzorców w obrazie.

Rekurencyjne sieci neuronowe (RNN) wyróżnia się w oparciu o pętle informacji zwrotnych. Te algorytmy uczenia się są stosowane głównie przy wykorzystywaniu danych szeregów czasowych do przewidywania przyszłych wyników, takich jak przewidywania notowań giełdowych czy prognozowanie sprzedaży.

Sieci neuronowe a głębokie uczenie

Określenia „głębokie uczenie" i „sieci neuronowe" są często używane zamiennie, co może być mylące. Warto więc zauważyć, że słowo „głęboki” w „głębokim uczeniu” odnosi się jedynie do głębokości warstw w sieci neuronowej. Sieć neuronowa, która składa się z więcej niż trzech warstw — obejmujących wejścia i wyjścia — może być uznana za algorytm głębokiego uczenia. Sieć neuronowa, która ma tylko dwie lub trzy warstwy, to zaledwie podstawowa sieć neuronowa.

Więcej informacji na temat różnic między sieciami neuronowymi a innymi formami sztucznej inteligencji, takimi jak uczenie maszynowe, zawiera wpis na blogu „AI vs. uczenie maszynowe vs. uczenie głębokie vs. sieci neuronowe: jaka jest różnica?

Historia sieci neuronowych

Historia sieci neuronowych jest dłuższa, niż wydaje się większości ludzi. Wprawdzie koncepcja „maszyny, która myśli” wywodzi się już od starożytnych Greków, my jednak skupimy się na kluczowych wydarzeniach, które doprowadziły do ewolucji myślenia o sieciach neuronowych, których popularność ulegała dużym zmianom na przestrzeni lat:

1943: Warren S. McCulloch i Walter Pitts opublikowali badanie „A logical calculus of the ideas immanent in nervous activity” (PDF, 1 MB) (odsyłacz prowadzi poza serwis IBM). Jego celem było zrozumienie sposobu, w jaki ludzki mózg tworzy złożone wzorce dzięki połączonym komórkom mózgowym — neuronom. Jedną z głównych idei, które wyłoniły się w efekcie tej pracy, było porównanie neuronów z progiem binarnym do logiki boolowskiej (tj. stwierdzeń prawda/fałsz lub 0/1).

1958: Frank Rosenblatt opracował pojęcie perceptronu i udokumentował je w swoim badaniu „The Perceptron: A Probabilistic Model for Information Storage and Organization in the Brain” (PDF, 1,6 MB) (odsyłacz prowadzi poza serwis IBM). Posunął się on o krok dalej w stosunku do pracy McCullocha i Pitta, wprowadzając do równania wagi. Posługując się komputerem IBM 704, Rosenblatt był w stanie sprawić, by komputer nauczył się rozróżniać karty zaznaczone po lewej stronie od kart zaznaczonych po prawej.

1974: Temat wstecznej propagacji był poruszany przez wielu badaczy, jednak Paul Werbos jako pierwszy w USA odnotował jej zastosowanie w sieciach neuronowych w swojej pracy doktorskiej (PDF, 8,1 MB) (odsyłacz prowadzi poza serwis IBM).

1989: Yann LeCun opublikował artykuł (PDF, 5,7 MB) (odsyłacz prowadzi poza serwis IBM) ilustrujący sposób, w jaki wykorzystanie ograniczeń w wstecznej propagacji i jej integracja z architekturą sieci neuronowych mogą zostać wykorzystane do trenowania algorytmów. Badanie to z powodzeniem wykorzystało sieć neuronową do rozpoznawania cyfr kodu pocztowego pisanych ręcznie na przesyłkach dostarczanych przez Urząd pocztowy Stanów Zjednoczonych.

Sieci neuronowe i IBM Cloud

Od kilku dekad IBM przoduje w dziedzinie rozwoju technologii AI i sieci neuronowych, co potwierdza opracowanie i rozwijanie produktu IBM Watson. Rozwiązanie Watson jest cenione przez organizacje pragnące wdrożyć zaawansowane funkcje przetwarzania języka naturalnego i techniki uczenia głębokiego w swoich systemach z wykorzystaniem sprawdzonej strategii implementacji mechanizmów AI.

Watson wykorzystuje strukturę Apache UIMA (architektura zarządzania informacjami bez określonej struktury) oraz oprogramowanie IBM DeepQA, aby udostępnić aplikacjom potężne możliwości głębokiego uczenia. Dzięki wykorzystaniu takich narzędzi jak IBM Watson Studio, Twoje przedsiębiorstwo z łatwością przeniesie otwarte projekty AI do fazy produkcyjnej, jednocześnie wdrażając i uruchamiając modele w dowolnej chmurze.

Sprawdź, jak rozpocząć pracę z technologią uczenia głębokiego w ramach usług IBM Watson Studio i Deep Learning.

Zarejestruj się, aby uzyskać IBMid i utworzyć konto w chmurze IBM Cloud.