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ę.