算法收敛意味着什么?


12

在阅读有关强化学习的内容时,我会不断遇到这个词,例如,这句话:

如果仔细地对问题进行建模,则某些强化学习算法可以收敛到全局最优值

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

或在这里:

对于任何固定策略Pi,已经证明上述TD算法可以收敛到VPi

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

我对“收敛”这个词的理解是,它意味着将多个事物放到同一点,但是单个事物(算法)如何做到这一点?


7
在迭代算法的情况下,据说它们在每次迭代的候选解趋于越来越接近所需解时会收敛。
MetaFight 2015年

6
也许可以回想一下,即使“极限”是“单件事情”,数学极限也可以说是收敛或发散的。
Ixrec 2015年

@Ixrec:“限制”是根据它与/从/偏离的值命名。例如,“它收敛到1”表示“它永远不会超过1”,意思是“ 1是最大结果值”,因此就是您期望的“极限”。因此单数。
扁平的

Answers:


14

一个迭代算法时,随着迭代的进行,输出越来越接近一些特定值收敛说。更准确地说,无论您选择的误差范围有多小,如果持续足够长的时间,该功能最终都会保持在最终值附近的误差范围内。

在某些情况下,算法将不会收敛,其输出总是会有所变化。它甚至可能发散,其输出将经历越来越大的价值波动,永远不会达到有用的结果。更准确地说,无论您持续多长时间,函数值都永远不会落在任何“最终”值的范围内。

您第一句话中的“收敛到全局最优”短语是对可能收敛的算法的引用,而不是对“最优”值的引用(例如,取决于功能和初始条件,可能会收敛到的爬山算法)局部最大值,从未达到全局最大值)。


3

一般而言,什么是收敛

收敛的概念是一个定义明确的数学术语。从本质上讲,这意味着“最终”一系列元素越来越接近单个值。我们将此单一值称为“限制”。

正式定义如下:

鉴于实数(无限)序列X0, X1, X2, ... Xn ...,我们说,Xn converges to a given number L如果每一个积极的错误,你认为,有Xm这样的,每一个元素Xn后到来Xm不同于L由小于误差。

例:

想象这样一个序列:

  • X0 = 1
  • X1 = 0.1
  • X2 = 0.01
  • X3 = 0.001
  • X4 = 0.0001
  • ...
  • Xn = 1 /(10 ^ n)

Xn收敛到零吗?是! 为什么?

考虑错误E(例如E = 0.0025)。序列中是否有一个元素,之后每个元素都在下面0.025?是! 该元素是X3 = 0.001。X2之后,每个XN都在下方0.0025。可以对每个 E> 0执行此操作吗?是。对于我们选择的每个正误差,我们可以看到它在第一个小数点前有多少个零,并且该序列将比从具有相同零个数的元素开始的序列低。

这意味着Xn = 1/(10^5) converges to 0。正如我们希望的那样,“它可以越来越接近于零”。


算法收敛意味着什么?

“技术上”收敛的不是算法,而是算法正在操纵或迭代的值。例如,假设我们正在编写一种打印PI的所有数字的算法。

该算法开始打印数字,例如:

  • X0 = 3.14
  • X1 = 3.141
  • X2 = 3.1415
  • X3 = 3.14159
  • ...

我们可能会问自己:算法打印出的数字是否越来越接近PI?换句话说,X0, X1, ... XN ...我们的算法打印的序列是否收敛到PI?

如果是这样,我们说我们的算法收敛到PI。


我们通常对证明算法的正确性感兴趣。

通常,在编写算法时,我们有兴趣知道算法提供的解决方案是否是解决问题的正确方法。有时可能会以收敛的形式出现。

通常,算法具有我们所谓的指标。指标是我们赋予算法产生的给定结果的数字。例如,在AI /机器学习迭代算法中,很常见的是,我们跟踪算法根据输入生成的“错误”。此错误是一个指标。

在这些迭代算法中,每个步骤都会产生不同的错误。该算法尝试做的是使该错误最小化,从而使其越来越小。我们说,如果错误序列收敛,则该算法收敛。

在这些情况下,global optimum通常将定义为具有尽可能低错误的设置。在那种情况下,“算法收敛到全局最优”是指“算法以收敛到可能的最低误差的序列产生误差”。

如果“全局最优”是我们的“正确解”,则说明我们的算法收敛与说明我们的算法正确是相同的。

另外,请记住,说明算法收敛需要证明(就像我们对0.001、0.0001等示例所做的那样)。


例如,分类器

例如分类器。假设我们要使用机器学习算法对数字是奇数还是偶数进行分类,并且我们具有以下数据集:

  • (1,奇数)
  • (2,偶数)
  • (3,奇数)
  • (77,奇数)
  • (4,偶数)

如果每个数字都是偶数或奇数,则我们针对每个数字的算法都会吐出。为此,我们可以将度量错误定义为错误发生的次数除以给出的元素总数。

因此,如果我们的算法吐出以下内容:

  • (1,偶)//错误
  • (2,偶数)
  • (3,偶)//错误
  • (77,偶)//错误
  • (4,偶数)

我们的错误指标为3/5 = 0.6。现在让我们说我们再次运行该算法,它会吐出:

  • (1,偶)//错误
  • (2,偶数)
  • (3,奇数)
  • (77,奇数)
  • (4,偶数)

我们的错误指标为1/5 = 0.2

可以说它运行的次数越来越多,而我们的错误序列如下所示:

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

所以最大的问题是:我们的算法会永远为零吗?它会收敛到零吗?我们的算法会收敛吗?我们能否证明最终它会正确(或尽可能接近正确)?

希望如此:)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.