1. 程式人生 > >AutoML在推薦系統中的應用

AutoML在推薦系統中的應用

大家好,歡迎參加GitChat舉辦的線上分享活動。我是第四正規化研究員嘉磊,今天我和同事遠飛及負責推薦業務研究同事曉澄,一起給大家分享AutoML在推薦系統中的應用。

 

先介紹一下我們公司——第四正規化,第四正規化是國際領先的人工智慧技術與服務提供商,致力於降低人工智慧應用的門檻,基於機器學習技術研發惠及不同領域的人工智慧產品及解決方案,助力企業實現智慧變革,提升運營績效,創造商業價值。目前,已在金融、政府、製造、零售、醫療、文化、教育、網際網路等領域有近2000個成功落地案例,SaaS公有云服務客戶超過1000家,服務金融機構資產總規模超過50萬億。

 

2017年,第四正規化以先薦推薦系統服務的模式賦能媒體,通過AutoML與先知機器學習平臺等先進技術,提供高效、自助、自動的接入方式,一站式內容分發的解決方案,幫助媒體客戶提升業務能力和價值。在眾多案例中,先薦推薦系統幫助CSDN的內容點選率提升110%,訪問量增長187%,營收增加49%。幫助環球網點選率提升58%,訪問步長增長69%,營收增加20%。此外,在某客戶場景下與對手PK競賽中,先薦系統點選率領先對手36%。

 

本次主要給大家帶來AutoML在推薦系統中的應用分享,希望對大家有所啟發和幫助。

 

今天,推薦系統的模型和應用已經相當成熟,然而部署一套全新的推薦系統,甚至僅在已有系統上新增資料維度和模型優化依然是非常耗時耗力的事情。這是由於不同資料來源的分佈不盡相同,要達到滿意的建模效果,每個建模的環節,包括資料處理,特徵工程,模型的選擇和超引數選擇等都需要隨之變動和優化。

以往這些工作都是建模工程師通過A/B test和grid search等方式來手動除錯有限的幾種建模組合方式,並挑出最好的配置作為上線用的系統配置。然而要想從少量的嘗試中找到優質的模型方案,不僅要求工程師有豐富的建模經驗,可能還需要一點點運氣,成本和風險都比較高。

近幾年在機器學習領域興起的自動機器學習(AutoML)技術,便是為了解決機器學習模型訓練難,落地難這個痛點所做的努力。我們同樣可以把AutoML技術應用到推薦系統的建模中,這次分享主要介紹用哪些方法來打造一個AutoML系統,並用於提升推薦系統的搭建效率。

 

如果我們看今天的機器學習應用(以監督學習為主),它大致可以分為傳統機器學習和深度學習兩大類。傳統機器學習用的比較多的模型有LR, Gradient Boosting Machine, Random Forest, KNN等,模型本身比較簡單和成熟,但是由於這些模型無法擬合非常複雜的非線性函式,我們需要通過特徵工程把原問題空間轉化到一個機器學習模型容易學的表述空間,才能得到好的效果。

相對傳統機器學習,近幾年興起的深度學習,由於其強大的模型表達能力,相對弱化了特徵工程的重要性,具有端到端學習的能力。尤其在處理影象,文字和語音等非結構化資料時,我們發現深度學習模型具有學習表述空間的能力(representation learning),從一定程度上實現了特徵工程的自動化。

由於傳統機器學習模型和深度學習模型在建模過程中側重點不同,AutoML也大致分為自動傳統機器學習和自動深度學習(如圖1)。其中自動傳統機器學習關注自動資料預處理,自動特徵處理和自動演算法選擇和配置,而自動深度學習則需要解決神經網路的自動訓練和網路結構搜尋的問題。我們下面就根據圖1來逐一探討AutoML的各個技術要點。

 

111.png

1: 自動機器學習組成部分

 

1.     自動傳統機器學習

當我們有了使用者行為資料後,我們通常需要經過資料清洗,資料預處理,特徵工程,選擇模型,配置模型,融合模型等步驟來構建一整個機器學習管道。自動機器學習需要儘可能的自動化其中每個環節。除了資料清洗環節和資料本身耦合度很高,需要更多的人為操作以外,資料預處理和之後的步驟都已經在自動機器學習領域存在可行的方案。

 

1.1  資料預處理

由於模型對資料都存在一定假設,我們需要使用一些資料預處理的方法將進入模型的資料處理成適合模型學習的分佈。比如神經網路模型需要輸入的資料符合正態分佈,那麼要對原始資料做歸一化處理;比如Gradient Boosting Machine不適合對類別數量非常高的離散特徵建模,所以在前期要考慮刪除類別太多的離散特徵;

 

在自動機器學習中,選擇哪種資料預處理方式和模型息息相關,根據上面所述的經驗構造一個固定模版,比如已知神經網路需要歸一化處理,GBM需要剔除高維離散特徵,LR模型需要線性分形等,把這些知識hard codeAutoML系統中,可以用一種模型來學習最優組合。這裡介紹兩個可行的方向:一是使用貝葉斯優化的方法,通過嘗試,反饋,優化這一迴圈的過程來找到各個模型對應的最佳資料預處理方法,我們會在後面對貝葉斯優化做更詳細介紹;另一個方向是元學習,我們在很多資料集上通過實驗不同的預處理-模型組合,記錄下每個資料集上最優的組合,當在新資料集上開始探索時,會首先計算資料集的元特徵,並在元特徵空間中找到幾個最相似的曾經試驗過的資料集,並借用它們的最優預處理方案。這兩個方向也可以結合起來,用元學習幫助熱啟動,再使用貝葉斯優化探索適合新任務的方案。

 

1.2  自動特徵處理

有人說,世界上的資料科學家,平均花80%的時間做特徵,20%的時間建模型,我們在工作中也意識到特徵工程無比的重要性。因此在自動機器學習系統中,特徵也同樣是極其重要的環節。在這裡討論一下特徵組合,如何處理時序特徵,使用變分自編碼器構造特徵等方法。

 

1.2.1      多粒度離散化

推薦系統常用的LR模型,在處理高維離散特徵上非常強大,然而其簡單的線性模型本質使它對非線性的連續特徵解釋效果較差,並且在連續值特徵尺度變化較大時效果不穩定。分桶是一種常見的連續特徵離散化方法,然而分桶數目對建模結果影響較大。因此我們使用第四正規化自研的線性分形分類器(LFC)來解決這個問題。使用LFC我們可以讓模型從資料中自動選取最合適的分桶方式,同時LFC可以實現在特徵粒度的離群點檢測,使得模型更為魯棒。通過這種技術,我們在業務資料上都能相比LR提升一個百分點。

 

1.2.2      自動特徵組合

原始資料中有的隱藏的關係,機器學習模型並不容易學到,所以需要通過構造特徵把這些隱性關係表達出來。針對離散特徵和連續特徵分別介紹基於啟發式演算法的自動特徵組合方法。

 

對於離散特徵,由於簡單的線性模型無法學到多個特徵的互動,需要通過笛卡爾積來生成組合特徵。舉個例子,如果要給決定是否給使用者推薦一款很受年輕女性歡迎的化妝品,原始資料裡只有年齡段和性別兩個欄位,可以把年齡段_性別作為一個新的特徵,模型便能很容易從歷史資料中學出這款化妝品推薦給年輕女性接受度很高。如果把所有組合特徵都生成出來,那麼組合特徵的個數是隨著階數呈指數性增長的(搜尋空間大於AlphaGo),也就是我們很快就會產生出系統無法承受的資料量來。針對這種情況,我們提出了一個自動特徵組合演算法FeatureGo,結合集束搜尋(Beam Search)和回溯(Backtracking)策略,去逐步搜尋特徵空間。另外,基於Boosting的思想,提出了一系列替換損失函式來高效的評估特徵重要性。我們在第四正規化的大規模分散式機器學習平臺GDBT實現了該演算法,並依據實際應用場景定製化開發,能夠在短時間內快速搜尋到有效組合特徵。我們發現在實際應用中都可以得到可觀的效果提升,在所有實際應用中得到了超過5個千分點的提升。

 

