[Python] Deep Learning: J'ai essayé d'implémenter Deep Learning (DBN, SDA) sans utiliser de bibliothèque.

Objectif de cette entrée

Cette fois, je voudrais vous présenter *** Deep Learning, qui a été implémenté sans utiliser la bibliothèque *** dans le but d'étudier. Le langage est Python.

Cependant, il y a des livres auxquels j'ai fait référence. Dans cette entrée, nous présenterons le livre et expliquerons le code réimplémenté en Python basé sur le code Java décrit dans le livre.

Contexte

Je ne pense pas que le fait que l'apprentissage en profondeur attire l'attention en tant que catalyseur du récent boom de l'IA ne soit pas autant que je le mentionnerai ici. Étant donné qu’un grand nombre de livres de ce genre ont été publiés récemment, il est facile de voir l’attention qu’ils ont reçue.

Cependant, tout le monde dans le monde ne se spécialise pas dans l'IA, et plutôt, ces personnes sont vraiment limitées à certains groupes. Beaucoup de gens

Je ne travaille pas directement sur le deep learning pour le moment, mais je ne peux pas l'ignorer étant donné que l'IA sera introduite en tant qu'infrastructure dans un proche avenir.

Je pense que tu as le sentiment. C'est pourquoi beaucoup de gens pensent qu'ils devraient étudier pour le moment, et je suis l'un d'eux.

Quand j'ai pris le livre, j'ai senti qu'il avait tendance à être polarisé dans les types suivants (c'est une tendance, et c'est plus que suffisant que je manque un bon livre). ..

