Ceci est un mémo pour moi pendant que je lis Introduction aux applications de traitement du langage naturel en 15 étapes. Cette fois, au chapitre 3, étape 13, notez vos propres points.
Dans le chapitre précédent, nous avons construit un réseau de neurones convolutifs (CNN) qui utilise une colonne d'expressions distribuées de mots disposées sous une forme correspondant à une phrase en entrée. Dans ce chapitre, nous construirons également un réseau neuronal récursif (RNN) avec une séquence d'expressions distribuées de mots disposées sous une forme correspondant à une phrase en entrée. L'explication détaillée du mécanisme est omise.
13.1 Recurrent layer
Entrez la colonne la plus à gauche du vecteur d'entités dans une couche (couche entièrement connectée) du perceptron multicouche. Ensuite, déplacez le neurone d'entrée vers la droite d'une ligne et entrez dans la couche entièrement connectée de la même manière, mais le poids de la ** couche entièrement connectée utilisée ici est le même que celui utilisé auparavant **. En même temps, ** connectez le neurone de sortie précédent via une autre couche entièrement connectée **.
--CNN: Inclut des informations pour toutes les colonnes de vecteurs d'entités en entrant une série de sorties dans la couche de pooling max pour obtenir un vecteur --RNN: Puisque la sortie précédente est connectée à la sortie suivante, le dernier vecteur obtenu contient des informations sur toute la colonne des vecteurs de caractéristiques (bien que la première caractéristique devienne plus petite Notez que
Cela peut également être expliqué en préparant une couche entièrement connectée avec une "connexion qui renvoie sa sortie sur elle-même" et en y entrant des vecteurs dans l'ordre. J'avais à l'origine cette image, et quand j'ai agrandi la partie boucle, c'est devenu la composition que j'ai mentionnée plus tôt.
13.2 LSTM Abréviation de longue mémoire à court terme, RNN avait le problème que les caractéristiques au début devenaient plus petites, mais LSTM est une version améliorée qui peut conserver les anciennes informations. (Je veux résumer LSTM dans le futur)
Ajouts / modifications par rapport au chapitre précédent (étape 12)
--Structure du réseau neuronal: CNN-> RNN --Gestion de 0 en séquence: pas de spécial
rnn_sample.py
model = Sequential()
model.add(get_keras_embedding(we_model.wv,
input_shape=(MAX_SEQUENCE_LENGTH, ),
mask_zero=True,
trainable=False))
model.add(LSTM(units=256))
model.add(Dense(units=128, activation='relu'))
model.add(Dense(units=n_classes, activation='softmax'))
model.compile(loss='categorical_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
Résultat d'exécution
# CNN
$ docker run -it -v $(pwd):/usr/src/app/ 15step:latest python cnn_sample.py
Epoch 50/50
917/917 [==============================] - 0s 303us/step - loss: 0.0357 - acc: 0.9924
0.6808510638297872
Epoch 100/100
917/917 [==============================] - 0s 360us/step - loss: 0.0220 - acc: 0.9902
0.6808510638297872
# LSTM
$ docker run -it -v $(pwd):/usr/src/app/ 15step:latest python rnn_sample.py
Epoch 50/50
917/917 [==============================] - 4s 4ms/step - loss: 0.2530 - acc: 0.9378
0.6063829787234043
Epoch 100/100
917/917 [==============================] - 4s 4ms/step - loss: 0.0815 - acc: 0.9793
0.5851063829787234
# Bi-directional RNN
$ docker run -it -v $(pwd):/usr/src/app/ 15step:latest python bid_rnn_sample.py
Epoch 50/50
917/917 [==============================] - 2s 2ms/step - loss: 0.2107 - acc: 0.9487
0.5851063829787234
Epoch 100/100
917/917 [==============================] - 2s 2ms/step - loss: 0.0394 - acc: 0.9858
0.5851063829787234
# GRU
Epoch 50/50
917/917 [==============================] - 1s 1ms/step - loss: 0.2947 - acc: 0.9368
0.4787234042553192
Epoch 100/100
917/917 [==============================] - 1s 1ms/step - loss: 0.0323 - acc: 0.9869
0.5531914893617021
Comparez avec 50 numéros d'époque. Autre que CNN, la fonction de perte n'a pas baissé même avec Epoch50, donc je l'ai vérifiée avec Epoch100.
Type de NN | Résultat d'exécution | Vitesse d'exécution |
---|---|---|
CNN | Epoch50:68.1% Epoch100:68.1% |
300us en moyenne/step -> 0.27s/epoch |
LSTM | Epoch50:60.6% Epoch100:58.5% |
4ms en moyenne/step -> 3.6s/epoch |
Bi-directional RNN | Epoch50:58.5% Epoch100:58.5% |
2ms en moyenne/step -> 1.8s/epoch |
GRU | Epoch50:47.9% Epoch100:55.3% |
1ms en moyenne/step -> 0.9s/epoch |
Un réglage du réseau neuronal tel que la recherche d'hyper paramètres dans les chapitres suivants est nécessaire, mais CNN est rapide et le taux de discrimination est assez bon.
Comme un simple RNN qui détournait simplement une couche entièrement connectée similaire au Perceptron multicouche ne fonctionne pas bien, LSTM a été introduit.
Le contenu du chapitre 3 de ce livre est élémentaire et se concentre sur la façon de les utiliser pour des applications pratiques. Afin d'acquérir une compréhension plus approfondie de la théorie, nous devons solidifier la théorie des réseaux de neurones avant de commencer. Ce serait peut-être une bonne idée d'essayer le concours Kaggle.
Recommended Posts