1.2.3      自動時序特徵

在業界的實際場景中,資料一般包含時序資訊,因此需要考慮如何自動構建時序特徵,然而時序特徵對系統性能要求較高。為了去的更好的建模效果,也要求時序特徵運算元儘可能多以覆蓋各種情況。基於GDBT,我們實現了非常高效的自動時序特徵生成和選擇運算元:TemporalGo,它包括時序統計資訊、隱式向量等方法,也涵蓋如迴圈神經網路RNN等方法,顯著提升了建模效果。

 

1.2.4      變分自編碼器 (VAE)

變分自編碼器(VAE)是一種基於神經網路的生成模型,其目標是給定原始資料,VAE經過編碼和解碼後要儘可能地還原出原始資料。可以把VAE用作一個基於模型的特徵生成手段,而且經過VAE編碼後的數值分佈會盡可能的接近正態分佈,這樣的新特徵可以直接給很多機器學習模型使用。當然訓練VAE本身很耗時間,而且需要較大的資料量才可能有效果,在實際應用當中,優先考慮其他特徵工程方法。

 

1.3  模型選擇

在拿到一個問題開始建模之前,都會面臨一個問題,用什麼樣的模型?你可以很容易地根據自己的經驗,面對分類問題還是迴歸問題,影象還是表類資料,列出幾個候選模型,然後你可能會把候選模型用這個資料都訓練一遍,並挑出那個驗證效果最好的模型用在生產中。在自動機器學習中,我們也會把模型選擇分成兩步。

首先,拿到一個新問題時,我們獲得這個問題的meta資訊,比如資料是什麼格式,資料量大小,訓練指標是什麼等,通過查詢預先準備的問題對映到模型的查詢表,找到適合這個問題的幾款候選模型及相關超引數設定(或者超引數的搜尋空間)。

接下來便是挑選效果好的模型。最樸素的做法是把所有可能的模型和超引數配置都訓練一遍,挑出最好的模型即可,然而現實情況通常都有時間和計算資源的限制,導致我們無法訓練所有可能的模型引數組合。我們需要一個更加節省資源的方法,對於一個問題,很多模型不一定需要到訓練結束才能做出判斷哪個模型效果好或者差,可能在訓練過程中我們通過觀測驗證指標,就能提前剔除一些效果太差的模型。

 

 

1.4  模型超引數優化

一個模型在開始訓練前,可能需要人設定一些引數,比如LRL1L2正則係數用來控制模型過擬合,GBM有樹棵樹,學習率等,這些引數配置的好壞會直接影響最終的模型效果,而且引數配置的好壞又和資料本身有很強的相關性,也就是說,不存在一組黃金配置能在所有資料集上都表現良好。因此建模工作中一個不可或缺的工作便是模型超引數的優化。

如果是我們手動優化引數,一般是選取幾組我們認為值得嘗試的引數配置,然後訓練模型並做交叉驗證,最後挑出驗證指標最好的模型用作生產。這種做法對一兩個超引數做優化還能應付,然而傳統機器模型GBM就有小十個需要除錯的超引數,更不用說深度學習模型會有更多的引數選擇,這使得自動優化超引數技術越來越多的應用到實際建模中。最常見的做法是grid searchrandom searchgrid search是讓使用者在每個超引數的選擇範圍裡取幾個點,然後機器會將所有可能的引數組合都嘗試一遍,最後選出最好的模型,這種方法有兩個問題,一是需要使用者對每個超引數都要取點,二是由於需要嘗試所有引數組合,對計算資源的消耗非常高。Random search是給定超引數選擇的空間範圍,然後在這個空間裡隨機取樣N組超引數配置,交給模型做交叉驗證,並選出最好的模型。在實際應用中,random search在超引數較多的情況下比grid search更快而且效果更好。目前提到的兩種做法實現起來都很簡單,但缺點是它們都是在引數空間裡盲目的搜尋,效率較低。

