Question

Je m'intéressais un peu aux réseaux de neurones et je pensais en utiliser un en python pour un projet léger comparant diverses techniques de minimisation dans un domaine temporel (le plus rapide).

Ensuite, j'ai réalisé que je ne savais même pas si un NN était bon pour la minimisation. Qu'en penses-tu?

Était-ce utile?

La solution

Les réseaux de neurones sont des classificateurs. Ils séparent deux classes d'éléments de données. Ils apprennent cette séparation (généralement) par des éléments de données préclassés. Ainsi, je dis: Non, à moins que vous ne fassiez un grand effort au-delà de la rupture.

Autres conseils

Cela me semble être un problème qui convient davantage aux algorithmes génétiques aux réseaux de neurones. Les réseaux neuronaux ont tendance à nécessiter un problème délicat à résoudre, nécessitant une formation sur la base de données connues, etc. - alors que les algorithmes génétiques permettent de trouver de meilleures solutions approximatives à un problème sans nécessiter de formation.

La rétro-propagation fonctionne en minimisant l'erreur. Cependant, vous pouvez vraiment minimiser ce que vous voulez. Vous pouvez donc utiliser des règles de mise à jour similaires à celles du back-prop pour trouver les entrées du réseau de neurones artificiels minimisant les sorties.

C'est une grande question, désolé pour la réponse courte. Je devrais également ajouter que mon approche suggérée semble plutôt inefficace par rapport à des méthodes plus établies et ne trouverait qu'un minimum local.

Le processus d'apprentissage d'un réseau de neurones à rétro-propagation fonctionne en minimisant l'erreur du résultat optimal. Mais avoir un réseau de neurones formé à la recherche du minimum d’une fonction inconnue serait assez difficile.

Si vous limitez le problème à une classe de fonctions spécifique, cela pourrait fonctionner et être assez rapide aussi. Les réseaux de neurones sont efficaces pour rechercher des modèles, s’il en existe.

Ils sont très mauvais pour le but; L’un des gros problèmes des réseaux de neurones est qu’ils restent bloqués dans les minima locaux. Vous voudrez peut-être examiner les machines à vecteurs de support.

En fait, vous pouvez utiliser le NN pour trouver un minimum de fonctions, mais cela fonctionnerait mieux avec les algorithmes génétiques mentionnés par Erik . .

En gros, NN tente de trouver des solutions qui correspondent à une fonction locale minimale ou maximale, mais qui sont assez précises (pour commenter Tetha réponse indiquant que NN sont des classificateurs que vous pouvez utiliser si vous le dites, l'entrée de données est minimale ou non)

En revanche, les algorithmes génétiques ont tendance à trouver une solution plus universelle à partir de l’ensemble des entrées possibles, mais vous donnent ensuite les résultats immédiats.

La solution consiste à combiner les 2 mondes

  1. Obtenir le résultat approximatif des algorithmes génétiques
  2. Utilisez ce résultat pour trouver la réponse plus précise en utilisant NN

Vous pouvez apprendre à un NN à approximer une fonction. Si une fonction est différentiable ou si votre NN a plus d’une couche cachée, vous pouvez lui apprendre à donner une dérivée d’une fonction.

Exemple:

You can train  a 1 input 1 output NN to give output=sin(input)

You can train it also give output=cos(input) which is derivative of sin()

You get a minima/maxima of sin when you equate cos to zero.

Scan for zero output while giving many values from input. 0=cos() -> minima of sin

Lorsque vous atteignez une sortie nulle, vous savez que la valeur d'entrée est le minimum de la fonction.

L’entraînement prend moins de temps, le balayage pour zéro dure longtemps.

Bien que cela arrive un peu trop tard pour l'auteur de cette question. Peut-être que quelqu'un veut tester des algorithmes d'optimisation, quand il lit ceci ...

Si vous travaillez avec des régressions en apprentissage automatique (NN, SVM, régression linéaire multiple, K le plus proche voisin) et que vous souhaitez minimiser (maximiser) votre fonction de régression, c'est en fait possible, mais l'efficacité de tels algorithmes dépend la douceur (taille des pas, etc.) de la région dans laquelle vous recherchez.

Pour construire ces "régressions d’apprentissage par la machine" vous pouvez utiliser scikit- learn . Vous devez former et valider votre MLR Régression de vecteur de support . (méthode "ajustement")

SVR.fit(Sm_Data_X,Sm_Data_y)

Vous devez ensuite définir une fonction qui renvoie une prédiction de votre régression pour un tableau "x".

def fun(x):
    return SVR.predict(x)

Vous pouvez utiliser scipiy.optimize.minimize pour l'optimisation. Voir les exemples suivant les doc-links.

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