今天開(kāi)始了推薦系統(tǒng)的第一個(gè)模型DeepCrossing的學(xué)習(xí),這是一個(gè)微軟發(fā)布于2016年的深度學(xué)習(xí)模型,它將數(shù)值型變量和類別型變量作為輸入,具體地,論文地址在此:https://www.kdd.org/kdd2016/papers/files/adf0975-shanA.pdf
DeepCrossing的網(wǎng)絡(luò)結(jié)構(gòu)

(1)最底層是目標(biāo)相關(guān)的特征,包含數(shù)值型特征和類別型特征,數(shù)值型特征可以直接進(jìn)入stacking層,而類別型特征(如city_id, user_id等等)可以通過(guò)embedding層進(jìn)行特征抽取,之后再和數(shù)值型特征一起進(jìn)入stacking層。
(2)stacking層,是embedding層和數(shù)值型變量的聯(lián)合,一般可以采取直接向量打平后concat在一起。
(3)多層殘差單元層,是多個(gè)殘差單元的聯(lián)合。殘差單元,這個(gè)好像是ResNet的想法,又稱為殘差模塊(residual block)。單個(gè)殘差模塊的示意圖如下:
左右兩邊是兩種利用同樣兩層卷積網(wǎng)絡(luò)來(lái)做擬合的方式,左邊是用輸入x來(lái)擬合最終的輸出H(x);而右邊是用輸入x來(lái)擬合F(x)+x,其中x就是輸入本身,因而,等同于,網(wǎng)絡(luò)去學(xué)習(xí)到的就是F(x),通過(guò)下面的例子,看到經(jīng)過(guò)兩層卷積網(wǎng)絡(luò)之后,我們算最終目標(biāo)的delta值,左邊的delta=3.3%,看似已經(jīng)很完美擬合了,而右邊用殘差視角,得到的對(duì)應(yīng)的delta=100%,說(shuō)明進(jìn)一步優(yōu)化的空間較大。

而多層的殘差模塊的聯(lián)合,其本身就是特征自動(dòng)做交叉的過(guò)程,我以為這就是deep crossing的精妙之處。
(4)scoring層,就是為了最終的目標(biāo),往往是一個(gè)sigmoid函數(shù),輸出最終的目標(biāo)打分。
最終的代碼如下:

參考資料:
1. DeepCrossing論文
2. ResidualBlock知乎博客
3. datawhale學(xué)習(xí)資料