接下來我們介紹幾種在提升效率上努力的思路:

 

1.4.1      貝葉斯優化

貝葉斯優化是一種用於全域性優化的搜尋策略,早期多用於工業工程方向,來優化工業流程設計的配置。近幾年貝葉斯優化開始廣泛出現在機器學習領域的研究中,尤其在超引數優化領域。貝葉斯優化的思路是將超引數空間對映到驗證指標空間的函式作為優化的目標函式,然而這個函式的形式是未知的,而且要計算一個點的函式值需要消耗很多資源(等同於用一組超引數配置來訓練模型並做交叉驗證),所以貝葉斯優化會把已經嘗試過的超引數配置和對應的交叉驗證指標作為歷史資料,並用它訓練一個機器學習模型。這個模型和通常的機器學習模型略有不同,它不僅需要提供預測值(prediction),還要提供對於這個預測的不確定度(uncertainty)

這是因為接下來的優化策略會同時根據預測值和不確定度來決定嘗試哪組新的超引數。貝葉斯優化中的優化策略往往需要考慮發掘(exploitation)和探索(exploration)兩個因素。發掘是指根據目前的模型預測,找到預測效果最好的超引數;探索是指目前的模型也許還沒有觸及到搜尋空間中真正的全域性最優,所以需要去探索那些區域,而這些區域一般可以通過不確定度來知曉。為了兼顧這兩個因素,優化策略會把預測值和不確定度兩個指標融合在一起搜尋下一個要嘗試的超引數。因為貝葉斯優化很好的平衡了發掘和探索,這類方法在解決全域性優化問題中都表現出極高的效率,收斂速度很快,所以在超引數優化問題中也取得了很好的效果。

1.4.2      進化演算法

進化演算法是一種啟發式優化演算法,正如其字面意思,這個演算法模仿了進化理論,通過優勝劣汰的機制選出好的配置。

1.4.3      強化學習

強化學習中有一類最簡單的問題叫做多臂×××,這類問題源於×××,大概是這樣的:×××裡有N多臺×××,每臺機器的贏率是固定且未知的,賭徒想要通過實驗找到贏率最高的那臺機器,這樣他的期望回報才是最優的。最傻的辦法就是在每臺機器上試驗M次,統計一下每臺機器的贏的次數,並選出那臺贏率最高的機器。然而這個方法很顯然有很多可提高之處,比如有的機器在玩了K<M次就發現贏率很低,那就沒必要浪費錢試驗滿M次了,於是大家便想了很多策略來提升找到贏率最高的機器的效率,於是這個問題變成了一個研究領域。可是這和超引數優化有什麼關係呢?事實上,我們可以想象每組可能的超引數配置是一臺×××,它內部藏著一個未知的數字,在我們這裡可以認為是用這組配置訓練模型能達到的驗證指標。為了瞭解這個未知數字,我們只能通過訓練模型,訓練時間越久,我們投入的資源就越多。於是多臂×××的策略也可以應用到我們的問題上,也就是為了找到最優的超引數,決定每組超引數配置要投入多少資源訓練模型的問題。

這裡僅粗略介紹了三個優化超引數的方向,其實最近幾年湧現了很多優秀的工作,包括使用元學習,對學習曲線建模,或者將上述的幾個思路融合等方式,使超引數優化變得愈加高效。

 

1.5  取樣優化

當資料量很大時,用全量資料訓練一個模型會花費很長時間,而探索的過程需要訓練多次模型,那麼總開銷就太大了。也許我們在探索時只使用少量的部分資料訓練模型,並且得到的關於模型和引數的選擇又能幫助到全量資料訓練情況下的選擇,那我們就有機會節省大量資源。這個設想在幾年前就有工作進行了證實,通過觀察不同取樣率下訓練模型的效果和超引數的關係分佈,發現低取樣率時超引數和效果的分佈與全量資料訓練下的分佈具有很強的相關性。於是我們在實際應用中,可以使用預定的降取樣率選擇少部分資料,並在這部分資料上進行模型和超引數的優化,然後將找到的最優選擇直接放到全量資料上訓練生產用模型。我們發現這種方法儘管樸素,實際應用中卻能達到很好的效果。學術界也有提出更成熟的做法,比如對取樣率建模[2],以期望通過一個配置使用低取樣率訓練的模型效果來預測全量資料下的模型效果,並用預測值來指導超引數的搜尋。

 

