Home > Archives > 机器能思考吗? -- 一种算法的观点

机器能思考吗? -- 一种算法的观点

英文标题:Can machines think? – An algorithmic perspective

序:这篇文章本来是作为自然哲学课的报告提交的,如果不出所料,必然是石沉大海。今天看到IEEE CS 图灵百年沙龙征稿活动,我决定先把文章贴出来,大家给提提意见。非常乐于跟大家进行讨论!

《黑客帝国》是我最喜欢的科幻系列电影,没有之一。影片中酷炫的武术动作、激烈的对打场面,甚至男女主角所佩戴的黑色墨镜,都已成为一段记忆的标签。实际上,电影导演融入其中的对现代社会,尤其是对电脑时代的种种思考才真正让整部影片上升了一个层次。人们不禁开始思考:机器,或者说电脑,是否有一天能够思考,然后凭借其极快的运算速度和巨大的能量,征服人类,接管地球?到那时,我们是否会被机器“圈养”起来,为机器提供能量?

计算机的先驱们早就开始思考这个问题,比如被誉为“计算机之父”的图灵(“计算机界的诺贝尔奖”图灵奖就是以此人命名)。图灵提出这样一个测试,来判断一种机器是否具有智能,这个测试就是鼎鼎大名的“图灵测试”。测试过程如下:假设有两个角色,测试者T,“被测试者”A和B,A和B两者中有一个是人,另外一个则是机器,测试者T并不知道A和B谁是人谁是机器。图灵测试按照如下进行:测试者T提问,A和B分别回答。如果测试者T不能从两者的答案中分辨出到底A和B那个是人,那么则认为机器具有智能。(下图为阿兰•图灵)

阿兰•图灵

这个测试无论如何都太粗糙了,就像数学中集合的定义一样,实际上并没有告诉我们什么有用的信息。比如我可以写一个程序,将朗文词典中的所有单词及其释义存储到机器中,然后测试者T提的问题是解释某个单词的含义。可以保证,机器总可以给出正确的结果,并且提供结果所用时间的期望肯定比人的小。按照“图灵测试”的定义,我们其实可以说这段程序有“智能”,但其实我知道,你可能并不这么想。看来,判断机器是否拥有智能或者机器能否拥有智能,并不是一个简单的问题。

人们试图从各个方面讨论这些个问题,但作为“生产第一线”、极具实用主义的程序员们似乎并不关心,他们可能只关心Windows为什么要将MFC的类层次结构搞得如此复杂、版本如此众多。这些问题大多作为某种哲学问题而存在,与其陷入僵持不下的哲学争论,不如换个思路来思考这个问题。既然问题是“机器能否思考”,而算法是机器一切行为的核心,我们或许可以从算法的观点来分析。

我们希望机器拥有“智能”,最容易想到的方法就是让机器按照人的思维方式去“思考”,人工神经网络(Artificial Neural Network, ANN)就是其中一种“仿生学”算法(需要注意的是,ANN并不是计算机学家发明的算法)。ANN模拟人身体中神经元的活动,将每个神经元看作是一个个运算的节点,神经元之间的突触连接则看作是节点之间的相互作用。ANN接受输入,通过一层一层的计算,最终将结果输出。经过反复的训练,并在训练中不断调整节点之间的连接权重,最终得到一个稳定的模型。ANN曾经“红极一时”,被认为是解决问题的不二法宝。不过,很快人们发现这个模型存在着太多的缺陷:没有确定模型结构的算法,比如设计多少个隐藏层以及隐藏层包含多少个节点,训练时间长,模型不精确,节点连接初始状态难以确定等等。最重要的是,ANN是线性模型,无法解决非线性问题,比如异或问题。(下图为 包含一个隐藏层(Hidden layer)的ANN模型)

ANN模型

