1、基礎(chǔ)知識(shí)
1.1 記憶能力
"記憶能力"可以被理解為模型直接學(xué)習(xí)并利用歷史數(shù)據(jù)中物品和特征的“共現(xiàn)頻率”的能力。“共現(xiàn)頻率”越高,組合特征的頻率就越大。
舉例
邏輯回歸:原始數(shù)據(jù)往往可以直接影響推薦結(jié)果
通過學(xué)習(xí)你的原始數(shù)據(jù),模型會(huì)知道哪些特征分配權(quán)重高,哪些特征分配的權(quán)重低最后的推薦結(jié)果,跟權(quán)重高的特征有很大關(guān)系形成了—種“重要特征”跟“推薦結(jié)果”的關(guān)聯(lián)比如“如果點(diǎn)擊A,就推薦B"相當(dāng)于模型直接記住了歷史數(shù)據(jù)的分布特點(diǎn),并利用這些記憶進(jìn)行推薦。
以谷歌APP推薦場(chǎng)景為例理解一下:
假設(shè)在Google Play推薦模型訓(xùn)練過程中, 設(shè)置如下組合特征AND:(user_installed_app=netflix,impression_app=pandora), 它代表了用戶安裝了netflix這款應(yīng)用, 而且曾在應(yīng)用商店中看到過pandora這款應(yīng)用。 如果以“最終是否安裝pandora”為標(biāo)簽,可以輕而易舉的統(tǒng)計(jì)netfilx&pandora這個(gè)特征與安裝pandora標(biāo)簽之間的共現(xiàn)頻率。 比如二者的共現(xiàn)頻率高達(dá)10%, 那么在設(shè)計(jì)模型的時(shí)候, 就希望模型只要發(fā)現(xiàn)這一特征,就推薦pandora這款應(yīng)用(像一個(gè)深刻記憶點(diǎn)一樣印在腦海), 這就是所謂的“記憶能力”。 像邏輯回歸這樣的模型, 發(fā)現(xiàn)這樣的強(qiáng)特征, 就會(huì)加大權(quán)重, 對(duì)這種特征直接記憶。
但是對(duì)于神經(jīng)網(wǎng)絡(luò)這樣的模型來(lái)說, 特征會(huì)被多層處理, 不斷與其他特征進(jìn)行交叉, 因此模型這個(gè)強(qiáng)特記憶反而沒有簡(jiǎn)單模型的深刻。
共現(xiàn)頻率高,--》組合特征與標(biāo)簽結(jié)果關(guān)聯(lián)大
例如:“組合特征(安裝過Netflix,曝光過Pandora)”跟“安裝Pandora”關(guān)聯(lián)十分大
簡(jiǎn)單理解:線性、權(quán)重分配
1.2 泛化能力
"泛化能力“可以被理解為模型傳遞特征的相關(guān)性, 以及發(fā)掘稀疏甚至從未出現(xiàn)過的稀有特征與最終標(biāo)簽相關(guān)性的能力。
舉例:比如矩陣分解, embedding等, 使得數(shù)據(jù)稀少的用戶或者物品也能生成隱向量, 從而獲得由數(shù)據(jù)支撐的推薦得分, 將全局?jǐn)?shù)據(jù)傳遞到了稀疏物品上, 提高泛化能力。再比如神經(jīng)網(wǎng)絡(luò), 通過特征自動(dòng)組合, 可以深度發(fā)掘數(shù)據(jù)中的潛在模式,提高泛化等。
說白了,泛化能力就是挖掘的過程,去挖掘你看不到、以及背后更深層次,更抽象的這些特征
簡(jiǎn)單理解:【隱向量】【特征組合】【特征交叉】
2、Wide&Deep提出動(dòng)機(jī)
2.1 提出動(dòng)機(jī)
在CTR預(yù)估任務(wù)中,使用線性模型仍非常廣泛。利用手工構(gòu)造的交叉組合特征來(lái)使線性模型具有“記憶性”,使模型記住共現(xiàn)頻率較高的特征組合,往往也能達(dá)到一個(gè)不錯(cuò)的效果,且可解釋性強(qiáng)。但這種方式有著較為明顯的缺點(diǎn):首先,特征工程需要耗費(fèi)太多精力。其次,因?yàn)槟P褪菑?qiáng)行記住這些組合特征的,所以對(duì)于未曾出現(xiàn)過的特征組合,權(quán)重系數(shù)為0,無(wú)法進(jìn)行泛化。
2.2 目標(biāo):
為了加強(qiáng)模型的泛化能力
2.3 初步研究:基于Embedding的方式
為了加強(qiáng)模型的泛化能力,研究者引入了DNN結(jié)構(gòu),將高維稀疏特征編碼為低維稠密的Embedding vector,這種基于Embedding的方式能夠有效提高模型的泛化能力。
【缺點(diǎn)】基于Embedding的方式可能因?yàn)閿?shù)據(jù)【長(zhǎng)尾分布】(頭部效應(yīng)),導(dǎo)致長(zhǎng)尾的一些特征值無(wú)法被充分學(xué)習(xí),其對(duì)應(yīng)的Embedding vector是不準(zhǔn)確的,這便會(huì)造成模型【泛化過度】
什么是長(zhǎng)尾分布呢?

