Chapter Content

Calculating...

诶,大家好,今天我们随便聊聊啊,嗯,关于这个… 难的问题,hard problem。 主要是想说说什么是 “hard” 。

首先,咱们先得搞清楚几个基本的概念,就是问题,过程,答案,还有解决方案。 这四个词儿,特别重要。 所谓问题呢,就是咱们现在要解决的那个事儿,希望它能被搞定嘛。 然后过程,嗯,这个分两种,一种是外部过程,就是我们找到解决方案的那个方法,比如试错啊,摸索啊啥的。 还有一种是内部过程,就是解决方案本身怎么运作,怎么输出结果。答案呢,就是问题被解决之后的那个最终状态,确认“成了!”。 解决方案,就是那个实际的东西,能执行内部过程,最终解决问题的。

打个比方啊,比如说桥梁。 问题是什么? 就是要让车和人能安全高效地过河、过山谷、过路,对吧?外部过程呢,就是各种尝试和错误,最后确定桥的结构。 内部过程呢,就是桥的各个部分之间那种因果关系, 确保桥能正常运作。 答案是什么? 就是看到车和人在桥上过去了。 解决方案,就是那座桥本身,就是最终确定的那个结构。

再说说深度学习模型。问题可能是人脸识别。 外部过程就是训练模型,让它变得更好。内部过程呢,就是模型收敛之后,它自己怎么计算,这个有点抽象,对吧? 答案就是识别出那张脸是谁。 解决方案呢,就是部署好的模型,参数已经确定好了,权重啊、偏差啊啥的,然后开始用。

再来一个例子,魔方。 问题是啥? 就是把六个面都拼成一种颜色。外部过程呢,就是各种尝试,或者用一些系统的方法,找到一套步骤,让别人也能拼好魔方。 内部过程呢,就是别人按照你找到的步骤,一步一步地把魔方拼好。 答案就是拼好的魔方,每个面都是一种颜色。解决方案呢,就是你发现的那套步骤,可能写在纸上,让别人照着做。

所以,总结一下,问题就是咱们要解决的那个事儿。 外部过程就是我们怎么找到解决方案。 内部过程就是解决方案怎么运作。 答案就是最终状态,确认问题解决了。 解决方案就是那个实际部署的东西,用来执行解决问题的过程。

现在我们有了一些基本概念,接下来聊聊,到底什么才算是一个“难”的问题。

人们常说,不容易解决的问题就是“难”的。 要是马上没有解决方案,那通常就被认为是困难的。 但在计算机领域,“难”这个词儿有更具体的含义。 如果一个问题很难,或者实际上不可能用计算机高效地解决,那就叫做“计算上难的问题”。 这种问题需要大量的资源,意味着需要很多时间或者内存来计算。

“计算上难的问题”的难度会随着输入规模的增大而迅速增加。 通常是指数级别的增长,也就是说,问题规模稍微增加一点,解决问题所需的时间就会爆炸式增长。 可以想象一下折纸,每折一次,层数不是增加一点点,而是成倍地增长。

这种指数增长,在算法里就表现为,算法可能需要尝试的路径数量呈指数级增长才能找到解决方案。 难题有很多需要考虑的因素。 更长的桥梁有更多的部件,需要考虑解决挑战涉及的额外因素。人脸识别在计算上很困难,因为构成一张脸的因素太多了。

所以,问题的核心在于可能性空间。 可能性空间,就是与当前问题相关的所有可能组合、排列或状态的集合。 我们可以把棋盘上所有可能的棋子排列都当成这个集合。 可能性空间越大,算法需要探索的空间就越大。 这种探索的复杂度,是问题本质上“难”的原因。

由于在所有可能配置的宇宙中工作是不可行的,模型和算法并非在可能性空间中运作。相反,我们必须为难题定义一组简化的可能的特征,并尝试在这个简化的空间内运作。 这个简化的空间叫做特征空间,由我们认为对问题重要的特征组成。

想象一下冬天保持手部温暖的问题。我们不会混合搭配随机物体并把它们缠绕在手上,而是会考虑值得考虑的属性。比如厚度、蓬松度、吸水性和强度。 如果我们绘制这些特征,我们就会得到 4 个轴。我们问题的解决方案将存在于这 4 个轴所划分的空间内的某个位置。因为让手套正常工作的材料的正确组合将具有厚度、蓬松度、吸水性和强度的正确组合。每个特征都为特征空间贡献一个维度,所有特征的组合创建一个高维空间,解决方案就位于其中。 当有人说一个问题是“高维”时,这就是它的意思:一个问题的特征空间包含许多维度,其解决方案就位于该空间的某个位置。

所以,问题的难度在于,我们很难在问题的特征空间里找到解决方案的位置。 难题的特征空间是一个广阔的区域,由错综复杂的路径和障碍组成。 对于难题,没有明显的标记告诉我们在哪里可以找到解决方案。

