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.
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.
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.
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.
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.
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.
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?
--La fonction de perte est un indice important pour la mise à jour des paramètres (poids et biais).
[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