H de réseaux de neurones récurrents. Principes de base des réseaux de neurones LSTM

Les réseaux de neurones récurrents sont appelés de tels réseaux dans lesquels les sorties d'éléments neuronaux des couches suivantes ont des connexions synaptiques avec des neurones des couches précédentes. Cela conduit à la possibilité de comptabiliser les résultats de la transformation du réseau neuronal d'informations à la phase précédente pour traiter le vecteur d'entrée à la prochaine étape du fonctionnement du réseau. Les réseaux récurrents peuvent être utilisés pour résoudre des tâches de prévision et de gestion.

Architecture des réseaux récurrents

Il existe différentes options pour les architectures de réseau de neurones récurrentes.

Network de Jordan: En 1986, Jordan a proposé un réseau récurrent (fig. 6), dans lequel les sorties des éléments neurones de la dernière couche sont reliées au moyen de neurones d'entrée spéciaux avec les neurones de la couche intermédiaire. De tels éléments de neurones d'entrée sont appelés contextuel neurones (unités de contexte). Ils distribuent la sortie du réseau neuronal aux éléments neurones de la couche intermédiaire.

Figure. 6Architecture de réseau neuronal récurrent avec obligations inverse des neurones de la couche de sortie

Le nombre de neurones contextuels est égal au nombre d'éléments neuronaux de sortie réseau récurrent. Comme la couche de sortie de ces réseaux, des éléments neurones sont utilisés avec une fonction d'activation linéaire. Ensuite, valeur de sortie j.-Le élément neural de la dernière couche est déterminé par la formule

v ij. - coefficient de poids entre jE.-Mone Neuron intermédiaire et j.-Mone de sortie de neurone; P i.(t.) - Valeur de sortie jE.--Neurone de la couche intermédiaire; jume - au seuil j.- couche de sortie nyrone. Quantité pondérée jE.-Ho L'élément neural de la couche intermédiaire est défini comme suit:

w ij. - coefficient de poids entre j.-Mone Neuron Intrée et jE.-Mone neurone des couches intermédiaires; r - le nombre de neurones de la couche de sortie; w ki.- coefficient de poids entre k.- neurone contextuel et jE.-Mone neurone de la couche intermédiaire; T. - au seuil jE.--Neurone de la couche intermédiaire; n. - la dimension du vecteur d'entrée.



Ensuite, valeur de sortie jE.-Ho Neuron Couche cachée

En fonction de la conversion non linéaire F. Généralement utilisé une fonction tangente hyperbolique ou sigmoïde.

Pour enseigner aux réseaux de neurones récurrents, une erreur inversement d'algorithme est appliquée.

L'algorithme d'apprentissage d'un réseau de neurones récurrent en général comprend les étapes suivantes:

1. Au moment initial du temps t. \u003d 1 Tous les neurones contextuels sont installés dans un état zéro - les valeurs de sortie sont égalisées par zéro.

2. L'image d'entrée est appliquée sur le réseau et la distribue directement dans le réseau de neurones.

3. Conformément à l'algorithme de diffusion inverse, les coefficients de poids et les valeurs de seuil des éléments neuronaux sont modifiés.

4. installé t. = t. +1 et la transition vers l'étape 2. La formation du réseau récurrent est effectuée jusqu'à ce que l'erreur de réseau standard totale soit inférieure à celle spécifiée.

Réseaux de neurones récurrents, RNNS - Modèles populaires utilisés dans le traitement d'une langue naturelle (PNL). Premièrement, ils évaluent les propositions arbitraires basées sur la fréquence à laquelle ils se sont rencontrés dans des textes. Cela nous donne une mesure de l'exactitude grammaticale et sémantique. De tels modèles sont utilisés dans la traduction automatique. Deuxièmement, les modèles de langue génèrent un nouveau texte. Enseigner le modèle sur les poèmes de Shakespeare vous permettra de générer un nouveau texte similaire à Shakespeare.

Quels sont les réseaux de neurones récurrents?

L'idée de RNN utilise systématiquement des informations. Dans les réseaux de neurones traditionnels, il est entendu que toutes les entrées et sorties sont indépendantes. Mais pour de nombreuses tâches, cela ne convient pas. Si vous voulez prédire le mot suivant dans la phrase, il est préférable de prendre en compte les mots précédemment. RNN s'appelle récurrente, car ils effectuent la même tâche pour chaque élément de séquence et la sortie dépend des calculs précédents. Une autre interprétation de RNN: ce sont des réseaux qui ont une "mémoire", qui prend en compte les informations antérieures. Théoriquement RNN peut utiliser des informations sur des séquences arbitrairement longues, mais dans la pratique, elles ne sont limitées qu'à plusieurs étapes (plus à ce sujet ultérieurement).