之所以很难找到解决方案,主要有三个原因:第一,特征空间本身就很复杂。第二,不同的特征之间缺乏明显的因果关系。第三,相对于所有可能的组合,可行的解决方案数量很少。

特征空间的复杂性来自于特征之间的相互作用和依赖关系。 在保持手部温暖的问题中,更厚的材料可能提供更多的隔热,但也可能降低灵活性。 具有高吸水性的材料可能有助于吸走水分,但也可能在潮湿时变冷。特征空间的复杂性不一定会使特征空间变大,但确实使找到通往解决方案的路径变得更加困难。在复杂的特征空间内很容易走错路。 考虑固有的权衡,增加一个特征的值可能会在某一方面提高性能,但会在另一方面降低性能。 在复杂的特征空间中寻找答案就像拆东墙补西墙,一遍又一遍。

一般来说,随着特征数量的增加,这些特征独立的可能性会降低。 这就是为什么高维空间是真正复杂系统的标志,以及与之相关的难题。 这也是为什么复杂性不仅仅是关于大量零件,而且关键的是这些零件之间的相互作用。

问题难度的第二个来源是特征空间中特征之间因果关系的丧失。 回到保持手部温暖的问题。 在这里,我们可以很容易地想象厚度、蓬松度、吸水性和强度如何协同工作来解决问题。 我们可以通过推导来移动特征空间,并找到一种有效的配置。 我们可能会首先使用一些自然阻挡寒冷的动物皮,并将其连接到一块动物肌腱以结合材料并保持所需的形状。 我们可以很容易地推断出,用动物纤维填充两层兽皮比单独使用兽皮的隔热效果更好。

尽管特征空间具有一些固有的复杂性,但保持手部温暖的问题相对简单。 这表明,如果特征的数量很少(低维),并且特征之间的权衡最小,那么人们可能可以通过简单的推导找到解决方案。 第一个解决方案很难是最好的解决方案,但它会奏效。 推导在这里有效,因为我们解决方案的各个部分之间的因果关系很明显。

但是现在考虑一个更难的问题。 想象一下,我们必须找到一种在堆雪人时保持手部温暖的解决方案。 现在对这个问题有更多的限制。 我们不仅要保持手部温暖,还要保持手部干燥,并且要有足够的灵活性来处理雪。 对这个问题的这些额外限制可能会或可能不会增加值得考虑的特征的数量,但它们可能会引入额外的权衡。 这开始降低我们推导解决方案的能力,因为特征之间的因果关系不再清晰。

特征空间固有的复杂性和因果关系的丧失之间存在着密切的关系。 我们的特征通过相互作用“交谈”的越多,出现的权衡就越多,从而越来越难以找到解决方案。 如果我们选择一种既能保暖又具有良好灵活性的材料,我们可能会发现它太容易湿了。 一旦我们找到防水材料,我们就会失去灵活性。 更多的约束会加剧矛盾、困境、悖论和困境,从而难以找到通往可行解决方案的道路。

最终的难度来源与另一个空间有关,这个空间叫做解决方案空间。 解决方案空间位于特征空间内(特征空间本身位于可能性空间内),是满足问题标准或约束的可能配置的子集。 简单来说,解决方案空间是产生问题的可行解决方案的所有可能配置的空间。

大的解决方案空间意味着有更多可能的解决方案可以解决问题,而小的解决方案空间意味着解决方案更少。 相对于其可能性空间而言,具有大的解决方案空间的问题将花费更少的时间来搜索,因为在遇到解决方案之前,抽象地讲,机动的空间更少。 与保持手部温暖相关的问题具有大的解决方案空间,因为有很多材料组合可以解决问题。 考虑到我们的祖先很可能很早就偶然发现了一副像样的手套。

将其与魔方之类的东西进行比较。 此特征空间内的一个点将是 26 个“立方体”的独特配置,每个立方体都具有一组与位置和方向相关的值。 这种值的混合是魔方版本的厚度、蓬松度、吸水性和强度的混合,来自我们的保持手部温暖问题。 魔方的解决方案空间是可以产生相同最终答案的所有可能算法的集合。

找到魔方的解决方案需要很长时间,因为其特征空间的复杂性。 请注意,当我说找到解决方案时,这并不意味着遵循一些已经发现的算法,就像立方体玩家所做的那样。 我说的是第一次发现这组步骤。 魔方的特征空间具有固有的复杂性,因为它的特征具有权衡取舍。 当我们将一个立方体放置在给定的位置时,它很容易破坏一个或多个先前定位的立方体。

