CNTK - Concepts du réseau neuronal (NN)
Ce chapitre traite des concepts de Neural Network en ce qui concerne CNTK.
Comme nous le savons, plusieurs couches de neurones sont utilisées pour créer un réseau de neurones. Mais, la question se pose que dans CNTK comment pouvons-nous modéliser les couches d'un NN? Cela peut être fait à l'aide des fonctions de couche définies dans le module de couche.
Fonction de calque
En fait, dans CNTK, travailler avec les couches a une sensation de programmation fonctionnelle distincte. La fonction de calque ressemble à une fonction régulière et produit une fonction mathématique avec un ensemble de paramètres prédéfinis. Voyons comment nous pouvons créer le type de calque le plus basique, Dense, à l'aide de la fonction de calque.
Exemple
À l'aide des étapes de base suivantes, nous pouvons créer le type de couche le plus basique -
Step 1 - Tout d'abord, nous devons importer la fonction de couche dense du package des couches de CNTK.
from cntk.layers import Dense
Step 2 - Ensuite, à partir du package racine CNTK, nous devons importer la fonction input_variable.
from cntk import input_variable
Step 3- Maintenant, nous devons créer une nouvelle variable d'entrée en utilisant la fonction input_variable. Nous devons également fournir sa taille.
feature = input_variable(100)
Step 4 - Enfin, nous allons créer une nouvelle couche en utilisant la fonction Dense tout en fournissant le nombre de neurones que nous voulons.
layer = Dense(40)(feature)
Maintenant, nous pouvons appeler la fonction de couche dense configurée pour connecter la couche dense à l'entrée.
Exemple d'implémentation complet
from cntk.layers import Dense
from cntk import input_variable
feature= input_variable(100)
layer = Dense(40)(feature)
Personnalisation des calques
Comme nous l'avons vu, CNTK nous fournit un très bon ensemble de valeurs par défaut pour la construction de NN. Basé suractivationfonction et autres paramètres que nous choisissons, le comportement ainsi que les performances du NN sont différents. C'est un autre algorithme de dérivation très utile. Voilà la raison, il est bon de comprendre ce que l'on peut configurer.
Étapes pour configurer une couche dense
Chaque couche dans NN a ses options de configuration uniques et lorsque nous parlons de couche dense, nous avons les paramètres importants suivants à définir:
shape - Comme son nom l'indique, il définit la forme de sortie de la couche qui détermine en outre le nombre de neurones dans cette couche.
activation - Il définit la fonction d'activation de cette couche, afin de pouvoir transformer les données d'entrée.
init- Il définit la fonction d'initialisation de cette couche. Il initialisera les paramètres de la couche lorsque nous commencerons à entraîner le NN.
Voyons les étapes à l'aide desquelles nous pouvons configurer un Dense couche -
Step1 - Tout d'abord, nous devons importer le Dense fonction de couche du package des couches de CNTK.
from cntk.layers import Dense
Step2 - Ensuite du package CNTK ops, nous devons importer le sigmoid operator. Il sera utilisé pour configurer comme fonction d'activation.
from cntk.ops import sigmoid
Step3 - Maintenant, à partir du package d'initialisation, nous devons importer le glorot_uniform initialiseur.
from cntk.initializer import glorot_uniform
Step4 - Enfin, nous allons créer une nouvelle couche en utilisant la fonction Dense et en fournissant le nombre de neurones comme premier argument. Aussi, fournissez lesigmoid opérateur comme activation fonction et le glorot_uniform comme le init fonction pour la couche.
layer = Dense(50, activation = sigmoid, init = glorot_uniform)
Exemple d'implémentation complet -
from cntk.layers import Dense
from cntk.ops import sigmoid
from cntk.initializer import glorot_uniform
layer = Dense(50, activation = sigmoid, init = glorot_uniform)
Optimiser les paramètres
Jusqu'à présent, nous avons vu comment créer la structure d'un NN et comment configurer divers paramètres. Ici, nous allons voir comment nous pouvons optimiser les paramètres d'un NN. Avec l'aide de la combinaison de deux composants à savoirlearners et trainers, nous pouvons optimiser les paramètres d'un NN.
composant formateur
Le premier composant utilisé pour optimiser les paramètres d'un NN est trainercomposant. Il implémente essentiellement le processus de rétropropagation. Si nous parlons de son fonctionnement, il passe les données à travers le NN pour obtenir une prédiction.
Après cela, il utilise un autre composant appelé apprenant afin d'obtenir les nouvelles valeurs des paramètres dans un NN. Une fois qu'il a obtenu les nouvelles valeurs, il applique ces nouvelles valeurs et répète le processus jusqu'à ce qu'un critère de sortie soit satisfait.
composante apprenant
Le deuxième composant utilisé pour optimiser les paramètres d'un NN est learner composant, qui est essentiellement responsable de l'exécution de l'algorithme de descente de gradient.
Apprenants inclus dans la bibliothèque CNTK
Voici la liste de certains des apprenants intéressants inclus dans la bibliothèque CNTK -
Stochastic Gradient Descent (SGD) - Cet apprenant représente la descente de gradient stochastique de base, sans aucun extras.
Momentum Stochastic Gradient Descent (MomentumSGD) - Avec SGD, cet apprenant applique l'élan pour surmonter le problème des maxima locaux.
RMSProp - Cet apprenant, pour contrôler le taux de descente, utilise des taux d'apprentissage décroissants.
Adam - Cet apprenant, afin de diminuer le taux de descente au fil du temps, utilise l'élan décroissant.
Adagrad - Cet apprenant, pour les fonctionnalités fréquentes et peu fréquentes, utilise des taux d'apprentissage différents.