2.     自動深度學習

深度學習由於具有模型表達能力強,自動學習特徵的端到端特性等優點,是今天機器學習領域最受歡迎的模型框架。然而訓練深度學習模型並非易事,不僅有大量的模型超引數需要人工除錯,而且模型效果對超引數的選擇極其敏感,因此需要大量的嘗試和行業經驗才能得到優質的效果。自動深度學習面臨同樣的挑戰,所以除了會共用前面介紹的自動機器學習的思路和方法,自動深度學習有一些獨特的方向值得在這裡探討。下

面我們會圍繞自動訓練和網路結構搜尋兩個方面展開。

 

2.1  自動訓練

深度學習模型和傳統機器學習模型相比,需要配置的超引數會多很多,訓練時對資源的消耗也會較大,因此自動訓練是一個更有挑戰性的工作。樸素的grid searchrandom search基本得不到滿意的效果,必須使用更成熟的搜尋策略和精心設計的搜尋空間才能實現自動化。由於神經網路的訓練速度較慢,我們希望能儘可能地從訓練過程中得到最多的資訊和資訊再利用。

我們總結一下目前工作的幾個方向,和大家分享。

 

2.1.1      模型再利用

想象一下一個神經網路模型的訓練是一個小人在模型的權重空間(weight space)裡漫步,靠著SGD指引他一步步接近最優權重,而使用一組好的配置,就是為了使這個路徑能夠通往最有權重所在的位置,而不是中途就卡在一個區域性最優不能動彈,或者來回跳動不能收斂,甚至到了一個過擬合的地方。目前為止我們提到過的搜尋模型配置的方法,都是選一組配置,然後讓這個小人從一個初始化的位置開始走,如果這個配置讓小人走偏了,那我們換一組配置,再讓小人從頭開始走。但這樣每次小人走過的路就都白費了,我們完全可以讓小人從一個雖然不是最優的,但還是不錯的位置作為起點,繼續去尋找那個最優地點。這是Deepmind2017年發表的題為population based training的論文[3]的思想之一,通過再利用已經訓練過的模型,來加速訓練和調參的過程。此外,南京大學的周志華教授還提出了“學件”的構想,“學件”由模型和用於描述模型的規約兩部分構成。當需要構建新的機器學習應用時,不用再從頭建模,可以直接需要尋找適合的學件直接使用。

2.1.2      擬合learning curve

用tensorflow訓練模型的同學可能用過tensorboard, 這個視覺化工具可以展示模型訓練過程中各種指標的變化,我們稱之為學習曲線(learning curve). 這個曲線是有規律可循的,比如驗證auc, 隨著訓練,會不斷的上升,到收斂的時候可能開始持平波動,之後也許由於過擬合又會下降。我們可以用一個模型來擬合這條曲線[4]。這樣做的目的是,假如我有一個靠譜的擬合模型,那麼試驗一組新的配置,我可能只用讓模型訓練較短的時間,並用前面一小段學習曲線和擬合模型來預測最終這組配置能讓模型訓練到什麼程度,那麼我們便可以用少量的資源對模型配置做一個初步的篩選,提升效率。

2.1.3      Meta learning

元學習(meta learning)的目標是給一個新的問題,它能生成一個解決這個問題的模型。這一思路也可以用到自動深度學習上,同樣是2.1.1中小人的例子,我們可以找到一個權重空間裡的位置,它對於很多類似的新問題都是一個還不錯的位置,只要用對應問題的資料讓小人再走兩步就能達到最優了。有一篇論文[5]便用到了這個思想,它訓練一個神經網路模型,但損失函式並不是用某一任務的資料直接計算的,而是讓任意一個取樣的訓練任務的資料再訓練一步,之後的損失作為目標函式。也就是說,它要讓小人站在一個理想的多岔口,能夠離任意一個具體任務的最優位置很近。這和2.1.1想要達到的加速訓練的目的類似,只不過是用一個元模型顯性地去尋找“理想的多岔口”。

