Mémo d'étude Python & Machine Learning ④: Machine Learning par rétro-propagation

introduction

① https://qiita.com/yohiro/items/04984927d0b455700cd1 ② https://qiita.com/yohiro/items/5aab5d28aef57ccbb19c ③ https://qiita.com/yohiro/items/cc9bc2631c0306f813b5 A continué

Apprentissage automatique avec rétro-propagation

Le poids des neurones dans la couche de sortie est ajusté en fonction de l'erreur entre la sortie et la bonne réponse. De plus, le poids des neurones dans la couche intermédiaire est ajusté en fonction des poids des neurones dans la couche de sortie.

Couche intermédiaire - Réglage du poids de la couche de sortie

Couche intermédiaire - L'ajustement du poids de la couche de sortie peut être obtenu par la formule suivante.

\delta_{mo} = (Valeur de sortie-Valeur de réponse correcte) \Différenciation des temps de sortie\\
Montant de la correction= \delta_{mo} \fois la valeur de la couche intermédiaire\coefficient d'apprentissage des temps

Différenciation de la fonction sigmoïde

En ce qui concerne la "différenciation de la sortie" dans la formule ci-dessus, la différenciation de la fonction sigmoïde $ f (x) = \ frac {1} {1 + e ^ x} $ utilisée dans la fonction d'activation du réseau de neurones cette fois est la suivante. peut obtenir.

f(x)' = f(x)\cdot(1-f(x))

Référence: https://qiita.com/yosshi4486/items/d111272edeba0984cef2

Code source

class NeuralNetwork:
    #Poids d'entrée
    w_im = [[1.0, 1.0], [1.0, 1.0], [1.0, 1.0]]  # [[i1-m1, i1-m2], [i2-m1, i2-m2], [bias1-m1, bias1-m2]]
    w_mo = [1.0, 1.0, 1.0]  # [m1-o, m2-o, bias2-0]
    #Déclaration de chaque couche
    input_layer = [0.0, 0.0, 1.0] # i1, i2, bias1
    middle_layer = [Neuron(), Neuron(), 1.0] # m1, m2, bias2
    ouput_layer = Neuron() # o

    def learn(self, input_data):

        #Valeur de sortie
        output_data = self.commit([input_data[0], input_data[1]])
        #Valeur de réponse correcte
        correct_value = input_data[2]
        #Coefficient d'apprentissage
        k = 0.3

        #Couche de sortie → Couche intermédiaire
        delta_w_mo = (correct_value - output_data) * output_data * (1.0 - output_data)
        old_w_mo = list(self.w_mo)
        self.w_mo[0] += self.middle_layer[0].output * delta_w_mo * k
        self.w_mo[1] += self.middle_layer[1].output * delta_w_mo * k
        self.w_mo[2] += self.middle_layer[2] * delta_w_mo * k

Couche d'entrée - Réglage des poids des couches intermédiaires

L'ajustement du poids de la couche d'entrée-couche intermédiaire est obtenu par la formule suivante. En ajustant le poids du neurone du premier étage en fonction du résultat de l'ajustement du neurone du deuxième étage, il est possible d'ajuster quel que soit le nombre de couches.

\delta_{im} = \delta_{mo} \fois Poids de sortie intermédiaire\fois Différenciation de la sortie de la couche intermédiaire\\
Montant de la correction= \delta_{im} \fois Valeur de la couche d'entrée\coefficient d'apprentissage des temps

Code source

class NeuralNetwork:
        ...
        #Couche intermédiaire → Couche d'entrée
        delta_w_im = [
            delta_w_mo * old_w_mo[0] * self.middle_layer[0].output * (1.0 - self.middle_layer[0].output),
            delta_w_mo * old_w_mo[1] * self.middle_layer[1].output * (1.0 - self.middle_layer[1].output)
        ]
        self.w_im[0][0] += self.input_layer[0] * delta_w_im[0] * k
        self.w_im[0][1] += self.input_layer[0] * delta_w_im[1] * k
        self.w_im[1][0] += self.input_layer[1] * delta_w_im[0] * k
        self.w_im[1][1] += self.input_layer[1] * delta_w_im[1] * k
        self.w_im[2][0] += self.input_layer[2] * delta_w_im[0] * k
        self.w_im[2][1] += self.input_layer[2] * delta_w_im[1] * k

