multi-task learning 在即時配送中的嘗試

引言

如今大多數機器學習任務都是單任務學習。對於複雜的問題,也能夠分解爲簡單且相互獨立的子問題來單獨解決,而後再合併結果,獲得最初複雜問題的結果。這樣作看似合理,實際上是不正確的,由於現實世界中不少問題不能分解爲一個一個獨立的子問題,即便能夠分解,各個子問題之間也是相互關聯的,經過一些共享因素或共享表示聯繫在一塊兒。把現實問題當作一個個獨立的單任務處理,忽略了問題之間所富含的豐富的關聯信息。網絡

多個任務之間共享一些因素,它們能夠在學習過程當中,共享它們所學到的信息,這是單任務學習所不具有的。相關聯的多任務學習比單任務學習能取得更好的泛化效果。框架

在外賣配送場景,多種預測任務存在很是高的關聯性。區域平均配送時長、區域負載、當前時刻單量呈強相關關係,利用這種相關關係,咱們能夠構建多任務學習的訓練框架提高彼此預估準確率。機器學習

核心

問題
對於每一個配送區域在每一分鐘,預估該區域將來20分鐘的平均配送時長。這個配送時長會做爲配送區域內供需關係的調控因子,觸發調控行爲。函數

label構建性能

  • 將來20分鐘區域全部訂單的平均配送時長
  • 將來20分鐘區域的訂單量
  • 將來20分鐘的平均負載

特徵構建學習

  • 區域固有特徵:騎手數量、區域面積等
  • 區域實時特徵:實時天氣、實時訂單量等
  • 區域歷史統計特徵:同時段平均配送時長、同時段天氣等

網絡結構優化

採用DeepFM。
DeepFM模型結合了廣度和深度模型的有優勢,聯合訓練FM模型和DNN模型,來同時學習低階特徵組合和高階特徵組合,DeepFM模型的Deep部分和FM部分從詞嵌入層共享數據輸入,該模型具備以下優勢:
(1) 結合了廣度和深度模型的優勢,聯合訓練FM模型和DNN模型,同時學習低階特徵組合和高階特徵組合。
(2) 端到端模型,無需特徵工程。
(3) DeepFM共享相同的輸入和詞嵌入向量,訓練更高效。spa

DeepFM的輸入可由連續型變量和類別型變量共同組成,對輸入的離散數據須要進行詞嵌入處理,經過一個相似局部鏈接的結構,將離散特徵映射到低維向量。DeepFM包含兩部分:神經網絡部分與因子分解機部分,分別負責低階特徵的提取和高階特徵的提取。這兩部分共享一樣的輸入。翻譯

DeepFM的預測結果能夠寫爲:$y=sigmoid(y_{fm} + f_{DNN})$設計

FM 部分的輸出以下:

image.png

公式說明以下:
1)這裏的$w_{ij}$即$<v_{i},v_{j}>$,能夠理解爲DeepFM結構中計算詞嵌入向量的權矩陣。
2)詞嵌入層的神經元個數是由詞嵌入向量長度和特徵數量共同肯定,神經元的個數爲embedding vector*field_size。

而後是DNN部分的結構,DNN的做用是構造高維特徵,而且DNN的輸入也是相同的詞嵌入向量,即和FM部分進行權值共享。關於DNN網絡中的輸入$a$處理方式採用前向傳播,這裏假設 $a(0)=(e_1,e_2,...,e_n)$表示詞嵌入層的輸出,那麼$a(0)$做爲下一層 DNN隱藏層的輸入,其前饋過程以下:
$a(l+1)=σ(W^{(l)}a^{(l)}+b^{(l)})$

在具體實現過程當中,咱們將詞嵌入層的詞嵌入向量長度設置爲64,DNN部分採用3層全鏈接層。對於FM部分的一階項和二階項以及DNN的每一層分別設置dropout。其中,FM部分的dropout係數爲0.85,DNN部分的dropout係數爲0.9。在DNN全鏈接層後加入batch normalization層。