例如:【亞馬遜是如何成功的?】他就是抓住了冷門的部分
所以說:如果有那么20%的人有一些特殊的癖好,他可能喜歡一些小眾的東西,因此在用Embedding的方式給他推薦的時(shí)候,給他推薦頭部效應(yīng)的時(shí)候(比較火爆的,比較熱門的東西)這些并不是它一定喜歡的
?Embedding的缺點(diǎn) VSlinear model
如果碰到了共現(xiàn)矩陣高度稀疏且高秩(比如user有特殊的愛好,或者item比較小眾),很難非常效率的學(xué)習(xí)出低維度的表示。這種情況下,大部分的query-item都沒有什么關(guān)系。但是dense embedding會(huì)導(dǎo)致幾乎所有的query-item預(yù)測(cè)值都是非0的,這就導(dǎo)致了推薦過度泛化,會(huì)推薦一些不那么相關(guān)的物品。
相反,簡(jiǎn)單的linear model卻可以通過cross-product transformation(特征組合)來(lái)記住這些exception rules(特殊的規(guī)則)。
2.4 進(jìn)一步研究
簡(jiǎn)單的模型,比如協(xié)同過濾,邏輯回歸等,能夠從歷史數(shù)據(jù)中【學(xué)習(xí)到高頻共現(xiàn)的特征組合】能力,但是【泛化能力不足】,只能學(xué)習(xí)已有特征跟組合特征,不能學(xué)習(xí)潛在的關(guān)聯(lián)模型。
而對(duì)于矩陣分解,embedding再加上深度學(xué)習(xí)網(wǎng)絡(luò)能夠利用相關(guān)性的傳遞性去【探索】歷史數(shù)據(jù)中【未出現(xiàn)的特征組合】,【挖掘】數(shù)據(jù)潛在的【關(guān)聯(lián)模式】,而且泛化能力強(qiáng),但對(duì)于某些特定的場(chǎng)景(數(shù)據(jù)分布長(zhǎng)尾,共現(xiàn)矩陣稀疏高秩)很難有效學(xué)習(xí)低緯度的表示,造成推薦的過渡泛化。
3、Wide&Deep模型的結(jié)構(gòu)原理
經(jīng)典的W&D的模型如下面中間的圖所示(左邊的是wide部分, 也就是一個(gè)簡(jiǎn)單的線性模型, 右邊是deep部分, 一個(gè)經(jīng)典的DNN模型)

3.1 Wide部分

