Jak stworzyć sieć neuronową: architektura, parametry i kod

Opublikowany: 2021-02-12

Sieci neuronowe, jak sama nazwa wskazuje, to obwody neuronów. Istnieją różne rodzaje sieci neuronowych. Biologiczne sieci neuronowe składają się z prawdziwych neuronów biologicznych. Natomiast sztuczne sieci neuronowe (ANN) to system oparty na biologicznej sieci neuronowej, takiej jak obecna w mózgu. Szacunkowa liczba neuronów w mózgu wynosi około 100 miliardów, które komunikują się za pomocą sygnałów elektrochemicznych.

SSN próbuje odtworzyć złożoność obliczeniową obecną w neuronach biologicznych, ale nie jest ona tak porównywalna i są to znacznie prostsze i niezłożone wersje biologicznych sieci neuronowych. W tym artykule zrozumiemy strukturę SNN i nauczymy się tworzyć sieć neuronową za pomocą Pythona.

Spis treści

Architektura sieci neuronowych

Sztuczna sieć neuronowa składa się ze sztucznych neuronów, które są również nazywane „węzłami”. Węzły te są ze sobą połączone w taki sposób, że tworzona jest sieć lub siatka. Siła tych połączeń jest przypisywana do wartości. Ta wartość mieści się w zakresie od -1 do 1.

Jeśli wartość połączenia jest wysoka, oznacza to silne połączenie między tymi węzłami. Każdy węzeł ma swoją charakterystyczną funkcję. Zmiana tej funkcji zmieni zachowanie i złożoność sieci neuronowej. Istnieją trzy typy neuronów w SSN, węzłach wejściowych, ukrytych węzłach i węzłach wyjściowych, jak pokazano poniżej:

Źródło

Węzeł wejściowy jest odpowiedzialny za odbieranie informacji, które zazwyczaj mają postać wartości liczbowych lub wyrażeń. Informacje prezentowane są w postaci wartości aktywacji, gdzie każdemu węzłowi nadawany jest numer, im wyższy numer, tym większa aktywacja.
Informacje są dalej przekazywane w sieci. Informacje są przekazywane z neuronu do neuronu na podstawie wag połączeń węzła i funkcji aktywacji dotyczącej poszczególnych neuronów w określonych warstwach. Każdy z węzłów dodaje wartości aktywacji przy odbiorze, wartości są modyfikowane na podstawie transmitancji.
Informacje przepływają przez sieć, przez ukryte warstwy, aż dotrą do węzłów wyjściowych. Węzły wyjściowe są bardzo ważne, ponieważ odzwierciedlają dane wejściowe w znaczący sposób w świecie zewnętrznym. Widać tu niesamowity aspekt sieci neuronowych, który prowadzi do dostosowania wag dla każdej warstwy i węzłów.

Różnica między wartością przewidywaną a wartością rzeczywistą (błąd) będzie propagowana wstecz. Sieć neuronowa będzie zatem uczyć się na popełnionych błędach i spróbuje dostosować wagi na podstawie wyznaczonego podejścia do szybkości uczenia się.

Dlatego dostosowując parametry, takie jak liczba ukrytych warstw, liczba neuronów na warstwę, strategia aktualizacji wagi i funkcja aktywacji, możemy stworzyć sieć neuronową.

Zdefiniuj parametry

Funkcja aktywacji

Do wyboru są różne funkcje aktywacji, które można wykorzystać w sieci neuronowej w zależności od problemu.

Funkcje aktywacji to matematyczne równania, które posiada każdy neuron. Określa wyjście sieci neuronowej.
Ta funkcja aktywacji jest dołączona do każdego neuronu w sieci i określa, czy powinien być aktywowany, czy nie, co opiera się na tym, czy aktywacja tego konkretnego neuronu pomaga w wyprowadzeniu odpowiednich prognoz w warstwie wyjściowej. Różne warstwy mogą mieć przypisane różne funkcje aktywacji. Funkcje aktywacji pomagają również znormalizować wyjście każdego neuronu do zakresu od 1 do 0 lub od -1 do 1.

