遷移學習在推薦中的應用——騰訊PeterRec框架

爲什麼用遷移學習

大量的研究根據建模的用戶-物品交互序列生成推薦,效果也不錯。但是很少有研究嘗試表徵和遷移這些模型從而用於下游任務,而數據樣本通常是比較有限的,所以會考慮能否通過遷移學習,學習一個通用用戶表徵,並且將該用戶表徵應用到下游任務中,例如冷啓動用戶場景和用戶畫像預測等

問題與挑戰

嘗試以一種無監督訓練方式預訓練一個神經網絡,然後將此神經網絡遷移到下游任務中。爲此,論文需要至少解決三個問題:

  • 構造一個有效的預訓練模型,能夠建模超長用戶點擊序列;
  • 設計一種微調策略,能夠將預訓練網絡適配到下游任務。目前爲止,沒有相關文獻證實這種無監督學習的用戶表徵是否對其他場景有幫助
  • 設計一個適配方法,能夠使得不同任務都能充分利用預訓練網絡參數,從而不需要微調整個網絡,達到更加高效的遷移學習方式

騰訊看點是怎樣做的

在這裏插入圖片描述
PeterRec 進行用戶畫像預測示意圖。注意:PeterRec 不需要藉助於任何圖像和文本特徵,僅需要用戶點擊物品 ID 即可。中間網絡爲大量堆疊的空洞卷積網絡

空洞卷積神經網絡

研究者提出採用空洞卷積神經網絡構建大型的預訓練模型。

  • 優勢:採用一定空洞率設置的多層卷積網絡可以實現可視域指數級增長,從而捕獲和建模超長的用戶點擊行爲。

對比:

  • RNN 網絡:建模長序列時通常會遇到梯度消失和爆炸問題,並且並行訓練低效
  • Transformer 等:對顯存需求和複雜度也會隨着序列長度以二次方的級別增加

模型補丁

同時爲了實現對預訓練網絡參數的最大化共享,論文提出了一種模型補丁方式,類似於植物嫁接技術,只需要在預訓練網絡插入數個的模型補丁網絡,既可以實現預訓練網絡的快速遷移,效果甚至好於對整個模型全部微調

取得的效果

  • 提出了一種通用用戶表徵學習架構,首次證實採用無監督或者自監督的預訓練網路學習用戶點擊行爲可以內用來推測用戶的屬性信息。這一發現將有望改進很多公共服務,帶來更大的商業利潤,同時也會引發甚至推動對於隱私保護的相關問題的研究;
  • 提出了一種非常有效的模型補丁網絡,網絡相對於原來的空洞卷積層參數量更小,但是具有同等表達能力;
  • 提出了兩種模型補丁的插入方式,並行插入和串行插入;

方法細節

預訓練

在這裏插入圖片描述
PeterRec 預訓練網絡(a)和微調網絡(b)的參數分佈

本研究預訓練網絡採用空洞卷積網絡,每層空洞因子以 2^n 增加,通過疊加空洞卷積層達到可視域指數級的增加。
在預訓練優化方式上,本文采用了兩種自監督方式,分別是單向自迴歸方式以及雙向遮掩法 ,分別對應因果卷積和非因果卷積網絡,下圖所示
在這裏插入圖片描述
採用空洞卷積網絡的幾種微調策略。(a)(b) 爲因果卷機,(c)(d) 爲非因果卷積

微調

微調方式非常簡單,採用直接移除預訓練 softmax 層,然後添加新任務的分類層

本文的主要貢獻是在預訓練的殘差塊(圖 3(a))插入了模型補丁網絡,每個模型補丁有一個瓶頸結構的殘差塊構成,如圖 3(f)所示。本研究提出了幾種可選擇的插入方式,如圖 3(b)(c)(d)。注意(e)的設計效果非常差,文章分析很可能是因爲模型補丁的和操作,並行插入的和操作與原始殘差網絡的和操作夾雜在一起,影響最終優化效果。另外文中給出分析,通常模型補丁的參數量僅有原始空洞卷積的不到十分之一,但是可以達到與所有參數一起優化類似或者更好的效果。

實驗結果

無監督預訓練

論文首次證實採用無監督預訓練方式非常有效,論文對比 PeterRec 的兩種設置,有無預訓練下的實驗效果,如圖 4 中所示 PeterRec 大幅度超越 PeterZero,證實了本研究預訓練的有效性。
在這裏插入圖片描述

微調

以下是幾種微調方式比較,如圖 5 所示。圖中證實 PeterRec 僅僅微調模型補丁和 softmax 層參數達到了跟微調所有參數一樣的效果,但是由於僅有少數參數參與優化,可以很好的抗過擬合現象。
在這裏插入圖片描述

代碼實踐

開源代碼

代碼地址:https://github.com/fajieyuan/sigir2020_peterrec

  • PeterRec_cau_parallel.py: PeterRec with causal cnn and parallel insertion
  • PeterRec_cau_serial.py: PeterRec with causal cnn and serial insertion
  • PeterRec_noncau_parallel.py: PeterRec with noncausal cnn and parallel insertion
  • PeterRec_noncau_serial.py: PeterRec with causal cnn and serial insertion
  • NextitNet_TF_Pretrain.py: Petrained by NextItNet [0] (i.e., causal cnn)
  • GRec_TF_Pretrain.py: Petrained by the encoder of GRec [1] (i.e., noncausal cnn)
  1. First: python NextitNet_TF_Pretrain.py
    Second: python PeterRec_cau_serial.py

  2. First: python GRec_TF_Pretrain.py
    Second: python PeterRec_noncau_parallel.py

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章