近期在googlesearch blog上發(fā)布了一篇題為《Lessons learned developing a practical large scale machine learning system》的博客,作者應(yīng)該是google機(jī)器學(xué)習(xí)團(tuán)隊的成員,列舉了他們在開發(fā)一個可伸縮的大型機(jī)器學(xué)習(xí)系統(tǒng)Seti時所積累的一些經(jīng)驗教訓(xùn)。雖然所列出的三點(diǎn)教訓(xùn)看起來都很簡單,似乎顯而易見,但在現(xiàn)實操作中我們往往會受到種種的“誘惑”而走向另一個極端。特別典型的情景是,這些道理對于工作在一線的有過一定的項目經(jīng)驗積累的工程師來說,是有一定的直觀感受的,但由于沒有很好地概括描述或通過一個有權(quán)威性的嘴巴說出來,而可能被一些只存在于設(shè)計紙上的美妙構(gòu)想而引向錯誤的方向,導(dǎo)致勞民傷財,積重難返。最簡單的道理,卻最容易被人們一遍又一遍地觸犯著,所以想把它們寫下來,一方面提醒自己以后少受這樣的誘惑而犯錯,另一方面也希望給類似應(yīng)用場景與想法的朋友有一個權(quán)威性的歸納與佐證。
以下大都屬于充分尊重原博客基礎(chǔ)上的意譯,穿插部分自己的看法。
這里說的機(jī)器學(xué)習(xí)系統(tǒng)其實是指一個分類系統(tǒng)(或者說模式識別系統(tǒng)),大部分情況下,這兩者可以等同而視之,但在回復(fù)里也有人指出機(jī)器學(xué)習(xí)的范疇?wèi)?yīng)該比較模式識別更大,這里不再執(zhí)著于誰大誰小的問題,只需要知道,下面提到的機(jī)器學(xué)習(xí)系統(tǒng)或Seti主要是一個分類器,它具有如下的一些特點(diǎn):
對于一個預(yù)測或分類問題,如果你沒有足夠的數(shù)據(jù)量,你得關(guān)注于如何在少量的數(shù)據(jù)樣本下充分利用統(tǒng)計知識構(gòu)建一個精巧的分類器,反之,如果你的數(shù)據(jù)量爆棚,你就得關(guān)注你的系統(tǒng)如何才能適應(yīng)如此龐大的樣本量,并從中挖掘中有用的信息來。Seti所解決的問題規(guī)模大體上是像下表所描述的那樣的:
Training set size Unique features
Mean 100 Billion 1 Billion
Median 1 Billion 10 Million
通常來說,一個好的機(jī)器學(xué)習(xí)系統(tǒng)需要更多地強(qiáng)調(diào)精度,但面對一個大型的系統(tǒng)時作這樣的片面強(qiáng)調(diào)容易犯下很多錯誤,以下是我們在開發(fā)Seti過程中積累的幾個經(jīng)驗教訓(xùn),當(dāng)然有一些是事后我們才總結(jié)出來的,當(dāng)時我們并沒有意識到。(注:作者應(yīng)該是想說,有些因素跟精度一樣不能忽視,甚至更重要)
1、保持系統(tǒng)的簡單,即使這意味著會損失一定的精度。(Keep it simple, even at the expense of a little accuracy)
誘惑:讓你的分類器在不同領(lǐng)域的應(yīng)用中都具有高精度是非常重要的,所以我們應(yīng)該專注于算法的精度上。
但是,實際中的算法有其它幾個方面具有同等重要的地位:
容易使用:如果這個系統(tǒng)還有其它人或其它團(tuán)隊在使用,他們必定希望這個系統(tǒng)在配置與使用上都是簡單的,他們可能不是機(jī)器學(xué)習(xí)的專家,所以他們也不希望把時間浪費(fèi)在系統(tǒng)的啟動與運(yùn)作上。
系統(tǒng)的可靠性:大家更注重在實際環(huán)境中部署一個可靠的機(jī)器學(xué)習(xí)系統(tǒng),它必需是穩(wěn)定的并且不需要總是去關(guān)注它是否崩潰的。早期的Seti雖然在精度上更好,但它的復(fù)雜性、對網(wǎng)絡(luò)與GFS文件系統(tǒng)的壓力、需要持續(xù)關(guān)注等缺點(diǎn)導(dǎo)致了很多人都不愿意去部署它。
(很多情況下,我們都可以認(rèn)為以上兩點(diǎn)是等價的,即:系統(tǒng)的簡單易用約等于穩(wěn)定可靠)
Seti通常應(yīng)用于對原有系統(tǒng)有極大提升效果的場景(參看教訓(xùn)3),因此大家都不太會關(guān)注Seti所使用的不同算法所造成的在精度上的細(xì)微差別。另一方面,這些精度上的小差別經(jīng)??梢酝ㄟ^其它的手段來抹平,比如更好的數(shù)據(jù)過濾、添加其它更合適的特征、調(diào)整參數(shù)等等,如果這個系統(tǒng)是穩(wěn)定的、可擴(kuò)展的、簡單易用的,以上的這些額外的步驟也更容易實現(xiàn),而這些系統(tǒng)特點(diǎn)往往決定了它會被團(tuán)隊接受或拋棄。
對于學(xué)術(shù)界來說,設(shè)計一個精度稍差但更穩(wěn)定與簡單易用的算法并不是一個有吸引力的事情,但依據(jù)我們的經(jīng)驗,這個在實際當(dāng)中具有非凡的價值。
2、從當(dāng)前的一些具體的應(yīng)用開始。(Start with a few specific applications in mind)
誘惑:構(gòu)建一個不限定于任何特定應(yīng)用的系統(tǒng),不單能囊括當(dāng)前的各類應(yīng)用,還能適用于未來的各種分類任務(wù)。
但是,我們決定聚焦于一小撮的初始的應(yīng)用上,這個決定基于如下幾個原因:
3、知道什么時候說“不”。(Know when to say “no”)
誘惑:我們有了錘子,所以我們眼中什么都是釘子,任何的問題都可以用機(jī)器學(xué)習(xí)系統(tǒng)來解決。
很早以前我們就發(fā)現(xiàn),雖然機(jī)器學(xué)習(xí)系統(tǒng)帶來了明顯的收益,但它同時也給整個系統(tǒng)帶來了復(fù)雜性、不透明性與不可預(yù)測性。有些情況下,簡單的技術(shù)已經(jīng)足以解決手頭的問題,從長遠(yuǎn)來看,與其把努力花在整合、維護(hù)與診斷在線機(jī)器學(xué)習(xí)系統(tǒng)上,還不如花在其它的一些提升系統(tǒng)性能的方法上。
Seti適用的前提是對現(xiàn)在的系統(tǒng)上有明顯的預(yù)測效果上的提升,我們也常常建議大家避免把它應(yīng)用于效果提升不明顯的場景。
補(bǔ)充1:看到Seti所應(yīng)用的數(shù)據(jù)規(guī)模時,我的第一反應(yīng)是怎么可能得到這么大量的標(biāo)記數(shù)據(jù),因為訓(xùn)練分類器是需要標(biāo)記好的數(shù)據(jù)集的,同樣文中屢次提到分類器的精度,而計算分類器的精度同樣不能缺少標(biāo)記數(shù)據(jù)。我的理解是:一種情況下,這些標(biāo)記數(shù)據(jù)是來自于google用戶無意識的點(diǎn)擊貢獻(xiàn),另一種情況是,他們使用的是半監(jiān)督學(xué)習(xí)的方法,從一個小型的人工標(biāo)記的數(shù)據(jù)集開始訓(xùn)練,然后覆蓋到數(shù)據(jù)的全集。
補(bǔ)充2:文中的一個主要的觀點(diǎn)是:商用的系統(tǒng)與學(xué)術(shù)界追求的系統(tǒng)其目標(biāo)是不一樣的。學(xué)術(shù)界會傾向于探尋即使是數(shù)據(jù)量不足的情況下,怎么得到有統(tǒng)計意義的結(jié)果,而精度永遠(yuǎn)都是最重要的。商業(yè)界在不缺乏數(shù)據(jù)的情況下需要關(guān)注于如何從帶噪聲的數(shù)據(jù)中過濾出有價值的信息,同時系統(tǒng)必須具有可擴(kuò)展性,此時,精度并不是一個唯一重要的因素。
評論
查看更多