Résultat d'apprentissage

Préparez les éléments suivants en tant que données d'entraînement learning.png

Si vous lancez les données suivantes dans le réseau neuronal formé ci-dessus ...

data_to_commit = [[34.6, 138.0], [34.6, 138.18], [35.4, 138.0], [34.98, 138.1], [35.0, 138.25], [35.4, 137.6], [34.98, 137.52], [34.5, 138.5], [35.4, 138.1]]

Vous pouvez voir qu'il est possible de déterminer s'il est classé comme Tokyo ou Kanagawa

Figure_1.png

Recommended Posts

Mémo d'étude Python & Machine Learning ④: Machine Learning par rétro-propagation
Mémo d'étude Python & Machine Learning: Préparation de l'environnement
Mémo d'étude Python & Machine Learning ③: Réseau neuronal
Mémo d'étude Python & Machine Learning ⑥: Reconnaissance des nombres
Mémo d'étude Python & Machine Learning ⑤: Classification d'Ayame
Mémo d'étude Python & Machine Learning ②: Introduction de la bibliothèque
Mémo d'étude Python & Machine Learning ⑦: Prévision du cours de l'action
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer chapitres 1 et 2
Résumé de l'apprentissage automatique par les débutants de Python
Mémo d'apprentissage de la planification des sections ~ par python ~
Mémo d'apprentissage "Scraping & Machine Learning avec Python"
[Memo] Apprentissage automatique
[Mémo d'apprentissage] Bases de la classe par python
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 10 Introduction à Cupy
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 9 Introduction à scikit-learn
Classe Python (mémo d'apprentissage Python ⑦)
Module Python (mémo d'apprentissage Python ④)
Mémo du cours d'apprentissage automatique
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 13 Formation sur les réseaux neuronaux ~ Chainer terminé
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 13 Bases du réseau neuronal
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer jusqu'à la fin du chapitre 2
Gestion des exceptions Python (mémo d'apprentissage Python ⑥)
Apprentissage automatique avec Python! Préparation
Bloc-notes de ressources d'étude d'apprentissage automatique
Mémo pratique du système d'apprentissage automatique
Commencer avec l'apprentissage automatique Python
4 [/] Quatre arithmétiques par apprentissage automatique
Mémo de construction d'environnement d'apprentissage automatique par Python
Créer un environnement d'étude d'apprentissage automatique Python avec macOS Sierra
Syntaxe de contrôle Python, fonctions (mémo d'apprentissage Python ②)
Apprentissage automatique par python (1) Classification générale
Entrée / sortie avec Python (mémo d'apprentissage Python ⑤)
<Pour les débutants> bibliothèque python <Pour l'apprentissage automatique>
Python: prétraitement dans l'apprentissage automatique: présentation
Mémo Python
mémo python
Mémo Python
mémo python
apprentissage de python
Mémo Python
Mémorandum of scraping & machine learning [technique de développement] par Python (chapitre 5)
Mémo Python
Remarques sur la grammaire Python de l'apprentissage automatique PyQ
Numéros, chaînes, types de listes Python (mémo d'apprentissage Python ①)
Faire le contrôle d'un homme sandwich par l'apprentissage automatique ver4
Amplifiez les images pour l'apprentissage automatique avec Python
Apprentissage automatique avec python (2) Analyse de régression simple
[python] Techniques souvent utilisées dans l'apprentissage automatique
Pourquoi Python est choisi pour l'apprentissage automatique
Note récapitulative sur la programmation d'apprentissage automatique Python (Jupyter)
Quatre règles de fonctionnement avec l'apprentissage automatique 6 [Commercial]
Python: prétraitement en machine learning: acquisition de données
Structure et fonctionnement des données Python (mémo d'apprentissage Python ③)
[Python] Lorsqu'un amateur commence l'apprentissage automatique
[Python] Conception d'applications Web pour l'apprentissage automatique
[En ligne] Session d'étude Python pour tous # 55 Mémo approximatif
Créer un environnement pour Python et l'apprentissage automatique (macOS)
Bibliothèque standard Python: seconde moitié (mémo d'apprentissage Python ⑨)
Une introduction à Python pour l'apprentissage automatique