對(duì)于wide部分訓(xùn)練時(shí)候使用的優(yōu)化器是帶正則的FTRL算法(Follow-the-regularized-leader),我們可以把FTRL當(dāng)作一個(gè)稀疏性很好,精度又不錯(cuò)的隨機(jī)梯度下降方法, 該算法是非常注重模型稀疏性質(zhì)的,也就是說W&D模型采用FTRL是想讓W(xué)ide部分變得更加的稀疏,即Wide部分的大部分參數(shù)都為0,這就大大壓縮了模型權(quán)重及特征向量的維度。Wide部分模型訓(xùn)練完之后留下來(lái)的特征都是非常重要的,那么模型的“記憶能力”就可以理解為發(fā)現(xiàn)"直接的",“暴力的”,“顯然的”關(guān)聯(lián)規(guī)則的能力。?
?例如, Google W&D期望wide部分發(fā)現(xiàn)這樣的規(guī)則:用戶安裝了應(yīng)用A,此時(shí)曝光應(yīng)用B,用戶安裝應(yīng)用B的概率大。 所以對(duì)于稀疏性的規(guī)則的考量, 和具體的業(yè)務(wù)場(chǎng)景有關(guān)。
3.2 Deep部分
該部分主要是一個(gè)Embedding+MLP的神經(jīng)網(wǎng)絡(luò)模型。大規(guī)模稀疏特征通過embedding轉(zhuǎn)化為低維密集型特征。然后特征進(jìn)行拼接輸入到MLP中,挖掘藏在特征背后的數(shù)據(jù)模式。

輸入的特征有兩類, 一類是數(shù)值型特征, 一類是類別型特征(會(huì)經(jīng)embedding)
4、Wide & Deep
W&D模型是將兩部分輸出的結(jié)果結(jié)合起來(lái)聯(lián)合訓(xùn)練,將deep和wide部分的輸出重新使用一個(gè)邏輯回歸模型做最終的預(yù)測(cè),輸出概率值。聯(lián)合訓(xùn)練的數(shù)學(xué)形式如下:

模型結(jié)構(gòu)

我們重點(diǎn)看看這兩部分的輸入特征:
1、Deep部分: 全量的特征向量, 包括用戶年齡(age), 已安裝應(yīng)用數(shù)量(#app installs), 設(shè)備類型(device class), 已安裝應(yīng)用(installed app), 曝光應(yīng)用impression app)等特征。 其中, 已安裝應(yīng)用, 曝光應(yīng)用等類別型特征, 需要經(jīng)過embedding層輸入連接層, 而數(shù)值型的特征和前面的特征拼接起來(lái)直接輸入連接層, 經(jīng)過3層的Relu全連接層。
2、Wide部分:輸入僅僅是已安裝應(yīng)用和曝光應(yīng)用兩類特征。 其中已安裝應(yīng)用代表用戶的歷史行為, 而曝光應(yīng)用代表當(dāng)前待推薦應(yīng)用。 選擇這兩部分是想發(fā)現(xiàn)當(dāng)前曝光APP和用戶已安裝APP之間的關(guān)聯(lián)關(guān)系, 以充分發(fā)揮Wide的記憶能力, 影響最終的得分。 這部分是L1正則化的FTRL優(yōu)化器, 可能是因?yàn)檫@兩個(gè)id類特征向量組合, 在維度爆炸的同時(shí), 會(huì)讓原本已經(jīng)非常稀疏的multihot特征向量變得更加稀疏。 因此采用FTRL過濾掉那些稀疏特征是非常好的工程經(jīng)驗(yàn)。
3、兩者結(jié)合: 最后將兩部分的特征再進(jìn)行一個(gè)拼接, 輸出到logistics Loss層進(jìn)行輸出。
工業(yè)上使用的經(jīng)驗(yàn):
1、像上面說的,這個(gè)模型的wide和deep端接收的特征是不一樣的, wide端一般會(huì)接收一些重要的交互特征,高維的稀疏離散特征; 而deep端接收的是一些連續(xù)特征
2、這兩端用的梯度下降的方式不一樣, wide段用的是那種帶有L1正則的那種方式,L1有特征選擇的作用, 注重稀疏性些; deep端用的就是普通的梯度下降方式
3、wide & deep是一種架構(gòu),不是說一定非得是這樣的形式, 具體要跟著具體業(yè)務(wù)來(lái), 還得進(jìn)行擴(kuò)展,比如某些特征,既不適合wide也不適合deep,而是適合FM,那就把這部分特征過一個(gè)FM【隱向量的引入,使得FM能更好解決數(shù)據(jù)稀疏性的問題】, 和wide deep端的輸出拼起來(lái)得到最后的輸出,其實(shí)是可以任意改造的。