1. 程式人生 > >Multi Task Learning在工業界如何更勝一籌

Multi Task Learning在工業界如何更勝一籌

算法 排序

摘要:本文主要介紹多任務學習和單任務學習的對比優勢以及在工業界的一些使用。如何從單任務學習轉變為多任務學習?怎樣使AUC和預估的準確率達到最佳?如何對實時性要求較高的在線應用更加友好?本文將以淘寶實例為大家進行分享多任務學習實現電商應用中的個性化服務搜索和推薦。

演講嘉賓簡介:

劉士琛(花名:席奈),阿裏巴巴搜索事業部高級算法專家。本科就讀於中國科學技術大學少年班系,計算機專業博士。目前是阿裏巴巴高級算法專家,服務淘寶網搜索、排序、個性化相關的業務;專註於搜索排序方面的算法研究及應用,涉及實時計算、深度學習、強化學習等領域,相關工作發表於sigKDD、WWW等會議中。

以下內容根據演講嘉賓視頻分享以及PPT整理而成。

本文將圍繞以下幾個方面進行介紹:

1. 背景

2. 相關知識介紹

3. 多任務模型

4. 實驗及效果

5. 生效技巧及註意事項

一. 背景

多任務學習的研究目的:使用機器學習和數據挖掘的相關技術幫助更好的實現電商應用中的個性化服務搜索和推薦。

為什麽使用多任務學習:

1) 以前在服務搜索和推薦中大多使用單任務學習方法,但在真實的工業界應用場景中,更多的是多任務並存的情況,因此多任務學習更具有實踐意義。

2) 一個多任務學習模型會比多個單任務學習模型更加小,在線CPU使用率更低,對於在線服務更加友好。

3) 在淘寶中,多任務學習可以幫助獲得更通用的用戶、商品理解與表達。

二. 相關知識介紹

1. 學術界背景

首先為大家介紹相關的學術背景知識,以及使用DNN和RNN完成的一些推薦工作。說到推薦,大家可能立即想到協同過濾,2000年左右就有大量的協同過濾算法出現,包括基於模型的,基於內存的等。使用DNN做推薦的歷史也比較久,開始大多使用RBM(Restricted Boltzmann Machines, 限制波爾茲曼機)來做推薦,當時在協同過濾上有比較好的表現,比基於用戶的協同過濾推薦(User-based Collaborative Filtering Recommendation)和基於項目的協同過濾推薦(Item-based Collaborative Filtering Recommendation)的效果更佳。近年來,主要使用的推薦方法是DAE(denoising auto-encoders)。

在工業界內,推薦算法有更多的應用,例如微軟提出了DSSM(deep structured semantic models),一種Pair Wise Ranking方法。Google提出了神經網絡(a wide and deep network)來做推薦和排序。近期,大家可能更多使用RNN/CNN或者Attention的技術來做推薦。因為用戶在某一個平臺上,會存在一個天然的行為序列,這個性質使得RNN/CNN或者Attention具有更佳的可用性。

2. 多任務表達學習(Multi-task Representation Learning)

近年來,多任務表達學習越來越熱,因為機器學習以及深度學習的成功主要歸功於模型能更好的獲取數據表達,能從數據中挖掘出需要的信息。而多任務表達學習能從數據中獲取更加綜合的、更加可變化的信息。單任務模型提取出的特征只針對該單任務有效,單個特征並不能很好地描述一個樣本。當任務量較大,並且要求學習到的特征為每一個任務服務,即要求特征有一定的通用性時,多任務學習就更加合適。多任務學習一般分為兩種,一種分為主目標及其他附屬目標(Main task and auxiliary tasks),附屬目標是為了幫助主目標來訓練;另一種為多個平等目標(Equal tasks),沒有主次之分。

3. 系統背景

淘寶主要將多任務學習應用於搜索系統中。該流程主要如下圖所示:

技術分享圖片

首先,用戶會輸入一個查詢(query),然後搜索引擎會根據倒排索引,返回一個相關的候選集合。同時也會設置預測任務獲得用戶的相關信息,比如性別、年齡、購買力、購買風格、購買偏好等。基於候選集和用戶信息,可以獲取候選集中的所有商品的屬性和特征,如下表所示:

技術分享圖片