Nowoczesne sieci neuronowe wykorzystują ważną technikę zwaną propagacją wsteczną do trenowania modelu poprzez dostosowanie wag, co powoduje zwiększone obciążenie obliczeniowe funkcji aktywacji i jej funkcji pochodnej.

Działanie funkcji aktywacji
Brakujący link

Istnieją 3 rodzaje funkcji aktywacji:
Binarny- x<0 y=0 , x>0 y=1
Liniowy- x=y
Nieliniowe – różne typy: Sigmoid, TanH, Logistic, ReLU, Softmax itp.

Źródło: Blog

Typ: ReLU
Brakujący link

Algorytm

Istnieje wiele rodzajów sieci neuronowych, ale często dzieli się je na sieci ze sprzężeniem do przodu i ze sprzężeniem zwrotnym (propagacja wsteczna).

1) Sieć przekazu do przodu to nie powtarzająca się sieć, która zawiera wejścia, wyjścia i warstwy ukryte; ponieważ sygnały mogą poruszać się tylko w jednym kierunku. Dane wejściowe są przekazywane do warstwy sprzętu przetwarzającego, gdzie wykonuje obliczenia. Każdy współczynnik przetwarzania dokonuje obliczeń na podstawie wagi danych wejściowych. Obliczane są nowe wartości, a następnie nowe wartości wejściowe zasilają kolejną warstwę.

Ten proces trwa, dopóki nie przejdzie przez wszystkie warstwy i nie określi wyniku. Funkcja transferu limitu jest czasami używana do pomiaru wyjścia neuronowego w warstwie wyjściowej. Sieci Feed Forward są znane i obejmują sieci Perceptron (bezpośrednie i pośrednie). Sieci typu feed-forward są często wykorzystywane do eksploracji danych.

2) Sieć sprzężenia zwrotnego (np. rekurencyjna sieć neuronowa lub RNN) ma mechanizmy retrospektywne, co oznacza, że ​​mogą mieć sygnały poruszające się w obu kierunkach za pomocą pułapek/pętli. Dozwolona jest wszelka możliwa komunikacja między neuronami.

Ponieważ pętle są obecne w tego typu sieciach, staje się ona systemem nieliniowym, który nieustannie się zmienia, aż do osiągnięcia stanu stabilności. Sieci sprzężenia zwrotnego są często używane do pamięci związanych z problemami z wydajnością, gdy sieć poszukuje dobrego zestawu połączonych obiektów.

Szkolenie

Przejście sprzężenia do przodu oznacza dane wejściowe i wagi, w jaki sposób obliczane są dane wyjściowe. Po zakończeniu treningu uruchamiamy tylko podanie do przodu, aby uzyskać prognozy.

Ale najpierw musieliśmy wytrenować nasz model, aby naprawdę nauczyć się ciężarów, dlatego procedura treningowa działa w następujący sposób:

  1. Losowo wybierz i zainicjuj wagi dla wszystkich węzłów. Istnieją metody inteligentnej inicjalizacji wbudowane w TensorFlow i Keras (Python).
  2. Dla każdego przykładu uczącego wykonaj podanie do przodu przy użyciu obecnych wag i oblicz wynik każdego węzła przechodzącego od lewej do prawej. Ostatecznym wynikiem jest wartość ostatniego węzła.
  3. Porównaj wynik końcowy z rzeczywistym celem w danych treningowych i zmierz błąd za pomocą funkcji straty.
  4. Wykonaj przejście wstecz od prawej do lewej i propaguj błąd obliczony w ostatnim kroku do każdego pojedynczego węzła za pomocą propagacji wstecznej.
  5. Oblicz wkład wagi każdego neuronu w błąd i odpowiednio dostosuj wagi połączenia, używając gradientu. Propaguj gradienty błędów wstecz, począwszy od ostatniej warstwy.