还有另外一种“仿生学”的算法也曾经得到计算机研究者的青睐:遗传算法(Genetic Algorithm)。顾名思义,遗传算法模拟人类基因的遗传变异过程,按照达尔文的理论“优胜劣汰,物竞天择”,遗传算法将每次更适合“生存”–在实际问题中也就是更有可能是问题的解的部分保留下来,这样通过迭代,就可以越来越接近真正问题的解。遗传算法引入了“变异”这一环节,也就是以某种概率突变,某种意义上增加了程序的不确定性,希望使得算法可以更加快速的收敛,得到最终的解。遗传算法在某种程度上与ANN有同样的缺陷:求解过程时间长,同样无法保证得到的解就是全局最优解。所以,这种“仿生学”的算法就像是买彩票一样,中奖率或许要高一些,但其实无法保证收回“成本”。

那么除了“仿生学”算法,还有没有其他“智能算法”呢?从某种程度上来说,这种算法是有的,并且很多,我们也天天在享受着它们带给我们的方便。比如,在我们在逛网上商城的时候,推荐算法可以根据你已经买到的和曾经浏览的图书,向你推荐其它的图书。又比如,当你在搜索框中键入你的问题,搜索引擎(大多数情况下)就会返回你想要的结果。我们或许有可以自信满满的说:我们使得计算机拥有了“智能”。可真的是这样么?

推荐系统的背后是推荐算法,搜索引擎的背后是信息检索算法。你可能看到这些算法的名字就已经头大了,不过,这些算法却是一些简单想法的组合(如果有人告诉你这些很复杂,那么几乎可以肯定是以下两种情况:1,他自己也不明白;2,他不想让你明白)。研究者持续的工作,如同搭积木一样,使这些算法越来越强大。这些算法都可以称作“机器学习”(Machine learning)算法。

这里还有一些机器学习算法的例子。这些年随着互联网的快速发展,数据大规模的产生,相应的数据处理算法也备受关注。人们通过使用算法分析超市买卖记录,可以找到顾客经常一起买的商品。在得到这个信息之后,超市管理者们可以将这些经常被一起购买的产品放在一起,方便顾客,当然,也可以故意相隔很远,让顾客多转几圈,顺便购买别的东西。这背后其实就是数据挖掘中的频繁集查找算法。还有Google的自动文本分类功能,将相同类别的文章放在一起,方便人们阅读等等。

仔细想想会发现,计算机所体现的智能其实只是算法设计者的智能,计算机只是忠实无误的执行每一个算法步骤。换句话来说,如果某个人有足够的耐心,他同样可以按照算法设定,完成这些工作,只不过需要的时间就太长了,以至于不可行。既然算法是算法设计者的思维体现,也就是人的智能,所以似乎还并不能说机器有了智能。

那我们内心中是如何对“智能”这个词定义的呢,以至于我们对“智能”的要求如此之高?首先,一个东西如果有智能,那么我们希望它可以从已经存在的事实(训练数据)中总结出某种规律,比如找到销售的产品中经常同时出现的组合,或者像支持向量机(Support Vector Machines, SVMs)算法那样“学习出”线性模型的权重系数。按照之前我们的分析,这个定义其实已经将现在的计算机归为“智能生物”。当然,我们是不担心这种“智能”的,因为机器只是严格执行指令,毫无其他“非分之想”。

另外一种的“智能”的观点则可能越来越接近我们真正所期望的智能。我们希望通过学习已有的数据,不仅仅是总结出某种规律,而是产生“新的想法”。这将无疑是一个非常巨大的进步。再回到我们从算法分析的观点,要产生“新的想法”或者说创新性的解决问题的方式,那么就要求我们的算法不仅仅像计算机病毒那样自我复制,而是要有能力产生新的算法和代码。这么看来,似乎又进入了之前“仿生学”的怪圈。又或许没有,我并不清楚。

我认为,既然是机器就应该按照机器的特性来让机器“学习知识”,而不是强加给机器人类学习思考的模式,因为这样是忽略了机器最大的特性:速度。或许今后人们可以利用大型机来模拟遗传算法等“仿生学”算法,加速进化的进行,得到较好的结果。这种感觉好像是我们超越了光速,看到了未来。又或许让算法产生新算法的想法根本就不可行,人类本来就不该这么偷懒。(完)

图1:Image courtesy: http://en.wikipedia.org/wiki/File:Alan_Turing_photo.jpg

图2:Image courtesy: http://en.wikipedia.org/wiki/File:Artificial_neural_network.svg

声明: 本文采用 BY-NC-SA 授权。转载请注明转自: 孔明