CTR模型越来越深,如何让它变轻?
DeepLight: Deep Lightweight Feature Interactions for Accelerating CTR Predictions in Ad Serving
十方@煉丹筆記看了那么多點(diǎn)擊率相關(guān)模型論文,就會(huì)發(fā)現(xiàn)模型越來越深,越來越復(fù)雜,目標(biāo)都是為了顯式或隱式的挖掘交互特征。然而,復(fù)雜的模型會(huì)減慢預(yù)測(cè)推理的速度,提高了服務(wù)延遲和高內(nèi)存使用率,對(duì)整個(gè)系統(tǒng)而言極不友好。《DeepLight: Deep Lightweight Feature Interactions for Accelerating CTR Predictions in Ad Serving》這篇論文提出了一種面向真實(shí)環(huán)境的DeepLight框架加速CTR預(yù)測(cè)。該框架下模型不僅能加速顯式特征的挖掘,還能修剪冗余參數(shù)。在Criteo數(shù)據(jù)集上有46倍的加速,在Avazu數(shù)據(jù)集上有27倍的加速,卻沒有任何預(yù)測(cè)精度上的損失。
簡(jiǎn)單回顧
預(yù)估CTR不僅需要一個(gè)良好的模型 還需要設(shè)計(jì)良好的特征作為輸入。以前很多研究挖掘了大量特征,例如文本特征,單擊“反饋特征”、“上下文特征”和“心理學(xué)”特征。為了避免復(fù)雜的特征工程,我們需要構(gòu)建端到端模型,自動(dòng)挖掘交互特征。
如一個(gè)用二階特征+一個(gè)正則化的的簡(jiǎn)單模型:
考慮到m可能較大,xi xj會(huì)很稀疏,Wi,j難以學(xué)習(xí),于是就有了FM模型,把參數(shù)數(shù)量從m*m降到了mk:
由于FM只考慮了二階,后面又出現(xiàn)了很多更高階的模型,如DCN:
DeepFwFM
如何基于DeepFM做改造,達(dá)到xDeepFM的效果呢?DeepFwFM就這樣誕生了:
其中w是DNN的參數(shù)和偏置,v是n*k的參數(shù)矩陣,e是embedding向量集合,R是n*n的矩陣,表示交互特征的強(qiáng)度,Deep層沒啥變化,關(guān)鍵看FwFM層:
F(i)表示特征i,VF(i)表示特征i的線性向量表達(dá),RF(i),F(j)表示F(i)和F(j)特征交互權(quán)重。
所以這個(gè)模型到底有什么優(yōu)勢(shì)呢?
1) DeepFwFM比xDeepFM快得多,因?yàn)槲覀儧]有在淺層網(wǎng)絡(luò)(FM)中挖掘超過2階的特征。而xDeepFM包含一個(gè)強(qiáng)大的壓縮交互網(wǎng)絡(luò)(CIN)可以逼近任意多項(xiàng)式,CIN的主要缺點(diǎn)就是時(shí)間復(fù)雜度遠(yuǎn)高于DNN,導(dǎo)致在生產(chǎn)環(huán)境中非常高的計(jì)算復(fù)雜度。
2) DeepFwFM比DeepFM更精確,因?yàn)樗朔司仃嚪纸庵械姆€(wěn)定性問題。該模型通過考慮交互特征的權(quán)重,提高預(yù)測(cè)的準(zhǔn)確度。
通過對(duì)比計(jì)算復(fù)雜度,我們發(fā)現(xiàn)DeepFwFM是遠(yuǎn)優(yōu)于xDeepFM的:
然而這樣也只能比xDeepFm快18倍,說好的46倍呢?由于DNN的存在,在預(yù)估時(shí)還是慢。然后就來到本篇重點(diǎn),結(jié)構(gòu)修剪。
結(jié)構(gòu)修剪
看到修剪,就想到剪枝。DeepFwFM如何修剪呢?
- 刪減DNN組件的權(quán)重(不包括偏差)以移除神經(jīng)連接;
- 修剪特征交互矩陣R以去除冗余的相互作用;
- 刪減嵌入向量中的元素,使用稀疏嵌入向量。
通過這3步修剪,模型就會(huì)身輕如燕了,如下圖所示:
稀疏DNN的計(jì)算復(fù)雜度比原來小很多,稀疏的矩陣R也使得FwFM加速,修剪R其實(shí)就是做特征選擇,不僅提升性能還能提高準(zhǔn)確率,稀疏的embedding能極大的降低內(nèi)存的使用。
所以應(yīng)該如何修剪?修剪網(wǎng)絡(luò)參數(shù)是個(gè)np-hard的問題,沒有任何方法能保證找到最優(yōu)解。在這篇論文,我們使用的修剪算法如下:
我們首先訓(xùn)練幾個(gè)epoch得到一個(gè)較優(yōu)的模型,然后進(jìn)行剪枝,去除冗余權(quán)重。在每次剪枝之后,我們通過fine-tune重新訓(xùn)練模型,這樣錯(cuò)誤的剪枝就可以被修復(fù)。我們不斷重復(fù)這個(gè)修剪過程并設(shè)置自適應(yīng)稀疏速率,早期階段使速率較快的增加,后期階段,網(wǎng)絡(luò)穩(wěn)定且變得敏感時(shí),降低速率。有點(diǎn)類似貪心算法,但它也帶來了一些額外的不確定性,在修剪過程中,這可能不會(huì)給模型帶來?yè)p失。
實(shí)驗(yàn)
沒有剪枝前,如下圖所示我們可以看到交叉特征會(huì)帶來精度上很大的提升,但是同時(shí)也會(huì)導(dǎo)致很高的延遲:
然后我們看剪枝后的DeepLight:
我們發(fā)現(xiàn)剪枝后不僅快了很多,還能帶來AUC的略微提升。最后對(duì)比下剪枝后各個(gè)模型的對(duì)比,DeepLight無論是性能還是準(zhǔn)確率都是最優(yōu)的。
更多干貨,請(qǐng)關(guān)注公眾號(hào):煉丹筆記
CTR模型越來越"深",如何讓它變"輕"?
總結(jié)
以上是生活随笔為你收集整理的CTR模型越来越深,如何让它变轻?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Netflix提出梯度提升决策树网络Ha
- 下一篇: 一个模型能服务所有的点击率模型?