2006年5月12日

什么是启发式?

在自然语言处理或者信息检索领域里面呆时间长了,总能听到一个术语“启发式”。在Google或者Baidu上输入“什么是启发式”,返回的结果中有很多的“启发式”:诸如,什么是启发式软件,什么是启发式教学法,什么是启发式搜索,什么叫做启发式杀毒等等。Google中一个有趣的结果是返回页面的第一个最后一个结果中说“孔子最早开创启发式教育。”呵呵,这个命题很有趣呀~!

这么多的启发式概念,那么究竟什么是启发式呢?我询问了很多老师同学,得到的一个普遍性的答案是,“启发式就是拍脑袋想出来的”。这个解释我觉得比较牵强,因为不同的人在不同的时候“拍脑袋”想出来的可能都会不一样。抱着试一试的态度,我在Google上输入了“definition:heuristic”. Heuristic的中文意思是“启发式”。加上“Definition:”是定义查询的方法。还好,在返回的首页中我找到了一个感觉解释的比较好的结果,如下(来源页面:http://www.learningframework.com/define-heuristic.html):


A heuristic (hyu-'ris-tik) is the art and science of discovery and invention. The word comes from the same Greek root as "eureka" meaning "to find". A heuristic for a given problem is a way of directing your attention fruitfully to a solution. It is different from an algorithm in that a heuristic merely serves as a rule-of-thumb or guideline, as opposed to an invariant procedure. Heuristics may not always achieve the desired outcome, but can be extremely valuable to problem-solving processes. Good heuristics can dramatically reduce the time required to solve a problem by eliminating the need to consider unlikely possibilities or irrelevant states. As such, it is particularly useful to those in the process of discovery and the are constantly rethinking their strategies in the face of a stubborn unknown.



这个说法和我最近学习的《CODE COMPLETE》第12页在介绍“如何使用软件隐喻”的时候提到的“启发式”类似。这里提到:


而启发式方法(试探法)是一种帮你寻求答案的技术,但它给出的答案是具有偶然性的(subject to chance),因为启发式方法仅仅告诉你该如何去找,而没有告诉你要找什么。它并不告诉你该如何直接从A 点到达B 点,它甚至可能连A点和B点在哪里都不知道。实际上,启发式方法是穿着小丑儿外套的算法:它的结果不太好预测,也更有趣,但不会给你什么30 天无效退款的保证。

驾驶汽车到达某人的家,写成算法是这样的:沿167 号高速公路往南行至Puyallup;从South Hill Mall 出口出来后往山上开4.5 英里;在一个杂物店旁边的红绿灯路口右转,接着在第一个路口左转;从左边褐色大房子的车道进去,就是North Cedar 路714 号。

用启发式方法来描述则可能是这样:找出上一次我们寄给你的信,照着信上面的寄出地址开车到这个镇;到了之后你问一下我们的房子在哪里。这里每个人都认识我们——肯定有人会很愿意帮助你的;如果你找不到人,那就找个公共电话亭给我们打电话,我们会出来接你。

算法和启发式方法之间的差别很微妙,两个术语的意思也有一些重叠。就本书的目的而言,它们之间的差别就在于其距离最终解决办法的间接程度:算法直接给你解决问题的指导,而启发式方法则告诉你该如何发现这些指导信息,或者至少到哪里去寻找它们。



英语和中文的不同描述都给我们解释了启发式的涵义。简而言之,启发式式一种经验性的指导原则,依靠好的启发式,我们可以大得到进行高效,快速的问题求解。如何选择好的启发式就需要不断的经验积累了。

没有评论: