数字计算机能理解无穷大吗?

人工智能 深度学习 哲学 敏捷
2021-11-10 19:28:05

作为人类,我们可以无限思考。原则上,如果我们有足够的资源(时间等),我们可以计算无限多的东西(包括抽象的、类似数字的或真实的)。

例如,至少,我们可以考虑整数。原则上,我们可以思考和“理解”屏幕上显示的无数个数字。如今,我们正在尝试设计至少有人类能力的人工智能。然而,我被无限困住了。我试图找到一种方法如何教一个模型(无论是否深刻)理解无穷大。我在函数式方法中定义“理解”。例如,如果计算机可以区分 10 个不同的数字或事物,则意味着它以某种方式真正理解了这些不同的事物。这是“理解”的基本直截了当的方法。

正如我之前提到的,人类理解无穷大是因为原则上他们至少能够计算无穷大的整数。从这个角度来看,如果我要创建一个模型,模型实际上是一个抽象意义上的函数,这个模型必须区分无限多个数字。由于计算机是数字机器,对这种无限函数建模的能力有限,我如何创建一个可以区分无限多个整数的模型?

例如,我们可以采用一个识别卡片上数字的深度学习视觉模型。该模型必须为每张不同的卡片分配一个数字以区分每个整数。既然存在无穷多个整数,那么模型如何在数字计算机上像人类一样为每个整数分配不同的数字?如果它不能区分无限的事物,它如何理解无限?

如果我考虑实数,问题就会变得更加困难。

我错过了什么?有没有专注于该主题的资源?

4个回答

我认为这是对人工智能和计算机的一个相当普遍的误解,尤其是在外行中。这里有几样东西要解压。

让我们假设无穷大(或连续概​​念)有一些特别之处,这使得它们对人工智能来说特别困难。要做到这一点,人类必须既能理解这些概念,而它们对机器来说仍然是陌生的,必须存在人类机器都能理解的其他非无穷大的概念。我将在这个答案中展示的是,想要这两件事会导致矛盾。

这种误解的根源在于理解是什么意思的问题理解在日常生活中是一个模糊的术语,而模糊的性质助长了这种误解。

如果通过理解,我们的意思是计算机对一个概念有意识的体验,那么我们很快就会陷入形而上学的困境。关于计算机是否可以在这个意义上“理解”任何事物,甚至有时是关于人类是否可以,一直存在着长期的、本质上公开的辩论!您不妨问一下计算机是否可以“理解” 2+2=4。因此,如果理解无限有什么特别之处,它就不能与主观经验意义上的“理解”相关联。

所以,让我们假设通过“理解”,我们心中有一些更具体的定义。使计算机“理解”无穷大之类的概念比算术之类的概念更复杂的东西。我们对“理解”的更具体的定义必须与一些与概念相关的客观可衡量的能力或能力相关(否则,我们又回到了主观经验的领域)。让我们考虑一下我们可以选择什么样的能力或能力,使无穷大成为一个特殊的概念,人类而不是机器可以理解,不像算术。

如果计算机(或人)能够提供对该概念的正确定义,我们可以说它理解了该概念。但是,如果即使是一个人也可以通过这个定义理解无穷大,那么他们应该很容易写下这个定义。一旦定义被写下来,计算机程序就可以输出它。现在计算机也“理解”了无穷大。这个定义不适用于我们的目的。

如果一个实体能够正确应用一个概念,我们可以说它理解了一个概念同样,如果即使是一个人都理解如何正确应用无穷大的概念,那么我们只需要记录他们用来推理这个概念的规则,我们就可以编写一个程序来重现这个规则系统的行为。实际上,无穷大作为一个概念得到了很好的表征,在像Aleph Numbers这样的想法中得到了体现。在计算机中对这些规则系统进行编码并非不切实际,至少要达到任何人都能理解的程度。因此,根据这个定义,计算机也可以“理解”无穷大,达到与人类相同的理解水平。所以这个定义不适用于我们的目的。