參數共享

採用硬參數共享機制進行多任務學習網絡構建。參數的硬共享機制是神經網絡的多任務學習中最多見的一種方式,硬共享機制下降了過擬合的風險。咱們經過對於全部任務共享隱藏層,同時保留幾個特定任務的輸出層來實現多任務學習的模型框架。多任務學習的損失函數分爲2部分:主任務損失函數、輔助任務損失函數。對於主任務選用分段函數進行優化,改善長尾狀況預估偏短問題。對於輔助任務選用平方損失進行學習優化。主任務損失函數和輔助任務損失函數分別以下:
image.png

模型訓練

多任務學習有交替訓練和聯合訓練。因爲數據集相同,咱們採用的是多任務學習中的交替訓練進行網絡參數的學習。具體作法是,首先生產一個在0-1範圍內的隨機數,將該隨機數做爲當前訓練輪次訓練任務的依據。訓練任務選取規則,如表一所示。從表中能夠看出,針對主任務和輔助任務,咱們分別設定不一樣的訓練機率,主任務爲0.六、兩個輔助任務均爲0.2,這樣能夠保證主任務在有限的訓練輪次下能夠獲得充分的訓練。深度學習網絡採用Adam優化器進行訓練,初始學習率爲0.015,每訓練2000步,將學習率進行一次衰減,衰減係數爲0.95。

擴展:多任務學習

概念

多任務學習(multi-task learning)是基於共享表示(shared representation),把多個相關的任務放在一塊兒學習的一種機器學習方法。

多任務學習涉及多個相關的任務同時並行學習,梯度同時反向傳播,多個任務經過底層的共享表示(shared representation)來互相幫助學習,提高泛化效果。

網絡結構

在網絡結構上,分爲硬共享機制(在一個基學習器的最後一層加上多個特定的輸出層)和soft參數共享機制(每一個任務都有本身的參數和模型,模型參數之間的距離是正則化的,以便鼓勵參數類似化)

(1)參數的硬共享機制:參數的硬共享機制是神經網絡的多任務學習中最多見的一種方式,通常來說,在實際應用中,一般經過在全部任務之間共享隱藏層,同時保留幾個特定任務的輸出層來實現。 硬共享機制下降了過擬合的風險。事實上,有文獻證實了這些共享參數過擬合風險的階數是N,其中N爲任務的數量,比任務相關參數的過擬合風險要小。直觀來將,這一點是很是有意義的。越多任務同時學習,咱們的模型就能捕捉到越多任務的同一個表示,從而致使在咱們原始任務上的過擬合風險越小。
image.png

(2)參數的軟共享機制(基於約束的共享(regularization based)):每一個任務都有本身的模型,本身的參數。在共享 Soft 參數時,每一個任務都有本身的參數和模型。模型參數之間的距離是正則化的,以便鼓勵參數類似化。咱們對模型參數的距離進行正則化來保障參數的類似。若有文獻使用L2距離正則化,而也有文獻使用跡正則化(trace norm)。用於深度神經網絡中的軟共享機制的約束很大程度上是受傳統多任務學習中正則化技術的影響。約束深度神經網絡 Soft 參數共享的思想受到了 MTL 正則化技術的極大啓發,這種思想已經用於其它模型開發。
image.png

訓練方式

在訓練階段,包括交替訓練和聯合訓練(把兩個loss相加)兩種方式。

何時交替訓練好?

當對每一個不一樣的任務有兩個不一樣的數據集(例如,從英語翻譯成法語,英語翻譯成德語)時,交替訓練是一個好主意。經過以這種方式設計網絡,能夠提升每一個任務的性能,而無需找到更多任務特定的訓練數據。

何時聯合訓練好?

交替訓練容易對某一類產生偏向,當對於相同數據集,產生不一樣屬性的輸出時,保持任務的獨立性,使用聯合訓練較好。

相關文章
相關標籤/搜索