Liste des fonctions de coût utilisées dans les réseaux de neurones, parallèlement aux applications

133

Quelles sont les fonctions de coût courantes utilisées pour évaluer les performances des réseaux de neurones?

Détails

(n'hésitez pas à sauter le reste de cette question, mon intention est simplement de fournir des éclaircissements sur la notation que les réponses peuvent utiliser pour les aider à être plus compréhensibles par le lecteur en général)

Je pense qu’il serait utile d’avoir une liste de fonctions de coûts communes, ainsi que quelques manières de les utiliser dans la pratique. Donc, si d'autres personnes s'intéressent à cela, je pense qu'un wiki de communauté est probablement la meilleure approche, ou nous pouvons le supprimer s'il est hors sujet.

Notation

Donc, pour commencer, j'aimerais définir une notation que nous utilisons tous pour décrire celles-ci, afin que les réponses correspondent bien les unes aux autres.

Cette notation est extraite du livre de Neilsen .

Un réseau de neurones Feedforward est constitué de plusieurs couches de neurones connectées entre elles. Ensuite, il prend une entrée, cette entrée "ruisselle" à travers le réseau, puis le réseau de neurones renvoie un vecteur de sortie.

Plus formellement, appelez aji l'activation (ou sortie) du jth neurone dans la couche ith , où aj1 est l' élément jth du vecteur d'entrée.

Ensuite, nous pouvons relier l'entrée de la couche suivante à la précédente via la relation suivante:

aji=σ(k(wjkiaki1)+bji)

est la fonction d'activation,σ

est le poids du k t h neurone dans lacouche ( i - 1 ) t h au j t h neurone dans la i t h couche,wjkikth(i1)thjthith

est le biais duneurone j t h dans lacouche i t h , etbjijthith

représente la valeur d'activation du j t h neurone dans la i t h couche.ajijthith

Parfois , on note pour représenter Σ k ( w i j ka i - 1 k ) + b i j , en d' autres termes, la valeur d'activation d'un neurone avant l' application de la fonction d'activation.zjik(wjkiaki1)+bji

entrez la description de l'image ici

Pour une notation plus concise, nous pouvons écrire

ai=σ(wi×ai1+bi)

IRna1=Ia2a3am

introduction

Une fonction de coût est une mesure de la "qualité" d'un réseau de neurones par rapport à son échantillon d'apprentissage donné et à la sortie attendue. Cela peut également dépendre de variables telles que les poids et les biais.

Une fonction de coût est une valeur unique, pas un vecteur, car elle évalue la qualité du réseau de neurones dans son ensemble.

Plus précisément, une fonction de coût est de la forme

C(W,B,Sr,Er)

WBSrEryjizjijiWBSr

δL

δjL=CajLσ(zji)

Qui peut également être écrit en tant que vecteur via

δL=aCσ(zi)

Nous allons fournir le gradient des fonctions de coût en termes de seconde équation, mais si l'on veut prouver ces résultats eux-mêmes, il est recommandé d'utiliser la première équation car il est plus facile de travailler avec.

Exigences de la fonction de coût

Pour être utilisée dans la rétropropagation, une fonction de coût doit posséder deux propriétés:

C

C=1nxCx

Cxx

Ainsi, cela nous permet de calculer la pente (en ce qui concerne les poids et les biais) pour un seul exemple d’entraînement et d’exécuter Gradient Descent.

CaL

ajizji

0ajL1jajLajL0

Phylliida
la source
3
Ceci est un site de questions-réponses, et le format de cet article ne correspond pas vraiment à cela. Vous devriez probablement mettre la majorité du contenu dans une réponse et ne laisser que la question (par exemple, qu'est-ce qu'une liste des fonctions de coût utilisées dans les NN?).
Roger Fan
D'accord, est-ce mieux? Je pense que les définitions sont importantes sinon les réponses deviennent vagues pour ceux qui ne connaissent pas la terminologie utilisée par l'auteur.
Phylliida
Mais que se passe-t-il si une réponse différente utilise une notation ou une terminologie différente?
Roger Fan
3
L'idée est que tout le monde utilise la même terminologie ici, et que si c'est différent, nous le convertissons en ceci, donc les réponses "s'accordent" les unes aux autres. Mais je suppose que je pourrais retirer ce morceau si vous ne le trouvez pas utile.
Phylliida
1
Je pense simplement que les détails de la question ne sont pas vraiment nécessaires ou pertinents. Cela semble un peu excessif et contraignant, mais ce n'est que moi.
Roger Fan

Réponses:

85

Voici ceux que j'ai compris jusqu'ici. La plupart d’entre eux fonctionnent mieux quand on leur donne des valeurs entre 0 et 1.

Coût quadratique

Également appelé erreur quadratique moyenne , maximum de vraisemblance et erreur somme quadratique , il est défini comme suit:

CMST(W,B,Sr,Er)=0.5j(ajLEjr)2

r

aCMST=(aLEr)

Coût d'entropie croisée

Également connu sous le nom de log-vraisemblance négative de Bernoulli et d' entropie croisée binaire

CCE(W,B,Sr,Er)=j[Ejr ln ajL+(1Ejr) ln (1ajL)]

r

aCCE=(aLEr)(1aL)(aL)

Coût exponentiel

τ

CEXP(W,B,Sr,Er)=τ exp(1τj(ajLEjr)2)

exp(x)ex

r

aC=2τ(aLEr)CEXP(W,B,Sr,Er)

CEXPCEXP

Distance de Hellinger

CHD(W,B,Sr,Er)=12j(ajLEjr)2

01

r

aC=aLEr2aL

Divergence de Kullback – Leibler

Aussi connu sous le nom d' information Divergence , gain d' information , entropie relative , KLIC ou KL Divergence (voir ici ).

DKL(PQ)=iP(i)lnP(i)Q(i)

QDKL(PQ)QPP=EiQ=aLajiEji

CKL(W,B,Sr,Er)=jEjrlogEjrajL

P=EiQ=aL

r

aC=EraL

Divergence généralisée de Kullback – Leibler

À partir d' ici .

CGKL(W,B,Sr,Er)=jEjrlogEjrajLj(Ejr)+j(ajL)

r

aC=aLEraL

Itakura – Saito distance

Aussi d' ici .

CGKL(W,B,Sr,Er)=j(EjrajLlogEjrajL1)

r

aC=aLEr(aL)2

((aL)2)j=ajLajL(aL)2aL

Phylliida
la source
Merci pour le partage, vous pouvez également prendre en compte les éléments suivants: github.com/torch/nn/blob/master/doc/criterion.md
Yannis Assael,
2
vous avez une petite erreur dans le dénominateur du dérivé de l'entropie croisée, il ne devrait a*(1-a)pas en être a*(1+a)
autrement
1
Il serait également intéressant d’afficher la fonction de perte de flipper afin de minimiser les quantiles d’erreur plutôt que l’erreur moyenne. Très utilisé dans les systèmes d'aide à la décision.
Ricardo Cruz
Où puis-je voir des graphiques pour ceux-ci?
Coiso
1
20

Vous n'avez pas la réputation de commenter, mais il y a des erreurs de signe dans les 3 derniers gradients.

C=jEjlog(Ej/aj)=jEjlog(Ej)Ejlog(aj)dC=jEjdlog(aj)=j(Ej/aj)dajaC=Ea
Cette même erreur de signe apparaît dans la divergence généralisée de KL.

C=j(Ej/aj)log(Ej/aj)1=j(Ej/aj)log(Ej)+log(aj)1dC=j(Ej/aj2)daj+dlog(aj)=j(1/aj)daj(Ej/aj2)daj=j(ajEj)/aj2dajaC=aE(a)2
franc
la source