Dans la plupart des exemples que j'ai vus jusqu'à présent de réseaux de neurones, le réseau est utilisé pour la classification et les nœuds sont transformés avec une fonction sigmoïde. Cependant, je voudrais utiliser un réseau de neurones pour produire une valeur réelle continue (de manière réaliste, la sortie serait généralement comprise entre -5 et +5).
Mes questions sont:
1. Should I still scale the input features using feature scaling? What range?
2. What transformation function should I use in place of the sigmoid?
Je cherche à l'implémenter initialement PyBrain qui décrit ces types de couches .
Je pense donc que je devrais avoir 3 couches pour commencer (une couche d'entrée, cachée et de sortie) qui sont toutes des couches linéaires? Est-ce une manière raisonnable? Ou bien pourrais-je "étirer" la fonction sigmoïde sur la plage -5 à 5?
regression
neural-networks
Utilisateur
la source
la source
Réponses:
1 . Dois-je quand même mettre à l'échelle les entités en entrée à l'aide de la mise à l'échelle des entités? Quelle gamme?
La mise à l'échelle ne fait rien de pire. Lisez cette réponse de la FAQ du réseau de neurones de Sarle: Objet: Dois-je normaliser / standardiser / redimensionner les données? .
2 . Quelle fonction de transformation dois-je utiliser à la place du sigmoïde?
la source
Avertissement: l'approche présentée n'est pas réalisable pour les valeurs continues, mais je crois que cela a un certain poids dans la prise de décision pour le projet Smarty77 soulève un bon point sur l'utilisation d'une fonction sigmoïde redimensionnée. De façon inhérente, la fonction sigmoïde produit une probabilité, qui décrit un taux de réussite d'échantillonnage (c'est-à-dire que 95 des 100 photos avec ces caractéristiques sont avec succès «chien»). Le résultat final décrit est un résultat binaire, et la formation, utilisant l'entropie croisée binaire, décrit un processus de séparation des résultats diamétralement opposés, ce qui décourage intrinsèquement les résultats dans l'intervalle moyen. Le continuum de la sortie est simplement là pour une mise à l'échelle basée sur le nombre d'échantillons (c.-à-d. Un résultat de 0,9761 signifie que 9761 échantillons sur 10000 affichant ceux-ci ou des triats similaires sont des «chiens»), mais chaque résultat lui-même doit toujours être considéré comme binaire et non arbitrairement granulaire. En tant que tel, il ne doit pas être confondu et appliqué comme on le ferait avec des nombres réels et peut ne pas s'appliquer ici. Bien que je ne sois pas sûr de l'utilisation du réseau, je normaliserais le vecteur de sortie par lui-même. Cela peut être fait avec softmax. Cela exigera également qu'il y ait 11 sorties linéaires (bacs) du réseau (une pour chaque sortie -5 à +5), une pour chaque classe. Il fournira une valeur d'assurance pour tout «bac» étant la bonne réponse. Cette architecture pourrait être entraînée avec un codage à chaud, le 1 indiquant le bon bac. Le résultat est alors interprétable d'une manière, comme une stratégie gourmande ou un échantillonnage probabiliste. Cependant, pour le refondre en une variable continue, L'assurance de chaque indice peut être utilisée comme poids pour placer un marqueur sur une droite numérique (similaire au comportement de l'unité sigmoïde), mais cela met également en évidence le principal problème: si le réseau est assez certain, le résultat est -2 ou +3, mais absolument certain qu'il ne s'agit pas d'autre chose, +1 est-il un résultat viable? Merci pour votre considération. Bonne chance pour votre projet.
la source