[PYTHON] [Deep Learning from scratch] J'ai essayé d'implémenter la couche sigmoïde et la couche Relu

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 que vous puissiez vous y référer lorsque vous étudiez ce livre.

Mise en œuvre de la couche sigmoïde

class Sigmoid: #Implémentation de couche de la fonction sigmoïde
    def __init__(self):
        self.out = None #Le traitement de rétro-propagation de la fonction sigmoïde nécessite un signal de sortie du traitement de propagation directe
        
    def forward(self, x):
        out = 1 / (1 + np.log(-x))
        self.out = out #Stockage de sortie de propagation directe
        
        return out
    
    def backward(self, dout):
        dx = dout * self.out * (1 - self.out) #Traitement pour retrouver la propagation de la fonction sigmoïde
        
        return dx

La propagation en avant traite selon la formule de la fonction sigmoïde et la renvoie avec retour. Cependant, puisque le résultat du processus de propagation vers l'avant est utilisé dans le processus de propagation arrière, il est enregistré dans la variable d'instance.

Dans le processus de rétro-propagation, ce serait assez compliqué si c'était normal, nous utilisons donc ici une formule simplifiée pour trouver la différenciation. Trouvez le différentiel de la valeur d'entrée de la couche sigmoïde en utilisant le différentiel précédent et le résultat du processus de propagation vers l'avant enregistré dans la variable d'instance.

Implémentation de la couche Relu

class Relu: #Implémentation de couche de la fonction Relu
    def __init__(self):
        self.mask = None #Si le signal d'entrée inférieur à 0 est Vrai et supérieur à 0, le tableau Faux est entré.
        
    def forward(self, x):
        self.mask = (x <= 0)
        out = x.copy()
        out[self.mask] = 0 #Réglez le signal d'entrée entre 0 et 0
        
        return out
    
    def backward(self, dout):
        dout[self.mask] = 0 #Si la propagation vers l'avant est 0, la propagation vers l'arrière est également 0, alors réglez-la sur 0 ici.
        dx = dout #D'autres héritent de la différenciation précédente
        
        return dx

Dans le processus de propagation avant, pour implémenter sans utiliser if, tout d'abord, toutes les valeurs d'entrée qui ne dépassent pas 0 sont définies sur True, et celles qui dépassent 0 sont définies sur False, et cela est stocké dans une variable d'instance. Cela sera utilisé plus tard.

Ensuite, copiez le tableau contenant les valeurs d'entrée et utilisez les tableaux True et False enregistrés précédemment pour convertir tous les True en 0. Et retournez-le avec retour.

Dans le processus de propagation arrière, tout True est converti en 0 à l'aide des tableaux True et False enregistrés dans le processus de propagation avant. Si la propagation aller est 0, la propagation inverse est également 0.

Après cela, il hérite de la différenciation précédente et la renvoie avec retour.

Recommended Posts

[Deep Learning from scratch] J'ai essayé d'implémenter la couche sigmoïde et la couche Relu
J'ai essayé d'implémenter Perceptron Part 1 [Deep Learning from scratch]
[Deep Learning from scratch] J'ai essayé d'expliquer le décrochage
[Deep Learning from scratch] J'ai implémenté la couche Affine
J'ai essayé d'implémenter Deep VQE
"Deep Learning from scratch" Mémo d'auto-apprentissage (n ° 17) J'ai essayé de créer DeepConvNet avec Keras
[Deep Learning from scratch] J'ai essayé d'expliquer la confirmation du gradient d'une manière facile à comprendre.
J'ai essayé de mettre en œuvre un apprentissage en profondeur qui n'est pas profond avec uniquement NumPy
Deep Learning from scratch ① Chapitre 6 "Techniques liées à l'apprentissage"
Apprentissage profond à partir de zéro
J'ai essayé le deep learning
J'ai essayé de classer Oba Hanana et Otani Emiri par apprentissage profond
[Deep Learning from scratch] Implémentation de couche de la fonction softmax à l'erreur d'entropie croisée
[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
J'ai essayé d'implémenter Cifar10 avec la bibliothèque SONY Deep Learning NNabla [Nippon Hurray]
J'ai essayé de classer Hanana Oba et Emiri Otani par apprentissage profond (partie 2)
J'ai essayé d'implémenter et d'apprendre DCGAN avec PyTorch
Intelligence artificielle, machine learning, deep learning pour mettre en œuvre et comprendre
J'ai essayé d'implémenter Grad-CAM avec keras et tensorflow
Apprentissage profond à partir de zéro 1 à 3 chapitres
J'ai essayé d'implémenter PCANet
J'ai essayé d'implémenter StarGAN (1)
Python vs Ruby "Deep Learning from scratch" Chapitre 3 Graphique de la fonction step, fonction sigmoid, fonction ReLU
J'ai essayé de prédire les courses de chevaux en faisant tout, de la collecte de données à l'apprentissage en profondeur
[Deep Learning from scratch] Implémentation de la méthode Momentum et de la méthode AdaGrad
J'ai essayé d'implémenter la détection d'anomalies par apprentissage de structure clairsemée
J'ai essayé d'implémenter ListNet d'apprentissage de rang avec Chainer
J'ai essayé d'écrire dans un modèle de langage profondément appris
Apprentissage profond à partir de zéro (calcul des coûts)
J'ai essayé de mettre en place une validation contradictoire
J'ai essayé l'apprentissage en profondeur avec Theano
Mémo d'apprentissage profond créé à partir de zéro
J'ai essayé d'implémenter Realness GAN
J'ai essayé de rendre le deep learning évolutif avec Spark × Keras × Docker
J'ai essayé d'extraire des noms de joueurs et de compétences d'articles sportifs
[Deep Learning from scratch] À propos des couches requises pour implémenter le traitement de rétropropagation dans un réseau neuronal
Apprentissage amélioré pour apprendre de zéro à profond
J'ai essayé d'implémenter Autoencoder avec TensorFlow
J'ai essayé d'implémenter la permutation en Python
[Mémo d'apprentissage] Le Deep Learning fait de zéro [Chapitre 7]
Apprentissage profond à partir de zéro (propagation vers l'avant)
Introduction au Deep Learning ~ Pliage et mise en commun ~
Apprentissage profond / Apprentissage profond à partir de zéro 2-Essayez de déplacer GRU
Deep learning / Deep learning made from scratch Chapitre 6 Mémo
J'ai essayé d'implémenter PLSA dans Python 2
[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]
J'ai essayé d'implémenter ADALINE en Python
Alignement d'image: du SIFT au deep learning
J'ai essayé d'implémenter PPO en Python
J'ai essayé d'implémenter CVAE avec PyTorch
"Deep Learning from scratch" avec Haskell (inachevé)
Deep learning / Deep learning made from scratch Chapitre 7 Mémo
[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
[Mémo d'apprentissage] Deep Learning fait de zéro [~ Chapitre 4]