1 概述
重排序模型中,特征主要使用離散one-hot編碼的特征。這是由任務本身特點與歷史發(fā)展以及模型特點決定的。
首先就任務本身來說,主要涉及到的特征分為用戶特征-物品特征-行為特征。這些特征往往都是離散的如用戶性別,用戶愛好,物品分類等
就歷史發(fā)展來說,是從人工規(guī)則--LR--GBDT+LR--FM--... 發(fā)展而來,這里都傾向于離散特征
而就整個發(fā)展過程中最關鍵以及工業(yè)應用中最常用的模型LR來講,離散特征更有優(yōu)勢
而one-hot編碼的離散特征,更容易引入非線性以及容易后續(xù)的特征組合,所以獨熱(one-hot)編碼的離散特征在推薦系統(tǒng)重排序以及CTR預測中都十分普遍。
1.1 特征與特征域(feature field)
例如我們有數(shù)據(jù):用戶性別,年齡,物品品牌,物品價格等特征,則可以做如下轉(zhuǎn)化
性別:[男,女]:[1,0] 表示男
年齡:[0-15歲,15-25歲,25-35歲,35-50歲,大于50歲]:[0,0,1,0,0] 表示用戶年齡在25-35之間
物品品牌:[李寧,特步,Nike,Adidas,匡威] : [0,0,0,1,0]表示Adidas
物品價格:[0-500元,500-1000元,1000-2000元,大2000元]:[0,1,0,0]則表示物品價格500-1000元
域 | 性別 | 年齡 | 品牌 | 價格 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
特征 | 男 | 女 | 15 | 25 | 35 | 50 | >50 | ln | tb | nike | adi | kw | 500 | 1000 | 2000 | >2000 |
樣本 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
則表示一個樣本
y=1可以表示一個年齡25-35歲的男性購買或點擊了一個adi品牌價格500-1000之間的商品或其廣告
所以男女分別變成了特征通過01表示是否是該特征,而性別作為男女的抽象則變成了特征域。
這里其實對于域,并沒有嚴格的規(guī)定,從常識來講傾向于把域如此來分,但同樣,也可以根據(jù)具體樣本特征做分組。
其主旨是:相同類型的特征組成一個域
2 FM(Factorization Machine)
2.1 模型推導
一般線性模型
注意此處表示樣本的第i個特征,而不是第i個樣本。n表示每個樣本共n維特征。
LR
LR是線性模型的一個轉(zhuǎn)換。
但是從線性模型公式我們可以看出,線性模型只是使用了單個特征,沒有考慮不同特征之間交叉的因素。例如性別和品牌的交叉,組成新特征“男-Nike”,“女-Nike”,“男-李寧”,“女-李寧”等,這些同樣也是能夠提供信息的。
所以,可以設計一個新模型
這相比于一般線性模型,就多了二元特征交叉的信息。當然,也可以繼續(xù)添加三元交叉,四元交叉等等
但是,這里又要考慮計算量的問題。首先要注意,對于CTR任務,n是很大的,因為獨熱編碼之后,域的展開就非常大。而當我們考慮二元交叉特征時,組合特征是數(shù)量級的
這會造成參數(shù)數(shù)量呈指數(shù)增長,而樣本量m基本固定。這就導致添加三元等更高的特征交叉后,特征維度很容易超過樣本量m
當特征維度遠大于樣本量m時,每個參數(shù)就難以得到足夠的訓練,造成欠擬合
所以暫時只考慮二元特征交叉
而僅僅是二元特征交叉,其參數(shù)是
級別的。而又由于
本身就稀疏,所以
更加稀疏,在總體樣本上,很容易出現(xiàn)某個組合
總為0的情況,這樣對應的
就得不到訓練。
為了應對這個問題,就需要把參數(shù)數(shù)量降下來。
通過線性代數(shù)知識我們知道可以使用矩陣分解技術把矩陣W分解
W是維,V是
維,當令
時,就可以把計算量從
降到
所以根據(jù)這樣的思想,我們可以對每個特征構建一個向量
,則
則式(2.3)可以轉(zhuǎn)換成
進一步轉(zhuǎn)化得
式(2.4)(2.5)就是FM模型,我們稱為隱向量或者
的隱向量
2.2 優(yōu)化算法
我們對式(5)的最后一部分做進一步轉(zhuǎn)換(詳情見最后注釋)
對于此模型,設有損失函數(shù)
可以是MAE,也可以是交叉熵損失函數(shù)
其根據(jù)鏈式法則梯度
即表示為損失函數(shù)對模型的導乘以模型對參數(shù)的導。
模型對參數(shù)的求導:
面對這樣的情況,我們可以使用如下幾種優(yōu)化算法求解參數(shù)
- 隨機梯度下降法(SGD)
- 交替最小二乘法(ALS)
- 馬爾科夫鏈蒙特卡羅法(MCMC)
隨機梯度下降法(SGD)
很容易理解,根據(jù)上述式子可以得出損失函數(shù)的梯度,得知梯度后就很方便的可以應用SGD
交替最小二乘法(ALS)
又稱坐標下降法
即每次只優(yōu)化一個參數(shù)。令導數(shù)=0,求解當前這個參數(shù)的最優(yōu)值。
馬爾科夫鏈蒙特卡羅法(MCMC)
不會不想查 :)
以上三種方法具體可移步參考鏈接
3 FFM(Field Factorization Machine)
3.1 模型推導
FM的核心是特征交叉,這里面最重要的就是隱向量。FM中,每個特征都有且只有一個隱向量
在特征交叉時,對應的隱向量點乘得到這個交叉特征的權重
然而,每個特征所代表的意義是不一樣的,例如在計算交叉特征:“男性-20到30歲”,“男性-Nike”時,用同一個男性隱向量v點乘20-30歲和nike的隱向量結果的區(qū)別度低。FFM認為,每個特征的隱向量應該有多個,當該特征與不同類型(域field)的特征做交叉時,應該使用對應的隱向量,這樣可以做到更精細地刻畫交叉特征的權重。所以每個特征應該有和field數(shù)量相同的隱向量個數(shù)。
假設樣本共有l(wèi)個域
特征分別屬于域
有l(wèi)個隱向量
分別對應l個域,v是一個k維向量
有l(wèi)個隱向量
分別對應l個域,v是一個k維向量
則當做交叉時,
應該選取
所在域?qū)碾[向量
應該選取
所在域?qū)碾[向量
即
這樣更精準了,但是參數(shù)量多了l倍。所以實際應用中,F(xiàn)FM設置的隱向量長度k會比FM的k小很多以盡可能降低計算量。
3.2 優(yōu)化算法
同F(xiàn)M
4 總結
FM模型相比傳統(tǒng)LR模型,多了二元交叉特征組合。提高了模型表征能力。
從根本上來說,F(xiàn)M之所以可以這么容易的拓展與組合,是因為任務使用的是獨熱編碼的離散化特征
FM全稱Factorization Machine。其中Factorization是因式分解的意思。通過上面的介紹,我想很容易理解這個因式分解的意思。當出現(xiàn)特征交叉如,必然會有這個交叉特征的參數(shù)
,而FM把這個參數(shù)分解成了兩個向量的點乘
。而這兩個向量可以看成是特征
的一種編碼。
對隱向量的進一步探討
對于onehot編碼來說,
特征對應著向量
其中第i位=1,其他=0;
特征對應著向量
其中第j位=1,其他=0;
所以的隱向量=
等價于
被編碼成
:
而表示兩特征交叉,其權重
則被FM表示成了兩隱向量的內(nèi)積
則
注意式子
雖然看似有的復雜度,但實際上
絕大多數(shù)時候都=0,這表示對于每一個樣本,式(4.1)計算量遠達不到
。對于一個特定的樣本,式(4.1)退化成
表示該樣本的稀疏特征中1的數(shù)量。
即
請理解這段,這段在理解DeepFM中有用。參加過一個會議,會上有人說對于CTR預測或推薦系統(tǒng)重排序來說,最根本的是做特征組合。
因為獨熱編碼的特征,每一維表征的信息太少,需要通過組合來提高每一維的表征能力。
同時,特征組合引入了非線性,可以提高擬合能力。其實GBDT+LR模型,也是一種特征組合。
FM實際上做了一個Embedding 工作,把稀疏的獨熱特征轉(zhuǎn)換成了稠密特征,這對于深度學習是友好的,所以后續(xù)有很多FM和神經(jīng)網(wǎng)絡結合的工作。
未完待續(xù)。。。
5 注釋
[1].此處應用平方和公式
即
參考
https://www.cnblogs.com/pinard/p/6370127.html
https://tracholar.github.io/machine-learning/2017/03/10/factorization-machine.html
https://www.cnblogs.com/wkang/p/9788012.html