[PYTHON] [Deep Learning from scratch] J'ai essayé d'expliquer la confirmation du gradient d'une manière facile à comprendre.

introduction

Cet article est une sortie facile à comprendre de ** Deep Learning from scratch Chapter 6 Error back propagation method **. J'ai pu le comprendre moi-même, j'espère donc que vous pourrez le lire confortablement. De plus, je serais plus qu'heureux si vous pouviez vous y référer lors de l'étude de ce livre.

Qu'est-ce que la confirmation de gradient?

La formule de gradient par la méthode de propagation de retour d'erreur implémentée dans l'article précédent est très compliquée, il y a donc une forte possibilité que des erreurs se produisent. Cependant, il doit être utilisé car la vitesse de traitement est extrêmement rapide. Par conséquent, il est important de vérifier s'il y a une erreur dans l'équation de gradient par la méthode de propagation de retour d'erreur. C'est ce qu'on appelle la confirmation de gradient, et une équation de gradient de différenciation numérique simple à faire et comportant peu d'erreurs est utilisée pour la confirmation du gradient.

Bien que la vitesse de traitement de la formule de gradient différentiel numérique soit lente, il y a peu d'erreurs en raison de sa construction simple. Par conséquent, ce qui est fait par la confirmation de gradient est de confirmer le gradient obtenu à partir de l'équation de gradient de différenciation numérique et l'erreur de gradient obtenue par l'équation de gradient par la méthode de propagation d'erreur.

Maintenant, je voudrais le mettre en œuvre.

#Ajoutez l'équation de gradient différentiel numérique suivante à la méthode de classe de réseau neuronal
def slopeing_grad_net(self,x,t):#Formule de gradient différentiel numérique pour confirmer si la méthode de propagation des erreurs est correcte
    loss_c = lambda W: self.loss(x, t) 
        
    grads_t = {}
    grads_t['W1'] = slopeing_grad(loss_c,self.params['W1'])
    grads_t['b1'] = slopeing_grad(loss_c,self.params['b1'])
    grads_t['W2'] = slopeing_grad(loss_c,self.params['W2'])
    grads_t['b2'] = slopeing_grad(loss_c,self.params['b2'])
        
    return grads_t

#Vérification du gradient
#Émettre un mini lot
x_train, x_test, t_train, t_test = dataset['train_img'], dataset['test_img'], \
                                            dataset['train_label'], dataset['test_label']

x_batch = x_train[:3]
t_batch = t_train[:3]

netwark = LayerNet(input_size = 784, hiden_size = 50, output_size = 10)
#Mettez chaque dégradé
grad_slope = netwark.slopeing_grad_net(x_batch, t_batch)
grad_new = netwark.gradient(x_batch, t_batch)

for key in grad_slope.keys(): #Comparez ces différences
    diff = np.average(np.abs(grad_new[key] - grad_slope[key]))
    print(key + ':' + str(diff))


W1:0.03976913034251971
b1:0.0008997051177847986
W2:0.3926011094391389
b2:0.04117287920452093

Vérifiez la moyenne des erreurs de gradient avec un code comme celui ci-dessus pour voir si les erreurs sont dans la plage.

Recommended Posts

