推薦系統(5)-深度推薦模型-AutoRec、DeepCrossing、NeuralCF、PNN、WideDeep、FNN、DeepFM、NFM

GBDT+LR

  • 1. AutoRec-2015
  • 2. Deep Crossing-2016
  • 3. NeuralCF-2016
  • 4. PNN-2016
  • 5. Wide&Deep-2016
  • 6. Deep&Cross-2017
  • 7.FM+深度學習
    • 7.1 FNN-2016
    • 7.2 DeepFM-2017
    • 7.3 NFM-2017

《深度學習/推薦系統》讀書筆記

2016年開始,推薦系統和計算廣告全面進入深度學習時代。
(太多的模型,一搞就混了,沒意思。)
圍繞:特征如何更好的交叉,發現新的特征
以下方案基本囊括了特征工程的所有思路,(僅從特征工程的角度出發)模型進一步提升的空間非常小了,這也是這類模型的局限性所在。

1. AutoRec-2015

(澳大利亞國立大學)

核心思想:利用自編碼器重構用戶對物品的評分向量,再利用對物品評分的預估進行推薦排序。
自編碼器:使輸出向量與輸入向量盡可能接近,可以用來做數據壓縮和降維。
數據壓縮和降維說的是,自編碼器的參數數量要遠小于輸入向量的維度

AutoRec-用一個三成神經網絡構建自編碼器,輸出層與輸入層具有相同維度。
若輸入向量為rir^iri,重建函數為h(ri,θ)h(r^i,\theta)h(ri,θ),AutoRec目標函數為
min?θ∑i=1n∣∣ri?h(ri,θ)∣∣2+λ2∣∣θ∣∣2\min_\theta\sum_{i=1}^n||r^i-h(r^i,\theta)||^2+\frac{\lambda}{2}||\theta||^2θmin?i=1n?ri?h(ri,θ)2+2λ?θ2

Item Based AutoRec–物品評分向量–共現矩陣的列向量
User Based AutoRec–用戶評分向量–共現矩陣的行向量

優點:三層自編碼器簡單
缺點:表達能力不足

2. Deep Crossing-2016

(微軟)
Deep Crossing 模型的應用場景-Bing中搜索廣告推薦場景。用戶在搜索引擎中輸入搜索詞后,引擎出了會返回相關的結果,還會返回相關的廣告。這是大多數搜索引擎的盈利模式。準確地預測關稿的點擊率,并以此作為關稿排序指標之一,是非常重要的工作。

某條廣告預測點擊率可能用到的特征:搜索詞,廣告關鍵詞,標題,落地頁(不懂),匹配類型,歷史點擊率,另一個CTR模型預估的點擊率,廣告投放計劃,曝光/點擊樣例(不懂

Deep Crossing 主要包括4層,用來解決-原始特征稀疏、特征自動交叉、輸出層特征優化三個問題。

  1. Embedding-全連接聚合稀疏特征(第四章詳細討論Embedding技術)類別特征-onehot 編碼,數值型特征都不需要Embedding.
  2. Stack層-直接拼接不同類型Embedding特征
  3. Multiple Residual Units層 – 殘差網絡實現特征各個維度的充分交叉
  4. Scoring層 – 邏輯回歸預測CTR

3. NeuralCF-2016

(新加坡國立大學)
NeuralCF - 廣義矩陣分解模型-將矩陣分解后的用戶向量和物品向量 通過 互操作層相互作用后 得出用戶對物品的評分。

  1. 互操作1–原始矩陣分解,使用內積,太簡單,模型擬合能力不足。
  2. 互操作2–用戶向量和物品向量拼接后輸入全連接網絡
  3. 互操作3–用戶向量和物品向量(維度對齊)逐元素積

優點:靈活組合不同的 互操作層 特征,按需增加或者減少模型復雜度

局限性:基于協同過濾的思想構造,沒有更多的引入其他類型的特征。所提供的互操作就兩種,更多的方式需要后來者進行更深入的研究。

4. PNN-2016

上海交通大學–加強特征交叉能力–多組特征的之間的交叉(NeuralCF只有用戶向量和物品向量)
PNN創新點–使用了乘積層代替了Deepcross中的stack 層,就是說不同特征的Embedding向量不再是簡單的拼接,而是用Product操作進行兩兩交互。

Product層包括線形操作部分和乘積操作部分。

  1. 線操作部分–對embedding向量進行線形拼接
  2. 乘積操作部分包括:內積操作和外積操作(不同的embedding兩兩組合)
    a). 內積操作–沒啥特殊
    b). 外積操作–將所有特征兩兩外積矩陣疊加,形成疊加外積互操作矩陣:p=fΣfΣTp=f_{\Sigma}f^T_{\Sigma}p=fΣ?fΣT?

疊加外積互操作矩陣的缺陷–等價于讓所有的emdedding過一個平均池化,再作內積。不在同一個向量空間的特征向量(年齡,地域)相加,會造成信息模糊。

5. Wide&Deep-2016

