Formation d'un réseau de neurones
Nous allons maintenant apprendre à former un réseau de neurones. Nous allons également apprendre l'algorithme de propagation en arrière et le passage en arrière dans Python Deep Learning.
Nous devons trouver les valeurs optimales des poids d'un réseau de neurones pour obtenir la sortie souhaitée. Pour entraîner un réseau de neurones, nous utilisons la méthode itérative de descente de gradient. Nous commençons d'abord par une initialisation aléatoire des poids. Après l'initialisation aléatoire, nous faisons des prédictions sur un sous-ensemble de données avec un processus de propagation avant, calculons la fonction de coût C correspondante et mettons à jour chaque poids w d'un montant proportionnel à dC / dw, c'est-à-dire la dérivée des fonctions de coût par rapport au poids. La constante de proportionnalité est connue sous le nom de taux d'apprentissage.
Les gradients peuvent être calculés efficacement en utilisant l'algorithme de rétro-propagation. L'observation clé de la propagation vers l'arrière ou de l'hélice arrière est qu'en raison de la règle de la chaîne de différenciation, le gradient au niveau de chaque neurone du réseau neuronal peut être calculé en utilisant le gradient au niveau des neurones, il a des bords sortants vers. Par conséquent, nous calculons les dégradés à l'envers, c'est-à-dire que nous calculons d'abord les gradients de la couche de sortie, puis la couche cachée la plus haute, suivie de la couche cachée précédente, et ainsi de suite, se terminant à la couche d'entrée.
L'algorithme de rétro-propagation est mis en œuvre principalement en utilisant l'idée d'un graphe de calcul, où chaque neurone est étendu à de nombreux nœuds dans le graphe de calcul et effectue une opération mathématique simple comme l'addition, la multiplication. Le graphe de calcul n'a pas de poids sur les arêtes; tous les poids sont attribués aux nœuds, de sorte que les poids deviennent leurs propres nœuds. L'algorithme de propagation vers l'arrière est ensuite exécuté sur le graphe de calcul. Une fois le calcul terminé, seuls les gradients des nœuds de poids sont nécessaires pour la mise à jour. Le reste des dégradés peut être ignoré.
Technique d'optimisation de la descente de gradient
Une fonction d'optimisation couramment utilisée qui ajuste les poids en fonction de l'erreur qu'ils ont causée est appelée la «descente de gradient».
Le gradient est un autre nom pour la pente, et la pente, sur un graphique xy, représente comment deux variables sont liées l'une à l'autre: la montée sur la course, le changement de distance au cours du changement de temps, etc. Dans ce cas, la pente est le rapport entre l'erreur du réseau et un poids unique; c'est-à-dire, comment l'erreur change-t-elle lorsque le poids varie.
Pour le dire plus précisément, nous voulons trouver quel poids produit le moins d'erreur. Nous voulons trouver le poids qui représente correctement les signaux contenus dans les données d'entrée, et les traduit en une classification correcte.
Au fur et à mesure qu'un réseau de neurones apprend, il ajuste lentement de nombreux poids afin qu'ils puissent mapper correctement le signal sur la signification. Le rapport entre l'erreur de réseau et chacun de ces poids est une dérivée, dE / dw, qui calcule la mesure dans laquelle une légère modification d'un poids provoque une légère modification de l'erreur.
Chaque poids n'est qu'un facteur dans un réseau profond qui implique de nombreuses transformations; le signal du poids passe par des activations et des sommes sur plusieurs couches, nous utilisons donc la règle de calcul en chaîne pour remonter les activations et sorties du réseau, ce qui nous amène au poids en question et à sa relation avec l'erreur globale.
Étant donné que deux variables, l'erreur et le poids, sont médiées par une troisième variable, activation, à travers lequel le poids est passé. Nous pouvons calculer comment un changement de poids affecte un changement d'erreur en calculant d'abord comment un changement d'activation affecte un changement d'erreur, et comment un changement de poids affecte un changement d'activation.
L'idée de base de l'apprentissage profond n'est rien de plus que cela: ajuster les poids d'un modèle en réponse à l'erreur qu'il produit, jusqu'à ce que vous ne puissiez plus réduire l'erreur.
Le filet profond s'entraîne lentement si la valeur du gradient est petite et rapide si la valeur est élevée. Toute inexactitude dans la formation conduit à des résultats inexacts. Le processus de formation des réseaux de la sortie vers l'entrée est appelé propagation arrière ou arrière prop. Nous savons que la propagation vers l'avant commence par l'entrée et fonctionne en avant. Back prop fait l'inverse / inverse en calculant le gradient de droite à gauche.
Chaque fois que nous calculons un dégradé, nous utilisons tous les dégradés précédents jusqu'à ce point.
Commençons par un nœud de la couche de sortie. Le bord utilise le dégradé à ce nœud. Au fur et à mesure que nous retournons dans les couches cachées, cela devient plus complexe. Le produit de deux nombres entre 0 et 1 vous donne un nombre plus petit. La valeur du gradient ne cesse de diminuer et, par conséquent, le support arrière prend beaucoup de temps à s'entraîner et la précision en souffre.
Défis des algorithmes d'apprentissage profond
Il existe certains défis à la fois pour les réseaux de neurones peu profonds et les réseaux de neurones profonds, comme le surajustement et le temps de calcul. Les DNN sont affectés par le surajustement en raison de l'utilisation de couches d'abstraction supplémentaires qui leur permettent de modéliser des dépendances rares dans les données d'apprentissage.
Regularizationdes méthodes telles que l'abandon, l'arrêt prématuré, l'augmentation des données, l'apprentissage par transfert sont appliquées pendant l'entraînement pour lutter contre le surajustement. La régularisation d'abandon omet aléatoirement les unités des couches cachées pendant l'entraînement, ce qui permet d'éviter les dépendances rares. Les DNN prennent en compte plusieurs paramètres d'apprentissage tels que la taille, c'est-à-dire le nombre de couches et le nombre d'unités par couche, le taux d'apprentissage et les poids initiaux. La recherche de paramètres optimaux n'est pas toujours pratique en raison du coût élevé en temps et en ressources de calcul. Plusieurs hacks tels que le batching peuvent accélérer le calcul. La grande puissance de traitement des GPU a considérablement aidé le processus de formation, car les calculs matriciels et vectoriels nécessaires sont bien exécutés sur les GPU.
Abandonner
Le décrochage est une technique de régularisation populaire pour les réseaux de neurones. Les réseaux de neurones profonds sont particulièrement sujets au surajustement.
Voyons maintenant ce qu'est le décrochage et comment cela fonctionne.
Pour reprendre les mots de Geoffrey Hinton, l'un des pionniers du Deep Learning, «Si vous avez un réseau neuronal profond et qu'il n'est pas surajusté, vous devriez probablement en utiliser un plus grand et utiliser le décrochage».
Le décrochage est une technique où à chaque itération de descente de gradient, nous déposons un ensemble de nœuds sélectionnés aléatoirement. Cela signifie que nous ignorons certains nœuds au hasard comme s'ils n'existaient pas.
Chaque neurone est conservé avec une probabilité de q et chuté au hasard avec une probabilité 1-q. La valeur q peut être différente pour chaque couche du réseau neuronal. Une valeur de 0,5 pour les couches masquées et de 0 pour la couche d'entrée fonctionne bien sur un large éventail de tâches.
Lors de l'évaluation et de la prédiction, aucun abandon n'est utilisé. La sortie de chaque neurone est multipliée par q afin que l'entrée de la couche suivante ait la même valeur attendue.
L'idée derrière Dropout est la suivante - Dans un réseau de neurones sans régularisation du décrochage, les neurones développent une codépendance entre eux qui conduit à un surajustement.
Astuce de mise en œuvre
Dropout est implémenté dans des bibliothèques telles que TensorFlow et Pytorch en gardant la sortie des neurones sélectionnés au hasard à 0. Autrement dit, bien que le neurone existe, sa sortie est écrasée en tant que 0.
Arrêt précoce
Nous entraînons les réseaux de neurones à l'aide d'un algorithme itératif appelé descente de gradient.
L'idée derrière l'arrêt précoce est intuitive; nous arrêtons l'entraînement lorsque l'erreur commence à augmenter. Ici, par erreur, nous entendons l'erreur mesurée sur les données de validation, qui est la partie des données d'entraînement utilisées pour régler les hyper-paramètres. Dans ce cas, l'hyper-paramètre est le critère d'arrêt.
Augmentation des données
Processus par lequel nous augmentons le quantum de données dont nous disposons ou nous l'augmentons en utilisant des données existantes et en y appliquant des transformations. Les transformations exactes utilisées dépendent de la tâche que nous entendons accomplir. De plus, les transformations qui aident le réseau neuronal dépendent de son architecture.
Par exemple, dans de nombreuses tâches de vision par ordinateur telles que la classification d'objets, une technique efficace d'augmentation des données consiste à ajouter de nouveaux points de données qui sont des versions recadrées ou traduites des données originales.
Lorsqu'un ordinateur accepte une image comme entrée, il prend un tableau de valeurs de pixels. Disons que l'image entière est décalée vers la gauche de 15 pixels. Nous appliquons de nombreux décalages différents dans des directions différentes, ce qui entraîne un ensemble de données augmenté plusieurs fois la taille de l'ensemble de données d'origine.
Apprentissage par transfert
Le processus consistant à prendre un modèle pré-entraîné et à «affiner» le modèle avec notre propre jeu de données est appelé apprentissage par transfert. Il existe plusieurs façons de procéder, dont quelques-unes sont décrites ci-dessous -
Nous formons le modèle pré-entraîné sur un grand ensemble de données. Ensuite, nous supprimons la dernière couche du réseau et la remplaçons par une nouvelle couche avec des poids aléatoires.
Nous gèlons ensuite les pondérations de toutes les autres couches et formons le réseau normalement. Ici, le gel des couches ne change pas les poids pendant la descente du gradient ou l'optimisation.
Le concept sous-jacent est que le modèle pré-entraîné agira comme un extracteur de caractéristiques et que seule la dernière couche sera entraînée sur la tâche en cours.