[PYTHON] Un amateur a trébuché dans le Deep Learning ❷ fait à partir de zéro Note: Chapitre 5

introduction

J'ai soudainement commencé à étudier "Deep Learning from scratch ❷ --- traitement du langage naturel" Notez que j'ai trébuché au chapitre 5 est.

L'environnement d'exécution est macOS Catalina + Anaconda 2019.10, et la version Python est 3.7.4. Pour plus de détails, reportez-vous au Chapitre 1 de ce mémo.

Chapitre 5 Réseau neuronal récurrent (RNN)

Ce chapitre décrit le réseau neuronal récurrent.

5.1 Probabilité et modèle de langage

Il explique le modèle de langage et les problèmes liés à l'utilisation de CBOW comme modèle de langage. Je pense que la raison pour laquelle l'équation 5.8 est une approximation est que CBOW ignore la séquence de mots.

Puisque word2vec ignore la séquence des mots, il semble que le RNN appris dans ce chapitre soit meilleur s'il est utilisé pour des expressions distribuées, mais le RNN est né en premier, et plus tard pour augmenter le nombre de vocabulaire et améliorer la qualité. Il est intéressant de noter que word2vec a été proposé par la société, et qu'il s'agissait en fait du flux inverse.

5.2 Qu'est-ce que RNN?

Explication de RNN. La fonction tanh (fonction tangente bicurve) apparaît comme une fonction d'activation, mais pour une raison quelconque, il n'y a pas d'explication dans ce livre, alors cherchons sur Google pour plus de détails avec "tanh".

Une autre chose qui m'inquiétait un peu était la possibilité de revenir au début lorsque les données étaient utilisées jusqu'à la fin dans l'apprentissage par mini-lots. Dans ce cas, la fin et le début du corpus seront connectés. Cependant, en premier lieu, ce livre traite le corpus PTB comme "une grande série de données chronologiques" et ne considère même pas les sauts de phrase (voir la partie marque du scorpion au centre de la P.87). Par conséquent, il peut être inutile de s'inquiéter de la connexion entre la fin et le début.

5.3 Mise en œuvre de RNN

Un peu de précaution doit être prise dans l'implémentation, car le nœud Repeat après le biais $ b $ est omis dans les figures 5-19 et 5-20. La propagation vers l'avant peut être implémentée comme le montre la figure car elle est diffusée, mais il est nécessaire de l'ajouter consciemment lors du calcul de $ db $ par propagation arrière. Juste cette partie du QA était également en teratail (teratail: why sum sum db with axis = 0 in backpropagation of RNN).

De plus, la fonction tanh qui est sortie cette fois est implémentée sans explication, mais la propagation vers l'avant peut être calculée avec numpy.tanh () comme dans le code du livre. Pour la rétro-propagation, la partie dt = dh_next * (1 --h_next ** 2) est la différenciation de tanh, qui est expliquée en détail dans "Annexe A Différenciation de la fonction sigmoïde et de la fonction tanh" à la fin du livre. il y a.

De plus, à la page 205, l'histoire de «... (point 3 points)» apparaît, qui est la même que celle du «lecteur 3 points» qui apparaît à la page 34. [Chapitre 1 de ce mémo](https://qiita.com/segavvy/items/91be1d4fc66f7e322f25#13-%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%A9%E3 % 83% AB% E3% 83% 8D% E3% 83% 83% E3% 83% 88% E3% 83% AF% E3% 83% BC% E3% 82% AF% E3% 81% AE% E5% AD Comme je l'ai écrit dans% A6% E7% BF% 92), il est préférable de comprendre la relation entre les tranches et les vues de ndarray plutôt que de se souvenir qu'il sera écrasé par des points de 3 points.

5.4 Implémentation de couches qui gèrent les données de séries chronologiques

L'explication du code est omise, mais elle est simple et compréhensible.

La couche Time Embedding (classe TimeEmbedding dans common / time_layers.py) boucle simplement sur $ T $ des couches Embedding.

Dans la couche Time Affine (classe TimeAffine dans common / time_layers.py), au lieu de boucler $ T $ fois, la taille du lot $ N $ est transformée en $ T $ fois et calculée à la fois, et le résultat est l'original. Il est rendu plus efficace en le transformant en forme.

Le calque Time Softmax With Loss (classe TimeSoftmaxWithLoss dans common / time_layers.py) est comme expliqué dans le livre, mais je craignais qu'un masque utilisant ʻignore_label` ait été implémenté. Lorsque l'étiquette de réponse correcte est -1, la perte et le gradient sont définis sur 0 et il est exclu du dénominateur $ T $ lors du calcul de $ L $, mais le processus de définition de l'étiquette de réponse correcte sur -1 est maintenant Je ne pense pas que c'était là. Je pourrai l'utiliser dans un chapitre ultérieur, je vais donc le laisser pour le moment.

5.5 Apprentissage et évaluation du RNNLM

Malheureusement, cette implémentation ne donne pas de bons résultats lors de l'utilisation de l'ensemble de données PTB, j'ai donc joué avec le chapitre précédent texte pré-écrit d'Aozora Bunko J'ai également arrêté d'étudier à. On dit qu'il sera amélioré dans le prochain chapitre, donc je vais l'essayer là-bas.