[Deep Learning from scratch] J'ai essayé d'expliquer la confirmation du gradient d'une manière facile à comprendre.
[Deep Learning from scratch] J'ai essayé d'expliquer le décrochage
[Pour les débutants] Je souhaite expliquer le nombre d’apprentissage d’une manière facile à comprendre.
[Python] J'ai essayé de résumer le type collectif (ensemble) d'une manière facile à comprendre.
J'ai essayé d'implémenter Perceptron Part 1 [Deep Learning from scratch]
J'ai essayé d'expliquer comment obtenir le contenu de l'article avec l'API MediaWiki d'une manière facile à comprendre avec des exemples (Python 3)
Je vais vous expliquer comment utiliser Pandas d'une manière facile à comprendre.
[Deep Learning from scratch] J'ai essayé d'implémenter la couche sigmoïde et la couche Relu
J'ai essayé de résumer Cpaw Level1 & Level2 Write Up d'une manière facile à comprendre
J'ai essayé de comprendre l'apprentissage supervisé de l'apprentissage automatique d'une manière facile à comprendre, même pour les ingénieurs serveurs 1
[Python] J'ai essayé d'expliquer des mots difficiles à comprendre pour les débutants d'une manière facile à comprendre.
J'ai essayé de comprendre l'apprentissage supervisé de l'apprentissage automatique d'une manière facile à comprendre, même pour les ingénieurs serveurs 2
Introduction au Deep Learning (1) --Chainer est expliqué d'une manière facile à comprendre pour les débutants-
[Deep Learning from scratch] J'ai implémenté la couche Affine
[Python] [Traitement du langage naturel] J'ai essayé le Deep Learning ❷ fait de toutes pièces en japonais ①
J'ai essayé d'extraire le dessin au trait de l'image avec Deep Learning
"Deep Learning from scratch" Mémo d'auto-apprentissage (n ° 16) J'ai essayé de créer SimpleConvNet avec Keras
"Deep Learning from scratch" Mémo d'auto-apprentissage (n ° 17) J'ai essayé de créer DeepConvNet avec Keras
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'auto-apprentissage "Deep Learning from scratch" (partie 8) J'ai dessiné le graphique du chapitre 6 avec matplotlib
"Deep Learning from scratch" avec Haskell (inachevé)
[Deep Learning from scratch] À propos des couches requises pour implémenter le traitement de rétropropagation dans un réseau neuronal
J'ai essayé l'histoire courante de l'utilisation du Deep Learning pour prédire la moyenne Nikkei
Deep Learning from scratch ① Chapitre 6 "Techniques liées à l'apprentissage"
J'ai essayé d'organiser les index d'évaluation utilisés en machine learning (modèle de régression)
J'ai essayé d'exécuter le didacticiel de détection d'objets en utilisant le dernier algorithme d'apprentissage en profondeur
J'ai essayé de prédire l'évolution de la quantité de neige pendant 2 ans par apprentissage automatique
Apprentissage profond à partir de zéro
J'ai essayé le deep learning
J'ai essayé de représenter graphiquement les packages installés en Python
J'ai essayé de détecter l'iris à partir de l'image de la caméra
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
J'ai essayé de prédire les courses de chevaux en faisant tout, de la collecte de données à l'apprentissage en profondeur
[Partie 4] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
[Apprentissage automatique] Résumons la forêt aléatoire de manière simple à comprendre
Apprentissage profond à partir de zéro 1 à 3 chapitres
[Partie 1] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
[Partie 3] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
J'ai essayé de créer une API list.csv avec Python à partir de swagger.yaml
[Bouclier d'épée Pokémon] J'ai essayé de visualiser la base de jugement de l'apprentissage en profondeur en utilisant la classification des trois familles comme exemple
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
Créez un environnement pour "Deep Learning from scratch" avec Docker
J'ai essayé de résumer le code souvent utilisé dans Pandas
J'ai essayé d'illustrer le temps et le temps du langage C
Un amateur a trébuché dans le Deep Learning ❷ fait de zéro Note: Chapitre 1
[Partie 2] Utilisez le Deep Learning pour prévoir la météo à partir d'images météorologiques
Un amateur a trébuché dans le Deep Learning ❷ fait à partir de zéro Note: Chapitre 4
J'ai essayé de résumer les commandes souvent utilisées en entreprise
J'ai essayé d'implémenter la fonction d'envoi de courrier en Python
[TF] J'ai essayé de visualiser le résultat de l'apprentissage en utilisant Tensorboard
[Apprentissage automatique] J'ai essayé de résumer la théorie d'Adaboost