以下内容学习、摘录自《数学之美》
在所有轻武器中最有名的是AK-47冲锋枪,全世界共制造了7500万支,另外制造了一亿支“兼容”的。因为它从不卡壳,不易损坏,可在任何环境下使用,可靠性好,杀伤力大并且操作简单。
我认为,在计算机科学领域,一个好的算法应该像AK-47冲锋枪那样:简单、有效、可靠性好而且容易读懂(或者说易操作),而不应该是故弄玄虚。 Google Fellow、美国工程院院士阿米特·辛格博士(AmitSinghal)就是 Google AK-47的设计者, Goolge内部的排序算法 Scorer里面的A便是他的名字首字母。
作者曾经与辛格等人一同研究、解决网络搜索中的作弊问题(Spam):绝大多数作弊的搜索都多少有些商业意图,因为利益使然。因此,我们需要建一个分类器,准确区分一个搜索是否有商业意图。我以前一直在学术界学习和工作,凡事力求完美的解决方案。设计一个可用的、漂亮的分类器对我来讲不是难事,但是实现和训练却要花上三四个月,当时 Google还没有 Mapreduce这种并行计}算工具,复杂的机器学习非常耗时。而辛格认为找个简单有效的办法就行了,他问我实现一个最简单可用的分类器大约需要多少时间,我说一个周末可能就够了。周一我把分类器完成了,问他是否还需要花时间去实现一个完美的方案。辛格看了看结果说,“够好了,够好了,在工程上简单实用的方法最好。”
当时我们和公司工程副总裁韦恩·罗森( WayneRosing)打了个赌,如果我们能减少40%的作弊,他就给我们发工程奖,送我们四个家庭(不止是四个员工)去夏威夷度假五天。这个反作弊的算法上线后,罗森真的履约了。这个分类器设计得非常小巧(占用内存很小),而且运行速度非常快(几台服务器就能处理全球搜索的分类),至今运行得很好。
后来做一个全新的中、日、韩文搜索算法时,作者写了一个效果虽然很好,但是占用内存较多的算法,当然Google的服务器数量还没有现在这么多,不可能为了中日韩这三个占总流量不到10%的语言额外增加一批服务器。辛格提出用一个拟合函数替代很耗内存的语言模型,这样不需要增加任何服务器。但是,这样一来搜索质量的提高幅度只有原来采用大模型时的80%。我对此多少有点不甘心。辛格解释说,这样我们至少可以提早两个月将这个新算法提供给中国的用户,而且用户体验也会有质的提高,这是雪中送炭。我们暂时放弃掉的20%收益,对用户而言不过是锦上添花。我接受了他的建议,在2003年初我发布了第一个专门为中日韩语言设计的搜索算法。一年后,Google的服务器数量也有所增加。我在模型压缩上也有了进步,这时便发布了完整的中日韩语言搜索算法。辛格这种做事情的哲学,即先帮助用户解决80%的问题,再慢慢解决剩下的20%问题,是在工业界成功的秘诀之一。许多失败并不是因为人不优秀,而是做事情的方法不对,开始追求大而全的解决方案,之后长时间不能完成,最后不了了之。
辛格坚持选择简单方案的另一个原因是:容易解释每一个步骤和方法背后的道理,这样不仅便于出了问题时查错( Debug),而且容易找到今后改进的目标。随着搜索引擎的不断进步,现在几乎所有的改进都非常细微:通常对一类搜索有改进的方法,会对另外某一类搜索产生稍稍负面的影响。这时候,必须很清楚“所以然”才能找出这个方法产生负面影响的原因和场景,并且避免它的发生。对于非常复杂的方法,尤其是像黑盒子似的基于机器学习的方法,这一点是做不到的。而如果每一项改进都是有得有失,甚至得失相差无几,那么长期下来搜索的质量不会有什么明显提升。辛格要求对于搜索质量的改进方法都要能说清楚理由,说不清楚理由的改进,即使看上去有效也不会采用,因为这样将来可能是个隐患。
在 Google,辛格一直坚持寻找简单有效的解决方案,因为他奉行简单的哲学。但是这种做法在 Google这个人才济济的公司里常常招人反对,因为很多资深的工程师倾向于低估简单方法的有效性。不少人试图用精确而复杂的办法对辛格设计的各种“AK-47”加以改进,后来发现几乎任何时候,辛格的简单方法都接近最优解决方案,而且还快得多。
当然,辛格之所以总是能找到那些简单有效的方法,不是靠直觉,更不是撞大运,这首先是靠他丰富的研究经验。辛格坚持每天要分析些搜索结果不好的例子,以掌握第一手的资料。这一点,非常值得从事搜索研究的年轻工程师学习。
辛格非常鼓励年轻人要不怕失败,大胆尝试。有一次,一位刚毕业不久的工程师因为把带有错误的程序推出到 Google的服务器上而惶惶不可终日。辛格安慰她说,你知道,我在 Google犯的最大一次错误是曾经将所有网页的相关性得分全部变成了零,于是所有搜索的结果全部都是随机的了。后来,这位出过错的工程师为 Google开发出了很多好产品。
我曾经犯过的大错是操作数据库时,在没有备份的情况下,执行了错误的update...where...语句,结果所有的数据都错误了,花了2天时间才不完全恢复。从那以后,我再也不会在未备份的情况下直接操作数据库。
2012年,辛格当选美国工程院院士,并出任主管 Google搜索的高级副总裁。同年他又把我召回到了 Google,他当时对我只有一个要求:启动个能领先微软五年的项目(霸气)。