如果一个实体可以在逻辑上将该概念与任意新想法相关联,我们可以说它“理解”了一个概念。这可能是最有力的定义,但在这里我们需要非常小心:很少有人(按比例)对无穷大这样的概念有深刻的理解。更少的人可以轻易地将其与任意新概念联系起来。此外,原则上,像一般问题求解器这样的算法可以在给定足够的时间的情况下从给定的事实中得出任何逻辑结果。也许在这个定义下,计算机比大多数人更能理解无穷大,当然没有理由假设我们现有的算法不会随着时间的推移进一步提高这种能力。这个定义似乎也不符合我们的要求。

最后,我们可以说一个实体“理解”了一个概念,如果它可以生成它的例子。例如,我可以生成算术问题的示例及其解决方案。在这个定义下,我可能不“理解”无限,因为我实际上无法在现实世界中指向或创造任何绝对无限的具体事物。例如,我实际上不能写出一个无限长的数字列表,而只是通过投入更多精力将它们写出来来表达创建更长列表的方法的公式。一台电脑至少在这方面应该和我一样好。这个定义也不行。

这不是“理解”的可能定义的详尽列表,但我们已经涵盖了“理解”,因为我非常了解它。在每一种理解的定义下,无穷大并没有什么特别之处可以将它与其他数学概念区分开来。

所以结果是,要么你认为计算机根本不“理解”任何东西,要么没有特别好的理由假设无穷大比其他逻辑概念更难理解。如果您不同意,您需要提供“理解”的具体定义,它将对无限的理解与其他概念分开,并且依赖于主观经验(除非您想声称您的特定形而上学观点是普遍正确的,但那是很难论证)。

Infinity 在普通公众中具有一种半神秘的地位,但它实际上就像任何其他数学规则系统一样:如果我们可以写下 infinity 运行的规则,那么计算机可以像人类一样完成它们(或更好)。

我认为你的前提是有缺陷的。

您似乎假设要“理解”(*)无穷大需要无限的处理能力,并暗示人类就是这样,因为您将它们呈现为有限的有限计算机的对立面。

但人类有有限的处理能力。我们是由有限数量的基本粒子构成的生命,形成有限数量的原子,形成有限数量的神经细胞。如果我们能够以一种或另一种方式“理解”无穷大,那么肯定也可以建造有限的计算机。

(*我在引号中使用了“理解”,因为我不想进入例如感知的定义等。我也不认为这对这个问题很重要。)

作为人类,我们可以无限思考。原则上,如果我们有足够的资源(时间等),我们可以计算无限多的东西(包括抽象的、类似数字的或真实的)。

在这里,您实际上大声说出来。“有足够的资源。” 这同样不适用于计算机吗?

虽然人类可以,例如在计算极限等时使用无穷大,并且可以想到某物变得任意大的想法,但我们只能抽象地做到这一点,而不是能够处理任意大的数字。我们用于数学的相同规则也可以教给计算机。

TL;DR:无限的微妙之处在无界的概念中表现得很明显。无界是有限可定义的。“无量物”其实是无量无边的东西。最好不要将无限理解为一个事物,而是将其理解为一个概念。理论上,人类拥有无限的能力而不是无限的能力(例如,数到任意数字而不是“数到无穷大”)。可以使机器识别无界性。

再次落入兔子洞

如何进行?让我们从“限制”开始。

限制

我们的大脑不是无限的(以免你相信一些形而上学)。所以,我们不会“思考无限”。因此,我们所声称的无限最好被理解为一些有限的心理概念,我们可以与之“比较”其他概念。

此外,我们不能“计算无限整数”。这里有一个微妙的地方需要指出:

我们的数量/数量的概念是无限的。也就是说,对于任何有限值,我们都有有限/具体的方式或产生另一个严格更大/更小的值。也就是说,如果时间有限,我们只能计算有限的数量。

