【推荐系统】变分自编码器(VAEs)在推荐系统中的应用
「本文概覽」
今天給大家介紹一篇VAEs用于推薦系統召回側的文章,論文題目為《Variational Autoencoders for Collaborative Filtering》。VAEs (Variational Autoencoders 變分自編碼器) 是一類基于變分推斷和 Encoder-Decoder 結構的生成式模型。這一類模型具有較強的表征能力,其 latent space 的性質也讓 VAEs 在很多下游任務中有較好的應用。本文是VAEs模型在協同過濾中的使用,非線性的概率模型大大提升生了模型的表征能力。
引用:Liang D, Krishnan R G, Hoffman M D, et al. Variational autoencoders for collaborative filtering[C]//Proceedings of the 2018 world wide web conference. 2018: 689-698.
論文下載地址:https://dl.acm.org/doi/pdf/10.1145/3178876.3186150
論文源碼:https://github.com/dawenl/vae_cf
1. 背景知識
1.1 AutoEncoder(AE)
如下圖所示,AutoEncoder框架包含兩大模塊:編碼過程和解碼過程。通過 encoder(g) 將輸入樣本 映射到特征空間 ,即編碼過程;然后再通過 decoder(f) 將抽象特征 映射回原始空間得到重構樣本 ,即解碼過程。優化目標則是通過最小化重構誤差來同時優化encoder和decoder,從而學習得到針對輸入樣本 的抽象特征表示 。
這里我們可以看到,AutoEncoder在優化過程中無需使用樣本的label,本質上是把樣本的輸入同時作為神經網絡的輸入和輸出,通過最小化重構誤差希望學習到樣本的抽象特征表示 。這種無監督的優化方式大大提升了模型的通用性。
對于基于神經網絡的AutoEncoder模型來說,則是encoder部分通過逐層降低神經元個數來對數據進行壓縮;decoder部分基于數據的抽象表示逐層提升神經元數量,最終實現對輸入樣本的重構。
這里值得注意的是,由于AutoEncoder通過神經網絡來學習每個樣本的唯一抽象表示,這會帶來一個問題:當神經網絡的參數復雜到一定程度時AutoEncoder很容易存在過擬合的風險。
1.2 Denoising AutoEncoder(DAE)
為了緩解經典AutoEncoder容易過擬合的問題,一個辦法是在輸入中加入隨機噪聲,Vincent等人提出了Denoising AutoEncoder,即在傳統AutoEncoder輸入層加入隨機噪聲來增強模型的魯棒性;另一個辦法就是結合正則化思想,Rifai等人提出了Contractive AutoEncoder,通過在AutoEncoder目標函數中加上Encoder的Jacobian矩陣范式來約束使得Encoder能夠學到具有抗干擾的抽象特征。
下圖是Denoising AutoEncoder的模型框架。目前添加噪聲的方式大多分為兩種:
添加服從特定分布的隨機噪聲;
隨機將輸入 中特定比例的數值置為0;
DAE模型的優勢:
通過與非破損數據訓練的對比,破損數據訓練出來的Weight噪聲較小。因為擦除數據的時候不小心把輸入噪聲給擦掉了。
破損數據一定程度上減輕了訓練數據與測試數據的代溝。由于數據的部分被擦掉了,因而這破損數據一定程度上比較接近測試數據。
1.3 簡介Variational Autoencoders(VAEs)
變分自編碼器是自動編碼器的升級版本,其結構跟自動編碼器是類似的,也由編碼器和解碼器構成。
在自動編碼器中,我們需要輸入一張圖片,然后將一張圖片編碼之后得到一個隱含向量,這個隱含向量比我們隨機取一個隨機噪聲更好,因為它包含著原圖片的信息,然后我們把隱含向量解碼得到與原圖片對應的照片。
但是這樣我們并不能任意生成圖片,因為沒有辦法自己去構造隱含向量,需要通過一張圖片輸入編碼,才知道得到的隱含向量是什么。這時我們就可以通過變分自編碼器來解決這個問題。
其實原理特別簡單,只需要在編碼的過程中給它增加一些限制,迫使其生成的隱含向量能夠粗略的遵循一個標準正態分布,這就是其與一般的自動編碼器最大的不同。
這樣我們生成一張新圖片就很簡單了,只需要給它一個標準正態分布的隨機隱含向量,這樣通過解碼器就能夠生成我們想要的圖片,而不需要給它一張原始圖片先編碼。
在實際情況中,我們需要在模型的準確率上與隱含向量服從標準正態分布之間做一個權衡。所謂模型的準確率就是指解碼器生成的圖片與原圖片的相似程度。另外要衡量兩種分布的相似程度,有一個東西叫KL divergence來衡量兩種分布的相似程度,這里我們就是用KL divergence來表示隱含向量與標準正態分布之間差異的loss。我們讓網絡自己來做決定如何權衡,非常簡單,我們只需要將這兩者分別作為loss,然后再將它們求和作為總的loss,這樣網絡就能夠自己選擇如何才能夠使得這個總的loss下降。
KL divergence 的公式如下:
這里變分自編碼器使用了一個技巧 「“重新參數化(reparameterization)”」 來解決KL divergence的計算問題。
這時不再是每次產生一個隱含向量,而是生成兩個向量,一個表示均值 ,一個表示標準差 ,然后通過這兩個統計量來合成隱含向量 ,這也非常簡單,用一個標準正態分布 先乘上標準差再加上均值就行了,這里我們默認編碼之后的隱含向量是服從一個正態分布的。這個時候我們是想讓均值盡可能接近0,標準差盡可能接近1。
VAE通過Encoder學習出均值向量和方差向量(貝葉斯估計)。同時隨機采樣一個正態分布的向量 。通過 公式重采樣得到 (Sampled Latent Vector),它描述的是一個潛在多元正態分布(非高斯)的均值和標準差,這個正態分布就是用來生成VAE所訓練的數據。最后通過Decoder進行重建。損失函數是Decoder后的輸出與初始輸入的差異,以及學習后的潛在分布和先驗分布之間的KL散度作為正則化, σ 的重參數技巧。
「【強烈推薦閱讀】」
關于VAE的理論推導有點晦澀難懂,推薦大家觀看學習李宏毅老師的教程視頻。
關于李宏毅老師講解的VAE視頻Part1地址:https://www.youtube.com/watch?v=YNUek8ioAJk&ab_channel=Hung-yiLee
關于李宏毅老師講解的VAE視頻Part2地址:https://www.youtube.com/watch?v=8zomhgKrsmQ&ab_channel=Hung-yiLee
李宏毅老師講解slides地址:http://speech.ee.ntu.edu.tw/~tlkagk/courses/ML_2017/Lecture/GAN%20(v3).pdf
2. VAEs模型理論介紹
近年的工作,如《Neural collaborative filtering》、《Autorec: Autoencoders meet collaborative filtering》等將神經網絡應用于協同過濾并取得了理想的結果。該論文將變分自編碼器(Variational Autoencoders,VAEs)擴展到協同過濾。下面我們詳細介紹一下VAEs模型的原理。
這一部分主要是介紹了變分自編碼器 (VAEs) 的理論基礎,以下部分內容參考了變分自編碼器 (VAE) Overview - Zhifeng的文章 - 知乎 https://zhuanlan.zhihu.com/p/420419446
2.1 MLE、MAP、Bayesian
首先要明確這三個概念。
MLE是極大似然估計Maximum Likelihood Estimation。其目標為求解:
MAP是最大后驗概率Maximum A Posteriori Estimation。其目標是求解:
這兩者的區別就是在于求解最優參數時,有沒有加入先驗知識 。也就是MAP融入了要估計量 θ 的先驗分布在其中,因此MAP可以看做規則化的MLE。這也就解釋了,為什么MLE比MAP更容易過擬合。因為MLE在求解最優 θ 時,沒有對 θ 有先驗的指導,因此 中包括了一些 的數據樣本時,就會很輕易讓MLE去擬合 樣本。而MAP加入了對 θ 的先驗指導,例如L2正則化,那么就不易過擬合了。
舉個例子,同樣的邏輯回歸。
未正則化的邏輯回歸就是MLE。
正則化的邏輯回歸就是MAP。
那么,與上述兩個概念都不同的是貝葉斯模型(Bayesian Network),也被稱為概率圖模型。這里不是指樸素貝葉斯。而是說下面的這種學習思路。
MLE和MAP求解的都是一個最優的 θ 值,在預測時只有最優的 θ 參與預測過程。貝葉斯模型求解的是 θ 的后驗分布 θ,而不是最大化的后驗分布。因此貝葉斯模型在某種程度上可以看作是一個集成模型,在預測時,讓所有 θ 都參與預測,并將預測結果「以后驗概率 θ 作為權重進行加和作為最終預測值」。
2.2 從 MLE 到變分推斷
假設數據的真實分布為 。為了訓練一個生成模型,我們往往通過神經網絡 構造一個復雜分布 (解碼器) , 并最大化數據的 likelihood, 也就是:
但是,實際復雜的神經網絡往往在數據空間進行變換,因此 沒有顯示的密度,直接優化 MLE 問題是不可行的。變分推斷 (variational inference) 便是解決上述問題的有力工具。首先,我們引入一個新的變量稱為 latent distribution (下文簡寫為 , 其維度遠小于數據的維度)。接下來,我們定義另一個分布 , 其可以是任意的分布。由于:
我們可以將 MLE 的優化問題寫成
根據 Jensen's inequality, 我們將 和 位置交換,即:
上式即為經驗下界 (evidence lower bound, or ELBO)。最后,由于 可以是任意的,我們能夠用一個神經網絡 去逼近使得 ELBO 最大的 , 即:
其中,可以看作VAEs模型的編碼器。
由于取 的過程類似于數學中的變分法(在泛函空間中取極值),因此該方法被稱為變分推斷。
2.3 VAEs網絡結構
VAEs的網絡結構和 AutoEncoder(AE)一樣,由兩個網絡構成,分別是 Encoder 和 Decoder 。非常自然地, 對應上述 , 而 對應上述 。VAEs只是在 AE 的基礎上用了變分推斷,這也是其名字的由來。下圖是一個簡單的VAEs示意圖,實際情況中網絡結構可能更加復雜。藍色分別為輸入和輸出,綠色為 Encoder / Decoder 的中間層,紅色為 Encoder 的輸出,一般是一個維度很低的向量 (僅限于早期簡單的 VAE),它有不同的名字,比如 code、latent representation、latent vector、embedding或者 bottleneck。
2.4 VAEs與AE的關系
最原始的 AE 的目標函數是:
其被稱為 reconstruction error, 其目的便是希望 近似于恒等變換,但是 的輸出維度非常小 (可以用矩陣分解 SVD 或者 NMF 來類比)。這看上去與 VAEs 的目標函數完全不同,但實際上有很強的聯系。
我們從 VAEs 的 reparameterization 講起。由于直接定義 和 是不現實的,我們假設這兩個分布都是 Gaussian. 我們可以進一步簡化,假定 covariance matrix 都是對角矩陣。那么,VAEs 中的 和 只需要輸出 Gaussian distribution 的 mean () 和 covariance matrix () 的對角線即可。在這種情況下, 和 的表達形式都十分簡單。我們將 ELBO 的第一項寫開:
由于 , 我們有 , 其中 , 就是用一個標準正態分布先乘上標準差再加上均值。當我們假定 且 很小的時候,上式與 AE 的目標函數其實非常類似。而 ELBO 的第二項則可以被視為 regularization term, 使得 與 latent distribution 接近。因此,VAEs 的 ELBO 目標函數常常被理解為 reconstruction error + regularization, 或者說在 AE 的基礎上增加了 regularization.
2.5 Beta-VAE
Beta-VAE 是 VAEs 的簡單推廣,但十分有效。我們剛剛提到 VAEs 在 AE 的基礎上增加了 regularization 從而得到更好的效果,那么我們可以直接增加一個 regularization factor 進一步提升效果:
= 1 便對應的是原始 VAEs。在實際任務中,我們只需要把 當作 hyper-parameter 進行 fine tune 即可。人們也發現,當 = 2,4,8 的時候效果一般會更好一些,尤其是生成的樣本邊緣更清晰 (sharp)。
當然,我們可以從另一個角度理解 -VAE. 我們從 AE 出發,優化 likelihood:
但同時 regularize term:
將上述優化問題轉化為 Lagrangian multiplier, 我們有
舍棄最后的 項,我們便得到了 -VAE 的目標函數。
3. 模型衡量指標
3.1 推薦系統的Recall@k
預召回的個樣本中命中正樣本數目正樣本數
因為是離線計算的指標,所以計算的時候用模型計算召回topk,看有多少個被用戶真實點擊了,就是表示命中用戶喜歡樣本的比值。
那么這個 設置怎樣比較好呢?其實各有各的好處,比如5–500可能都有,一般會小的大的都看。如果 比較小,比如recall@5能代表模型的精確度,含義是在召回的top5中命中正樣本的概率,如果明顯精確度提高了,那么這個指標會提升。如果 比較大,比如recall@500能代表模型的整體效果,可能這個召回渠道線上每次拉取的都是一個比較大的結果,那么在這個大的結果中只要能夠命中,都有可能最終被精排模型排出去,所以能代表模型整體召回效果。
「思考這個問題:Recall@k和線上指標是否是正相關的呢?」
從理論角度分析,假設只有這一個召回渠道,那么指標就是完全正相關的。但是線上正常情況不會這么簡單,可能會有多個召回渠道,當前召回要經過粗排,最終進入到精排模型里面的數目是不確定的,所以如果離線指標recall@k從0~線上最大召回都是有提升的,那么就一定是正相關的,所以可以分區間多算幾個看,比如recall@5,recall@10,recall@50,recall@100,recall@500。
3.2 NDCG@K
歸一化折損累計增益(Normalization discounted cumulative gain)常用于排序任務,NDCG考慮到排序列表中每個item的評分大小。
「(1)CG@k」
CG(cumulative gain)累計增益,可用于評價基于評分的推薦系統,列表前 項的計算過程如下:
這里的 是用戶對第 個item的評分值。需注意的是CG的計算并沒有考慮列表中item的順序。
「(2)DCG@k」
DCG(discounted CG)折扣增益的計算引入了item順序的因素,列表前 項的計算過程如下:
不難發現,DCG結果的取值范圍為全體非負實數,僅給出一個DCG的值無法判斷推薦算法的效果。
「(3)NDCG@k」
NDCG將DCG的結果歸一化到 之間,且越接近于 ,算法的效果越好。NDCG的歸一化系數是IDCG,即理想的完美DCG。IDCG計算的是按照用戶評分從高到低排序的列表DCG值。
結果列表前 項NDCG的計算過程如下:
4. 關于VAEs的若干問題思考
4.1 AutoEncoder、DAE和VAE之間的區別與聯系?為什么會有VAE的出現?
由于AutoEncoder通過神經網絡來學習每個樣本的唯一抽象表示,這會帶來一個問題:當神經網絡的參數復雜到一定程度時AutoEncoder很容易存在過擬合的風險。為了緩解經典AutoEncoder容易過擬合的問題,在傳統AutoEncoder輸入層加入隨機噪聲來增強模型的魯棒性,即降噪自動編碼。相比于自編碼器,VAE更傾向于數據生成。只要訓練好了Decoder,我們就可以從某一個標準正態分布生成數據作為解碼器Decoder的輸入,來生成類似的、但不完全相同于訓練數據的新數據,也許是我們從來沒見過的數據,作用類似GAN。
4.2 VAE和GAN都是生成式模型,VAE與GAN的區別與聯系?
這個問題,網上有很多答案,這里我給一個知乎的討論帖子,里面有很多優秀的回答:
GAN 和 VAE 的本質區別是什么?為什么兩者總是同時被提起?- 知乎 https://www.zhihu.com/question/317623081
4.3 VAEs的后驗坍塌(Posterior Collapse)?GAN的模式坍塌(Mode Collapse)?
「(1)VAEs的后驗坍塌(Posterior Collapse)?」
涉及兩個網絡的模型訓練起來都不是很簡單, GAN 如此,VAE 亦如此。VAE 容易出現一種被稱為 posterior collapse 的問題,即 完全學不出來。這個問題至今也沒有完全被解決。有一個十分有意思的嘗試是基于 normalizing flow (NF) 的,即 是一個 NF 模型。由于 NF 能直接定義 density, 且表征能力至少比 Gaussian 好不少,因此基于 NF 的 VAE 效果會得到顯著提升。
「(2)GAN的模式坍塌(Mode Collapse)?」
Mode collapse 是指 GAN 生成的樣本單一,其認為滿足某一分布的結果為 true,其他為 False。
4.4 VAEs為什么在推薦的召回側效果好?
VAEs是生成式模型而不是Encode壓縮,保證了信息的完整性,Latent Vector是一個分布,而不是固定的,使得隱含空間在相似樣本上的差異更加平滑,從而提高模型的擬合能力,避免樣本細微的變化帶來的模型參數波動。
4.5 AUC是否能作為召回離線評估指標呢?
首先,AUC是代表模型的排序能力,因為在召回環節考慮所有推薦物品的順序沒有太大意義,所以不是一個好的評估指標。
其次,AUC高并不代表召回的好,因為我們往往采樣的負樣本都是easy的,這樣召回模型的AUC一般都是偏高的(auc=0.8+/0.9+都是有可能的)。實際上好的召回可能AUC低一些,但是會召回出更符合真實分布的內容,實際工作中AUC當作參考就好。
最后,召回模型AUC高也引出另一個召回的問題,就是如何挖掘hard負樣本,以提升模型對于邊界樣本的區分能力,挖掘出好的hard負樣本,也能減緩召回模型AUC過高的問題。
4.6 AUC和線上優化指標正相關嘛?
不相關。我們先從AUC的計算說起,計算AUC需要知道每個item的label和score,score決定了最終出去的順序,但是這里的順序只是召回環節的順序,而召回后面還有模型排序,甚至中間可能還有粗排,所以最終用戶看到的排序是精排模型的打分,和召回的分可能沒有關系,甚至可能是相反的。所以說AUC在這里意義不太大,「那么AUC是否可以作為一個參考指標呢?」
答案是依然意義不大,因為召回的目的是把用戶可能會喜歡的召回出來,最終順序反而不是重要的,因為這里的順序決定不了什么。反而召回結果中那些能進入到排序,以及推薦出去那些用戶點擊了的更重要。「那么有沒有可能AUC是可以作為參考的呢?」
當召回層模型和排序側使用相同的模型的時候,有參考價值,比如萬能的FM模型,假設召回和排序用相同的,那么召回側的順序和精排模型側排序是一樣的,這樣AUC就和線上指標完全相關了,可以作為離線評估效果指標。
5. 總結自編碼器在推薦場景上的應用
《AutoRec: Autoencoders Meet Collaborative Filtering》WWW 2015,較早采用自編碼器進行推薦的論文。
《Deep Collaborative Filtering via Marginalized Denoising Auto-encoder》 CIKM 2015,這篇論文是矩陣分解的DAE解法。
《Variational Autoencoders for Collaborative Filtering》WWW2018,詳細信息已在本篇文章進行了介紹,且該論文在工業界有落地應用。
《Collaborative Denoising Auto-Encoders for Top-N Recommender Systems》發表在 the ninth ACM international conference on web search and data mining 2016,本文的亮點是可以在輸入層加入用戶側的side information,該論文也在工業界有落地應用。
6. Reference
【1】變分自編碼器 (VAE) Overview - Zhifeng的文章 - 知乎 https://zhuanlan.zhihu.com/p/420419446
【2】BERT模型精講 - Microstrong的文章 - 知乎 https://zhuanlan.zhihu.com/p/150681502
【3】用于協同過濾的變分自編碼器論文引介 - 聽歌的小孩的文章 - 知乎 https://zhuanlan.zhihu.com/p/60330303
【4】基于自編碼器的推薦系統論文引介 - Richard Gaole的文章 - 知乎 https://zhuanlan.zhihu.com/p/36241871
【5】Comprehensive Introduction to Autoencoders,地址:https://towardsdatascience.com/generating-images-with-autoencoders-77fd3a8dd368
【6】變分自編碼器VAE:原來是這么一回事 | 附開源代碼 - PaperWeekly的文章 - 知乎 https://zhuanlan.zhihu.com/p/34998569
【7】召回離線評估指標問題記錄,地址:http://yougth.top/2020/10/15/%E5%8F%AC%E5%9B%9E%E7%A6%BB%E7%BA%BF%E8%AF%84%E4%BC%B0%E6%8C%87%E6%A0%87/
【8】推薦算法評價指標 - Noah的文章 - 知乎 https://zhuanlan.zhihu.com/p/359528909
【9】《變分自動編碼器在協同過濾中的使用》做推薦召回 《Variational Autoencoders for Collaborative Filtering 》,地址:https://blog.csdn.net/xiewenbo/article/details/103724357
【10】論文解讀:Variational Autoencoders for Collaborative Filtering.(WWW2018),地址:https://blog.csdn.net/yfreedomliTHU/article/details/92093649?
本站qq群554839127,加入微信群請掃碼:
總結
以上是生活随笔為你收集整理的【推荐系统】变分自编码器(VAEs)在推荐系统中的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器学习】一文深层解决模型过拟合
- 下一篇: PP视频如何查看上下集的快捷键