本文論文題目:《CFGAN: A Generic Collaborative Filtering Framework based on Generative Adversarial Networks》
本文論文下載地址:https://dl.acm.org/citation.cfm?doid=3269206.3271743
1、背景
使用GAN來進行推薦,之前已經(jīng)有過IRGAN和GraphGAN的方法。
關(guān)于IRGAN,可以參考文章:http://www.itdecent.cn/p/d151b52e57f9
對于GraphGAN,論文本身針對于鏈接預(yù)測問題,可以擴展到推薦系統(tǒng)中,其最主要的貢獻在于將圖表示成寬度優(yōu)先的樹,并提出了graph softmax的方法,感興趣的同學(xué)可以閱讀下原文:https://arxiv.org/abs/1711.08267
但是這兩種方法都存在discrete item index generation的問題。我們首先來解釋一下,什么是discrete item index generation。
discrete item index generation
對于IRGAN和GraphGAN來說,生成器G是基于概率,生成一個單獨的項目ID或者ID列表,并通過強化學(xué)習(xí)中策略梯度的方式進行訓(xùn)練。在判別器的“指導(dǎo)”下,隨著訓(xùn)練的進行,生成器G將生成與真實情況完全相同的項目ID。但是,這對判別器來說并不友好,同一個物品,它有可能既被標記為真實數(shù)據(jù)(real),又被標記為生成數(shù)據(jù)(fake),如下圖的i3:

這樣如果將其送進判別器進行判別,判別器將會產(chǎn)生困惑,使得判別器性能下降,之后在策略梯度迭代的過程中,判別器將向生成器提供錯誤的信號,自己的性能也開始降低。下面的實驗結(jié)果展示了這一點:


現(xiàn)象如圖所示:在初始的幾次迭代過程中,判別器與生成器的性能都逐漸提升,但隨著實驗的進行,判別器的性能突然降低,產(chǎn)生這樣的原因便是同一物品被標記為不同類別的情況。在這種情況下,G和D之間的競爭過程也失去了原本的意義,推薦效果也存在局限。
2、模型框架
針對上面的問題,作者從原始的GAN出發(fā)。提出了一種vector-wise的訓(xùn)練方式。
我們都知道,最開始的GAN是用于圖像生成的,G生成的是圖像的向量,D直接判斷這些向量是否是真實的圖片。當(dāng)G生成的是向量時,該向量可能非常與真實向量所接近,但與真實向量一模一樣的概率卻非常小,因此D被迷惑的概率也是非常小的。
在CFGAN中,G生成的是向量是什么呢?這里我們稱其為購買向量purchase vector。這個也很好理解,假設(shè)我們有基于隱式反饋得到的用戶-物品購買矩陣,那么從用戶角度來說,購買向量便是矩陣中的一行,若用戶與物品有過購買(其實不一定是購買,也可以認為是有過交互,不過本文統(tǒng)一認為為1的地方是用戶對物品有過購買行為),該位置為1,如果沒有購買,該位置是空(不是0),從物品角度來說,購買向量便是矩陣中的一列,若物品被用戶購買過,該位置為1,如果沒有購買過,該位置是空(不是0)。
因此,下面我們首先介紹從用戶角度出發(fā)的CFGAN模型的設(shè)計,然后可以遷移到從物品角度出發(fā)的CFGAN框架。
2.1 整體框架
CFGAN的整體框架如下:

生成器G的設(shè)計
生成器的輸入包含兩部分,一是用戶向量c,另一個是噪聲向量z。經(jīng)過生成器的多層神經(jīng)網(wǎng)絡(luò)后,輸出用戶購買向量。向量中每一個值代表用戶與物品交互的概率。非常巧妙的是,這里對輸出的購買向量增加了一個mask。即圖中下面的部分:

mask向量eu中,用戶交互過的地方為1,沒有交互過的地方為0,為什么要加入mask呢?首先,為0的地方并不代表用戶不喜歡,其次,用戶沒有購買過的物品,在乘上0之后,其實是訓(xùn)練的時候丟掉了這些節(jié)點,因為乘上0之后,梯度永遠為0,是不會反向傳播回去的;同時,如果把真實購買向量對應(yīng)位置設(shè)置為0的話,判別器在這些地方也是沒有損失的。這與傳統(tǒng)的矩陣分解方法是非常類似的,即用用戶購買過的地方去訓(xùn)練,隨后預(yù)測用戶對未購買過的物品的評分。
判別器D的設(shè)計
判別器將用戶真實的購買向量和G生成的購買向量進行混合,盡可能地將真實向量識別成real,將生成的向量識別成fake。這里同樣需要輸入用戶向量c。
模型訓(xùn)練
生成器的損失函數(shù)為:

判別器的損失函數(shù)為:

2.2 框架改進
ok,你是否覺得上述的模型講的很有道理,近乎完美了呢?答案是否定的。咱想想看,如果生成器想要騙過判別器,非常簡單就可以做到。因為沒有交互過的物品經(jīng)過mask之后會變成0,那么生成器只要生成全1的向量不就可以了嘛。所以說,只用用戶購買過的物品,是不夠的,還得通過負采樣的技術(shù),增加一定的負樣本。即在每次訓(xùn)練迭代過程中,我們隨機選擇每個用戶的未購買過物品的一部分,將其假設(shè)為負樣本, 然后在訓(xùn)練生成器生成購買向量的時候,使其對應(yīng)的負樣本的值接近0。那么如何結(jié)合負采樣技術(shù),論文中提出了三種方式:zero- reconstruction regularization (named CFGAN?ZR)、partial-masking (named CFGAN?PM)、hybrid of the two (named CFGAN?ZP)。接下來,我們分別介紹三種方式:
CFGAN?ZR
ZR的方式,就是通過負采樣得到一定比例的負樣本,對于這些負樣本,我們希望預(yù)測的分數(shù)越接近于0越好。此時G的優(yōu)化目標變?yōu)椋?/p>

可以看到,對于ZR方式,前面部分的損失函數(shù)是沒有變動的,即我們沒有對mask進行修改。后面相當(dāng)于增加了一個正則項,避免全1的結(jié)果出現(xiàn)。
CFGAN?PM
PM的方式,就是對mask進行修改,放開一些用戶沒有購買過的物品,這樣,D在計算損失的時候會把這部分為交互過的部分加入,同時可以反向傳播回G中,因此G不僅學(xué)習(xí)到在用戶在購買過的物品上要得到接近1的輸出,還會學(xué)習(xí)到在沒有購買過的部分物品上要得到接近0的輸出。此時G和D的損失函數(shù)變?yōu)椋?/p>

CFGAN?ZP
ZP的方式便是上面兩種方式的結(jié)合,G的損失函數(shù)變?yōu)椋?/p>

完整的CFGAN-ZP的過程如下:

2.3 遷移到物品角度
遷移到物品角度,非常簡單,G的生成目標變?yōu)樯晌锲返馁徺I向量,D的目標變?yōu)榕袆e物品的真實購買向量和G生成的物品購買向量。結(jié)合負采樣的話,同樣分為ZR、PM和ZP三種方法。
這樣,我們其實一共得到了六種方法,從用戶角度出發(fā),我們有uCFGAN_ZR,uCFGAN_PM,uCFGAN_ZP,從物品角度出發(fā),我們有iCFGAN_ZR,iCFGAN_PM,iCFGAN_ZP。后面我們將對比這六種方法的實驗效果。
3、模型實驗
模型實驗主要關(guān)注于三個問題:
1)CFGAN模型應(yīng)用于推薦任務(wù),效果如何?
2)CFGAN模型使用時,最佳的參數(shù)設(shè)置為多少?
3)與目前state-of-the-art方法比較,CFGAN能夠帶來多大的提升?
實驗選取的數(shù)據(jù)集包括以下四個:

接下來,我們看下結(jié)果。
3.1 模型的有效性
該部分的實驗效果如下:

對比我們之前看到的IRGAN和GraphGAN的效果,CFGAN相較于IRGAN準確率提升了72.6%,較GraphGAN提升了104.3%。
3.2 超參數(shù)設(shè)置對于模型的影響
這里主要的超參數(shù)包括ZR和PM方式中,負樣本的比例,以及ZR方式中,正則項系數(shù)α。結(jié)果如下:

3.3 與目前主流推薦方法的比較
這里選取的推薦方法有ItemPop、BPR、FISM、CDAE、IRGAN和GraphGAN。而CFGAN選擇iCFGAN?ZP方式。對比結(jié)果如下:

可以看到,CFGAN在各個數(shù)據(jù)集上,都有明顯的效果提升。
4、總結(jié)
本文介紹了一種通過GAN來進行推薦任務(wù)的新思路,與之前結(jié)合強化學(xué)習(xí)的思路如IRGAN和GraphGAN不同,CFGAN更接近于GAN模型,G生成的是用戶或者物品的購買向量,D的梯度可以反向傳播回給G。該方法解決了IRGAN和GraphGAN中存在的discrete item index generation問題,取得了非常好的實驗效果。值得大家閱讀!