今天,推薦系統(tǒng)的模型和應(yīng)用已經(jīng)相當成熟,然而部署一套全新的推薦系統(tǒng),甚至僅在已有系統(tǒng)上添加數(shù)據(jù)維度和模型優(yōu)化依然是非常耗時耗力的事情。
這是由于不同數(shù)據(jù)源的分布不盡相同,要達到滿意的建模效果,每個建模的環(huán)節(jié),包括數(shù)據(jù)處理、特征工程、模型的選擇和超參數(shù)選擇等都需要隨之變動和優(yōu)化。
以往這些工作都是建模工程師通過 A/B Test 和 Grid Search 等方式來手動調(diào)試有限的幾種建模組合方式,并挑出最好的配置作為上線用的系統(tǒng)配置。
然而要想從少量的嘗試中找到優(yōu)質(zhì)的模型方案,不僅要求工程師有豐富的建模經(jīng)驗,可能還需要一點點運氣,成本和風險都比較高。
近幾年在機器學習領(lǐng)域興起的自動機器學習(AutoML)技術(shù),便是為了解決機器學習模型訓練難,落地難這個痛點所做的努力。
我們同樣可以把 AutoML 技術(shù)應(yīng)用到推薦系統(tǒng)的建模中,這次分享主要介紹用哪些方法來打造一個 AutoML 系統(tǒng),并用于提升推薦系統(tǒng)的搭建效率。
如果我們看今天的機器學習應(yīng)用(以監(jiān)督學習為主),它大致可以分為傳統(tǒng)機器學習和深度學習兩大類。
傳統(tǒng)機器學習用的比較多的模型有 LR、Gradient Boosting Machine、Random Forest、KNN 等,模型本身比較簡單和成熟,但是由于這些模型無法擬合非常復雜的非線性函數(shù),我們需要通過特征工程把原問題空間轉(zhuǎn)化到一個機器學習模型容易學的表述空間,才能得到好的效果。
相對傳統(tǒng)機器學習,近幾年興起的深度學習,由于其強大的模型表達能力,相對弱化了特征工程的重要性,具有端到端學習的能力。
尤其在處理圖像,文字和語音等非結(jié)構(gòu)化數(shù)據(jù)時,我們發(fā)現(xiàn)深度學習模型具有學習表述空間的能力(representation learning),從一定程度上實現(xiàn)了特征工程的自動化。
由于傳統(tǒng)機器學習模型和深度學習模型在建模過程中側(cè)重點不同,AutoML 也大致分為自動傳統(tǒng)機器學習和自動深度學習(如圖 1)。
其中自動傳統(tǒng)機器學習關(guān)注自動數(shù)據(jù)預處理,自動特征處理和自動算法選擇和配置,而自動深度學習則需要解決神經(jīng)網(wǎng)絡(luò)的自動訓練和網(wǎng)絡(luò)結(jié)構(gòu)搜索的問題。我們下面就根據(jù)圖 1 來逐一探討 AutoML 的各個技術(shù)要點。
圖 1:自動機器學習組成部分
1. 自動傳統(tǒng)機器學習
當我們有了用戶行為數(shù)據(jù)后,我們通常需要經(jīng)過數(shù)據(jù)清洗、數(shù)據(jù)預處理、特征工程、選擇模型、配置模型、融合模型等步驟來構(gòu)建一整個機器學習管道。
自動機器學習需要盡可能的自動化其中每個環(huán)節(jié)。除了數(shù)據(jù)清洗環(huán)節(jié)和數(shù)據(jù)本身耦合度很高,需要更多的人為操作以外,數(shù)據(jù)預處理和之后的步驟都已經(jīng)在自動機器學習領(lǐng)域存在可行的方案。
1.1 數(shù)據(jù)預處理
由于模型對數(shù)據(jù)都存在一定假設(shè),我們需要使用一些數(shù)據(jù)預處理的方法將進入模型的數(shù)據(jù)處理成適合模型學習的分布。
比如神經(jīng)網(wǎng)絡(luò)模型需要輸入的數(shù)據(jù)符合正態(tài)分布,那么要對原始數(shù)據(jù)做歸一化處理;比如 Gradient Boosting Machine 不適合對類別數(shù)量非常高的離散特征建模,所以在前期要考慮刪除類別太多的離散特征。
在自動機器學習中,選擇哪種數(shù)據(jù)預處理方式和模型息息相關(guān),根據(jù)上面所述的經(jīng)驗構(gòu)造一個固定模版,比如已知神經(jīng)網(wǎng)絡(luò)需要歸一化處理,GBM 需要剔除高維離散特征,LR 模型需要線性分形等,把這些知識 hard code 進 AutoML 系統(tǒng)中,可以用一種模型來學習最優(yōu)組合。
這里介紹兩個可行的方向:一是使用貝葉斯優(yōu)化的方法,通過嘗試,反饋,優(yōu)化這一循環(huán)的過程來找到各個模型對應(yīng)的最佳數(shù)據(jù)預處理方法,我們會在后面對貝葉斯優(yōu)化做更詳細介紹;
另一個方向是元學習,我們在很多數(shù)據(jù)集上通過實驗不同的預處理-模型組合,記錄下每個數(shù)據(jù)集上最優(yōu)的組合,當在新數(shù)據(jù)集上開始探索時,會首先計算數(shù)據(jù)集的元特征,并在元特征空間中找到幾個最相似的曾經(jīng)試驗過的數(shù)據(jù)集,并借用它們的最優(yōu)預處理方案。
這兩個方向也可以結(jié)合起來,用元學習幫助熱啟動,再使用貝葉斯優(yōu)化探索適合新任務(wù)的方案。
1.2 自動特征處理
有人說,世界上的數(shù)據(jù)科學家,平均花 80% 的時間做特征,20% 的時間建模型,我們在工作中也意識到特征工程無比的重要性。
因此在自動機器學習系統(tǒng)中,特征也同樣是極其重要的環(huán)節(jié)。在這里討論一下特征組合,如何處理時序特征,使用變分自編碼器構(gòu)造特征等方法。
1.2.1 多粒度離散化
推薦系統(tǒng)常用的 LR 模型,在處理高維離散特征上非常強大,然而其簡單的線性模型本質(zhì)使它對非線性的連續(xù)特征解釋效果較差,并且在連續(xù)值特征尺度變化較大時效果不穩(wěn)定。
分桶是一種常見的連續(xù)特征離散化方法,然而分桶數(shù)目對建模結(jié)果影響較大。因此我們使用第四范式自研的線性分形分類器(LFC)來解決這個問題。
使用 LFC 我們可以讓模型從數(shù)據(jù)中自動選取最合適的分桶方式,同時 LFC 可以實現(xiàn)在特征粒度的離群點檢測,使得模型更為魯棒。通過這種技術(shù),我們在業(yè)務(wù)數(shù)據(jù)上都能相比 LR 提升一個百分點。
1.2.2 自動特征組合
原始數(shù)據(jù)中有的隱藏的關(guān)系,機器學習模型并不容易學到,所以需要通過構(gòu)造特征把這些隱性關(guān)系表達出來。針對離散特征和連續(xù)特征分別介紹基于啟發(fā)式算法的自動特征組合方法。
對于離散特征,由于簡單的線性模型無法學到多個特征的交互,需要通過笛卡爾積來生成組合特征。
舉個例子,如果要給決定是否給用戶推薦一款很受年輕女性歡迎的化妝品,原始數(shù)據(jù)里只有年齡段和性別兩個字段,可以把年齡段_性別作為一個新的特征,模型便能很容易從歷史數(shù)據(jù)中學出這款化妝品推薦給年輕女性接受度很高。
如果把所有組合特征都生成出來,那么組合特征的個數(shù)是隨著階數(shù)呈指數(shù)性增長的(搜索空間大于 AlphaGo),也就是我們很快就會產(chǎn)生出系統(tǒng)無法承受的數(shù)據(jù)量來。
針對這種情況,我們提出了一個自動特征組合算法 FeatureGo,結(jié)合集束搜索(Beam Search)和回溯(Backtracking)策略,去逐步搜索特征空間。
另外,基于 Boosting 的思想,提出了一系列替換損失函數(shù)來高效的評估特征重要性。我們在第四范式的大規(guī)模分布式機器學習平臺 GDBT 實現(xiàn)了該算法,并依據(jù)實際應(yīng)用場景定制化開發(fā),能夠在短時間內(nèi)快速搜索到有效組合特征。我們發(fā)現(xiàn)在實際應(yīng)用中都可以得到可觀的效果提升,在所有實際應(yīng)用中得到了超過 5 個千分點的提升。
1.2.3 自動時序特征
在業(yè)界的實際場景中,數(shù)據(jù)一般包含時序信息,因此需要考慮如何自動構(gòu)建時序特征,然而時序特征對系統(tǒng)性能要求較高。為了去的更好的建模效果,也要求時序特征算子盡可能多以覆蓋各種情況。
基于 GDBT,我們實現(xiàn)了非常高效的自動時序特征生成和選擇算子:TemporalGo,它包括時序統(tǒng)計信息、隱式向量等方法,也涵蓋如循環(huán)神經(jīng)網(wǎng)絡(luò) RNN 等方法,顯著提升了建模效果。
1.2.4 變分自編碼器 (VAE)
變分自編碼器(VAE)是一種基于神經(jīng)網(wǎng)絡(luò)的生成模型,其目標是給定原始數(shù)據(jù),VAE 經(jīng)過編碼和解碼后要盡可能地還原出原始數(shù)據(jù)。
可以把 VAE 用作一個基于模型的特征生成手段,而且經(jīng)過 VAE 編碼后的數(shù)值分布會盡可能的接近正態(tài)分布,這樣的新特征可以直接給很多機器學習模型使用。
當然訓練 VAE 本身很耗時間,而且需要較大的數(shù)據(jù)量才可能有效果,在實際應(yīng)用當中,優(yōu)先考慮其他特征工程方法。
1.3 模型選擇
在拿到一個問題開始建模之前,都會面臨一個問題,用什么樣的模型?你可以很容易地根據(jù)自己的經(jīng)驗,面對分類問題還是回歸問題,圖像還是表類數(shù)據(jù),列出幾個候選模型,然后你可能會把候選模型用這個數(shù)據(jù)都訓練一遍,并挑出那個驗證效果最好的模型用在生產(chǎn)中。在自動機器學習中,我們也會把模型選擇分成兩步。
首先,拿到一個新問題時,我們獲得這個問題的 meta 信息,比如數(shù)據(jù)是什么格式,數(shù)據(jù)量大小,訓練指標是什么等,通過查詢預先準備的問題映射到模型的查找表,找到適合這個問題的幾款候選模型及相關(guān)超參數(shù)設(shè)置(或者超參數(shù)的搜索空間)。
接下來便是挑選效果好的模型。最樸素的做法是把所有可能的模型和超參數(shù)配置都訓練一遍,挑出最好的模型即可,然而現(xiàn)實情況通常都有時間和計算資源的限制,導致我們無法訓練所有可能的模型參數(shù)組合。
我們需要一個更加節(jié)省資源的方法,對于一個問題,很多模型不一定需要到訓練結(jié)束才能做出判斷哪個模型效果好或者差,可能在訓練過程中我們通過觀測驗證指標,就能提前剔除一些效果太差的模型。
1.4 模型超參數(shù)優(yōu)化
一個模型在開始訓練前,可能需要人設(shè)置一些參數(shù),比如 LR 有 L1、L2 正則系數(shù)用來控制模型過擬合,GBM 有樹棵樹,學習率等,這些參數(shù)配置的好壞會直接影響最終的模型效果,而且參數(shù)配置的好壞又和數(shù)據(jù)本身有很強的相關(guān)性。
也就是說,不存在一組黃金配置能在所有數(shù)據(jù)集上都表現(xiàn)良好。因此建模工作中一個不可或缺的工作便是模型超參數(shù)的優(yōu)化。
如果是我們手動優(yōu)化參數(shù),一般是選取幾組我們認為值得嘗試的參數(shù)配置,然后訓練模型并做交叉驗證,最后挑出驗證指標最好的模型用作生產(chǎn)。
這種做法對一兩個超參數(shù)做優(yōu)化還能應(yīng)付,然而傳統(tǒng)機器模型 GBM 就有小十個需要調(diào)試的超參數(shù),更不用說深度學習模型會有更多的參數(shù)選擇,這使得自動優(yōu)化超參數(shù)技術(shù)越來越多的應(yīng)用到實際建模中。
最常見的做法是 Grid Search 和 Random Search。Grid Search 是讓用戶在每個超參數(shù)的選擇范圍里取幾個點,然后機器會將所有可能的參數(shù)組合都嘗試一遍,最后選出最好的模型,這種方法有兩個問題,一是需要用戶對每個超參數(shù)都要取點,二是由于需要嘗試所有參數(shù)組合,對計算資源的消耗非常高。
Random Search 是給定超參數(shù)選擇的空間范圍,然后在這個空間里隨機采樣N組超參數(shù)配置,交給模型做交叉驗證,并選出最好的模型。
在實際應(yīng)用中,Random Search 在超參數(shù)較多的情況下比 Grid Search 更快而且效果更好。
目前提到的兩種做法實現(xiàn)起來都很簡單,但缺點是它們都是在參數(shù)空間里盲目的搜尋,效率較低。
接下來我們介紹幾種在提升效率上努力的思路:
1.4.1 貝葉斯優(yōu)化
貝葉斯優(yōu)化是一種用于全局優(yōu)化的搜索策略,早期多用于工業(yè)工程方向,來優(yōu)化工業(yè)流程設(shè)計的配置。近幾年貝葉斯優(yōu)化開始廣泛出現(xiàn)在機器學習領(lǐng)域的研究中,尤其在超參數(shù)優(yōu)化領(lǐng)域。
葉斯優(yōu)化的思路是將超參數(shù)空間映射到驗證指標空間的函數(shù)作為優(yōu)化的目標函數(shù),然而這個函數(shù)的形式是未知的,而且要計算一個點的函數(shù)值需要消耗很多資源(等同于用一組超參數(shù)配置來訓練模型并做交叉驗證)。
所以貝葉斯優(yōu)化會把已經(jīng)嘗試過的超參數(shù)配置和對應(yīng)的交叉驗證指標作為歷史數(shù)據(jù),并用它訓練一個機器學習模型。
這個模型和通常的機器學習模型略有不同,它不僅需要提供預測值(prediction),還要提供對于這個預測的不確定度(uncertainty)。
這是因為接下來的優(yōu)化策略會同時根據(jù)預測值和不確定度來決定嘗試哪組新的超參數(shù)。貝葉斯優(yōu)化中的優(yōu)化策略往往需要考慮發(fā)掘(exploitation)和探索(exploration)兩個因素。
發(fā)掘是指根據(jù)目前的模型預測,找到預測效果最好的超參數(shù);探索是指目前的模型也許還沒有觸及到搜索空間中真正的全局最優(yōu),所以需要去探索那些區(qū)域,而這些區(qū)域一般可以通過不確定度來知曉。
為了兼顧這兩個因素,優(yōu)化策略會把預測值和不確定度兩個指標融合在一起搜索下一個要嘗試的超參數(shù)。
因為貝葉斯優(yōu)化很好的平衡了發(fā)掘和探索,這類方法在解決全局優(yōu)化問題中都表現(xiàn)出極高的效率,收斂速度很快,所以在超參數(shù)優(yōu)化問題中也取得了很好的效果。
1.4.2 進化算法
進化算法是一種啟發(fā)式優(yōu)化算法,正如其字面意思,這個算法模仿了進化理論,通過優(yōu)勝劣汰的機制選出好的配置。
1.4.3 強化學習
強化學習中有一類最簡單的問題叫做多臂老虎機,這類問題源于賭博,大概是這樣的:賭場里有N多臺老虎機,每臺機器的贏率是固定且未知的,賭徒想要通過實驗找到贏率最高的那臺機器,這樣他的期望回報才是最優(yōu)的。
最傻的辦法就是在每臺機器上試驗 M 次,統(tǒng)計一下每臺機器的贏的次數(shù),并選出那臺贏率最高的機器。
然而這個方法很顯然有很多可提高之處,比如有的機器在玩了 K
事實上,我們可以想象每組可能的超參數(shù)配置是一臺老虎機,它內(nèi)部藏著一個未知的數(shù)字,在我們這里可以認為是用這組配置訓練模型能達到的驗證指標。為了了解這個未知數(shù)字,我們只能通過訓練模型,訓練時間越久,我們投入的資源就越多。
于是多臂老虎機的策略也可以應(yīng)用到我們的問題上,也就是為了找到最優(yōu)的超參數(shù),決定每組超參數(shù)配置要投入多少資源訓練模型的問題。
這里僅粗略介紹了三個優(yōu)化超參數(shù)的方向,其實最近幾年涌現(xiàn)了很多優(yōu)秀的工作,包括使用元學習,對學習曲線建模,或者將上述的幾個思路融合等方式,使超參數(shù)優(yōu)化變得愈加高效。
1.5 采樣優(yōu)化
當數(shù)據(jù)量很大時,用全量數(shù)據(jù)訓練一個模型會花費很長時間,而探索的過程需要訓練多次模型,那么總開銷就太大了。
也許我們在探索時只使用少量的部分數(shù)據(jù)訓練模型,并且得到的關(guān)于模型和參數(shù)的選擇又能幫助到全量數(shù)據(jù)訓練情況下的選擇,那我們就有機會節(jié)省大量資源。
這個設(shè)想在幾年前就有工作進行了證實,通過觀察不同采樣率下訓練模型的效果和超參數(shù)的關(guān)系分布,發(fā)現(xiàn)低采樣率時超參數(shù)和效果的分布與全量數(shù)據(jù)訓練下的分布具有很強的相關(guān)性。
于是我們在實際應(yīng)用中,可以使用預定的降采樣率選擇少部分數(shù)據(jù),并在這部分數(shù)據(jù)上進行模型和超參數(shù)的優(yōu)化,然后將找到的最優(yōu)選擇直接放到全量數(shù)據(jù)上訓練生產(chǎn)用模型。
我們發(fā)現(xiàn)這種方法盡管樸素,實際應(yīng)用中卻能達到很好的效果。學術(shù)界也有提出更成熟的做法,比如對采樣率建模[2],以期望通過一個配置使用低采樣率訓練的模型效果來預測全量數(shù)據(jù)下的模型效果,并用預測值來指導超參數(shù)的搜索。
2. 自動深度學習
深度學習由于具有模型表達能力強,自動學習特征的端到端特性等優(yōu)點,是今天機器學習領(lǐng)域最受歡迎的模型框架。
然而訓練深度學習模型并非易事,不僅有大量的模型超參數(shù)需要人工調(diào)試,而且模型效果對超參數(shù)的選擇極其敏感,因此需要大量的嘗試和行業(yè)經(jīng)驗才能得到優(yōu)質(zhì)的效果。
自動深度學習面臨同樣的挑戰(zhàn),所以除了會共用前面介紹的自動機器學習的思路和方法,自動深度學習有一些獨特的方向值得在這里探討。下面我們會圍繞自動訓練和網(wǎng)絡(luò)結(jié)構(gòu)搜索兩個方面展開。
2.1 自動訓練
深度學習模型和傳統(tǒng)機器學習模型相比,需要配置的超參數(shù)會多很多,訓練時對資源的消耗也會較大,因此自動訓練是一個更有挑戰(zhàn)性的工作。
樸素的 Grid Search 和 Random Search 基本得不到滿意的效果,必須使用更成熟的搜索策略和精心設(shè)計的搜索空間才能實現(xiàn)自動化。
由于神經(jīng)網(wǎng)絡(luò)的訓練速度較慢,我們希望能盡可能地從訓練過程中得到最多的信息和信息再利用。
我們總結(jié)一下目前工作的幾個方向,和大家分享。
2.1.1 模型再利用
想象一下一個神經(jīng)網(wǎng)絡(luò)模型的訓練是一個小人在模型的權(quán)重空間(weight space)里漫步,靠著 SGD 指引他一步步接近最優(yōu)權(quán)重,而使用一組好的配置,就是為了使這個路徑能夠通往最有權(quán)重所在的位置,而不是中途就卡在一個局部最優(yōu)不能動彈,或者來回跳動不能收斂,甚至到了一個過擬合的地方。
目前為止我們提到過的搜索模型配置的方法,都是選一組配置,然后讓這個小人從一個初始化的位置開始走,如果這個配置讓小人走偏了,那我們換一組配置,再讓小人從頭開始走。
但這樣每次小人走過的路就都白費了,我們完全可以讓小人從一個雖然不是最優(yōu)的,但還是不錯的位置作為起點,繼續(xù)去尋找那個最優(yōu)地點。
這是 Deepmind 在 2017 年發(fā)表的題為 population based training 的論文 [3] 的思想之一,通過再利用已經(jīng)訓練過的模型,來加速訓練和調(diào)參的過程。
此外,南京大學的周志華教授還提出了“學件”的構(gòu)想,“學件”由模型和用于描述模型的規(guī)約兩部分構(gòu)成。當需要構(gòu)建新的機器學習應(yīng)用時,不用再從頭建模,可以直接需要尋找適合的學件直接使用。
2.1.2 擬合 Learning curve
用 TensorFlow 訓練模型的同學可能用過 Tensorboard,這個可視化工具可以展示模型訓練過程中各種指標的變化,我們稱之為學習曲線(Learning curve)。
這個曲線是有規(guī)律可循的,比如驗證 AUC,隨著訓練,會不斷的上升,到收斂的時候可能開始持平波動,之后也許由于過擬合又會下降。我們可以用一個模型來擬合這條曲線 [4]。
這樣做的目的是,假如我有一個靠譜的擬合模型,那么試驗一組新的配置,我可能只用讓模型訓練較短的時間,并用前面一小段學習曲線和擬合模型來預測最終這組配置能讓模型訓練到什么程度,那么我們便可以用少量的資源對模型配置做一個初步的篩選,提升效率。
2.1.3 Meta learning
元學習(Meta Learning)的目標是給一個新的問題,它能生成一個解決這個問題的模型。這一思路也可以用到自動深度學習上,同樣是 2.1.1 中小人的例子,我們可以找到一個權(quán)重空間里的位置,它對于很多類似的新問題都是一個還不錯的位置,只要用對應(yīng)問題的數(shù)據(jù)讓小人再走兩步就能達到最優(yōu)了。
有一篇論文 [5] 便用到了這個思想,它訓練一個神經(jīng)網(wǎng)絡(luò)模型,但損失函數(shù)并不是用某一任務(wù)的數(shù)據(jù)直接計算的,而是讓任意一個采樣的訓練任務(wù)的數(shù)據(jù)再訓練一步,之后的損失作為目標函數(shù)。
也就是說,它要讓小人站在一個理想的多岔口,能夠離任意一個具體任務(wù)的最優(yōu)位置很近。這和 2.1.1 想要達到的加速訓練的目的類似,只不過是用一個元模型顯性地去尋找“理想的多岔口”。
2.1.4 模型融合
由于深度學習模型的損失函數(shù)平面非常復雜,使訓練時找到一個魯棒的最優(yōu)點很困難。為解決這個問題,我們可以用不同的初始化,訓練多個模型,并將它們?nèi)诤掀饋怼?/p>
這是比較標準的做法,最近有兩篇論文給出了更有趣的方案:第一篇 [6] 的思想類似于 2.1.1,在小人找到第一個最優(yōu)點,記錄下當前的權(quán)重,然后增大學習率,讓小人跳出當前的最優(yōu)點,去尋找附近的另一個最優(yōu)點,如此反復幾次,把記錄的權(quán)重對應(yīng)的模型融合起來,會相比標準的融合做法省去從頭訓練模型的時間。
第二篇 [7] 使用類似第一篇的循環(huán)學習率設(shè)置,但它不再記錄多個模型,而是將存下來的權(quán)重直接取平均,這樣做的好處是在預測階段,只有一個模型預測,節(jié)省了普通模型融合需要多個模型同時預測的耗費。另外論文中也表明直接取平均能得到更魯棒的模型。感興趣的話可以去閱讀下這兩篇論文。
2.2 網(wǎng)絡(luò)結(jié)構(gòu)搜索
不管是圖像,文字還是語音,都有幾款大家耳熟能詳?shù)纳窠?jīng)網(wǎng)絡(luò)結(jié)構(gòu),這些網(wǎng)絡(luò)結(jié)構(gòu)的巨大成功,歸功于背后的研究人員的學識,靈感和不懈嘗試。隨著深度學習應(yīng)用到越來越多的現(xiàn)實場景,對模型包括網(wǎng)絡(luò)結(jié)構(gòu)的需求也在變的更多樣化。
舉一個例子,在手機設(shè)備上的人臉識別軟件,由于硬件設(shè)備的差異性,軟件供應(yīng)商需要對每種手機做相應(yīng)的模型優(yōu)化,如果全部依靠人力來做調(diào)試,很顯然對資源的要求和耗費非常巨大。
這使我們不得不思考,是否有可能讓機器來取代一部分這樣的工作,將人力解放出來。早在 2016 年,Google Brain 就在這方面做了嘗試 [8],通過強化學習的方式訓練一個能搭建網(wǎng)絡(luò)結(jié)構(gòu)的 RNN,并構(gòu)造出了當時在圖像數(shù)據(jù)集 CIFAR10 和自然語言數(shù)據(jù)集 Penn Treebank 上效果最好的模型。網(wǎng)絡(luò)結(jié)構(gòu)搜索(Neural Architecture Search)的名字也是由這篇論文而來。
盡管到今天網(wǎng)絡(luò)結(jié)構(gòu)搜索的歷史不長,卻已經(jīng)涌現(xiàn)了很多優(yōu)秀的工作,這里我們介紹幾個思路和方向。
2.2.1 基于強化學習
最早提出 NAS 的方案便是基于強化學習,后來出現(xiàn)的很多結(jié)構(gòu)搜索的論文對這個方法做了改動和優(yōu)化,沿用至今。
這個思路大概是說,我們在構(gòu)造網(wǎng)絡(luò)結(jié)構(gòu)時,就好像是在堆樂高積木,從第一層開始,我們有幾個基本元件,和幾種拼接方法,我們按照一定流程一層一層拼出一個網(wǎng)絡(luò)結(jié)構(gòu)來。
而強化學習就是要學出一套構(gòu)造優(yōu)質(zhì)網(wǎng)絡(luò)結(jié)構(gòu)的流程。由于這個流程是一個序列,那用 RNN 來建模就再適合不過了,于是我們讓這個 RNN 每一步輸出一個決策,來決定選擇哪個基本元件,或者使用哪種拼接方法。
當 RNN 輸出足夠的決策后,一個網(wǎng)絡(luò)結(jié)構(gòu)變生成了,我們拿它在一個數(shù)據(jù)集上訓練并測試,得到的驗證指標便成為獎勵用來訓練 RNN。
最終,被訓練的 RNN 便學會了構(gòu)造好的網(wǎng)絡(luò)結(jié)構(gòu)來。聽起來非常有道理,但這種做法其實有一個問題,就是訓練 RNN 需要很多樣本,而這個問題里一個樣本便意味著訓練一個神經(jīng)網(wǎng)絡(luò)模型,因此獲取樣本是很貴的。
事實也是如此,文章 [8] 里動用了 400 個 GPU 同時訓練,一個訓練了 1 萬多個模型后才超越了當時最好的模型。大概只有 Google Brain 這樣有巨量計算資源的地方才有可能做這樣的嘗試。
后續(xù)有很多工作都嘗試減少資源的耗費,使搜索變得更高效,比如使搜索空間變得更小 [9],模型間共享權(quán)重 [10] 等。
2.2.2 共享權(quán)重
剛才提到了每個模型都要從頭訓練是非常低效的,ENAS[10] 提出了模型共享權(quán)重的理念。
文章作者認為,一個網(wǎng)絡(luò)結(jié)構(gòu)圖是一個更大的圖的子圖,于是作者索性存下包含整個結(jié)構(gòu)搜索空間的母圖的所有權(quán)重,并且邊訓練權(quán)重邊訓練如前所述的 RNN。
由于 RNN 構(gòu)造出來的新結(jié)構(gòu)直接從母圖中獲取權(quán)重,便省去了從頭訓練模型的過程,使整個搜索比以前的方法快了上百倍。
2.2.3 元學習
由 ENAS 的共享權(quán)重受到啟發(fā),一篇新的工作 [11] 使用母圖作為元模型,通過 dropout 的方式來訓練元模型。
于是沒有了構(gòu)造結(jié)構(gòu)的 RNN,而是以隨機 dropout 的形式來讓元模型找出什么樣的結(jié)構(gòu)是重要的。作者在文中展示的效果和 ENAS 類似,我覺得兩種方法不好說孰好孰壞,都可以拿來嘗試下。
2.2.4 貝葉斯優(yōu)化
最近有一個叫 Auto-Keras 的開源軟件受到了一定關(guān)注,這個軟件包致力于幫助人們自動訓練深度學習模型,而軟件的“自動”部分基于一篇該作者發(fā)表的論文[12],文中使用貝葉斯優(yōu)化作為結(jié)構(gòu)搜索策略,并用 Network Morphism 來加速模型的訓練。
作者定義了不同結(jié)構(gòu)之間的“距離”,也就是不相似度,并基于此來構(gòu)建貝葉斯優(yōu)化中所需要的貝葉斯模型。
有了貝葉斯優(yōu)化來指導結(jié)構(gòu)搜索后,對于新結(jié)構(gòu),作者并非從頭開始訓練模型,而是使用 Network Morphism,將已經(jīng)訓練過的模型通過變換轉(zhuǎn)變成要訓練的新模型,而同時能保留原來模型的功能,如此一來,只需要用比從頭訓練少得多的資源就能訓練出新的模型。
除了以上介紹的幾種思路之外,很多其它用于優(yōu)化的方法也都出現(xiàn)在結(jié)構(gòu)搜索的應(yīng)用中,比如前面提到過的進化算法 [5],基于模型的迭代式搜索 [13] 等。
2.3 適用于寬表數(shù)據(jù)的自動深度學習
目前的自動深度學習訓練和網(wǎng)絡(luò)結(jié)構(gòu)搜索,主要集中在語音、圖像和文本等領(lǐng)域,尚未見到針對寬表業(yè)務(wù)數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)搜索,然而這正是工業(yè)界最迫切的需求之一,其對應(yīng)的自動深度學習價值較大。
針對寬表業(yè)務(wù)數(shù)據(jù)對應(yīng)的大規(guī)模離散特征數(shù)據(jù)集,我們研發(fā)了深度稀疏網(wǎng)絡(luò)(Deep Sparse Network,DSN)及其自動版本 Auto-DSN。
DSN 采用多層級網(wǎng)絡(luò)架構(gòu),綜合利用數(shù)據(jù)采樣、注意力機制和動態(tài)維度表達等方法,能夠有效的對寬表數(shù)據(jù)進行建模。
Auto-DSN 綜合利用上述各種技術(shù),使得用戶配置一個和資源相關(guān)的參數(shù),即可在合理時間內(nèi),搜索到對寬表業(yè)務(wù)數(shù)據(jù)最佳的模型結(jié)構(gòu)及超參數(shù)。我們在一些實際業(yè)務(wù)中驗證了它的有效性。
3. 模型評估
自動機器學習根據(jù)評估指標來優(yōu)化模型,在這次分享的最后,我們再探討一下怎樣對模型的評估是可靠的。
首先評估指標的選擇應(yīng)該和具體業(yè)務(wù)相結(jié)合,根據(jù)業(yè)務(wù)目標來制定對模型的評估方式,如果不考慮業(yè)務(wù)相關(guān)指標,機器學習中我們常用的指標有 AUC、logloss、MSE、MAE 等,關(guān)于其定義和用法網(wǎng)上有很多資料解釋,這里就不贅述了。我想主要分享的是關(guān)于如何對抗過擬合的一些經(jīng)驗。
這里的過擬合是指,在優(yōu)化模型的配置或者參數(shù)的過程中,我們找到一組配置可能在我們的驗證集上表現(xiàn)效果很好,然而使用這個模型生產(chǎn)卻并未得到最好的效果。
原因是多方面的,可能我們使用固定的驗證集來優(yōu)化配置,導致這個配置僅僅在當前驗證集上的效果最好,沒有普遍性;也可能是訓練模型時由于一定的隨機性把某個次優(yōu)的配置當成了最優(yōu)配置。
為解決以上的問題,我們分別做了些嘗試。對于固定驗證集導致的過擬合,標準的做法是使用交叉驗證來計算指標,然而帶來的問題是交叉驗證所需的資源是固定驗證集的折數(shù)倍。
比如常用的五折交叉驗證就需要五倍于固定驗證集的資源來優(yōu)化。當模型訓練時間很長時,我們沒有足夠的資源計算完整的交叉驗證,于是我們會依然按照交叉驗證的方式來切分數(shù)據(jù)。
但每次驗證時我們只會隨機選取其中一份驗證集來計算驗證指標,這樣指標的期望值就是無偏的。
當然這又引入一個新的問題,雖然期望是無偏的,卻由于我們的隨機選取導致方差變大了,也就是我們把次優(yōu)選擇當成最優(yōu)選擇的風險變大了。
這里我們引用 [14] 的“intensification mechanism”來解決這個問題,這個過程是我們將第一組搜索的配置用完整的交叉驗證計算出平均指標,并記為“最優(yōu)配置”,后續(xù)搜索到的新配置都會和“最優(yōu)配置”比較,比的方式是計算新配置在某一折驗證集上的指標。
如果當前新配置的平均指標低于“最優(yōu)配置”,則放棄這個新配置并開始新的搜索,反之則再選一折驗證集計算指標,如果所有驗證集都已經(jīng)計算完,新配置的平均指標還是更優(yōu)的,便把這個配置作為新的“最優(yōu)配置”。
這樣一來,我們只會把更多的計算量放在有潛力成為最優(yōu)配置的配置上,總體消耗還是低于標準的交叉驗證的。
根據(jù)我們目前在推薦業(yè)務(wù)中的嘗試,上述方法中:自動特征離散化會給模型帶來最明顯的泛化能力提升和 AUC 明顯升高、自動特征組合可以最有效地提高模型對物料和人群的精準刻畫能力和精準個性化推薦效果、采樣優(yōu)化和模型超參數(shù)優(yōu)化功能對機器資源和訓練時間的優(yōu)化效果最為明顯,給業(yè)務(wù)方留下了深刻的印象,歡迎大家進行嘗試。
上述內(nèi)容便是我們在實際應(yīng)用 AutoML 中的感想和經(jīng)驗,希望能對大家有用。我們也希望更多的人開始了解和運用這個領(lǐng)域的方法,幫助他們加快機器學習系統(tǒng)的研發(fā)和生產(chǎn)。
-
機器學習
+關(guān)注
關(guān)注
66文章
8430瀏覽量
132859 -
深度學習
+關(guān)注
關(guān)注
73文章
5511瀏覽量
121360
原文標題:AutoML 在推薦系統(tǒng)中的應(yīng)用
文章出處:【微信號:AI_Thinker,微信公眾號:人工智能頭條】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論