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