與商品相關的特征有銷量、售後滿意度等,個性化特征包括商品的個性化預估、用戶對該商品的價格偏好等。對於某一商品,可能有幾十維或者上百維的特征描述,接著使用模型整合這些特征的單個評分,最後根據總得分進行排序。流程圖中×××的部分為商品個性化相關的部分,即需要模型去預估的部分。每個×××塊可以看作是一個任務或多個任務。由此可見,在線排序過程中通常存在多個任務,因此需要使用多任務表達學習來解決。

三. 多任務模型

淘寶多任務模型的整體結構如下圖所示:

技術分享圖片

模型的輸入信息是用戶在淘寶上的行為序列。每個行為包括兩部分:第一部分是行為動作,例如行為類型可能為點擊、搜索以及推薦等,行為時間可能為1分鐘前、五分鐘前或半小時前,這些屬性是用戶的動作本身而與商品無關;第二部分是與商品相關的部分。這裏每個行為x被表達成一個性質描述p(property)和e(embedding)。然後建立LSTM(Long Short-Term Memory)將用戶行為序列串接起來。接下來使用attention net做池化(pooling)得到一個128維向量的用戶表達。將該向量和用戶的其他信息組合,得到最終的可以被多個任務共享學習的用戶表達。綜上所述,該多任務模型可以分為五層:輸入層Behavior Sequence, Embedding層,LSTM層,Attention-based Pooling層,Multi-task接收輸出層。其中涉及的技術包括:

  • Embedding

  • CNN/RNN/Memory Net

  • Attention

  • Multi-task Learning

  • Lifelong Leaning/Transfer Learning

因此采用多任務表達模型,旨在構造可以共享給多個任務學習使用並且方便轉化的用戶表達。接下來將詳細介紹每一層結構。

1. Embedding層

技術分享圖片

Embedding層主要將用戶的行為轉化為向量。如上述所說,用戶的一個行為由行為描述(behavior property)和商品特征(item features)組成。商品特征包括商品ID、所屬店鋪、品牌、所屬類目(例如服飾箱包)等信息,此外商品還會有一些更加泛化的標簽,例如商品價格是否昂貴,商品顏色是什麽,風格是韓版還是歐美風等等。上圖中對商品的描述信息從左向右越來越泛化。這裏認為,越泛化越個性化特征能更綜合地表示商品信息,例如若某個商品非常熱銷,那麽該商品ID就能表示它,但當商品銷量特別低時,商品ID就無法表示它,還需要該商品的所屬店鋪、品牌、所屬類目以及更個性化的便簽。用戶的行為描述包括三方面:一是行為場景,例如行為是發生在搜索時、推薦時或者在聚劃算時;二是行為時間,可以是一分鐘以內、五分鐘以內或是半小時以內,淘寶對行為時間進行了分窗口劃檔,將行為按照行為時間分至不同的檔位;三是事件類型,分為成交、點擊、加購物車、收藏。向量轉化後的維度可以從上圖中得知,商品特征的五種屬性維度分別是32、24、24、16、28,行為描述的三個屬性維度為16、16、16。最後將所有的向量組合,得到最終的用戶行為向量。

2. Property Gated LSTM和Attention Net

但是用戶在淘寶上通常是一系列較長的行為序列,例如瀏覽商品,點擊商品以及購買商品等。那麽這裏希望可以從這段行為序列中分析該用戶的相關信息。那麽類似於自然語言處理,可以將多個詞以序列的形式embedding成一句話,這裏可以使用LSTM將多個行為以序列的形式embedding成行為序列。與原始LSTM的區別是,此處輸入信息包括兩方面,商品特征和行為描述。相信大家知道,LSTM是RNN(循環神經網絡)的一種,它的創新點是包括很多門,這一方面可以保證網絡訓練時不會發生梯度消失或梯度爆炸的現象,另一方面可以強調或弱化序列中的一些個體。在一般的RNN中,序列中的每個元素都是平等的,但在LSTM中可以為個體設置權重,提示哪些元素可以被強調,哪些元素可以被忽略,這會對用戶行為學習產生比較重要的影響。例如,用戶在半年前的一次點擊行為和用戶在近期的一次成交行為相比,後者明顯會更重要。那麽這在模型中如何體現呢?這裏將用戶的行為描述放置在三個門中,即遺忘門(forget gate)、輸入門(input gate)、輸出門(output gate)。那麽用戶行為描述便可以決定一次用戶行為中分別需要註意和忽視的內容。因此這裏提出了如下圖所示結構的Property Gated LSTM:

技術分享圖片

上圖中,p表示property,e表示embedding,h(t-1)表示前一個LSTM的輸出,h(t)表示當前LSTM的輸出。具體的Property Gated LSTM公式如下所示:

技術分享圖片

在LSTM網絡之後,淘寶也仿照自然語言處理,加入了attention net機制,其作用和門比較類似,也可以決定行為的重要性程度。但與門有所區別的是,門在處理行為重要性時只能根據當前行為的信息來決定,attention net機制中可以加入一些額外的信息,例如可以加入用戶query信息和user信息,user會包含用戶年齡、性別、購買力、購買偏好等信息,query會包含自身的ID、分詞以及一些內幕信息等。具體如下圖所示:

技術分享圖片

假設輸入30個用戶行為序列,LSTM輸出30個向量結果h,attention net機制會決定輸出的h重要性程度,最後做池化(pooling)。例如,某用戶點擊瀏覽一條連衣裙,然後購買了一個手機,瀏覽了一些掃地機器人、筆記本電腦等。如果此時該用戶輸入搜索query為iphone,那麽用戶行為中關於服飾的記錄重要性明顯降低,因為這些記錄並不能反映該用戶當前的興趣,而之前關於手機的行為記錄能更多的表達用戶當前的興趣。

3. 多任務模型(Multi-tasks)

用戶行為序列在Embedding後,經過LSTM層,然後使用attention net做池化(pooling),最終得到一個256維向量的用戶表達。假設得到一個這樣通用的用戶表達,準備將其應用於以下五個任務。

任務一是CTR預估任務,這在廣告和排序推薦中較為常用,例如預估用戶對某電影視頻或者音樂的點擊率。淘寶會使用CTR來預估用戶對某些商品的點擊率。公式中主要運用似然函數來表示。輸入包括256位的用戶表達和商品的embedding,此處的embedding即為用戶行為序列中的embedding,兩處共享。這些輸入信息經過三層網絡便可以得到預估結果。

技術分享圖片

技術分享圖片

任務二是L2R(Learning to Rank,也可做LTR)任務,形式上與CTR預估類似,但不同的是輸入信息中需要包含具體的商品排序特征(Ranking Features)。在CTR預估中將用戶表達與embedding做全連接操作,而L2R任務中是將用戶表達經過兩層網絡後和商品特征進行線性相乘。它的優勢是最上一層網絡容易理解,並且便於查錯。而公式中與CTR不同的是加入了權重信息,來表示註重或者忽略哪些行為。比如用戶點擊商品、購買商品的行為需要較大的權重,而瀏覽商品後無任何行為可以予以忽視。

技術分享圖片

技術分享圖片

任務三是用戶對達人的偏好。因為這裏希望最終學習到的用戶表達比較通用,而不是所有的任務都和商品相關,如此學習到的用戶個性較為局限。因此任務三主要學習用戶喜愛的達人類型。此處任務三的輸入除了256位的用戶表達外,還需輸入相關達人的特征,然後解決用戶是否會follow的二次類問題。

技術分享圖片

技術分享圖片

任務四是預估用戶購買力(PPP)。這裏將用戶的購買力分為7檔,1檔最低,7檔最高。這可以預估出用戶是否是追求品質,購買力較高,還是追求性價比,偏愛價格較低的商品。購買力預估和商品無關,根據輸入的256位的用戶表達進行一個切分即可。

技術分享圖片

上述四個任務是網絡中需要學習用戶表達的任務,可同時進行學習得到任務模型,從而得到最終的用戶表達。那麽接下來需要驗證最終的用戶表達是否可以應用到其他任務中,因此設置了transfer task。transfer task用來預估用戶的店鋪偏好,但是該任務並非和上述四個任務同時學習,而是取上述四個任務學習之後的用戶表達進行學習,驗證其是否可以直接使用在新任務中。因此相比其他四個任務需要鏈接到一個較大的網絡背景下進行,transfer task的深度較淺。

技術分享圖片

四. 實現及效果