Kod Pythona dla sieci neuronowych

Teraz, gdy rozumiemy, jak powstaje sieć neuronowa Teoretycznie, zaimplementujmy to samo za pomocą Pythona.

Sieć neuronowa w Pythonie
Do stworzenia naszej sieci neuronowej użyjemy Keras API z backendami Tensorflow lub Theano.

Instalowanie bibliotek
Theano
>>> pip install –upgrade –no-deps git+git://github.com/Theano/Theano.git

Tensorflow i Keras
>>> pip3 zainstaluj tensorflow
>>> instalacja pip – uaktualnienie Keras

Importuj biblioteki

importuj keras
z keras.models import Sequential
z keras.layers importuj Dense

Inicjowanie sztucznej sieci neuronowej

model = sekwencyjny()

Tworzy warstwy wejściowe i ukryte-

model.add(Dense(input_dim = 2, jednostki = 10, aktywacja='relu', kernel_initializer='uniform'))

Ten kod dodaje warstwę wejściową i jedną ukrytą warstwę do sieci sekwencyjnej
Dense(): pozwala nam stworzyć gęsto połączoną sieć neuronową
input_dim: kształt lub liczba węzłów w warstwie wejściowej
jednostki: liczba neuronów lub węzłów w bieżącej warstwie (warstwa ukryta)
aktywacja: funkcja aktywacji zastosowana do każdego węzła ”relu” oznacza Rectified Linear Unit
kernel_initializer: początkowe losowe wagi warstwy

Druga ukryta warstwa
model.add(Gęstość(jednostki = 20, aktywacja='relu', kernel_initializer='uniform'))

Kod tworzy i dodaje kolejną ukrytą warstwę do modelu z 20 węzłami i „poprawioną liniową” funkcją aktywacji. Więcej warstw można dodać w podobny sposób, w zależności od problemu i złożoności.

Warstwa wyjściowa
model.add(Gęsty(jednostki = 1, aktywacja='sigmoid', kernel_initializer='jednolity'))

Pojedyncza warstwa wyjściowa z Sigmoid lub softmax to powszechnie używane funkcje aktywacji dla warstwy wyjściowej.

Kompilacja ANN:
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

SSN jest kompilowana z funkcją optymalizatora i funkcją straty przed trenowaniem.

Optymalizator: funkcja optymalizująca dla sieci. Istnieją różne typy optymalizatorów i najczęściej używany jest adam.
Strata: służy do obliczania strat i błędów. Istnieją różne rodzaje, a wybór zależy od charakteru rozwiązywanego problemu.
Metryki: metryka używana do pomiaru wydajności modelu.

Dopasowanie modelu do danych uczących:
model.fit(X_train,Y_train,batch_size=64, epoki=30)

Ten kod utworzy model

Wniosek

Możemy teraz stworzyć sztuczną sieć neuronową (w Pythonie) od podstaw, ponieważ zrozumieliśmy różne parametry, które można zmieniać w zależności od problemu.

Jeśli chcesz dowiedzieć się więcej o technikach głębokiego uczenia się , uczeniu maszynowym, sprawdź dyplom PG IIIT-B i upGrad w uczeniu maszynowym i sztucznej inteligencji, który jest przeznaczony dla pracujących profesjonalistów i oferuje ponad 450 godzin rygorystycznych szkoleń, ponad 30 studiów przypadków i zadania, status absolwentów IIIT-B, ponad 5 praktycznych praktycznych projektów zwieńczenia i pomoc w pracy z najlepszymi firmami.

Ucz się kursu ML z najlepszych światowych uniwersytetów. Zdobywaj programy Masters, Executive PGP lub Advanced Certificate Programy, aby przyspieszyć swoją karierę.

Poprowadź rewolucję technologiczną napędzaną sztuczną inteligencją

Złóż wniosek o zaawansowany program certyfikacji w uczeniu maszynowym i NLP