你不能“给你无限的时间”来“计算所有的数字”,这意味着一个“完成”,这与无限的概念直接矛盾。除非你相信人类具有形而上学的特性,使他们能够“始终如一地”体现一个悖论。此外,您将如何回答:您计算的最后一个数字是多少?没有“最后一个数字”,就永远不会有“完成”,因此您的计数也永远不会“结束”。那就是你永远不能“有足够的”时间/资源来“数到无穷大”。

我认为您的意思是我们可以理解无限集之间的双射概念。但这个概念是一种逻辑结构(即,它是一种将我们理解为无限的东西进行争论的有限方式)。

然而,我们真正在做的是:在我们的界限内,我们正在谈论我们的界限,并且,当我们需要时,我们可以扩大我们的界限(以有限的数量)。我们甚至可以谈论扩大界限的本质因此:

无界性

如果给定一个过程/事物/想法/对象的数量/体积/存在的某种度量,我们可以以有限的方式产生该对象的“扩展”,该对象具有我们认为“更大”(或“更小”的度量)在无穷小的情况下)比之前的度量值更大,并且这个扩展过程可以应用于新生对象(即过程是递归的)。

典型案例一:自然数

此外,我们的无限概念防止任何“at-ness”或“on-ness”到无限。也就是说,一个人永远不会“到达”无穷大,也永远不会“拥有”无穷大。相反,一个人无限地前进。

因此,我们如何概念化无穷大?

无限

似乎“无限”这个词被误解为存在一种叫做“无限”的东西,而不是一个叫做“无限”的概念让我们用这个词粉碎原子:

无限的:在空间、范围或大小上无限或无限;无法测量或计算。

in- :源自拉丁语的前缀,对应于英语 un- ,具有否定或否定的力量,可自由用作英语的构词形式,尤其是形容词及其派生词和名词(不注意;不可辩解;廉价;无机;不变)。来源

有限的:有限制或界限。

所以 in-finity 真的是 un-finity ,它没有限制或 bounds但我们在这里可以更精确,因为我们都同意自然数是无限的,但任何给定的自然数都是有限的。那么给了什么?很简单:自然数满足我们无界标准,因此我们说“自然数是无限的”。

也就是说,“无限”是一个概念。如果一个对象/事物/想法具有无限的属性/方面,则它被认为是无限的。如前所述,无界性是有限可定义的。

因此,如果您所说的代理程序设计得足够好,可以发现卡片上数字中的模式,并且这些数字都来自同一个集合,那么它可以推断出序列的无界性质,从而定义所有数字的集合作为无限 - 纯粹是因为该集合没有上限也就是说,自然数的级数是无界的,因此可以定义为无限的。

因此,对我来说,最好将无限理解为识别过程/事物/想法/对象何时具有无限性质的一般概念。也就是说,无穷大并不独立于无界。尝试定义无穷大,而不将其与有限事物或那些有限事物的界限进行比较。

结论

可以对机器进行编程以表示和检测无界实例或何时可以假设无界,这似乎是可行的。

在 Haskell 中,您可以输入:

print [1..]

它将打印出无限的数字序列,从:

[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,

它将执行此操作,直到您的控制台内存不足。

让我们尝试一些更有趣的东西。

double x = x * 2
print (map double [1..])

这是输出的开始:

[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146,148,150,152,154,156,158,160,162,164,166,168,170,172,174,176,178,180,182,184,186,188,190,192,194,196,198,200,202,204,206,208,210,212,214,216,218,220,222,224,226,228,230,232,234,236,238,240,242,244,246,248,250,252,254,256,258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,346,348,350,352,354,356,358,360,362,364,366,368,370,372,374,376,378,380,382,384,386,388,390,392

这些示例显示了无限计算。事实上,您可以在 Haskell 中保留无限的数据结构,因为 Haskell 具有非严格性的概念——您可以对尚未完全计算的实体进行计算。换句话说,您不必完全计算无限实体来在 Haskell 中操作该实体。

减少荒谬。