模型設計完成後,需要進行實驗驗證模型的效果。首先關註訓練過程。由上述可知這裏將有5個任務,因此有5個獨立的訓練數據集,4個數據集同時進行訓練,最後一個進行驗證。關於數據集,每天的樣本數據量大約為60億,在沒有取樣的情況下數據量會達到200億左右。然後采用10天的數據完成訓練過程,10天之後一天的數據完成預測過程。訓練過程中使用mini-batch,每個batch的樣本為1024條。關於在線環境,CTR和LTR會對線上效果產生影響。

CTR預估會作為Ranking Feature在線上生效。LTR會影響Ranking Feature的排序過程,因此影響更大。此外還會使用PPP來預估用戶購買力。

下圖列出了實驗中的一些參數。例如LSTM的用戶序列為100個,Dropout rate為0.8,采用L2正則,AdaGrad中的learning rate為0.001,訓練使用分布式的TensorFlow環境,其中有2000個worker,96個server,15個CPU核,沒有使用GPU,整個訓練需要4天來完成。

技術分享圖片

1. DUPN與Baselines方法比較

首先分析第一組實驗結果。第一組實驗將上述提出的方法(命名為DUPN),與其他Baselines方法(包括Wide, Wide & Deep, DSSM, CNN-max四種)進行比較。Wide方法是單層網絡,可能會包含較多的單特征和交叉特征,然後進行邏輯回歸LR(logistic regression)。第二和第三種方法分別是由Google提出的Wide & Deep,以及由微軟提出的DSSM。最後CNN-max是采用CNN提取用戶行為特征,然後做max-pooling,得到用戶表達。而上文中提出的DUPN方法包含5個子方法,DUPN-nobp/bplstm/bpatt/all/w2v。DUPN-nobp/bplstm/bpatt這三種子方法是指用戶行為描述property只使用在LSTM或Attention Net中。DUPN-all表示最完整的算法。DUPN-w2v表示並不使用end to end學習方式,而是加入pre-training,采用word to vector將每個商品訓練為向量形式,然後直接將該向量輸入到後續的網絡中,這樣可以大大減小網絡的參數空間。接下來將這些方法應用到任務1-4中,得到以下的結果對比:

技術分享圖片

如上表所示,四種baseline方法中效果最佳的為CNN-max。Wide & Deep和DSSM並未將用戶的行為序列納入考慮範圍,只是將用戶的特征進行一個組合。而CNN-max則是從用戶的行為序列中提取特征。因此它在前三個任務中的AUC以及任務四中的準確率最高。前四個DUPN算法中,DUPN-all效果最佳。完全不使用property的DUPN-nobp算法效果和CNN-max比較接近,這也印證了當只有LSTM層時,效果和CNN相差不多。但分別加入了Property Gated LSTM和Attention Net後,即方法DUPN-bplstm/bpatt,相對於DUPN-nobp都有較大的提升。因此最完整的DUPN-all可以達到最佳效果,各AUC都上升了一至三個百分點,購買力預估有5個百分點的提升。最後一種方法DUPN-w2v,使用了pre-training來減小參數的空間來簡便訓練,但這裏可以看到效果並沒有比前幾種更佳,原因可能是DUPN-w2v在訓練數據過程中只能得到哪些商品具有類似屬性,但不能得到商品本身的信息,例如熱銷度等。因此由第一個實驗可以得出,上述提出的DUPN-all算法,在各個任務中都比傳統方法效果更佳。

2. 多任務學習和單任務學習比較

接下來驗證多任務學習和單任務學習的差異。上述任務一至任務四可以作為多個單任務獨立學習,也可以作為多任務學習同時執行。下圖即為兩種方式的結果比較:

技術分享圖片

上方四張圖為各任務在兩種情況下AUC的比較值,下方四張圖為Loss的下降情況。以第一張圖L2R Rank AUC為例,首先關註AUC的變化趨勢。開始階段AUC值會飛快的增長到0.68左右,然後增長速度放緩直到0.75。因為抽取的用戶特征中會存在一些泛化特征,這些泛化特征在每個樣本中都存在,開始階段泛化特征會起到主要作用,學習速度較快。但是對於後續稀疏的特征,例如店鋪特征或商品ID等,學習速度非常慢,但依然可以使AUC值逐漸上漲。而圖中紅色曲線為多任務學習結果,藍色曲線為單任務學習。這裏可以清晰的看到在所有圖像中,多任務學習的AUC和準確度都高於單任務學習。那麽該如何理解這種現象呢?大家可能會猜想由於多任務同時學習會使某些任務學習速度降低,然而並不如此。在四個任務同時進行時,可以將其他三個任務看成正則,例如在學習時加入L2正則,會使AUC值更高。但這三個任務與L2正則的差異是他們並不只是單純的防止過擬合,同時也可以使基礎特征學習的更加泛化。因此多任務學習其實對每個單任務來說都會更加有利,AUC值也會更高。

