對(duì)于大規(guī)模機(jī)器學(xué)習(xí)問題,調(diào)參的難度顯然是更大的:
首先,一次訓(xùn)練和測(cè)試過程的時(shí)間和計(jì)算資源開銷都是龐大的,不管采用什么調(diào)參方法,多次實(shí)驗(yàn)都會(huì)帶來很大的時(shí)間和計(jì)算資源消耗。
其次,大規(guī)模機(jī)器學(xué)習(xí)問題通常都是數(shù)據(jù)變化很快的問題,如計(jì)算廣告和推薦系統(tǒng),之前確定好的參數(shù)在隨著數(shù)據(jù)的變化,也有劣化的風(fēng)險(xiǎn)。
目前來說大規(guī)模機(jī)器學(xué)習(xí)存在的主要挑戰(zhàn)是兩個(gè):第一是計(jì)算資源的消耗比較大,訓(xùn)練時(shí)間較長(zhǎng)的問題,第二是調(diào)參比較困難,效率較低。TalkingData在大規(guī)模機(jī)器學(xué)習(xí)的實(shí)踐中也深受這兩個(gè)問題的困然,特別是公司在早起階段硬件資源十分有限,這兩個(gè)問題特別突出。我們?yōu)榱私鉀Q這個(gè)問題,做了很多努力和嘗試。TalkingData最近開源的Fregata項(xiàng)目[4],就是我們?cè)谶@方面取得的一些成果的總結(jié)。
二. Fregata的優(yōu)點(diǎn)
Fregata是TalkingData開源的大規(guī)模機(jī)器學(xué)習(xí)算法庫(kù),基于Spark,目前支持Spark 1.6.x, 很快會(huì)支持Spark 2.0。目前Fregata包括了Logistic Regression, Softmax, 和Random Decision Trees三中算法。
三種算法中Logistic Regression, Softmax可以看作一類廣義線性的參數(shù)方法,其訓(xùn)練過程都依賴于凸優(yōu)化方法。我們提出了Greedy Step Averaging[5]優(yōu)化方法,在SGD優(yōu)化方法基礎(chǔ)上實(shí)現(xiàn)了學(xué)習(xí)率的自動(dòng)調(diào)整,免去了調(diào)參的困擾,大量的實(shí)驗(yàn)證明采用GSA 優(yōu)化方法的Logstic Regression和Softmax算法的收斂速度和穩(wěn)定性都是非常不錯(cuò)的,在不同數(shù)據(jù)規(guī)模,不同維度規(guī)模和不同稀疏度的問題上都能取得很好的精度和收斂速度。
基于GSA優(yōu)化方法,我們?cè)赟park上實(shí)現(xiàn)了并行的Logistic Regression和Softmax算法,我們測(cè)試了很多公開數(shù)據(jù)集和我們自己的數(shù)據(jù),發(fā)現(xiàn)在絕大部分?jǐn)?shù)據(jù)上都能夠掃描一遍數(shù)據(jù)即收斂。這就大大降低了IO開銷和通信開銷。
其中Logsitic Regression算法還有一個(gè)支持多組特征交叉的變種版本,其不同點(diǎn)是在訓(xùn)練過程中完成維度交叉,這樣就不需要在數(shù)據(jù)準(zhǔn)備過程中將多組特征維度預(yù)先交叉準(zhǔn)備好,通常這意味著數(shù)據(jù)量級(jí)上的數(shù)據(jù)量膨脹,給數(shù)據(jù)存儲(chǔ)和IO帶來極大壓力。而這種多組特征交叉的需求在計(jì)算廣告和推薦系統(tǒng)中又是非常常見的,因此我們對(duì)此做了特別的支持。
而Random Decision Trees[6][7]算法是高效的非參數(shù)學(xué)習(xí)方法,可以處理分類,多標(biāo)簽分類,回歸和多目標(biāo)回歸等問題。而且調(diào)參相對(duì)也是比較簡(jiǎn)單的。但是由于樹結(jié)構(gòu)本身比較復(fù)雜而龐大,使得并行比較困難,我們采用了一些Hash Trick使得對(duì)于二值特征的數(shù)據(jù)可以做到掃描一遍即完成訓(xùn)練,并且在訓(xùn)練過程中對(duì)內(nèi)存消耗很少。
總結(jié)起來,F(xiàn)regata的優(yōu)點(diǎn)就兩個(gè),第一是速度快,第二是算法無需調(diào)參或者調(diào)參相對(duì)簡(jiǎn)單。這兩個(gè)優(yōu)點(diǎn)降低了減少了計(jì)算資源的消耗,提高了效率,同時(shí)也降低了對(duì)機(jī)器學(xué)習(xí)工程師的要求,提高了他們的工作效率。
三. GSA算法介紹
GSA算法是我們最近提出的梯度型隨機(jī)優(yōu)化算法,是Fregata采用的核心優(yōu)化方法。它是基于隨機(jī)梯度下降法(SGD)的一種改進(jìn):保持了SGD易于實(shí)現(xiàn),內(nèi)存開銷小,便于處理大規(guī)模訓(xùn)練樣本的優(yōu)勢(shì),同時(shí)免去了SGD不得不人為調(diào)整學(xué)習(xí)率參數(shù)的麻煩。
事實(shí)上,最近幾年關(guān)于SGD算法的步長(zhǎng)選取問題也有一些相關(guān)工作,像Adagrad, Adadelta, Adam等。但這些方法所聲稱的自適應(yīng)步長(zhǎng)策略其實(shí)是把算法對(duì)學(xué)習(xí)率的敏感轉(zhuǎn)移到了其他參數(shù)上面,并未從本質(zhì)上解決調(diào)參的問題,而且他們也引入了額外的存儲(chǔ)開銷。GSA和這些算法相比更加輕量級(jí),易于實(shí)現(xiàn)且易于并行,比起SGD沒有額外的內(nèi)存開銷,而且真正做到了不依賴任何參數(shù)。
我們把GSA算法應(yīng)用于Logistic回歸和Softmax回歸,對(duì)libsvm上16個(gè)不同類型規(guī)模不等的數(shù)據(jù)集,和SGD,Adadelta,SCSG(SVRG的變種)這些目前流行的隨機(jī)優(yōu)化算法做了對(duì)比實(shí)驗(yàn)。結(jié)果顯示,GSA算法在無需調(diào)任何參數(shù)的情況下,和其他算法做參數(shù)調(diào)優(yōu)后的最佳表現(xiàn)不相上下。此外,GSA比起這些流行的方法在計(jì)算速度和內(nèi)存開銷方面也有一定的優(yōu)勢(shì)。
GSA算法的核心原理非常簡(jiǎn)單:在迭代的每一步對(duì)單個(gè)樣本的損失函數(shù)做線搜索。具體來說,我們對(duì)邏輯回歸和softmax回歸的交叉熵?fù)p失函數(shù),推導(dǎo)出了一套僅用當(dāng)前樣本點(diǎn)的梯度信息來計(jì)算精確線搜索步長(zhǎng)的近似公式。我們把利用這套近似公式得到的步長(zhǎng)做時(shí)間平均來計(jì)算當(dāng)前迭代步的學(xué)習(xí)率。這樣做有兩方面的好處:基于精確線搜索得到的步長(zhǎng)包含了當(dāng)前迭代點(diǎn)到全局極小的距離信息——接近收斂時(shí)步長(zhǎng)比較小,反之則更大,因而保證收斂速度;另一方面平均策略使算法對(duì)離群點(diǎn)更魯棒,損失下降曲線不至劇烈抖動(dòng),為算法帶來了額外的穩(wěn)定性。