[PYTHON] Note récapitulative sur le Deep Learning -4.2 Fonction de perte-

Résumé de l'explication

Le but ici est d'interpréter ce que je ne pouvais pas comprendre simplement en lisant un livre tout en étudiant le Deep Learning, et de m'en souvenir en douceur lorsque j'y repenserai plus tard. J'expliquerai le contenu du code aussi soigneusement que possible, donc j'espère que ce sera utile.

4.2 Fonction de perte

Afin d'améliorer les performances d'apprentissage d'un réseau de neurones, il est nécessaire d'approcher le paramètre de poids optimal. Utilisez cette fonction de perte comme un indice pour votre recherche. Tout d'abord, quel est le résultat de la fonction de perte       0.6094374124342252       0.4750000000000001  C'est une valeur numérique telle que. Cette valeur est petite lorsque les performances sont bonnes et élevée lorsque les performances sont mauvaises. Dans cet exemple, la valeur ci-dessous est plus petite, on peut donc dire que les performances sont plus élevées. La valeur de la sortie de la fonction de perte est utilisée comme indice pour se référer à la direction et à l'ampleur de la mise à jour du paramètre de poids.

Type de fonction de perte

Il existe différentes fonctions de perte, mais ici nous expliquerons la somme des carrés de l'erreur et de l'erreur d'entropie croisée.

1. Erreur quadratique moyenne

L'erreur de somme des carrés est calculée par la formule suivante.

E = \frac{1}{N}\sum_{i=1}^{N}(y_i -t_i)^2

Peut être représenté par. Pour expliquer la formule, la différence entre les données de valeur de sortie (y i </ sub>) et les données de valeur correcte (t i </ sub>) est mise au carré et moyennée par N pièces. Le carré doit faire de l'erreur une valeur positive. Si vous voulez une valeur positive, prenez la valeur absolue

E = \frac{1}{N}\sum_{i=1}^{N}|y_i -t_i|

Est-ce que ça va? J'ai pensé, mais apparemment, il est plus facile de faire la quadrature lors du calcul du différentiel. Je vois, il y a des cas où la valeur absolue est différenciée ...   De plus, lorsqu'il est différencié, 2 sort devant, alors ajoutez 1/2

E = \frac{1}{2}*\frac{1}{N}\sum_{i=1}^{N}(y_i -t_i)^2

Il semble que ce soit le cas.

Exemple utilisant l'erreur de somme des carrés

Cette fois, définissons la fonction avec N dans la formule ci-dessus comme 1 et voyons le résultat. y est le résultat de sortie de la fonction Softmax.

import numpy as np

#Corriger les données de réponse(one-hot-label)
t = [0,0,1,0,0]

#Définir une fonction de l'erreur de somme des carrés
def mean_squared_error(y,t):
    return 0.5 * np.sum((y-t)**2)

#Modèle 1(Fermer pour corriger les données de réponse)
y1 = [0.01,0.02,0.9,0.05,0.02]
#Motif 2(Loin des données correctes)
y2 = [0.5,0.1,0.2,0.2,0.1]

out1 = mean_squared_error(np.array(y1),np.array(t))
out2 = mean_squared_error(np.array(y2),np.array(t))

Chaque résultat est print(out1) >>> 0.006699999999999998 print(out2) >>> 0.4750000000000001 L'erreur était petite lorsqu'elle était proche des données de réponse correctes et grande lorsqu'elle en était loin. Par conséquent, dans ce cas, la somme des carrés d'erreur indique que le résultat de sortie du modèle 1 est plus adapté aux données de l'enseignant.

2. Erreur d'entropie croisée

L'erreur d'entropie croisée est calculée par la formule suivante.

E = -\sum_{k}t_klog_e{y_k}

Peut être représenté par.

La différence avec l'erreur de somme des carrés est que les données de sortie et les données de réponse correctes sont multipliées. Pour expliquer quels en sont les avantages Les données de réponse correctes sont une expression unique, et seule l'étiquette de réponse correcte est 1 et les autres sont 0. Ainsi, lorsqu'elle est appliquée à la formule ci-dessus, la valeur de E est

** Libellé correct uniquement -log y k </ sub> </ sub> ** Sinon 0

Sais-tu cela En conséquence, l'erreur d'entropie croisée est déterminée par le résultat de sortie de l'étiquette correcte. Si l'étiquette de sortie correspondant à l'étiquette de réponse correcte est ** petite **, la valeur de E sera grande, indiquant que l'erreur est grande.

Exemple utilisant l'erreur d'entropie croisée

Nous définirons la fonction de la même manière que pour l'erreur de somme des carrés, Avant cela, je vais vous expliquer le delta défini dans le code.

Comme vous pouvez le voir sur le graphique de y = logx, lim y devient ** négatif ∞ ** lorsque x-> 0. Si l'étiquette de sortie correspondant à l'étiquette de réponse correcte est ** 0 **, l'erreur d'entropie d'intersection ne peut pas être exprimée numériquement et le calcul ne peut plus continuer.

Pour éviter cela, un delta de valeur minute (10 -7 </ sup> dans le code) est inséré pour empêcher le contenu du journal de devenir 0.

import numpy as np

