以下內(nèi)容學(xué)習、摘錄自《數(shù)學(xué)之美》

在所有輕武器中最有名的是AK-47沖鋒槍,全世界共制造了7500萬支,另外制造了一億支“兼容”的。因為它從不卡殼,不易損壞,可在任何環(huán)境下使用,可靠性好,殺傷力大并且操作簡單。
我認為,在計算機科學(xué)領(lǐng)域,一個好的算法應(yīng)該像AK-47沖鋒槍那樣:簡單、有效、可靠性好而且容易讀懂(或者說易操作),而不應(yīng)該是故弄玄虛。 Google Fellow、美國工程院院士阿米特·辛格博士(AmitSinghal)就是 Google AK-47的設(shè)計者, Goolge內(nèi)部的排序算法 Scorer里面的A便是他的名字首字母。
作者曾經(jīng)與辛格等人一同研究、解決網(wǎng)絡(luò)搜索中的作弊問題(Spam):絕大多數(shù)作弊的搜索都多少有些商業(yè)意圖,因為利益使然。因此,我們需要建一個分類器,準確區(qū)分一個搜索是否有商業(yè)意圖。我以前一直在學(xué)術(shù)界學(xué)習和工作,凡事力求完美的解決方案。設(shè)計一個可用的、漂亮的分類器對我來講不是難事,但是實現(xiàn)和訓(xùn)練卻要花上三四個月,當時 Google還沒有 Mapreduce這種并行計}算工具,復(fù)雜的機器學(xué)習非常耗時。而辛格認為找個簡單有效的辦法就行了,他問我實現(xiàn)一個最簡單可用的分類器大約需要多少時間,我說一個周末可能就夠了。周一我把分類器完成了,問他是否還需要花時間去實現(xiàn)一個完美的方案。辛格看了看結(jié)果說,“夠好了,夠好了,在工程上簡單實用的方法最好?!?/p>
當時我們和公司工程副總裁韋恩·羅森( WayneRosing)打了個賭,如果我們能減少40%的作弊,他就給我們發(fā)工程獎,送我們四個家庭(不止是四個員工)去夏威夷度假五天。這個反作弊的算法上線后,羅森真的履約了。這個分類器設(shè)計得非常小巧(占用內(nèi)存很?。疫\行速度非??欤◣着_服務(wù)器就能處理全球搜索的分類),至今運行得很好。
后來做一個全新的中、日、韓文搜索算法時,作者寫了一個效果雖然很好,但是占用內(nèi)存較多的算法,當然Google的服務(wù)器數(shù)量還沒有現(xiàn)在這么多,不可能為了中日韓這三個占總流量不到10%的語言額外增加一批服務(wù)器。辛格提出用一個擬合函數(shù)替代很耗內(nèi)存的語言模型,這樣不需要增加任何服務(wù)器。但是,這樣一來搜索質(zhì)量的提高幅度只有原來采用大模型時的80%。我對此多少有點不甘心。辛格解釋說,這樣我們至少可以提早兩個月將這個新算法提供給中國的用戶,而且用戶體驗也會有質(zhì)的提高,這是雪中送炭。我們暫時放棄掉的20%收益,對用戶而言不過是錦上添花。我接受了他的建議,在2003年初我發(fā)布了第一個專門為中日韓語言設(shè)計的搜索算法。一年后,Google的服務(wù)器數(shù)量也有所增加。我在模型壓縮上也有了進步,這時便發(fā)布了完整的中日韓語言搜索算法。辛格這種做事情的哲學(xué),即先幫助用戶解決80%的問題,再慢慢解決剩下的20%問題,是在工業(yè)界成功的秘訣之一。許多失敗并不是因為人不優(yōu)秀,而是做事情的方法不對,開始追求大而全的解決方案,之后長時間不能完成,最后不了了之。
辛格堅持選擇簡單方案的另一個原因是:容易解釋每一個步驟和方法背后的道理,這樣不僅便于出了問題時查錯( Debug),而且容易找到今后改進的目標。隨著搜索引擎的不斷進步,現(xiàn)在幾乎所有的改進都非常細微:通常對一類搜索有改進的方法,會對另外某一類搜索產(chǎn)生稍稍負面的影響。這時候,必須很清楚“所以然”才能找出這個方法產(chǎn)生負面影響的原因和場景,并且避免它的發(fā)生。對于非常復(fù)雜的方法,尤其是像黑盒子似的基于機器學(xué)習的方法,這一點是做不到的。而如果每一項改進都是有得有失,甚至得失相差無幾,那么長期下來搜索的質(zhì)量不會有什么明顯提升。辛格要求對于搜索質(zhì)量的改進方法都要能說清楚理由,說不清楚理由的改進,即使看上去有效也不會采用,因為這樣將來可能是個隱患。
在 Google,辛格一直堅持尋找簡單有效的解決方案,因為他奉行簡單的哲學(xué)。但是這種做法在 Google這個人才濟濟的公司里常常招人反對,因為很多資深的工程師傾向于低估簡單方法的有效性。不少人試圖用精確而復(fù)雜的辦法對辛格設(shè)計的各種“AK-47”加以改進,后來發(fā)現(xiàn)幾乎任何時候,辛格的簡單方法都接近最優(yōu)解決方案,而且還快得多。
當然,辛格之所以總是能找到那些簡單有效的方法,不是靠直覺,更不是撞大運,這首先是靠他豐富的研究經(jīng)驗。辛格堅持每天要分析些搜索結(jié)果不好的例子,以掌握第一手的資料。這一點,非常值得從事搜索研究的年輕工程師學(xué)習。
辛格非常鼓勵年輕人要不怕失敗,大膽嘗試。有一次,一位剛畢業(yè)不久的工程師因為把帶有錯誤的程序推出到 Google的服務(wù)器上而惶惶不可終日。辛格安慰她說,你知道,我在 Google犯的最大一次錯誤是曾經(jīng)將所有網(wǎng)頁的相關(guān)性得分全部變成了零,于是所有搜索的結(jié)果全部都是隨機的了。后來,這位出過錯的工程師為 Google開發(fā)出了很多好產(chǎn)品。
我曾經(jīng)犯過的大錯是操作數(shù)據(jù)庫時,在沒有備份的情況下,執(zhí)行了錯誤的update...where...語句,結(jié)果所有的數(shù)據(jù)都錯誤了,花了2天時間才不完全恢復(fù)。從那以后,我再也不會在未備份的情況下直接操作數(shù)據(jù)庫。
2012年,辛格當選美國工程院院士,并出任主管 Google搜索的高級副總裁。同年他又把我召回到了 Google,他當時對我只有一個要求:啟動個能領(lǐng)先微軟五年的項目(霸氣)。