En passant, quand j'ai vu le code rn = np.random.randn dans SimpleRnnlm .__ init __ (), je l'ai trouvé pratique car Python peut facilement mettre des fonctions dans des variables et les utiliser. En langage C, il est compliqué de mettre une fonction dans une variable (mettre un point d'entrée de fonction dans une variable) avec beaucoup de «*» et de «()», et c'est compliqué de l'utiliser, et je ne suis pas vraiment bon dans mes jours actifs. Fait: transpirer:

5.6 Résumé

J'ai réussi à gérer des données chronologiques.

C'est tout pour ce chapitre. Si vous avez des erreurs, je vous serais reconnaissant de bien vouloir les signaler.

Recommended Posts

Un amateur a trébuché dans le Deep Learning ❷ fait à partir de zéro Note: Chapitre 5
Un amateur a trébuché dans le Deep Learning ❷ fait à partir de zéro Note: Chapitre 2
Un amateur a trébuché dans le Deep Learning ❷ fait de zéro Note: Chapitre 1
Un amateur a trébuché dans le Deep Learning ❷ fait à partir de zéro Note: Chapitre 4
Un amateur a trébuché dans le Deep Learning à partir de zéro Note: Chapitre 1
Un amateur a trébuché dans le Deep Learning à partir de zéro Note: Chapitre 3
Un amateur a trébuché dans le Deep Learning à partir de zéro Note: Chapitre 7
Un amateur a trébuché dans le Deep Learning à partir de zéro Note: Chapitre 5
Un amateur a trébuché dans le Deep Learning à partir de zéro.
Un amateur a trébuché dans le Deep Learning à partir de zéro Note: Chapitre 2
[Mémo d'apprentissage] Le Deep Learning fait de zéro [Chapitre 7]
Deep learning / Deep learning made from scratch Chapitre 6 Mémo
[Mémo d'apprentissage] Deep Learning fait de zéro [Chapitre 5]
[Mémo d'apprentissage] Le Deep Learning fait de zéro [Chapitre 6]
Deep learning / Deep learning made from scratch Chapitre 7 Mémo
[Mémo d'apprentissage] Deep Learning fait de zéro [~ Chapitre 4]
Apprentissage profond à partir de zéro
Deep Learning from scratch ① Chapitre 6 "Techniques liées à l'apprentissage"
Deep Learning from scratch Chapter 2 Perceptron (lecture du mémo)
Apprentissage profond à partir de zéro 1 à 3 chapitres
Deep learning / Deep learning from scratch 2 Chapitre 4 Mémo
Deep learning / Deep learning made from scratch Chapitre 3 Mémo
Deep Learning / Deep Learning à partir de Zero 2 Chapitre 5 Mémo
Créez un environnement pour "Deep Learning from scratch" avec Docker
Apprentissage profond à partir de zéro (calcul des coûts)
Deep Learning / Deep Learning à partir de Zero 2 Chapitre 7 Mémo
Deep Learning / Deep Learning à partir de Zero 2 Chapitre 8 Mémo
Deep learning / Deep learning made from scratch Chapitre 5 Mémo
Deep learning / Deep learning made from scratch Chapitre 4 Mémo
Deep learning / Deep learning from scratch 2 Chapitre 3 Mémo
Mémo d'apprentissage profond créé à partir de zéro
Deep Learning / Deep Learning à partir de Zero 2 Chapitre 6 Mémo
Écrivez vos impressions sur l'édition du framework Deep Learning 3 créée à partir de zéro
Apprentissage profond à partir de zéro (propagation vers l'avant)
Apprentissage profond / Apprentissage profond à partir de zéro 2-Essayez de déplacer GRU
"Deep Learning from scratch" avec Haskell (inachevé)
[Windows 10] Construction de l'environnement "Deep Learning from scratch"
Enregistrement d'apprentissage de la lecture "Deep Learning from scratch"
[Deep Learning from scratch] À propos de l'optimisation des hyper paramètres
Mémo d'auto-apprentissage "Deep Learning from scratch" (partie 12) Deep learning
Python vs Ruby «Deep Learning from scratch» Chapitre 2 Circuit logique par Perceptron
Python vs Ruby "Deep Learning from scratch" Chapitre 4 Implémentation de la fonction de perte
Mémo d'auto-apprentissage "Deep Learning from scratch" (glossaire illisible)
"Deep Learning from scratch" Mémo d'auto-apprentissage (n ° 9) Classe MultiLayerNet
Un amateur a essayé le Deep Learning avec Caffe (Introduction)
GitHub du bon livre "Deep Learning from scratch"
Un amateur a essayé le Deep Learning en utilisant Caffe (Practice)
[Mémo d'apprentissage] Apprentissage profond à partir de zéro ~ Mise en œuvre de l'abandon ~
Un amateur a essayé le Deep Learning avec Caffe (Vue d'ensemble)
Résumé Python vs Ruby "Deep Learning from scratch"
Mémo d'auto-apprentissage «Deep Learning from scratch» (10) Classe MultiLayerNet
Mémo d'auto-apprentissage «Deep Learning from scratch» (n ° 11) CNN
Python vs Ruby "Deep Learning from scratch" Chapitre 3 Implémentation d'un réseau neuronal à 3 couches
Deep Learning from scratch La théorie et la mise en œuvre de l'apprentissage profond appris avec Python Chapitre 3
Version Lua Deep Learning from scratch Part 5.5 [Rendre les fichiers pkl disponibles dans Lua Torch]
[Deep Learning from scratch] J'ai implémenté la couche Affine
Mémo d'auto-apprentissage «Deep Learning from scratch» (n ° 19) Augmentation des données
Application de Deep Learning 2 à partir de zéro Filtre anti-spam