2.1.4      模型融合

由於深度學習模型的損失函式平面非常複雜,使訓練時找到一個魯棒的最優點很困難。為解決這個問題,我們可以用不同的初始化,訓練多個模型,並將它們融合起來。這是比較標準的做法,最近有兩篇論文給出了更有趣的方案:第一篇[6]的思想類似於2.1.1,在小人找到第一個最優點,記錄下當前的權重,然後增大學習率,讓小人跳出當前的最優點,去尋找附近的另一個最優點,如此反覆幾次,把記錄的權重對應的模型融合起來,會相比標準的融合做法省去從頭訓練模型的時間。第二篇[7]使用類似第一篇的迴圈學習率設定,但它不再記錄多個模型,而是將存下來的權重直接取平均,這樣做的好處是在預測階段,只有一個模型預測,節省了普通模型融合需要多個模型同時預測的耗費。另外論文中也表明直接取平均能得到更魯棒的模型。感興趣的話可以去閱讀下這兩篇論文。

 

2.2  網路結構搜尋

不管是影象,文字還是語音,都有幾款大家耳熟能詳的神經網路結構,這些網路結構的巨大成功,歸功於背後的研究人員的學識,靈感和不懈嘗試。隨著深度學習應用到越來越多的現實場景,對模型包括網路結構的需求也在變的更多樣化。舉一個例子,在手機裝置上的人臉識別軟體,由於硬體裝置的差異性,軟體供應商需要對每種手機做相應的模型優化,如果全部依靠人力來做除錯,很顯然對資源的要求和耗費非常巨大。

這使我們不得不思考,是否有可能讓機器來取代一部分這樣的工作,將人力解放出來。早在2016年,google brain就在這方面做了嘗試[8],通過強化學習的方式訓練一個能搭建網路結構的RNN,並構造出了當時在影象資料集CIFAR10和自然語言資料集Penn Treebank上效果最好的模型。網路結構搜尋(neural architecture search)的名字也是由這篇論文而來。儘管到今天網路結構搜尋的歷史不長,卻已經湧現了很多優秀的工作,這裡我們介紹幾個思路和方向。

 

2.2.1      基於強化學習

最早提出NAS的方案便是基於強化學習,後來出現的很多結構搜尋的論文對這個方法做了改動和優化,沿用至今。這個思路大概是說,我們在構造網路結構時,就好像是在堆樂高積木,從第一層開始,我們有幾個基本元件,和幾種拼接方法,我們按照一定流程一層一層拼出一個網路結構來。而強化學習就是要學出一套構造優質網路結構的流程。由於這個流程是一個序列,那用RNN來建模就再適合不過了,於是我們讓這個RNN每一步輸出一個決策,來決定選擇哪個基本元件,或者使用哪種拼接方法。當RNN輸出足夠的決策後,一個網路結構變生成了,我們拿它在一個數據集上訓練並測試,得到的驗證指標便成為獎勵用來訓練RNN。最終,被訓練的RNN便學會了構造好的網路結構來。聽起來非常有道理,但這種做法其實有一個問題,就是訓練RNN需要很多樣本,而這個問題裡一個樣本便意味著訓練一個神經網路模型,因此獲取樣本是很貴的。事實也是如此,文章[8]裡動用了400GPU同時訓練,一個訓練了1萬多個模型後才超越了當時最好的模型。大概只有google brain這樣有巨量計算資源的地方才有可能做這樣的嘗試。後續有很多工作都嘗試減少資源的耗費,使搜尋變得更高效,比如使搜尋空間變得更小[9],模型間共享權重[10]等。


2.2.2      共享權重

