La descente en gradient et de nombreuses autres méthodes sont utiles pour trouver des minima locaux dans les fonctions de coût. Ils peuvent être efficaces lorsque la fonction de coût peut être évaluée rapidement à chaque point, que ce soit numériquement ou analytiquement.
J'ai ce qui me semble être une situation inhabituelle. Chaque évaluation de ma fonction de coût coûte cher. J'essaie de trouver un ensemble de paramètres qui minimisent une surface 3D par rapport à des surfaces de vérité au sol. Chaque fois que je modifie un paramètre, je dois exécuter l'algorithme sur l'ensemble de la cohorte de l'échantillon afin de mesurer son effet. Afin de calculer un gradient, je dois modifier les 15 paramètres indépendamment, ce qui signifie que je dois régénérer toutes les surfaces et les comparer à la cohorte de l'échantillon trop de fois par gradient, et nettement trop au cours de l'optimisation.
J'ai développé une méthode pour contourner ce problème et je l'évalue actuellement, mais je suis surpris de ne pas avoir trouvé grand chose dans la littérature concernant les évaluations coûteuses de la fonction de coût. Cela me fait me demander si je ne complique pas le problème et s'il existe déjà une meilleure solution.
Mes questions sont donc essentiellement les suivantes: quelqu'un connaît-il des méthodes d'optimisation des fonctions de coût, convexes ou non, lorsque l'évaluation est lente? Ou, est-ce que je fais quelque chose de stupide en premier lieu en réexécutant l'algorithme et en le comparant si souvent avec la cohorte de l'échantillon?
la source
Réponses:
TL; DR
Je recommande d'utiliser LIPO. C’est tout à fait correct et bien meilleur que la recherche aléatoire pure (PRS). Il est également extrêmement simple à mettre en œuvre et n’a pas d’hyperparamètres. Je n'ai pas effectué d'analyse comparant LIPO à BO, mais je m'attends à ce que la simplicité et l'efficacité de LIPO impliquent qu'il sera plus performant que BO.
(Voir aussi: Quels sont les inconvénients de l'optimisation bayésienne à hyper-paramètres? )
Optimisation Bayésienne
Les méthodes de type optimisation bayésienne construisent des modèles de substitution de processus gaussiens pour explorer l'espace des paramètres. L'idée principale est que les nuplets de paramètres les plus proches auront des valeurs de fonction similaires, de sorte que l'hypothèse d'une structure de co-variance entre les points permet à l'algorithme de faire des suppositions éclairées sur le meilleur nuplet de paramètre qui mérite le plus d'être essayé. Cette stratégie aide à réduire le nombre d’évaluations de fonctions; En fait, les méthodes BO ont pour objectif de limiter le plus possible le nombre d'évaluations de fonctions tout en "utilisant le buffle entier" pour deviner avec précision le point à tester par la suite. Différents facteurs de mérite (amélioration attendue, amélioration attendue du quantile, probabilité d'amélioration, etc.) sont utilisés pour comparer les points à visiter ensuite.
Comparez cela à quelque chose comme une recherche sur grille, qui n'utilisera jamais les informations de ses évaluations de fonctions précédentes pour indiquer où aller ensuite.
Incidemment, il s’agit également d’une puissante technique d’optimisation globale qui, en tant que telle, ne fait aucune hypothèse sur la convexité de la surface. De plus, si la fonction est stochastique (par exemple, les évaluations ont un bruit aléatoire inhérent), cela peut être directement pris en compte dans le modèle GP.
D'autre part, vous devrez adapter au moins un généraliste à chaque itération (ou plusieurs, en choisissant le "meilleur", ou en calculant la moyenne des alternatives, ou des méthodes entièrement bayésiennes). Ensuite, le modèle est utilisé pour effectuer (probablement des milliers) de prédictions, généralement sous la forme d'une optimisation locale à plusieurs étapes, en observant qu'il est beaucoup moins coûteux d'évaluer la fonction de prédiction GP que la fonction sous optimisation. Mais même avec cette surcharge de calcul, il est généralement possible d'optimiser même les fonctions non-convexes avec un nombre relativement petit d'appels de fonction.
Jones et al. , "Optimisation globale efficace des fonctions coûteuses de la boîte noire", est un article largement cité sur le sujet . Mais il y a beaucoup de variations sur cette idée.
Recherche aléatoire
Même lorsque la fonction de coût est coûteuse à évaluer, la recherche aléatoire peut toujours être utile. La recherche aléatoire est extrêmement simple à mettre en œuvre. Pour un chercheur, le seul choix est de définir la probabilitép que vous souhaitez que vos résultats se situent dans un quantile q ; le reste procède automatiquement en utilisant les résultats de la probabilité de base.
Supposons que votre quantile estq= 0,95 et que vous voulez une probabilité p = 0,95 que les résultats du modèle se situent dans le top 100 × ( 1 - q) = 5 % de tous les n-uplets de l'hyperparamètre. La probabilité que tous lesn tuples tentésnesoientpasdans cette fenêtre estqn= 0,95n (car ils sont choisis indépendamment de manière aléatoire dans la même distribution), de sorte que la probabilité qu’aumoins untuple se trouve dans cette région est comprise entre1 - 0,95n . En réunissant tout, nous avons
Puisque vous avez une caractérisation probabiliste de la qualité des résultats, ce résultat peut être un outil convaincant pour convaincre votre patron que la réalisation d'expériences supplémentaires générera des rendements marginaux décroissants.
LIPO et ses variantes
C'est une arrivée passionnante qui, si elle n'est pas nouvelle , l'est certainement pour moi. Elle procède en alternant entre le placement de bornes informées sur la fonction, l'échantillonnage à partir de la meilleure liaison et l'utilisation d'approximations quadratiques. Je travaille toujours sur tous les détails, mais je pense que c'est très prometteur. Ceci est une écriture-up blog agréable , et le papier est Cédric Nicolas Malherbe et Vayatis « Optimisation globale des fonctions Lipschitz . »
la source
Je dirais que l’étalon-or actuel pour l’évaluation de la fonction (très) coûteuse de la boîte noire est l’optimisation bayésienne (globale ). Sycorax a déjà décrit certaines fonctionnalités de BO. Je ne fais donc qu'ajouter quelques informations qui pourraient être utiles.
Pour commencer, vous voudrez peut-être lire ce document d’aperçu 1 . Il en existe aussi un plus récent [2].
L’optimisation bayésienne a connu une croissance constante au cours des dernières années, avec une série d’ateliers dédiés (par exemple, BayesOpt , et des vidéos de l’atelier de Sheffield sur BO), car elle a des applications très pratiques en apprentissage automatique, telles que pour optimiser les hyper-paramètres des algorithmes ML - voir par exemple cet article [3] et la boîte à outils associée, SpearMint . Il existe de nombreux autres packages dans différentes langues qui implémentent différents types d'algorithmes d'optimisation bayésienne.
Comme je l'ai mentionné, l'exigence sous-jacente est que l'évaluation de chaque fonction soit très coûteuse, de sorte que les calculs liés aux BO ajoutent un surcoût négligeable. Pour donner une idée approximative, BO peut être vraiment utile si votre fonction évalue dans un délai de l'ordre de quelques minutes ou plus. Vous pouvez également l'appliquer pour des calculs plus rapides (par exemple, des dizaines de secondes), mais en fonction de l'algorithme que vous utilisez, vous devrez peut-être adopter diverses approximations. Si votre fonction évalue en secondes , je pense que vous repoussez les limites de la recherche actuelle et que d'autres méthodes pourraient devenir plus utiles. De plus, je dois dire que BO est rarement vraiment une boîte noire et que vous devez souvent modifier les algorithmes, parfois énormément , pour le faire fonctionner à plein potentiel avec un problème spécifique du monde réel.
A part cela, pour un examen des méthodes d'optimisation générales sans dérivées, vous pouvez consulter cet article [4] et rechercher des algorithmes possédant de bonnes propriétés de convergence rapide. Par exemple, la recherche de coordonnées à plusieurs niveaux (MCS) converge généralement très rapidement vers un voisinage d'un minimum (pas toujours le minimum global, bien sûr). MCS est conçu pour une optimisation globale, mais vous pouvez le rendre local en définissant des contraintes liées appropriées.
Enfin, vous vous intéressez à BO pour les fonctions cibles à la fois coûteuses et bruyantes , voir ma réponse à cette question .
Références:
1 Brochu et al., "Tutoriel sur l'optimisation bayésienne de coûteuses fonctions, avec application à la modélisation utilisateur active et à l'apprentissage par renforcement hiérarchique" (2010).
[2] Shahriari et al., "Prendre l'humain de la boucle: un examen de l'optimisation bayésienne" (2015).
[3] Snoek et al., «Optimisation bayésienne pratique des algorithmes d'apprentissage automatique», NIPS (2012).
[4] Rios et Sahinidis, «Optimisation sans dérivés: examen des algorithmes et comparaison des implémentations logicielles», Journal of Global Optimization (2013).
la source
Je ne connais pas moi-même les algorithmes, mais je pense que le type d'algorithme que vous recherchez est l'optimisation sans dérivée , qui est utilisée lorsque l'objectif est coûteux ou bruyant .
Par exemple, jetez un coup d'œil à cet article (Björkman, M. & Holmström, K. "Optimisation globale de fonctions coûteuses non convexes à l'aide de fonctions à base radiale". Optimisation et ingénierie (2000) 1: 373. doi: 10.1023 / A: 1011584207202) dont le résumé semble indiquer que c’est exactement ce que vous voulez:
la source
Tu n'es pas seul.
Les systèmes coûteux à évaluer sont très courants en ingénierie, tels que les modèles à méthode des éléments finis (MEF) et les modèles de calcul numérique par la dynamique des fluides (CFD). L’optimisation de ces modèles informatiques coûteux est très nécessaire et représente un défi, car les algorithmes évolutifs nécessitent souvent des dizaines de milliers d’évaluations du problème, ce qui n’est pas une option pour des problèmes coûteux à évaluer. Heureusement, de nombreuses méthodes (algorithmes) sont disponibles pour résoudre ce problème. Autant que je sache, la plupart d'entre eux sont basés sur des modèles de substitution (métamodèles). Certains sont énumérés ci-dessous.
En résumé, ces algorithmes d'optimisation basés sur des substituts tentent de trouver l'optimum global du problème en utilisant le moins d'évaluations possible. Ceci est réalisé en utilisant pleinement les informations fournies par le substitut (substituts). Des commentaires sur l'optimisation de problèmes de calcul coûteux se trouvent dans [4-6].
Référence:
la source
Les deux stratégies simples que j'ai utilisées avec succès dans le passé sont les suivantes:
Ces stratégies sont très spécifiques à chaque cas. Je ne sais pas si elles peuvent ou non être applicables dans votre cas. Désolé si elles ne le sont pas. Les deux peuvent être applicables (comme c'était le cas dans mes cas d'utilisation): appliquez la stratégie du "coût delta" à un modèle analytique plus simple - les performances peuvent être améliorées de plusieurs ordres de grandeur.
Une autre stratégie consisterait à utiliser une méthode de second ordre qui tend généralement à réduire le nombre d'itérations (mais chaque itération est plus complexe) - par exemple, l' algorithme de Levenberg – Marquardt . Mais étant donné que vous ne semblez pas avoir le moyen d'évaluer directement et efficacement le gradient, ce n'est probablement pas une option viable dans ce cas.
la source
Comme d'autres personnes l'ont mentionné, un modèle de substitution (également appelé surface de réponse) constitue une approche puissante. À mon avis, une chose cruciale que les gens oublient est que vous pouvez effectuer plusieurs évaluations de fonctions en parallèle , si vous utilisez des processeurs multicœurs.
Je suggérerais de regarder ce code , il utilise un modèle de réponse simple, mais évolue sur les processeurs multicœurs, ce qui donne une accélération égale à la quantité de cœurs utilisés. Une mathématique derrière la méthode est décrite dans cet article .
la source
De nombreuses astuces utilisées dans la descente de gradient stochastique peuvent également être appliquées à l'évaluation de la fonction objective. L'idée générale est d'essayer d' approximer la fonction objectif à l'aide d'un sous-ensemble de données .
Mes réponses dans ces deux articles expliquent pourquoi la descente de gradient stochastique fonctionne: son intuition consiste à approximer le gradient à l'aide d'un sous-ensemble de données.
Comment une descente de gradient stochastique pourrait-elle gagner du temps par rapport à une descente de gradient standard?
Comment exécuter une régression linéaire de manière parallèle / distribuée pour le paramétrage Big Data?
Le même truc s'applique à la fonction objectif.
la source