這裏值得註意的是上述所有實驗結果都是基於測試集,如果在訓練集進行上述實驗,多任務的數值結果相比來說會較低,但二者之間的差異仍存在。因此基於準確率,多任務學習會比單任務更佳。

3. 模型遷移能力

接下來驗證一些模型是否具有遷移能力。例如在學習完上述四個任務後,任務五為學習用戶對店鋪的偏好,這裏可以從四種學習方法中進行選擇:End-to-end Re-training with Single task (RS), End-to-end Re-training with All tasks (RA), Representation Transfer (RT), Network Fine Tuning (FT)。RS與DUPN網絡類似,將任務五作為一個全新的任務,單獨進行學習。RA是指將任務五和前四個任務同時進行,重新訓練。RT是指不再訓練整個大網絡,而是將最後更新的用戶向量和店鋪的屬性輸入,進行一個淺層訓練。FT是指在上述大網絡的後端直接接入任務五的學習,對初始網絡進行微調,得到最終結果。上述四種方法的訓練過程如下圖所示:

技術分享圖片

上圖中橫坐標為訓練時長,縱坐標為AUC值。效果最佳的為綠色曲線FT,一方面FT收斂較快,另一方面其最終AUC值也最高,為0.675左右。這說明之前的網絡已經達到了較好的訓練效果,進行一些微調後便可以很快的得到最終結果。而黑色曲線RA雖然收斂速度較慢,最後仍然可以達到和FT同樣高的AUC值。但顯而易見FT的代價較低,RA需要完成一個整體的重新訓練,可能需要四天或以上的時間,並且消耗大量計算和存儲資源。RT曲線只需要輸入最後更新的256位用戶向量和店鋪的特征,學習的參數較少,因此收斂速度最快,但學習效果也相應的較低,比FT低2%左右。RT的優勢在於對初始網絡沒有任何更改,只是在其後嫁接了一個新的學習任務,如果是在線應用消耗較小,並且得到的AUC值也勉強可觀。試想若五個任務是在線執行,並且規模相對較大,可能五個任務根本無法同時學習,並且對於一個實時系統,需要及時的給予用戶反饋,那麽此時RT便是一個最佳選擇。這四種方法中,除了RT為一個模型,其他三種方法都至少有兩個模型,這意味著在線的計算量和存儲量幾乎都需要翻倍。因此若在線資源比較充足,推薦使用FT方法;若在線性能受到限制,需要一個內存較小速度較快的方法,那麽RT方法較為合適。

4. 用戶attention分析

然後從兩方面對用戶的attention進行分析。一方面是用戶輸入的query信息,如下圖所示。最下一行是用戶在淘寶上曾經有相關行為的商品,從左向右行為時間越近。那麽用戶再次輸入不同的query,對這些歷史行為的attention也不同,顏色深淺代表attention的大小。例如當用戶再次搜索laptop時, 那麽attention更多的會集中在耳機、手機之類,而搜索連衣裙T恤之類,服飾相關的類目會起到比較大的作用。由此可見,query能夠非常有效的決定歷史行為的重要性程度。

技術分享圖片

另一方面用戶行為信息也可以幫助分析。下圖中橫坐標為行為時間,縱坐標為行為類型,不同的行為類型有不同的attention權重。整體來說,用戶的成交行為重要性最高,遠遠高於點擊、加購物車和收藏行為。收藏行為可能對分析用戶行為表達重要性最低。但比較有趣的是,用戶越近的一些點擊行為越能反映用戶的興趣,但是最近的成交行為並不能反映。這和大家的認知相同,當用戶購買了某件商品後,近期可能不會再購買該類型商品,因此顏色較淺,相反,幾個小時以後或者幾天以後的購買行為能更反映用戶興趣。這也是將用戶行為信息(property)加入到學習網絡中準確率會上漲的原因。

