一般而言,什么是收敛
收敛的概念是一个定义明确的数学术语。从本质上讲,这意味着“最终”一系列元素越来越接近单个值。我们将此单一值称为“限制”。
正式定义如下:
鉴于实数(无限)序列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 ....
所以最大的问题是:我们的算法会永远为零吗?它会收敛到零吗?我们的算法会收敛吗?我们能否证明最终它会正确(或尽可能接近正确)?
希望如此:)