#Corriger les données de réponse(one-hot-label)
t = [0,0,1,0,0]

#Définir une fonction d'erreur d'entropie croisée
def cross_entropy_error(y,t):
    #Définir le delta(Veillez à ne pas ouvrir l'espace!)
    delta = 1e-7
    return -np.sum(t * np.log(y + delta))

#Modèle 1(Fermer pour corriger les données de réponse)
y1 = [0.01,0.02,0.9,0.05,0.02]
#Motif 2(Loin des données correctes)
y2 = [0.5,0.1,0.2,0.2,0.1]

out1 = cross_entropy_error(np.array(y1),np.array(t))
out2 = cross_entropy_error(np.array(y2),np.array(t))

Chaque résultat est print(out1) >>> 0.1053604045467214 print(out2) >>> 1.6094374124342252 Saviez-vous que plus la réponse est proche des données correctes, plus la valeur est petite, comme dans le cas de l'erreur de la somme des carrés?

Résumé

--La fonction de perte est un indice important pour la mise à jour des paramètres (poids et biais).


Livre de référence

[Deep Learning from scratch-Theory et implémentation du deep learning appris avec Python (japonais)](https://www.amazon.co.jp/%E3%82%BC%E3%83%AD%E3%81] % 8B% E3% 82% 89% E4% BD% 9C% E3% 82% 8BApprentissage en profondeur-% E2% 80% 95Python% E3% 81% A7% E5% AD% A6% E3% 81% B6% E3% 83% 87% E3% 82% A3% E3% 83% BC% E3% 83% 97% E3% 83% A9% E3% 83% BC% E3% 83% 8B% E3% 83% B3% E3% 82% B0% E3% 81% AE% E7% 90% 86% E8% AB% 96% E3% 81% A8% E5% AE% 9F% E8% A3% 85-% E6% 96% 8E% E8% 97% A4 -% E5% BA% B7% E6% AF% 85 / dp / 4873117585 / ref = sr_1_1? __Mk_ja_JP =% E3% 82% AB% E3% 82% BF% E3% 82% AB% E3% 83% 8A & crid = W6DVSLVW0BUS & dchild = 1 & mots-clés =% E3% 82% BC% E3% 83% AD% E3% 81% 8B% E3% 82% 89% E4% BD% 9C% E3% 82% 8Bdeep + apprentissage & qid = 1597943190 & sprefix =% E3% 82% BC % E3% 83% AD% E3% 81% 8B% E3% 82% 89% 2Caps% 2C285 & sr = 8-1)]

Recommended Posts

Note récapitulative sur le Deep Learning -4.2 Fonction de perte-
Note récapitulative sur l'apprentissage profond -4.3 Méthode de gradient
Fonction d'apprentissage profond / softmax
Introduction à l'apprentissage profond ~ Fonction de localisation et de perte ~
Introduction à l'apprentissage en profondeur ~ Approximation des fonctions ~
L'apprentissage en profondeur
Note récapitulative sur la programmation d'apprentissage automatique Python (Jupyter)
Accélérez l'apprentissage en profondeur avec le processeur Rasperry Pi 4
Python vs Ruby "Deep Learning from scratch" Chapitre 4 Implémentation de la fonction de perte
[Python] Note d'apprentissage 1
Chainer et deep learning appris par approximation de fonction
GitHub du bon livre "Deep Learning from scratch"
Apprentissage profond / rétropropagation d'erreur de la fonction sigmoïde
Mémorandum d'apprentissage profond
Commencer l'apprentissage en profondeur
[Note] Python, lors du démarrage du machine learning / deep learning [Liens]
Apprentissage en profondeur Python
Apprentissage profond × Python
Résumé Python vs Ruby "Deep Learning from scratch"
Pourquoi le Deep Metric Learning basé sur la fonction Softmax fonctionne
Deep Learning 2 from scratch 1.3 Traitement du langage naturel 1.3 Résumé
Apprenons en profondeur! Sous Windows (VS2013 + caffe + CUDA7.5 + cudnn5.1)
Cours de Deep Learning pouvant être écrasé sur place
Résumé du didacticiel d'apprentissage automatique
Premier apprentissage profond ~ Lutte ~
Python: pratique du Deep Learning
Fonctions d'apprentissage en profondeur / d'activation
Apprentissage profond à partir de zéro
Apprentissage automatique ⑤ Résumé AdaBoost
Deep learning 1 Pratique du deep learning
Apprentissage profond / entropie croisée
Premier apprentissage profond ~ Préparation ~
Résumé des arguments de la fonction Python
Première solution d'apprentissage en profondeur ~
[AI] Apprentissage métrique profond
J'ai essayé le deep learning
Python: réglage du Deep Learning
Technologie d'apprentissage en profondeur à grande échelle
Résumé de l'apprentissage RAPIDS
Un amateur a trébuché dans le Deep Learning à partir de zéro Note: Chapitre 1
"Apprenez en créant! Développement en deep learning par PyTorch" sur Colaboratory.
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 à 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 ❷ 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.
Apprentissage en profondeur avec Shogi AI sur Mac et Google Colab
Un amateur a trébuché dans le Deep Learning à partir de zéro Note: Chapitre 2