摘要:本文主要介紹多任務學習和單任務學習的對比優點以及在工業界的一些使用。如何從單任務學習轉變爲多任務學習?怎樣使AUC和預估的準確率達到最佳?如何對實時性要求較高的在線應用更加友好?本文將以淘寶實例爲你們進行分享多任務學習實現電商應用中的個性化服務搜索和推薦。算法
演講嘉賓簡介:後端
劉士琛(花名:席奈),阿里巴巴搜索事業部高級算法專家。本科就讀於中國科學技術大學少年班系,計算機專業博士。目前是阿里巴巴高級算法專家,服務淘寶網搜索、排序、個性化相關的業務;專一於搜索排序方面的算法研究及應用,涉及實時計算、深度學習、強化學習等領域,相關工做發表於sigKDD、WWW等會議中。網絡
如下內容根據演講嘉賓視頻分享以及PPT整理而成。iphone
本文將圍繞如下幾個方面進行介紹:機器學習
1. 背景分佈式
2. 相關知識介紹ide
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接收輸出層。其中涉及的技術包括:
所以採用多任務表達模型,旨在構造能夠共享給多個任務學習使用而且方便轉化的用戶表達。接下來將詳細介紹每一層結構。
1. Embedding層
Embedding層主要將用戶的行爲轉化爲向量。如上述所說,用戶的一個行爲由行爲描述(behavior property)和商品特徵(item features)組成。商品特徵包括商品ID、所屬店鋪、品牌、所屬類目(例如服飾箱包)等信息,此外商品還會有一些更加泛化的標籤,例如商品價格是否昂貴,商品顏色是什麼,風格是韓版仍是歐美風等等。上圖中對商品的描述信息從左向右愈來愈泛化。這裏認爲,越泛化越個性化特徵能更綜合地表示商品信息,例如若某個商品很是熱銷,那麼該商品ID就能表示它,但當商品銷量特別低時,商品ID就沒法表示它,還須要該商品的所屬店鋪、品牌、所屬類目以及更個性化的便籤。用戶的行爲描述包括三方面:一是行爲場景,例如行爲是發生在搜索時、推薦時或者在聚划算時;二是行爲時間,能夠是一分鐘之內、五分鐘之內或是半小時之內,淘寶對行爲時間進行了分窗口劃檔,將行爲按照行爲時間分至不一樣的檔位;三是事件類型,分爲成交、點擊、加購物車、收藏。向量轉化後的維度能夠從上圖中得知,商品特徵的五種屬性維度分別是3二、2四、2四、1六、28,行爲描述的三個屬性維度爲1六、1六、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部分,而後將用戶表達和商品屬性在另外一處計算獲得商品的分數。
閱讀更多幹貨好文,請關注掃描如下二維碼: