web-dev-qa-db-fra.com

Que signifie la convergence d'un algorithme?

Je rencontre toujours ce terme en lisant sur l'apprentissage par renforcement, par exemple dans cette phrase:

Si le problème est modélisé avec soin, certains algorithmes d'apprentissage par renforcement peuvent converger vers l'optimum global

http://reinforcementlearning.ai-depot.com/

ou ici:

Pour toute politique fixe Pi, l'algorithme TD décrit ci-dessus s'est avéré converger vers VPi

http://webdocs.cs.ualberta.ca/~sutton/book/ebook/node62.html

Ma compréhension de la Parole converge est que cela signifie que plusieurs choses se rejoignent au même point, mais comment une seule chose (l'algorithme) peut-elle faire cela?

12
starfish

On dit qu'un algorithme itératif converge lorsque, au fur et à mesure des itérations, la sortie se rapproche de plus en plus d'une valeur spécifique. Plus précisément, quelle que soit la plage d'erreur que vous choisissez, si vous continuez assez longtemps, la fonction restera finalement dans cette plage d'erreur autour de la valeur finale.

Dans certaines circonstances, un algorithme ne convergera pas, ayant une sortie qui varie toujours d'une certaine quantité. Il pourrait même diverger, où sa production subirait des fluctuations de valeur de plus en plus grandes, sans jamais s'approcher d'un résultat utile. Plus précisément, peu importe combien de temps vous continuez, la valeur de la fonction ne se stabilisera jamais dans une plage de n'importe quelle valeur "finale".

La phrase "converger vers un optimum global" dans votre première phrase est une référence à des algorithmes qui peuvent converger, mais pas à la valeur "optimale" (par exemple un algorithme d'escalade qui, en fonction de la fonction et des conditions initiales, peut converger vers un maximum local, n'atteignant jamais le maximum global).

14
Daniel Griscom

Qu'est-ce que la convergence, en général

Le concept de convergence est un terme mathématique bien défini. Cela signifie essentiellement que "éventuellement" une séquence d'éléments se rapproche de plus en plus d'une seule valeur. Nous appelons cette valeur unique la "limite".

La définition formelle ressemble à ceci:

Étant donné une séquence (infinie) de nombres réels X0, X1, X2, ... Xn ..., Nous disons Xn converges to a given number L Si pour chaque erreur positive que vous pensez, il y a est un Xm tel que chaque élément Xn qui vient après Xm diffère de L par moins que cette erreur.

Exemple:

Imaginez une séquence comme telle:

  • X0 = 1
  • X1 = 0,1
  • X2 = 0,01
  • X3 = 0,001
  • X4 = 0,0001
  • ...
  • Xn = 1/(10 ^ n)

Xn converge-t-il vers zéro? Oui! Pourquoi?

Pensez à une erreur E (par exemple, E = 0.0025). Y a-t-il un élément dans la séquence qui, après cela, chaque élément est inférieur à 0.025? Oui! Cet élément est X3 = 0.001. Après X2, chaque XN est inférieur à 0.0025. Cela peut-il être fait pour tous les E> 0? Oui. Pour chaque erreur positive que nous choisissons, nous pouvons voir combien de zéros il a avant sa première virgule décimale et la séquence sera inférieure à celle à partir de l'élément qui a le même nombre de zéros.

Cela signifie que Xn = 1/(10^5) converges to 0. Comme dans "on peut se rapprocher de plus en plus de zéro" autant que l'on veut.


Que signifie la convergence d'un algorithme?

"Techniquement" ce qui converge n'est pas l'algorithme, mais une valeur que l'algorithme manipule ou itère. Par exemple, supposons que nous écrivons un algorithme qui imprime tous les chiffres de PI.

L'algorithme commence à imprimer des nombres comme:

  • X0 = 3,14
  • X1 = 3,141
  • X2 = 3,1415
  • X3 = 3,14159
  • ...

Nous pourrions nous demander: l'algorithme imprime-t-il des nombres de plus en plus proches de PI? En d'autres termes, la séquence X0, X1, ... XN ... Que notre algorithme imprime converge-t-elle vers PI?

Si c'est le cas, nous disons que notre algorithme converge vers PI.


Nous souhaitons généralement prouver l'exactitude d'un algorithme.

Habituellement, lorsque nous écrivons un algorithme, nous souhaitons savoir si la solution fournie par l'algorithme est la bonne pour le problème qu'il résout. Cela peut parfois prendre la forme d'une convergence.

En général, les algorithmes ont ce que nous appelons métriques . Une métrique est un nombre que nous donnons à un résultat donné que l'algorithme produit. Par exemple, dans les algorithmes itératifs A.I/Machine Learning, il est très courant pour nous de garder une trace de "l'erreur" que l'algorithme génère en fonction de l'entrée. Cette erreur est une métrique.

Dans ces algorithmes itératifs, chaque étape génère une erreur différente. Et ce que l'algorithme essaie de faire est de minimiser cette erreur afin qu'elle devienne de plus en plus petite. Nous disons que l'algorithme converge si sa séquence d'erreurs converge.

Dans ces cas, le global optimum Est généralement défini comme la configuration qui présente la plus faible erreur possible. Dans ce cas, "l'algorithme converge vers l'optimum global" signifie que "l'algorithme génère des erreurs dans une séquence qui converge vers l'erreur la plus faible possible".

Si "l'optimum global" est notre "bonne solution", affirmer que notre algorithme converge est le même que déclarer que notre algorithme est correct.

Gardez également à l'esprit que déclarer qu'un algorithme converge nécessite une preuve (comme nous l'avons fait pour notre exemple 0,001, 0,0001, ...).


Par exemple, un classificateur

Un exemple de ceci pourrait être dans le cas d'un classificateur. Supposons que nous voulons classer si les nombres sont impairs ou même en utilisant un algorithme d'apprentissage automatique, et que nous avons l'ensemble de données suivant:

  • (1, impair)
  • (2, même)
  • (3, impair)
  • (77, impair)
  • (4, même)

Notre algorithme pour chaque ensemble de nombres crache pour chacun d'eux s'ils sont pairs ou impairs. Pour cela, nous pouvons définir une erreur métrique comme étant le nombre de fois où elle s'est trompée divisée par le nombre total d'éléments qui ont été donnés.

Donc, si notre algorithme crache ce qui suit:

  • (1, même) // faux
  • (2, même)
  • (3, même) // faux
  • (77, même) // faux
  • (4, même)

Notre métrique d'erreur serait 3/5 = 0.6. Disons maintenant que nous réexécutons l'algorithme et qu'il crache maintenant:

  • (1, même) // faux
  • (2, même)
  • (3, impair)
  • (77, impair)
  • (4, même)

Notre métrique d'erreur serait 1/5 = 0.2.

Disons qu'il s'exécute de plus en plus de fois, et notre séquence d'erreurs ressemble à ceci:

0.6, 0.2, 0.1, 0.01, 0.000456, 0.00000543, 0.000000000444 ....

La grande question est donc: notre algorithme sera-t-il un jour nul? Va-t-il jamais converger vers zéro? Notre algorithme convergera-t-il tous? Pouvons-nous prouver que cela finira par faire les choses correctement (ou aussi près de la droite que possible)?

Si tout va bien :)

3
Albuquerque