Question

Comment définir des réseaux de neurones afin qu’ils acceptent et produisent une plage de valeurs continue au lieu de valeurs discrètes? D'après ce que je me souviens d'avoir fait pendant un cours sur le réseau de neurones il y a quelques années, la fonction d'activation serait un sigmoïde, ce qui donne une valeur comprise entre 0 et 1. Si je veux que mon réseau de neurones produise un scalaire à valeur réelle, que dois-je faire? ? Je pensais que si je voulais une valeur comprise entre 0 et 10, je pourrais simplement multiplier la valeur par 10? Et si j'ai des valeurs négatives? Est-ce ce que les gens font habituellement ou y a-t-il un autre moyen? Qu'en est-il de l'entrée?

Merci

Était-ce utile?

La solution

Une grande partie du travail dans le domaine de la neuroevolution implique l'utilisation de réseaux de neurones à entrées continues et les sorties.

Il existe plusieurs approches communes:

  • Un noeud par valeur
    • Fonctions d'activation linéaires : comme d'autres l'ont déjà noté, vous pouvez utiliser des fonctions d'activation non sigmoïdes sur les nœuds de sortie si vous vous inquiétez de la gamme limitée de fonctions sigmoïdes. Toutefois, votre production peut devenir arbitrairement volumineuse, ce qui peut poser des problèmes lors de la formation.
    • Fonctions d'activation sigmoïde : la simple mise à l'échelle de la sortie sigmoïde (ou le décalage et la mise à l'échelle, si vous souhaitez des valeurs négatives) est une approche courante de la neuroévolution. Cependant, il vaut la peine de s’assurer que votre fonction sigmoïde n’est pas trop raide: une fonction d’activation raide signifie que le paramètre "utile" la plage de valeurs est petite, ce qui oblige les poids de réseau à être petits. (Ceci est principalement un problème avec les algorithmes génétiques, qui utilisent une stratégie de modification de poids fixe qui ne fonctionne pas bien lorsque des poids faibles sont souhaités.)

 sigmoïde standard
(source: natekohl.net )
sigmoïde raide
(source: natekohl.net )

  • Plusieurs noeuds par valeur : la stratégie courante pour représenter des entrées continues consiste à étaler une seule valeur continue sur plusieurs noeuds. Il offre l’avantage de fournir davantage de & "fonctionnalités". pour pouvoir jouer avec un réseau, au prix d’une augmentation de la taille du réseau.
    • Binning : étendez une seule entrée sur plusieurs nœuds (par exemple, réseaux RBF , où chaque nœud est une fonction de base avec un centre différent qui sera partiellement activé par l'entrée). Vous bénéficiez de certains avantages des entrées discrètes sans perdre une représentation fluide.
    • Représentation binaire - divisez une seule valeur continue en 2 fragments N , puis transmettez cette valeur au réseau sous forme de modèle binaire à N nœuds. Cette approche est compacte mais fragile et donne lieu à des modifications qui ne sont pas continues.

Autres conseils

Aucune règle n'impose à la sortie (*) d'être une fonction particulière . En fait, nous devons généralement ajouter des opérations arithmétiques à la fin de la fonction implémentée dans un nœud donné, afin de mettre à l'échelle et de contraindre autrement la sortie à une forme particulière.

L’avantage de travailler avec des sorties tout-ou-rien et / ou avec une sortie normalisée de 0,0 à 1,0 est que cela rend les choses plus faciles à manipuler, tout en évitant les problèmes de débordement et autres.

(*) " Sortie " On peut comprendre ici soit la sortie d’un noeud (neurone) donné du réseau, soit celle du réseau dans son ensemble.
Comme indiqué par Mark Bessey, l’entrée [au réseau dans son ensemble] et la sortie [du réseau] reçoivent généralement un filtrage / une conversion. Comme indiqué dans cette réponse et dans le commentaire de Mark, il peut être préférable d’avoir des nœuds normalisés / standard dans le champ "masqué". des couches du réseau et appliquer une certaine normalisation / conversion / discrétisation selon les besoins pour l’entrée et / ou pour la sortie du réseau; Une telle pratique n’est toutefois qu’une question d’ordre pratique et non une exigence impérative des réseaux de neurones en général.

Vous aurez généralement besoin de filtrer (conversion de niveau, etc.) à la fois l’entrée et la sortie. Évidemment, le filtrage de l'entrée modifiera l'état interne, il faut donc veiller à ne pas perdre le signal sur lequel vous essayez de vous entraîner.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top