然而,魔方并不是一个绝对困难的问题。 最好将魔方视为一个开始显示出一些困难迹象的问题,同时仍然可以在合理的时间内解决。 国际象棋具有更大、更复杂的可能性空间。 国际象棋让我们更接近一个真正困难的问题。 当然,魔方和国际象棋都不是天然的难题。 正如引言中提到的,天然难题是在自然环境中呈现的难题,而不是我们创造的游戏。 天然难题不能完全适应计算机科学的复杂性类别。 天然难题的可能性空间在大小和复杂性方面实际上是无限的。 但是魔方和国际象棋都是看到从更简单的问题(如保持手部温暖)过渡到接近真正困难的问题的好方法。

总而言之,我们用来定义问题导致困难的抽象空间有 3 个主要方面:1)空间本身的复杂性(相互依赖的特征),2)空间内特征之间因果关系的退化和 3)相对于整个空间,解决方案空间的大小较小。 一个绝对困难的问题具有高度的这 3 个方面。

如果我们看看在难题中需要穿越多少空间,我们似乎不可能找到答案。 魔方有超过 43 亿亿种可能的配置。 国际象棋甚至更多。 然而,这些仍然只是游戏,相对于现实世界的情况而言,维度有所降低。 在自然环境中,不受人类发明限制的自然环境中,可能配置的数量具有难以想象的复杂程度。 因此,这个空间中的问题与游戏中发现的任何问题都不同。

然而,人类一直在寻找天然难题的解决方案。 如何才能控制住如此巨大的可能性空间并使其易于处理?

问题越难,搜索越软

重要的是要注意,由于魔方中出现的组合爆炸,详尽的搜索方法,即尝试每种可能的配置(直到找到正确的配置),是不可能的,即使使用我们最快的计算机也是如此。 计算所有可能的配置以寻找解决方案将花费数十亿甚至数万亿年的时间。

这就是为什么解决魔方的计算机必须采用启发式和模式识别来更有效地搜索可能性空间。 启发式是通用的经验法则或捷径,允许人们和机器在不需要明确分析的情况下解决难题。 考虑一下国际象棋大师如何使用棋盘上可识别的模式,例如常见的开局,来发挥他们的最高水平。 这不是对棋子的明确统计; 这是对指导玩家走向好棋的模式的快速识别。

再说一次,魔方不是一个真正困难的问题,但它告诉我们,随着问题难度的增加,我们解决问题的方法必须变得更加柔和。 在这里,柔和意味着依靠启发式和模式识别等东西,而不是对构成问题的各个部分进行详细分析。 问题越困难,其可能性空间就越大、越复杂,并且必须搜索该空间。 这意味着问题越难,我们在搜索方式上就越不具有分析性。 在保持手部温暖的问题中,我们的搜索很容易通过一点试错与推导相结合来完成。 雪人问题需要更多的试错,因为推导在因果关系退化的情况下变得不那么有用了。 魔方需要更多的试错才能找到新的解决方案。 即使系统地完成,也需要使用启发式。 同样,暴力破解方法,即尝试所有可能的配置直到找到解决方案,是不可行的。

有理由认为,天然难题,我们在现实生活中发现的难题,只能通过最柔和的方法来解决。 当然,这就是我们所看到的。 人类进化是为了使用启发式和模式识别来解决所有最困难的问题,而不是详细的分析。 人类使用的情感线索和直觉是我们进化的启发式版本。 因此,不仅仅是人造计算机进行计算,正如难题的最初定义。 大自然也在计算。 大自然向我们展示了解决所有最困难的问题需要什么。 我们必须走出系统,脱离有意识分析的领域,并使用试错、启发式和模式识别来探索广阔的可能性空间。

这就是深度学习存在的原因。 分析方法和基于规则的计算无法解决真正困难的问题。 深度学习不是关于分析或规则,而是拥抱试错、启发式和模式识别的计算版本。 深度学习可以应用于魔方问题,为了找到潜在的新解决方案。 这已经完成,其动机是希望这种应用可能会揭示与一般问题解决相关的有价值的见解、策略或创新。 深度学习搜索可能性空间的方式很像人类; 柔和地、外部地。

但是,尽管深度学习使用的搜索过程在概念上与人类使用的过程相似,但对于找到的解决方案而言,情况并非如此。 人类和传统计算会找到一种可以作为一套易于理解的指令呈现给他人遵循的解决方案(即立方体玩家的算法)。 但是深度学习产生的东西非常不同。 深度学习解决方案不是一组可见的步骤,而是无法以这种方式看到的。 深度学习产生的解决方案在因果关系上是不透明的,并且在很大程度上是无法解释的。 简而言之,我们不知道深度学习在部署的解决方案解决魔方时在做什么。 这里显而易见的问题是,为什么两个不同的系统(人类和 AI)之间的相同总体方法会产生如此不同的解决方案?

Go Back Print Chapter