CNTK - koncepcje sieci neuronowych (NN)

W tym rozdziale omówiono koncepcje sieci neuronowych w odniesieniu do CNTK.

Jak wiemy, do stworzenia sieci neuronowej wykorzystuje się kilka warstw neuronów. Powstaje jednak pytanie, w jaki sposób w CNTK możemy modelować warstwy NN? Można to zrobić za pomocą funkcji warstw zdefiniowanych w module warstw.

Funkcja warstwy

W rzeczywistości w CNTK praca z warstwami ma wyraźny charakter programowania funkcjonalnego. Funkcja warstwy wygląda jak zwykła funkcja i tworzy funkcję matematyczną z zestawem wstępnie zdefiniowanych parametrów. Zobaczmy, jak możemy stworzyć najbardziej podstawowy typ warstwy, Gęsty, za pomocą funkcji warstwy.

Przykład

Wykonując podstawowe czynności, możemy stworzyć najbardziej podstawowy typ warstwy -

Step 1 - Najpierw musimy zaimportować funkcję gęstej warstwy z pakietu warstw CNTK.

from cntk.layers import Dense

Step 2 - Następnie z pakietu głównego CNTK musimy zaimportować funkcję input_variable.

from cntk import input_variable

Step 3- Teraz musimy utworzyć nową zmienną wejściową za pomocą funkcji input_variable. Musimy również podać jego rozmiar.

feature = input_variable(100)

Step 4 - Nareszcie stworzymy nową warstwę za pomocą funkcji Dense wraz z podaniem odpowiedniej liczby neuronów.

layer = Dense(40)(feature)

Teraz możemy wywołać skonfigurowaną funkcję gęstej warstwy, aby podłączyć gęstą warstwę do wejścia.

Kompletny przykład wdrożenia

from cntk.layers import Dense
from cntk import input_variable
feature= input_variable(100)
layer = Dense(40)(feature)

Dostosowywanie warstw

Jak widzieliśmy, CNTK zapewnia nam całkiem niezły zestaw ustawień domyślnych do budowania NN. Oparte naactivationfunkcji i innych wybranych przez nas ustawień, zachowanie i wydajność NN są inne. Jest to kolejny bardzo przydatny algorytm bazujący. Dlatego dobrze jest zrozumieć, co możemy skonfigurować.

Kroki, aby skonfigurować gęstą warstwę

Każda warstwa w NN ma swoje unikalne opcje konfiguracji, a kiedy mówimy o warstwie gęstej, mamy następujące ważne ustawienia do zdefiniowania -

  • shape - Jak sama nazwa wskazuje, definiuje wyjściowy kształt warstwy, który dodatkowo określa liczbę neuronów w tej warstwie.

  • activation - Definiuje funkcję aktywacji tej warstwy, dzięki czemu może przekształcić dane wejściowe.

  • init- Określa funkcję inicjalizacyjną tej warstwy. Zainicjalizuje parametry warstwy, gdy zaczniemy trenować NN.

Zobaczmy kroki, za pomocą których możemy skonfigurować plik Dense warstwa -

Step1 - Najpierw musimy zaimportować plik Dense funkcja warstwy z pakietu warstw CNTK.

from cntk.layers import Dense

Step2 - Następnie z pakietu CNTK ops musimy zaimportować plik sigmoid operator. Będzie używany do konfiguracji jako funkcja aktywacji.

from cntk.ops import sigmoid

Step3 - Teraz z pakietu inicjalizującego musimy zaimportować plik glorot_uniform inicjator.

from cntk.initializer import glorot_uniform

Step4 - Nareszcie utworzymy nową warstwę używając funkcji Dense wraz z podaniem liczby neuronów jako pierwszego argumentu. Podaj równieżsigmoid operator jako activation funkcja i glorot_uniform jako init funkcja dla warstwy.

layer = Dense(50, activation = sigmoid, init = glorot_uniform)

Kompletny przykład wdrożenia -

from cntk.layers import Dense
from cntk.ops import sigmoid
from cntk.initializer import glorot_uniform
layer = Dense(50, activation = sigmoid, init = glorot_uniform)

Optymalizacja parametrów

Do tej pory widzieliśmy, jak tworzyć strukturę NN i konfigurować różne ustawienia. Tutaj zobaczymy, jak możemy zoptymalizować parametry sieci NN. Za pomocą połączenia dwóch składników, a mianowicielearners i trainers, możemy zoptymalizować parametry sieci NN.

składnik trenera

Pierwszym komponentem używanym do optymalizacji parametrów sieci NN jest trainerskładnik. Zasadniczo realizuje proces wstecznej propagacji. Jeśli mówimy o jego działaniu, przekazuje dane przez NN w celu uzyskania prognozy.

Następnie używa innego komponentu zwanego uczniem w celu uzyskania nowych wartości parametrów w sieci NN. Po uzyskaniu nowych wartości stosuje te nowe wartości i powtarza proces aż do spełnienia kryterium wyjścia.

składnik ucznia

Drugim składnikiem używanym do optymalizacji parametrów sieci NN jest learner składnik, który jest w zasadzie odpowiedzialny za wykonanie algorytmu zejścia gradientowego.

Osoby uczące się zawarte w bibliotece CNTK

Poniżej znajduje się lista niektórych interesujących uczniów zawartych w bibliotece CNTK -

  • Stochastic Gradient Descent (SGD) - Ten uczeń reprezentuje podstawowe stochastyczne zejście gradientu, bez żadnych dodatków.

  • Momentum Stochastic Gradient Descent (MomentumSGD) - Dzięki SGD ten uczeń wykorzystuje rozmach, aby przezwyciężyć problem lokalnych maksimów.

  • RMSProp - Ten uczeń, aby kontrolować tempo schodzenia, używa malejących wskaźników uczenia się.

  • Adam - Ten uczeń, aby zmniejszyć tempo opadania w czasie, wykorzystuje zanikający pęd.

  • Adagrad - Ten uczeń, zarówno w przypadku często, jak i rzadko występujących cech, stosuje różne wskaźniki uczenia się.