google–google play推薦團隊–單層Wide和多層Deep組合形成混合模型,綜合利用記憶能力和泛化能力。

記憶能力:模型直接學習并利用歷史數據中物品或者特征的“共現頻率”的能力。
強組合特征:如果點擊過A,就推薦B。協同過濾和邏輯回歸很容易發現這種聯系。例如通過加大A的特征權重,這樣就實現了對這個特征的直接記憶。

泛化能力:模型發掘稀疏甚至稀有特征與最終標簽相關性的能力。
矩陣分解比協同過濾泛化能力強,就是因為矩陣分解引入了隱向量,使得數據稀少的用戶或者物品也能生成隱向量,從而獲得有數據支撐的推薦得分。(非常典型的將全局數據傳遞到稀疏物品上,提高了泛化能力)

Wide&Deep 模型結構: 單層Wide和多層Deep的輸出拼接后直接輸入到輸出層。
(在具體特征工程和輸入層設計中,展現了Google PLay推薦團隊對業務場景的深刻理解)

  1. 單層Wide特征:已安裝應用(用戶歷史行為)、曝光應用(當前的待推薦應用)
  2. 多層Deep特征:全量特征–用戶年齡、安裝應用數量、參與會話數量、用戶人口屬性特征、設備類型、已安裝應用、曝光應用

Wide特征交叉操作–交叉積變化(解釋完反而懵了)–多個特征向量的同一維度都為1,輸出向量該維度才為1?

Deep&Wide模型的最主要共現–模型融合的魅力。

6. Deep&Cross-2017

斯坦福+google聯合-在Wide&Deep的基礎上,優化Wide部分,變為Cross網絡。

Cross網絡的目的–增加特征之間的交互力度,多層交叉層。(每一層均保留了輸入向量)
xl+1=x0xlTWl+bl+xlx_{l+1}=x_0x_l^TW_l+b_l+x_lxl+1?=x0?xlT?Wl?+bl?+xl?

7.FM+深度學習

7.1 FNN-2016

倫敦大學
改進點:DeepCross模型中embedding層的權重用FM模型訓練出的權重向量進行初始化
問題緣起:embedding層采用隨機初始化,收斂非常慢。主要原因有二

  1. 參數占整個網絡的比重非常大
  2. 輸入向量過于稀疏,只有與非零特征相連的Embedding層權重會被更新

7.2 DeepFM-2017

哈工大+華為公司
改進點:用FM代替Deep&wide中的wide,提高特征交叉能力
FM部分和Deep 部分共享稠密的embedding層。

7.3 NFM-2017

新加坡國立大學
改進點:在Deep&wide模型中的deep 部分增加了特征交叉池化層
特征交叉池化層:所有稠密embedding 兩兩數量積之后求和,輸入到后續的深層網絡中。

改進點的另一種看法:FM中的二階交叉部分采用神經網絡來擬合。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444692.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444692.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444692.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于在安裝caffe2環境中遇到的坑整理(歡迎入坑討論)

1.ImportError: cannot import name caffe2_pb2 測試caffe2的pytorch環境是否正常的時候使用 root@lxsj-ThinkStation:~/pytorch# python Python 2.7.12 (default, Dec 4 2017, 14:50:18) [GCC 5.4.0 20160609] on linux2 Type "help", "copyright", &…

leetcode172. 階乘后的零 最快算法

給定一個整數 n,返回 n! 結果尾數中零的數量。 示例 1: 輸入: 3 輸出: 0 解釋: 3! 6, 尾數中沒有零。 示例 2: 輸入: 5 輸出: 1 解釋: 5! 120, 尾數中有 1 個零. 說明: 你算法的時間復雜度應為 O(log n) 。 思路:102*5,而因數中2一定比…

Win10 連接 Ubuntu16.04.3(通過Xdrp連接xfce4界面)