J'étais inutilement réticent à utiliser la bibliothèque sans en connaître du tout le contenu, alors je me demandais s'il y aurait un livre qui irait un peu plus loin (je ne l'ai pas implémenté moi-même). Négliger orz Non, je ne me spécialise pas dans le deep learning ^^;).

Rencontre avec de bons livres

Ensuite, un livre avec juste le bon sentiment est sorti, alors j'ai sauté et l'ai lu en même temps. C'était un grand succès.

[Nest, Théorie de la programmation Java du Deep Learning et implémentation du Deep Learning, Impress, 2016. ](https://px.a8.net/svt/ejp?a8mat=2NZCQW+6MQUCY+249K+ BWGDT & a8ejpredirect = https% 3A% 2F% 2Fwww.amazon.co.jp% 2Fdp% 2F4844381288% 2F% 3Ftag% 3Da8-affi-271202-22)

Le concept de sa mise en œuvre avec un modèle simple mais super simple correspond à mon idée que je pense que c'est le plus utile pour comprendre! Prouvez analytiquement et terminez haut! Au lieu de cela, je pense qu'il convient de noter que l'explication est telle que les différences de caractéristiques entre les méthodes peuvent être appréhendées avec sens.

Après avoir lu ceci, je voulais connaître la partie où il y a un saut dans l'expansion mathématique et une partie un peu plus profonde. Ainsi, quand j'ai lu les livres standards suivants, j'ai eu une tête rafraîchissante.

[Okaya, Deep Learning, Kodansha, 2015. ](https://px.a8.net/svt/ejp?a8mat=2NZCQW+6MQUCY+249K+ BWGDT & a8ejpredirect = https% 3A% 2F% 2Fwww.amazon.co.jp% 2Fdp% 2F4061529021% 2F% 3Ftag% 3Da8-affi-271202-22)

[Aso et al., Deep Learning, Modern Science, supervisé par la Society of Artificial Intelligence, Kamishima ed., 2015. ](https://px.a8.net/svt/ejp?a8mat=2NZCQW+6MQUCY+249K+ BWGDT & a8ejpredirect = https% 3A% 2F% 2Fwww.amazon.co.jp% 2Fdp% 2F476490487X% 2F% 3Ftag% 3Da8-affi-271202-22)

Donc, [Nest, Théorie de la programmation Java du Deep Learning et implémentation du Deep Learning, Impress, 2016. ](Https://px.a8.net/svt/ejp?a8mat=2NZCQW+6MQUCY+249K+BWGDT&a8ejpredirect=https%3A%2F%2Fwww.amazon.co.jp%2Fdp%2F4844381288%2F%3Ft8%3a affi-271202-22) ne suffit pas simplement pour utiliser la bibliothèque, mais je pense que c'est un livre adapté aux débutants à lire pour ceux qui ont du mal à entrer soudainement dans un livre spécialisé.

Si vous vous spécialisez dans les réseaux de neurones convolutionnels (CNN), les livres suivants sont de loin les meilleurs. Bien que spécialisé dans CNN, il contribue définitivement à la compréhension de cette implémentation.

[Saito, Deep Learning from scratch-Theory et implémentation du deep learning appris de Python, O'Reilly Japan, 2016. ](https://px.a8.net/svt/ejp?a8mat=2NZCQW + 6MQUCY + 249K + BWGDT & a8ejpredirect = https% 3A% 2F% 2Fwww.amazon.co.jp% 2Fdp% 2F4873117585% 2F% 3Ftag% 3Da8-affi-271202-22)

[Théorie de la programmation Java du Deep Learning et implémentation du Deep Learning](https://px.a8.net/svt/ejp?a8mat=2NZCQW+6MQUCY+249K+BWGDT&a8ejpredirect=https%3A%2F%2Fwww.amazon.co.jp % 2Fdp% 2F4844381288% 2F% 3Ftag% 3Da8-affi-271202-22) traite également de CNN, vous pouvez donc bien sûr le comprendre considérablement ici aussi. Je pense que ce livre est excellent en ce qu'il compare les méthodes typiques à vol d'oiseau en peu de temps.

Deep Learning from scratch expliquait exactement à partir des bases des bases des réseaux de neurones, et en attendant, il était connecté à CNN! L'impression est qu'elle est structurée comme une histoire.

Migrer vers Python

[Théorie de la programmation Java du Deep Learning et implémentation du Deep Learning](https://px.a8.net/svt/ejp?a8mat=2NZCQW+6MQUCY+249K+BWGDT&a8ejpredirect=https%3A%2F%2Fwww.amazon.co.jp J'ai pu exécuter l'exemple de code Java décrit dans% 2Fdp% 2F4844381288% 2F% 3Ftag% 3Da8-affi-271202-22), mais j'ai pensé que ce serait ennuyeux de l'exécuter. Alors cette fois, j'ai décidé de passer moi-même à Python.

Les cibles sont *** Deep Belief Nets (DBN) *** et *** Stacked Denoising Autoencoders (SDA) ***,

Ce qui est génial, c'est l'auteur, M. Negago, et je roule gratuitement. Cependant, j'ai pensé que ce serait un acte assez fou de simplement bouger sans réfléchir, alors j'ai fait les règles suivantes.

Je viens de dire que c'était une copie un peu stricte du sutra.

Présentation du code Python

Emplacement du code

Le code est publié ci-dessous.

Méthode d'exécution

La méthode d'exécution de chaque algorithme est la suivante.

cd <cloned path>/DeepLearningWithPython/DeepNeuralNetworks
python DeepBeliefNets.py
cd <cloned path>/DeepLearningWithPython/DeepNeuralNetworks
python StackedDenoisingAutoencoders.py

Pour la configuration logicielle, [Théorie de la programmation Java Deep Learning et implémentation du Deep Learning](https://px.a8.net/svt/ejp?a8mat=2NZCQW+6MQUCY+249K+BWGDT&a8ejpredirect=https%3A%2F%2Fwww. Amazon.co.jp% 2Fdp% 2F4844381288% 2F% 3Ftag% 3Da8-affi-271202-22), veuillez donc vous y référer.

résultat

Les trois types de résultats suivants sont générés.

-------------------------------
DBN(or SDA) Regression model evaluation
-------------------------------
Accuracy:  100.0 %
Precision:
class 1: 100.0 %
class 2: 100.0 %
class 3: 100.0 %
Recall:
class 1: 100.0 %
class 2: 100.0 %
class 3: 100.0 %

La signification de chaque résultat est la suivante.

Il est exprimé par une formule mathématique comme suit.

Accuracy = \frac{TP + TN}{TP + TN + FP + FN} \\
Precision = \frac{TP}{TP + FP} \\
Recall = \frac{TP}{TP + FN}

La répartition des TP, TN, FP et FN est indiquée dans le tableau ci-dessous.

Positif et prédit Négatif et prédit
Correct est correct True Positive (TP) False Negative (FN)
Le négatif est correct False Positive (FP) True Negative (TN)

--Référence: Nest cage, 2.5 Théorie et algorithme des réseaux neuronaux: programmation Java Deep Learning Théorie et implémentation de l'apprentissage profond, p.47, Impress, 2016.

Aperçu du traitement

Modèle de réseau

Le modèle de réseau utilisé est le même pour les deux DBN / SDA.

Flux d'apprentissage

Pour les deux DBN / SDA, vous apprendrez comme suit.

pre_training.png

--Réglage fin

fine_tuning.png

Différence approximative entre DBN / SDA

Les deux méthodes utilisent exactement le même modèle et les données de test créées de la même manière peuvent être correctement apprises. Si vous obtenez presque les mêmes résultats avec des méthodes différentes, quelle est la différence? Cela m'inquiète.

Point commun

On peut dire que le point commun des deux méthodes est d'obtenir des paramètres qui correspondent aux données d'entrée / sortie du réseau à deux couches. Dans le cas de DBN, en raison des caractéristiques du réseau de machines Boltzmann, *** données d'entrée *** et *** état *** sont comparées, mais si vous fermez les yeux sur les détails, ils sont essentiellement les mêmes. Je fais ça.

De plus, en utilisant des données avec divers bruits ajoutés à l'étape d'apprentissage, il est également courant qu'il résiste au bruit lorsqu'il est identifié en production. On peut interpréter qu'il y a une différence dans la façon dont le bruit est donné.

Différence

Dans le cas du DBN, il est déterminé de manière probabiliste si le neurone est activé ou non. Même s'ils sont dans le même état, ils peuvent ou non être activés. Cette caractéristique correspond à l'ajout automatique de bruit aux paramètres en cours d'apprentissage. L'algorithme ajoute du bruit sans autorisation.

D'un autre côté, dans le cas du SDA, un peu de bruit est ajouté aux données d'entraînement, puis entré dans le dispositif d'apprentissage. En effet, l'algorithme n'a pas la propriété de s'ajouter du bruit à lui-même car il procède de manière déterministe.

De ces points de vue, on peut comprendre qu'il existe les différences de fonctionnalités suivantes.

Il semble qu'il y ait encore des points de vue différents sur la question de savoir comment ces caractéristiques affectent l'apprentissage et pourquoi l'initialisation de cette manière fonctionne pour l'apprentissage en réseau profond. Mon esprit n'est pas encore organisé, alors je vais m'abstenir de le dire ici lol ^^;

en conclusion

Même s'il y avait un exemple de programme qui pouvait être utilisé comme référence, en bougeant mes propres mains et en l'implémentant, j'ai acquis un peu de compréhension du Deep Learning.

Si les informations publiées ici sont utiles à quiconque, je serais plus qu'heureux.

Je n'ai pas encore fait d'abandons ou d'implémentation CNN, mais je le referai quand j'en aurai envie ^^

Les références

Recommended Posts

[Python] Deep Learning: J'ai essayé d'implémenter Deep Learning (DBN, SDA) sans utiliser de bibliothèque.
J'ai essayé d'implémenter un pseudo pachislot en Python
J'ai essayé d'implémenter Cifar10 avec la bibliothèque SONY Deep Learning NNabla [Nippon Hurray]
J'ai essayé d'implémenter Deep VQE
J'ai essayé l'apprentissage en profondeur avec Theano
J'ai essayé d'implémenter un automate cellulaire unidimensionnel en Python
J'ai essayé d'héberger un modèle d'apprentissage en profondeur de TensorFlow à l'aide de TensorFlow Serving
J'ai fait un chronomètre en utilisant tkinter avec python
J'ai essayé d'implémenter Perceptron Part 1 [Deep Learning from scratch]
J'ai essayé d'écrire dans un modèle de langage profondément appris
J'ai essayé de comprendre attentivement la fonction d'apprentissage dans le réseau de neurones sans utiliser la bibliothèque d'apprentissage automatique (première moitié)
J'ai essayé d'implémenter la permutation en Python
J'ai essayé de créer une expression régulière de "montant" en utilisant Python
[Python] J'ai essayé d'implémenter un tri stable, alors notez
J'ai essayé de créer une expression régulière de "temps" en utilisant Python
J'ai essayé d'implémenter PLSA dans Python 2
J'ai essayé de créer une expression régulière de "date" en utilisant Python
J'ai essayé de mettre en œuvre un jeu de dilemme de prisonnier mal compris en Python
J'ai essayé d'implémenter ADALINE en Python
J'ai essayé d'implémenter PPO en Python
J'ai essayé de créer une application todo en utilisant une bouteille avec python
J'ai essayé de mettre en œuvre un apprentissage en profondeur qui n'est pas profond avec uniquement NumPy
Mayungo's Python Learning Episode 6: J'ai essayé de convertir une chaîne de caractères en nombre
[Deep Learning from scratch] J'ai essayé d'implémenter la couche sigmoïde et la couche Relu
J'ai essayé l'histoire courante de l'utilisation du Deep Learning pour prédire la moyenne Nikkei
J'ai créé un exemple pour accéder à Salesforce en utilisant Python et Bottle
J'ai essayé d'implémenter le jeu de cartes de Trump en Python
J'ai essayé d'implémenter TOPIC MODEL en Python
J'ai essayé de lire un fichier CSV en utilisant Python
J'ai essayé d'implémenter le tri sélectif en python
J'ai créé un jeu ○ ✕ avec TensorFlow
J'ai essayé le deep learning
J'ai essayé de comprendre attentivement la fonction d'apprentissage dans le réseau de neurones sans utiliser la bibliothèque d'apprentissage automatique (deuxième moitié)
J'ai essayé d'utiliser la bibliothèque Python "pykakasi" qui peut convertir des kanji en romaji.
[Analyse des brevets] J'ai essayé de créer une carte des brevets avec Python sans dépenser d'argent
J'ai essayé d'extraire le dessin au trait de l'image avec Deep Learning
J'ai essayé d'implémenter diverses méthodes d'apprentissage automatique (modèle de prédiction) en utilisant scicit-learn
J'ai essayé d'implémenter ce qui semble être un outil de snipper Windows avec Python
Je veux facilement implémenter le délai d'expiration en python
J'ai essayé d'implémenter Mine Sweeper sur un terminal avec python
J'ai essayé d'implémenter le poker de Drakue en Python
J'ai essayé d'implémenter le perceptron artificiel avec python
J'ai essayé d'implémenter GA (algorithme génétique) en Python
[Python] J'ai essayé d'exécuter un serveur local en utilisant flask
J'ai essayé de dessiner une pseudo figure fractale en utilisant Python
J'ai créé une bibliothèque python qui fait rouler le rang
[Deep Learning from scratch] J'ai essayé d'expliquer le décrochage
J'ai essayé d'utiliser Python (3) au lieu d'un calculateur de fonctions
J'ai essayé d'accéder aux feuilles de calcul Google en utilisant Python
J'ai essayé de dessiner un diagramme de configuration à l'aide de diagrammes
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
J'ai essayé de faire une simulation de séparation de source sonore en temps réel avec l'apprentissage automatique Python
J'ai essayé d'implémenter PCANet
J'ai essayé d'implémenter StarGAN (1)