Le diagramme ci-dessus montre que RNN se déroule dans le réseau complet. Nous décharge simplement le réseau pour une séquence complète. Par exemple, si la séquence est une proposition de 5 mots, la balayage consistera en 5 couches, sur une couche pour chaque mot. Les formules spécifiant les calculs de RNN sont les suivantes:

  • x_t - Entrée à l'étape Temps t. Par exemple, X_1 peut être un seul vecteur d'état chaud (vecteur à un chaud), correspondant au deuxième mot d'approvisionnement.
  • s_t est un état caché à l'étape t. Ceci est la "mémoire" du réseau. S_T dépend de la manière dont la fonction, des états précédents et de l'entrée actuelle x_t: s_t \u003d f (ux_t + ws_ (t-1)). La fonction F est généralement non linéaire, telle que TANH ou RELU. S _ (- 1), qui est nécessaire pour calculer le premier état caché, est généralement initialisé par zéro (vecteur zéro).
  • o_T - sortie à l'étape t. Par exemple, si nous voulons prédire un mot dans une phrase, la sortie peut être un vecteur de probabilité dans notre dictionnaire. O_t \u003d softmax (vs_t)

Plusieurs notes:

  • Vous pouvez interpréter S_T comme mémoire de réseau. S_T contient des informations sur ce qui s'est passé lors des étapes de l'heure précédente. La sortie O_T est calculée uniquement sur la base de la "mémoire" S_T. En pratique, tout est un peu plus compliqué: S_T ne peut pas contenir d'informations trop précédentes.
  • Contrairement à la profondeur traditionnelle, qui utilise différents paramètres sur chaque couche, RNN a le même (U, V, W) à toutes les étapes. Cela reflète le fait que nous effectuons la même tâche à chaque étape en utilisant uniquement des entrées différentes. Cela réduit considérablement le nombre total de paramètres que nous devons choisir.
  • Le graphique ci-dessus a généré à chaque étape, mais, en fonction de la tâche, ils peuvent ne pas être nécessaires. Par exemple, lors de la détermination de la couleur émotionnelle de la proposition, il est conseillé de ne prendre en charge que le résultat final et non sur la peinture après chaque mot. De même, nous n'avons peut-être pas besoin d'entrer des données à chaque étape. La principale caractéristique de RNN est un état caché contenant des informations de séquence.

Où utilise les réseaux de neurones récurrents?

Récurrent les réseaux de neurones Nous avons démontré un grand succès dans de nombreuses tâches NLP. À ce stade, vous devez mentionner que le type RNN le plus couramment utilisé est LSTM, qui sont beaucoup mieux capturés (stockés) dépendances à long terme que RNN. Mais ne vous inquiétez pas, c'est en fait la même chose que RNN, que nous analyserons dans cette leçon, ils ont simplement un autre moyen de calculer l'état caché. Considérons LSTM plus en détail dans un autre poste. Voici quelques exemples d'applications RNN dans NLP (sans références à une liste exhaustive).

Modélisation de la langue et génération de textes

Compte tenu de la séquence de mots, nous voulons prédire la probabilité de chaque mot (dans le dictionnaire). Les modèles de langue nous permettent de mesurer la probabilité de choisir, ce qui constitue une contribution importante à la traduction automatique (puisque les propositions sont probablement les meilleures). L'effet secondaire de cette capacité est la possibilité de générer de nouveaux textes en choisissant des probabilités de sortie. Nous pouvons générer d'autres choses, en fonction de la représentation de nos données. Dans la modélisation de la langue, notre entrée représente généralement une séquence de mots (par exemple, codée sous forme de vecteur avec un état chaud (une chaude)) et la sortie est une séquence de mots prédites. Lors de la formation, nous vous nourrissons de l'entrée sur la couche suivante, la sortie précédente O_T \u003d X_ (T + 1), car nous voulons que le résultat à l'étape t était le mot suivant.

Études sur la modélisation des langues et la génération de texte:

Traduire la machine

La traduction automatique est similaire à la modélisation linguistique, car le vecteur de paramètre d'entrée est une séquence de mots dans la langue source (par exemple, en allemand). Nous voulons obtenir une séquence de mots sur la langue cible (par exemple, en anglais). La principale différence est que nous obtiendrons cette séquence seulement après avoir vu tous les paramètres d'entrée, car le premier mot de la proposition traduite peut nécessiter des informations de la séquence complète des mots d'entrée.

RNN pour la traduction automatique

Reconnaissance de la parole

Dans la séquence d'entrée de signaux acoustiques de l'onde sonore, nous pouvons prédire la séquence de segments phonétiques ainsi que leurs probabilités.

Génération de descriptions d'images