剛才提到了每個模型都要從頭訓練是非常低效的,ENAS[10]提出了模型共享權重的理念。文章作者認為,一個網路結構圖是一個更大的圖的子圖,於是作者索性存下包含整個結構搜尋空間的母圖的所有權重,並且邊訓練權重邊訓練如前所述的RNN。由於RNN構造出來的新結構直接從母圖中獲取權重,便省去了從頭訓練模型的過程,使整個搜尋比以前的方法快了上百倍。

2.2.3      元學習

ENAS的共享權重受到啟發,一篇新的工作[11]使用母圖作為元模型,通過dropout的方式來訓練元模型。於是沒有了構造結構的RNN,而是以隨機dropout的形式來讓元模型找出什麼樣的結構是重要的。作者在文中展示的效果和ENAS類似,我覺得兩種方法不好說孰好孰壞,都可以拿來嘗試下。

2.2.4      貝葉斯優化

最近有一個叫Auto-Keras的開源軟體受到了一定關注,這個軟體包致力於幫助人們自動訓練深度學習模型,而軟體的“自動”部分基於一篇該作者發表的論文[12],文中使用貝葉斯優化作為結構搜尋策略,並用network morphism來加速模型的訓練。作者定義了不同結構之間的“距離”,也就是不相似度,並基於此來構建貝葉斯優化中所需要的貝葉斯模型。有了貝葉斯優化來指導結構搜尋後,對於新結構,作者並非從頭開始訓練模型,而是使用network morphism, 將已經訓練過的模型通過變換轉變成要訓練的新模型,而同時能保留原來模型的功能,如此一來,只需要用比從頭訓練少得多的資源就能訓練出新的模型。

除了以上介紹的幾種思路之外,很多其它用於優化的方法也都出現在結構搜尋的應用中,比如前面提到過的進化演算法[5],基於模型的迭代式搜尋[13]等。

 

2.3   適用於寬表資料的自動深度學習

目前的自動深度學習訓練和網路結構搜尋,主要集中在語音、影象和文字等領域,尚未見到針對寬表業務資料的神經網路結構搜尋,然而這正是工業界最迫切的需求之一,其對應的自動深度學習價值較大。針對寬表業務資料對應的大規模離散特徵資料集,我們研發了深度稀疏網路(Deep Sparse NetworkDSN)及其自動版本Auto-DSNDSN採用多層級網路架構,綜合利用資料取樣、注意力機制和動態維度表達等方法,能夠有效的對寬表資料進行建模。Auto-DSN綜合利用上述各種技術,使得使用者配置一個和資源相關的引數,即可在合理時間內,搜尋到對寬表業務資料最佳的模型結構及超引數。我們在一些實際業務中驗證了它的有效性。

 

3.     模型評估

自動機器學習根據評估指標來優化模型,在這次分享的最後,我們再探討一下怎樣對模型的評估是可靠的。

首先評估指標的選擇應該和具體業務相結合,根據業務目標來制定對模型的評估方式,如果不考慮業務相關指標,機器學習中我們常用的指標有AUC, logloss, MSE, MAE等,關於其定義和用法網上有很多資料解釋,這裡就不贅述了。我想主要分享的是關於如何對抗過擬合的一些經驗。這裡的過擬合是指,在優化模型的配置或者引數的過程中,我們找到一組配置可能在我們的驗證集上表現效果很好,然而使用這個模型生產卻並未得到最好的效果。原因是多方面的,可能我們使用固定的驗證集來優化配置,導致這個配置僅僅在當前驗證集上的效果最好,沒有普遍性;也可能是訓練模型時由於一定的隨機性把某個次優的配置當成了最優配置。

為解決以上的問題,我們分別做了些嘗試。對於固定驗證集導致的過擬合,標準的做法是使用交叉驗證來計算指標,然而帶來的問題是交叉驗證所需的資源是固定驗證集的折數倍,比如常用的五折交叉驗證就需要五倍於固定驗證集的資源來優化。當模型訓練時間很長時,我們沒有足夠的資源計算完整的交叉驗證,於是我們會依然按照交叉驗證的方式來切分資料,但每次驗證時我們只會隨機選取其中一份驗證集來計算驗證指標,這樣指標的期望值就是無偏的。