Win10 連接 Ubuntu16.04.3(通過Xdrp連接xfce4界面) sudo apt-get install xrdp sudo apt-get install vnc4server sudo apt-get install xubuntu-desktop echo "xfce4-session" >~/.xsession sudo apt-get install dconf editor sudo dconf editor(或者在搜索…

Linux(17)-

Make編譯機制,Configure

聽說你還在糾結自己沒訪問量?成不了“博客專家”?

一、提高瀏覽量的技巧 相信很多人都這么想過:“我文章寫的這么好,怎么就沒人看呢?”; 或者這樣想過:“這文章寫得明明比我爛很多,憑什么這么多瀏覽量?”; 雖然在我看來這是極其嚴…

推薦系統(6)-注意力機制+深度推薦模型、強化學習推薦系統

注意力機制深度推薦模型、強化學習推薦系統1.AFM -20172.DIN-20173.DIEN-20194. DRN-20181.AFM -2017 Attention factorization machines–浙江大學–基于模型結構的改進 引入注意力機制FM, 可視為NFM模型的改進。給特征交叉池化后的特征向量施加不同的注意力權重。…

Caffe安裝的坑整理

怎么說了,入了深度學習的坑,就要踩一踩才算你入門,這里我整理了我在安裝學習caffe自己遇到的坑: 1.Caffe-GPU編譯問題:nvcc fatal : Unsupported gpu architecture compute_20 仔細查看了一下 Makefile.config 中 CUDA_ARCH 設置未按規定設置: # CUDA architecture se…

leetcode74. 搜索二維矩陣 ,你見過嗎

編寫一個高效的算法來判斷 m x n 矩陣中,是否存在一個目標值。該矩陣具有如下特性: 每行中的整數從左到右按升序排列。 每行的第一個整數大于前一行的最后一個整數。 示例 1: 輸入: matrix [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34,…

pytorch學習 入門篇(一)

PyTorch 是什么? 它是一個基于 Python 的科學計算包, 其主要是為了解決兩類場景: NumPy 的替代品, 以使用 GPU 的強大加速功能一個深度學習研究平臺, 提供最大的靈活性和速度Tensors(張量) Tensors 與 NumPy 的 ndarrays 非常相似, 除此之外還可以在 GPU 上使用張量來加速…

關系數據庫——范式/反范式的利弊權衡和建議

范式(避免數據冗余和操作異常) 函數依賴 A->B A和B是兩個屬性集,來自同一關系模式,對于同樣的A屬性值,B屬性值也相同 平凡的函數依賴 X->Y,如果Y是X的子集 非平凡的函數依賴 X->Y&#xff…

pytorch學習入門 (二) Variable(變量)

Variable(變量) autograd.Variable 是包的核心類. 它包裝了張量, 并且支持幾乎所有的操作. 一旦你完成了你的計算, 你就可以調用 .backward() 方法, 然后所有的梯度計算會自動進行. 你還可以通過 .data 屬性來訪問原始的張量, 而關于該 variable&#…

Linux(x)-

Ubuntu裝機后的基礎應用

pytorch入門學習(三) 神經網絡

神經網絡可以使用 torch.nn 包構建. autograd 實現了反向傳播功能, 但是直接用來寫深度學習的代碼在很多情況下還是稍顯復雜,torch.nn 是專門為神經網絡設計的模塊化接口. nn 構建于 Autograd 之上, 可用來定義和運行神經網絡. nn.Module 是 nn 中最重要的類, 可把它看成是一個…

leetcode1033. 移動石子直到連續

三枚石子放置在數軸上&#xff0c;位置分別為 a&#xff0c;b&#xff0c;c。 每一回合&#xff0c;我們假設這三枚石子當前分別位于位置 x, y, z 且 x < y < z。從位置 x 或者是位置 z 拿起一枚石子&#xff0c;并將該石子移動到某一整數位置 k 處&#xff0c;其中 x &…

pytorch學習 訓練一個分類器(五)

訓練一個分類器 就是這個, 你已經看到了如何定義神經網絡, 計算損失并更新網絡的權重. 現在你可能會想, 數據呢? 一般來說, 當你不得不處理圖像, 文本, 音頻或者視頻數據時, 你可以使用標準的 Python 包將數據加載到一個 numpy 數組中. 然后你可以將這個數組轉換成一個 to…

Git(6)-Git配置文件、底層操作命令

Git基本命令1. 常用(迷糊)命令-冷知識2. git 配置2.1 設置 配置文件2.2 查看 配置文件--git config -l2.3 移除 配置文件設置--unset2.3 命令別名 --alias3.git 對象 &#xff08;git底層操作命令&#xff09;3.1 初始化一個版本庫3.2 新建一個簡單的blob 對象3.3 基于散列值查…

【軟考中級】網絡工程師:8.網絡安全

本章考察內容比較廣泛&#xff0c;考題對知識點都會有所涉及。 8.1 網絡安全的基本概念 8.1.1 網絡安全威脅的類型 竊聽 這種情況發生在廣播式網絡系統中&#xff0c;每個節點都可以讀取數據&#xff0c;實現搭線竊聽、安裝通信監視器和讀取網上的信息等。 假冒 當一個實體…

leetcode9 回文數

判斷一個整數是否是回文數。回文數是指正序&#xff08;從左向右&#xff09;和倒序&#xff08;從右向左&#xff09;讀都是一樣的整數。 示例 1: 輸入: 121 輸出: true 示例 2: 輸入: -121 輸出: false 解釋: 從左向右讀, 為 -121 。 從右向左讀, 為 121- 。因此它不是一個…

caffe各層參數詳解

在prototxt文件中,層都是用layer{}的結構表示,而里面包含的層的參數可以在caffe.proto文件中找到,比如說Data類型的結構由message DataParameter所定義,Convolution類型的結構由message ConvolutionParameter所定義。 具體說明下: name表示該層的名稱type表示該層的類型,…

caffe網絡結構圖繪制

繪制網絡圖通常有兩種方法&#xff1a; 一種是利用python自帶的draw_net.py&#xff0c;首先安裝兩個庫&#xff1a; sudo apt-get install graphviz sudo pip install pydot 接下來就可以用python自帶的draw_net.py文件來繪制網絡圖了。 draw_net.py執行時帶三個參數&…