推荐系统里,可以用蒸馏吗?
無論是商品推薦,還是廣告推薦,都大致可以分為召回,預(yù)排序(粗排),精排等階段,如上篇<淘寶搜索中基于embedding的召回>的圖所示:
召回最重要的就是要快,高召回率,對(duì)準(zhǔn)確率可以不必要求太高,所以召回模型往往就是雙塔模型,最經(jīng)典的就是youtube雙塔:
后面各種論文大多都說基于樣本構(gòu)造,模型結(jié)構(gòu),增加特征等方面去優(yōu)化召回模型,但是不得不提到的是,蒸餾也是個(gè)提高召回側(cè)模型效果的一個(gè)好方法。
由于受限于線上性能,在廣告/商品召回階段,我們通常采用深度學(xué)習(xí)雙塔模型結(jié)構(gòu),離線先計(jì)算保存好ad/item embedding,線上實(shí)時(shí)預(yù)測(cè)出user embedding再通過近鄰檢索召回相似廣告。user塔和ad塔是兩個(gè)獨(dú)立的神經(jīng)網(wǎng)絡(luò),而user側(cè)特征和ad側(cè)特征沒有交互,損失了很多有用信息,且因?yàn)閡ser embedding線上實(shí)時(shí)inference,這就限制了user塔的特征規(guī)模及模型結(jié)構(gòu)復(fù)雜度。對(duì)于這兩個(gè)問題,蒸餾模型提供了一種解決方法。以下是蒸餾模型的特點(diǎn):
- 由于training階段不要求實(shí)時(shí)操作,允許訓(xùn)練一個(gè)復(fù)雜的模型,蒸餾模型可以在training階段用復(fù)雜度高的網(wǎng)絡(luò)(teacher network)-學(xué)到的知識(shí)指導(dǎo)較為簡(jiǎn)單的網(wǎng)絡(luò)(student network)學(xué)習(xí),在serving階段以較小的計(jì)算代價(jià)來使用簡(jiǎn)單網(wǎng)絡(luò),同時(shí)保持一定的網(wǎng)絡(luò)預(yù)測(cè)能力。
- 對(duì)于一些線上serving階段無法獲取的但又對(duì)目標(biāo)有實(shí)際意義的特征,如用戶與廣告或商品的交互特征等,可以在training階段將這類特征都加入teacher network學(xué)習(xí),而線上serving階段只需獲取用于訓(xùn)練student network的基本特征,serving過程只使用student network結(jié)構(gòu)。
- 可以將集成的知識(shí)壓縮在簡(jiǎn)單的模型中。對(duì)于一個(gè)已經(jīng)訓(xùn)練好的復(fù)雜的模型,如果要集成的話要帶來很大的計(jì)算開銷,而使用蒸餾模型可以用復(fù)雜模型指導(dǎo)一系列簡(jiǎn)單模型學(xué)習(xí),根據(jù)復(fù)雜的大網(wǎng)絡(luò)和一系列簡(jiǎn)單模型的輸出作為目標(biāo),訓(xùn)練一個(gè)最終的模型,可不用對(duì)復(fù)雜模型進(jìn)行集成。
當(dāng)然,蒸餾用在召回,更重要的意義是保證召回,預(yù)排序(粗排),精排一致性,而不是蒸餾一堆看似高大上的特點(diǎn)。為啥要保證一致性呢?召回側(cè)最終服務(wù)于排序,選出排序認(rèn)可的才是最重要的,如果召回的都不是排序認(rèn)可的,那排序模型也只能矮子里挑高的選,這樣會(huì)影響整體的收益。如果召回模型在訓(xùn)練階段增加對(duì)精排的擬合,是不是可以近似達(dá)到精排模型在全庫(kù)搜索的效果呢?
那么推薦系統(tǒng)中蒸餾應(yīng)該怎么做呢?其實(shí)最簡(jiǎn)單的就是改loss,除了交叉熵?fù)p失,可以增加和teacher預(yù)估不一致而帶來的損失,輔助學(xué)習(xí)。
其中,L_hard是分類問題中經(jīng)典的交叉熵?fù)p失,是真實(shí)標(biāo)簽與模型預(yù)測(cè)概率之間的交叉熵?fù)p失,記為hard loss;λ是超參數(shù),控制teacher模型對(duì)student的指導(dǎo)程度;L_soft是teacher模型輸出概率與student模型輸出概率的交叉熵,記為soft loss,形式如下所示:
也可以用帶溫度的softmax函數(shù)控制teacher信號(hào)的傳輸:
Lsoft也可以用logit直接的mse loss進(jìn)行學(xué)習(xí)。大致框架如下圖所示:
訓(xùn)練大家可以嘗試teacher和student同時(shí)訓(xùn)練,也可以先訓(xùn)練好teacher,再蒸餾到student上。在實(shí)際使用上,AUC和GAUC都是可以漲一些的。
說到這肯定有人要問了,召回可以學(xué)精排,預(yù)排序(粗排)可以學(xué)精排嗎?,當(dāng)然可以,而且肯定也會(huì)有收益。那召回為啥不學(xué)預(yù)排序(粗排)?畢竟召回直接相連的就是預(yù)排序模型。當(dāng)然也是可以的嘗試的。
總結(jié)一下,無論是做哪個(gè)階段的模型,只單獨(dú)優(yōu)化某個(gè)階段的模型很容易到達(dá)瓶頸,盡管每年關(guān)于推薦的論文層出不窮,但是真正用上了有效果的卻很少。有時(shí)要從系統(tǒng)的角度出發(fā)去思考模型比單純?nèi)ザ哑瞿P徒Y(jié)構(gòu)效果要大得多。
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的推荐系统里,可以用蒸馏吗?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 神经网络调参经验大汇总
- 下一篇: 开启算法编程之旅的准备工作——如何在Wi