技術分享圖片

最後將這個算法應用到淘寶的一個在線系統,現在已全面生效。淘寶統計了其在線上7天內的運行效果,如下表所示,CTR可以提升2%左右,銷量可以提升3%左右,購買力預估從以前的33%提升到44%。

技術分享圖片

以下兩圖更詳細的展示了算法的效率提升。淘寶上用戶的購買力分為7分,因此這裏需要觀察每個分檔下的準確率(上圖)和召回率(下圖)。由圖可見,準確率和召回率都有提升,但提升的幅度並不一致。在準確率中,1檔和7檔提升較多,而23檔提升較少。在召回率中,各檔提升較為均勻,大致在5%至10%之間。

技術分享圖片

技術分享圖片

五. 生效技巧及註意事項

1. 模型需要高頻的更新

商品的ID特征屬性經常變化,例如商品的流行程度、隨季節變換而變化的風格、用戶的興趣也在隨時變化等,因此embedding也需要隨之改變。實際應用中如果不更新模型,模型效果會逐漸變差。大量的ID特征導致模型的訓練非常緩慢,一次全量訓練可能需要長達4天時間。因此可以在開始時使用10天的數據進行一次全量學習,之後每天使用前一天的數據做增量學習。這一方面能使訓練時間大幅下降,能在一天內完成;另一方面可以讓模型更貼近近期數據。例如在雙11時,因為當天的樣本與日常有很大不同,淘寶使用了當天不同時段的數據對模型進行了兩次更新,更新後可以看到訓練的指標得到了明顯提升。

2. 拆分模型

在模型生效時可以對模型進行一定的拆分。在排序任務中,需要對每一個商品做CRT預估或者LTR估分,如果商品數量巨大,學習過程會非常耗時,那麽該如何使計算量下降呢?這裏可以將模型拆分成用戶部分(紅色)和商品部分(藍色),如下圖所示:

技術分享圖片

用戶部分和商品部分幾乎沒有關聯性,因此對於某一用戶,輸入query之後可以只計算一次用戶部分,得到用戶對商品的向量表達。然後計算商品部分的CRT預估和LTR,此時只有商品部分需要重復計算。而大規模的計算量其實都聚集在紅色用戶部分,因此這樣的拆分對線上運行非常友好,能夠幾千倍的降低線上計算量,使得模型在線上更高效。

3. BN中一致性問題

Batch normalization能很好的提升模型效果,使AUC顯著提升。但需要註意的是,訓練樣本中BN記住的離線均值和方差和在線數據中一定要保持一致。舉例來說,在訓練樣本中會做各種過濾和采樣,例如把點擊和成交樣本采樣,那麽這樣會導致某些維度的均值會遠遠高於實際線上的均值,雖然在測試集上的AUC也能提升,但這對在線效果非常不利。從實驗來看,用戶的向量表達的確具有不錯的遷移能力,即在其他任務中也能表現出不錯的效果。但這一點在很多參考文獻中是不一致甚至矛盾的。應用的時候需要根據場景的不同多加註意。

4. 淘寶相關部分簡介

後續是模型生效過程,因為這些過程和淘寶相關性太高,只做一個簡單介紹,如下圖所示。首先通過OPDS將用戶的點擊、購買和PV行為合並,10天做訓練,一天做評估,然後將這些數據放在HDFS,在TensorFlow上進行訓練。這樣一個模型大約在150G左右。因此當模型數增多,至五個以上時,線上內存是無法容納的。這也是采用多任務學習的一個重要原因,來減小模型的存儲和計算效率。

技術分享圖片

下圖表示增量模式的過程。將以往的用戶行為數據輸入一個在線平臺,導出到ODPS,然後將老的模型和新的數據進行增量訓練,得到更新的模型。

技術分享圖片

最後一張圖是生效過程。上文講到模型拆分成兩個部分,因此生效需要在兩處進行。一處在用戶query process部分,然後將用戶表達和商品屬性在另一處計算得到商品的分數。

技術分享圖片

原文鏈接

閱讀更多幹貨好文,請關註掃描以下二維碼:

技術分享圖片


Multi Task Learning在工業界如何更勝一籌