當然這又引入一個新的問題,雖然期望是無偏的,卻由於我們的隨機選取導致方差變大了,也就是我們把次優選擇當成最優選擇的風險變大了。這裡我們引用[14]”intensification mechanism”來解決這個問題,這個過程是我們將第一組搜尋的配置用完整的交叉驗證計算出平均指標,並記為“最優配置”,後續搜尋到的新配置都會和“最優配置”比較,比的方式是計算新配置在某一折驗證集上的指標,如果當前新配置的平均指標低於“最優配置”,則放棄這個新配置並開始新的搜尋,反之則再選一折驗證集計算指標,如果所有驗證集都已經計算完,新配置的平均指標還是更優的,便把這個配置作為新的“最優配置”。這樣一來,我們只會把更多的計算量放在有潛力成為最優配置的配置上,總體消耗還是低於標準的交叉驗證的。

 

根據我們目前在推薦業務中的嘗試 ,上述方法中:自動特徵離散化會給模型帶來最明顯的泛化能力提升和 AUC 明顯升高、自動特徵組合可以最有效地提高模型對物料和人群的精準刻畫能力和精準個性化推薦效果、取樣優化和模型超引數優化功能對機器資源和訓練時間的優化效果最為明顯,給業務方留下了深刻的印象,歡迎大家進行嘗試。

 

上述內容便是我們在實際應用AutoML中的感想和經驗,希望能對大家有用。我們也希望更多的人開始瞭解和運用這個領域的方法,幫助他們加快機器學習系統的研發和生產。

 

謝謝觀看!

 

如有興趣可以訪問第四正規化和先薦官網瞭解更多資訊。

https://www.4paradigm.com

http://tuijianxitong.cn

 

參考文獻

[1] Jamieson, Kevin, and Ameet Talwalkar. "Non-stochastic best arm identification and hyperparameter optimization." Artificial Intelligence and Statistics. 2016.

[2] Klein, Aaron, et al. "Fast Bayesian optimization of machine learning hyperparameters on large datasets." arXiv preprint arXiv:1605.07079 (2016).

[3] Jaderberg, Max, et al. "Population based training of neural networks." arXiv preprint arXiv:1711.09846 (2017).

[4] Klein, Aaron, et al. "Learning curve prediction with Bayesian neural networks." (2016).

[5] Finn, Chelsea, Pieter Abbeel, and Sergey Levine. "Model-agnostic meta-learning for fast adaptation of deep networks." arXiv preprint arXiv:1703.03400 (2017).

[6] Huang, Gao, et al. "Snapshot ensembles: Train 1, get M for free." arXiv preprint arXiv:1704.00109 (2017).

[7] Izmailov, Pavel, et al. "Averaging Weights Leads to Wider Optima and Better Generalization." arXiv preprint arXiv:1803.05407 (2018).

[8] Zoph, Barret, and Quoc V. Le. "Neural architecture search with reinforcement learning." arXiv preprint arXiv:1611.01578(2016).

[9] Zoph, Barret, et al. "Learning transferable architectures for scalable image recognition." arXiv preprint arXiv:1707.070122.6 (2017).

[10] Pham, Hieu, et al. "Efficient Neural Architecture Search via Parameter Sharing." arXiv preprint arXiv:1802.03268 (2018).

[11] Bender, Gabriel, et al. "Understanding and simplifying one-shot architecture search." International Conference on Machine Learning. 2018.

[12] Jin, Haifeng, Qingquan Song, and Xia Hu. "Efficient Neural Architecture Search with Network Morphism." arXiv preprint arXiv:1806.10282 (2018).

[13] Liu, Chenxi, et al. "Progressive neural architecture search." arXiv preprint arXiv:1712.00559 (2017).

[14] Hutter, Frank, et al. "An experimental investigation of model-based parameter optimisation: SPO and beyond." Proceedings of the 11th Annual conference on Genetic and evolutionary computation. ACM, 2009.