Avec RNN, utilisé dans le cadre du modèle pour générer des images défectueusement. C'est incroyable à quel point ils fonctionnent bien. Le modèle combiné combine les mots générés avec des panneaux trouvés sur les images.

Combinaison Visual-Sémantique profonde pour générer des descriptions d'images.

Le type suivant de réseaux de neurones artificiels est utilisé pour prédire les séquences. Les données de réseau "comprennent" la relation entre différents éléments de réseau. Par exemple, ils sont utilisés pour générer des bottes de chat de textes. Cela fonctionne comme ceci:

Le principe de fonctionnement de la NA récurrente (prise)

Dans ce cas, le réseau accepte la séquence "Salut, comment allez-vous?" et devrait prendre: "Salut, normal"

En médecine, ces réseaux sont utilisés pour analyser des dossiers médicaux et prédire les cas futurs, prédire le développement de l'épiprust, etc.

Je démontrerai le travail de ces réseaux sur un exemple simple.

DataFrame \u003d pandas.read_csv ("International-Airline-Passengers.csv", Usecols \u003d, moteur \u003d "Python", Skipofooter \u003d 3) DataSet \u003d Dataframe.Values \u200b\u200bDataSet \u003d DataSet.AsType ("flotteur32") Dataframe.Head ( )

Passagers de la compagnie aérienne internationale: totaux mensuels en milliers. 49 janvier? Dec 60.
0 112
1 118
2 132
3 129
4 121

L'ensemble de données comprend des observations mensuelles des passagers aéroportuaires de janvier 1949 à décembre 1960. Il y a 144 observations.

Si vous dessinez une carte d'observation, vous pouvez remarquer une tendance spécifique:

    C'est cyclique, car l'afflux de passagers est en saison estivale.

    Il y a une jolie tendance dans le nombre total de passagers, la popularité du transport aérien augmente constamment.

Plt.plot (Dataframe)

Nous devons créer un modèle qui sera en mesure de trouver la relation entre le nombre de passagers dans différents mois et de prédire le nombre de passagers à l'avenir.

Train_Size \u003d int (Dataset) * 0.67) Test_size \u003d Len (Dataset) - Train_Size Imprimer (Len (Train), Len (Test)) (96, 48)

Pour la formation réseau, 96 observations sont utilisées (67%) pour tester la précision des observations du modèle - 48.

Le modèle comprendra deux couches. La première couche ne contient que 4 neurones. La couche de sortie n'est qu'un seul neurone, à partir duquel le nombre prédit de passagers sera "sorti".

Modèle \u003d séquentiel () Model.add (LSTM (4, INPUT_DIM \u003d LOOK_BACK)) Model.Ajouter (dense (1)) Model.comple (perte \u003d "méthandre_squared_error", optimiseur \u003d "adam")

Téléchargez les données dans le modèle:

Model.fit (TrainX, Formis, NB_EPOCH \u003d 5, BATCH_SIZE \u003d 1, VERBOSE \u003d 2) EPOCH 1/5 0S - Perte: 0.0019 EPOCH 2/5 0S - Perte: 0.0020 EPOCH 3/5 0S - Perte: 0.0020 EPOCH 4 / 5 0S - Perte: 0.0019 EPOCH 5/5 0S - Perte: 0.0020

Nous estimons l'erreur de travail du modèle:

TrainPredict \u003d Model.Pradict TestPradic \u003d Model.Prédict (Testex) TrainScore \u003d MATH.SQRT (tryinpredict_error (formé, TrainRedict [: 0])) Imprimer («Score de train:% .2f RMSE»% (traincore)) Testscore \u003d MATH.SQRT (testy, test de test [: 0])) Imprimer ("Score de test:% .2f RMSE"% (testScore)) Score de train: 0.04 Score de test RMSE: 0.11 RMSE

Sur l'échantillon de test, l'erreur était 0,11. Cela signifie que le modèle en moyenne se trompe de 11 000 passagers. Pour comprendre, il y a beaucoup ou non, visualisons le résultat.

Ainsi, le bleu indique le calendrier d'origine. Le vert est la bonne prédiction sur un échantillon formé. Nous sommes intéressés par le chat rouge - les prévisions du modèle sur l'échantillon de test. Nous voyons que le modèle consiste à deviner des cycles annuels et à une tendance commune.

C'est ainsi que fonctionnent les réseaux de neurones récurrents. Encore une fois, c'est un exemple très simple d'illustration. Par exemple, l'analyse des dossiers médicaux utilise des réseaux plus profonds. En outre, pour améliorer la précision des prévisions, elles peuvent être confrontées à des réseaux de neurones balayants décrits

Avez-vous aimé l'article? Partager avec des amis: