La descente de gradient est une méthode de recherche locale pour minimiser une fonction. Quand il atteint un minimum local dans l'espace des paramètres, il ne pourra pas aller plus loin. Cela rend la descente de gradient (et d'autres méthodes locales) susceptible de rester coincée dans les minima locaux, plutôt que d'atteindre le minimum global. Les minima locaux peuvent ou non être de bonnes solutions pour ce que vous essayez d'accomplir. À quoi s'attendre dépendra de la fonction que vous essayez de minimiser.
En particulier, les problèmes NP-complets de haute dimension peuvent être difficiles. Ils ont souvent de façon exponentielle de nombreux optima locaux, dont beaucoup sont presque aussi bons que l'optimum global en termes de coût, mais avec des valeurs de paramètres orthogonales à celles de l'optimum global. Ce sont des problèmes durs: vous ne vous attendez généralement pas à trouver l'optimum global, mais plutôt à chercher un minimum local qui soit assez bon. Ce sont également problèmes pertinents: de nombreux problèmes intéressants ont juste ces propriétés.
Je suggérerais d'abord tester votre mise en œuvre de descente de gradient avec un problème facile. Vous pourriez essayer de trouver le minimum dans un polynôme. Comme c'est un problème à un paramètre, vous pouvez tracer la progression des valeurs des paramètres le long de la courbe du polynôme. Vous devriez être en mesure de voir si quelque chose est radicalement faux, et peut également observer comment la recherche se coince dans les minima locaux. Vous devriez également être en mesure de voir que le choix initial des paramètres peut être très important.
Pour traiter des problèmes plus difficiles, vous pouvez modifier votre algorithme pour l'aider à échapper aux minimums locaux. Quelques approches courantes:
Ajouter du bruit. Cela réduit la précision des paramètres que vous avez trouvés, ce qui peut "brouiller" les minima locaux. La recherche peut alors sauter hors des minima locaux qui sont petits par rapport au bruit, tout en restant piégés dans des minima plus profonds. Une approche bien connue pour ajouter du bruit est simulated annealing.
Ajouter un moment.En plus d'utiliser le dégradé actuel pour définir l'étape, continuez également dans la même direction que l'étape précédente. Si vous prenez une fraction de l'étape précédente comme terme d'impulsion, vous avez tendance à continuer, ce qui peut faire passer la recherche au-delà du minimum local. En utilisant une fraction, les étapes décroissent de façon exponentielle, de sorte que les étapes médiocres ne sont pas un gros problème. C'était toujours une modification populaire à la descente de gradient quand elle était utilisée pour former des réseaux de neurones, où la descente de gradient est connue comme rétropropagation.
Utilisez une recherche hybride. Utilisez d'abord une recherche globale (par exemple, des algorithmes génétiques, diverses méthodes de Monte Carlo) pour trouver de bons points de départ, puis appliquez une descente de gradient pour tirer parti des informations de gradient dans la fonction.
Je ne vais pas faire une recommandation sur lequel utiliser. Au lieu de cela, je suggère de faire un peu de recherche pour voir ce que les autres ont fait avec des problèmes liés à ce que vous travaillez. Si c'est purement une expérience d'apprentissage, l'élan est probablement le plus facile à travailler.
Que signifie "pas bon"? –
@ MichaelJ.Barber Par exemple, la valeur attendue est de 0,35 et je reçois 0,65. C'est une différence. Cependant, avec un nombre différent d'étapes et d'itérations, je peux obtenir 0,35. La question est, comment puis-je savoir à plus grande échelle quand j'obtiens les bons paramètres? – Andrew
@ MichaelJ.Barber et même si la valeur de la fonction de coût est plus petite, la valeur de test est très éloignée de la bonne, tandis que la fonction de coût un peu plus élevé fournit la bonne valeur pour l'exemple de test. – Andrew