一圖勝千言- 解讀阿里的Deep Image CTR Model(阿里imgcook)
雷鋒網(wǎng) AI 科技評(píng)論按:本文作者石塔西,原載于知乎,雷鋒網(wǎng)已獲授權(quán)。
本文是對(duì)阿里的論文《Image Matters: Visually modeling user behaviors using Advanced Model server》的解讀。
初讀此文的標(biāo)題和摘要,又有 image,又有 CTR,我以為是一種新型的 CNN MLP 的聯(lián)合建模方法。讀下來(lái)才知道,本文的重點(diǎn)絕不在什么圖像建模上,壓根就沒(méi) CNN 什么事。想像中的像素級(jí)別的建模根本沒(méi)有出現(xiàn),商品的圖片利用網(wǎng)上可下載的預(yù)訓(xùn)練好的 VGG16 模型的某個(gè)中間層壓縮成 4096 維向量,作為 CTR 模型的原始輸入。
而將圖片引入到推薦/搜索領(lǐng)域,也不是什么新鮮事。不說(shuō)論文 Related Works 中提到的工作,我自己就做過(guò)基于圖片的向量化召回,結(jié)構(gòu)與論文圖 4 中的 Pre-Rank DICM 結(jié)構(gòu)很相似,只不過(guò)用戶側(cè)不包含他之前點(diǎn)擊過(guò)的商品圖片罷了,在此略下不表。
沒(méi)有提出新的圖像建模方法,也并非第一次在推薦算法中使用圖片信息,那么此文的創(chuàng)新點(diǎn)到底在哪里?我覺(jué)得,本文的創(chuàng)新點(diǎn)有兩個(gè)創(chuàng)新點(diǎn):
-
之前的工作盡管也在推薦/搜索算法中引入了圖片信息,可是那些圖片只用于物料側(cè),用于豐富商品、文章的特征表示。而阿里的這篇論文,是第一次將圖片用于用戶側(cè)建模,基于用戶歷史點(diǎn)擊過(guò)的圖片(user behavior images)來(lái)建模用戶的視覺(jué)偏好。
接下來(lái)會(huì)看到,將圖片加入到用戶側(cè)建模,理論上并不復(fù)雜,理論上用傳統(tǒng) PS 也可以實(shí)現(xiàn),起碼跑個(gè)實(shí)驗(yàn),發(fā)篇論文應(yīng)該不成問(wèn)題。但是,如果應(yīng)用到實(shí)際系統(tǒng),圖片特征引入的大數(shù)據(jù)量成為技術(shù)瓶頸。為此,阿里團(tuán)隊(duì)為傳統(tǒng) PS 的 server 也增加了「模型訓(xùn)練」功能,并稱新結(jié)構(gòu)為 Advanced Model Server(AMS)。
基于歷史點(diǎn)擊圖片建模用戶視覺(jué)偏好
先談一下第一個(gè)「小創(chuàng)新」。之所以說(shuō)其「小」,是因?yàn)?strong>通過(guò)預(yù)訓(xùn)練的 CNN 模型提取特征后,每張圖片用一個(gè)高維(比如 4096)稠密向量來(lái)表示。這些圖片向量,與常見(jiàn)的稀疏 ID 類特征經(jīng)過(guò) embedding 得到的稠密向量,沒(méi)有質(zhì)的區(qū)別(量的區(qū)別,下文會(huì)提到),完全可以復(fù)用以前處理 ID embedding 的方法(如 pooling, attention)來(lái)處理。
Deep Image CTR Model(DICM)的具體結(jié)構(gòu)如下所示:
DICM 架構(gòu)圖
-
如果只看左邊,就是推薦/搜索中常見(jiàn)的 Embedding MLP 結(jié)構(gòu)。注意上圖中的 Embedding MLP 結(jié)構(gòu)只是實(shí)際系統(tǒng)的簡(jiǎn)化版本,實(shí)際系統(tǒng)中可以替換成 Wide&Deep, DIN, DIEN 等這些「高大上」的東西。
假設(shè)一個(gè)滿足要求的圖片 embedding model 已經(jīng) ready,即圖中的 embmodel。商品的縮略圖,經(jīng)過(guò) embmodel 壓縮,得到商品的圖片信息(圖中的粉紅色塊)
右邊部分,負(fù)責(zé)利用圖片建模用戶。將每個(gè)用戶點(diǎn)擊過(guò)的圖片(user behavior image),經(jīng)過(guò) embmodel 進(jìn)行壓縮(圖中的藍(lán)色塊)。它們與商品圖片(ad image)的 embedding 結(jié)果(粉紅色塊)經(jīng)過(guò)attentive pooling 合并成一個(gè)向量(桔色塊)表示用戶的視覺(jué)偏好
將用戶點(diǎn)擊過(guò)的多張圖片的向量(藍(lán)色)合并成一個(gè)向量(桔色),其思路與 Deep Interest Network 基于 attention 的 pooling 機(jī)制大同小異,只不過(guò)要同時(shí)考慮「id 類特征」與「商品圖片」對(duì)用戶歷史點(diǎn)擊圖片的 attention,稱為MultiQueryAttentivePooling。
第 1 步得到基于 id 特征的 embedding 結(jié)果,與第 2 步得到的商品圖片 (ad image) 的 embedding 結(jié)果(粉紅色),與第 3 步得到的表示用戶興趣偏好的向量(桔紅色),拼接起來(lái),傳入 MLP,進(jìn)行充分的交互
這個(gè)模型的優(yōu)勢(shì)在于:
-
之前的模型只考慮了傳統(tǒng)的 ID 類特征和物料的圖像信息,這次加入了用戶的視覺(jué)偏好,補(bǔ)齊了一塊信息短板
不僅如此,通過(guò) MLP,將傳統(tǒng)的 ID 類特征、物料的圖像信息、用戶的視覺(jué)偏好進(jìn)行充分交互,能夠發(fā)現(xiàn)更多的 pattern。
基于用戶歷史訪問(wèn)的 item id 來(lái)建模用戶的興趣,始終有「冷啟動(dòng)」問(wèn)題。如果用戶訪問(wèn)過(guò)一個(gè) embedding matrix 中不存在的 item,這部分信息只能損失掉。而基于用戶歷史訪問(wèn)的圖片來(lái)建模,類似于 content-based modeling,商品雖然是新的,但是其使用的圖片與模型之前見(jiàn)過(guò)的圖片卻很相似,從而減輕了「冷啟動(dòng)」問(wèn)題。
綜上可見(jiàn),DICM 的思路、結(jié)構(gòu)都很簡(jiǎn)單。但是,上面的描述埋了個(gè)大伏筆:那個(gè)圖片嵌入模型 embmodel 如何設(shè)計(jì)?沒(méi)有加入圖片、只有稀疏的 ID 類特征時(shí),Embedding MLP 可以通過(guò) Parameter Server 來(lái)分布式訓(xùn)練?,F(xiàn)在這個(gè) embmodel,是否還可以在 PS 上訓(xùn)練?在回答這個(gè)問(wèn)題之前,讓我們先看看稀疏 ID 特征 Embedding MLP 在傳統(tǒng)的 PS 上是如何訓(xùn)練的?
稀疏 ID 特征 Embedding MLP 在傳統(tǒng)的 PS 上是如何訓(xùn)練的?
介紹 PS 的論文、博客汗牛充棟,實(shí)在論不上我在這里炒冷飯,但是,我還是要將我實(shí)踐過(guò)的「基于 PS 訓(xùn)練的 DNN 推薦算法」,在這里簡(jiǎn)單介紹一下,因?yàn)槲矣X(jué)得它與《Scaling Distributed Machine Learning with the Parameter Server》所介紹的「經(jīng)典」PS 還是稍稍有所不同,與同行們探討。
基于 PS 的分布式訓(xùn)練的思想還是很簡(jiǎn)單的:
1.一開(kāi)始是 data parallelism。每臺(tái) worker 只利用本地的訓(xùn)練數(shù)據(jù)前代、回代,計(jì)算 gradient,并發(fā)往 server。Server 匯總(平均)各 worker 發(fā)來(lái)的 gradient,更新模型,并把更新過(guò)的模型同步給各 worker。這里有一個(gè)前提,就是數(shù)據(jù)量超大,但是模型足夠小,單臺(tái) server 的內(nèi)存足以容納。
2.但是,推薦/搜索系統(tǒng)使用超大規(guī)模的 LR 模型,模型參數(shù)之多,已經(jīng)是單臺(tái) server 無(wú)法容納的了。這時(shí) Parameter Server 才應(yīng)運(yùn)而生,它同時(shí)結(jié)合了 data parallelism 與 model parallelism
-
Data parallelism:訓(xùn)練數(shù)據(jù)依然分布地存儲(chǔ)在各臺(tái) worker node 上,各 worker node 也只用本地?cái)?shù)據(jù)進(jìn)行計(jì)算。
Model parallelism:一來(lái)模型之大,單臺(tái) server 已經(jīng)無(wú)法容納,所以多臺(tái) server 組成一個(gè)分布式的 Key-value 數(shù)據(jù)庫(kù),共同容納、更新模型參數(shù);二來(lái),由于推薦/搜索的特征超級(jí)稀疏,各 worker 上的訓(xùn)練數(shù)據(jù)只涵蓋了一部分特征,因此每個(gè) worker 與 server 之間也沒(méi)有必要同步完整模型,而只需要同步該 worker 的本地訓(xùn)練數(shù)據(jù)所能夠涵蓋的那一部分模型。
所以按照我的理解,PS 最擅長(zhǎng)的是訓(xùn)練稀疏數(shù)據(jù)集上的算法,比如超大規(guī)模 LR 的 CTR 預(yù)估。但是,基于 DNN 的推薦/搜索算法,常見(jiàn)模式是稀疏 ID 特征 Embedding MLP,稍稍有所不同
1.稀疏 ID 特征 Embedding,是使用 PS 的理想對(duì)象:超大的 embedding 矩陣已經(jīng)無(wú)法容納于單臺(tái)機(jī)器中,需要分布式的 key-value 數(shù)據(jù)庫(kù)共同存儲(chǔ);數(shù)據(jù)稀疏,各 worker 上的訓(xùn)練數(shù)據(jù)只涵蓋一部分 ID 特征,自然也只需要和 server 同步這一部分 ID 的 embedding 向量。
2.MLP 部分,稍稍不同
-
和計(jì)算機(jī)視覺(jué)中動(dòng)輒幾百層的深網(wǎng)絡(luò)相比,根據(jù)我的經(jīng)驗(yàn),縱使工業(yè)級(jí)別的推薦/搜索算法,MLP 也就是 3~4 層而已,否則就有過(guò)擬合的風(fēng)險(xiǎn)。這等「小淺網(wǎng)絡(luò)」可以容納于單臺(tái)機(jī)器的內(nèi)存中,不需要分布式存儲(chǔ)。
與每臺(tái) worker 只需要與 server 同步本地所需要的部分 embedding 不同,MLP 是一個(gè)整體,每臺(tái) worker 都需要與 server 同步完整 MLP 的全部參數(shù),不會(huì)只同步局部模型。
所以,在我的實(shí)踐中
-
稀疏 ID 特征 Embedding,就是標(biāo)準(zhǔn)的 PS 做法,用 key-value 來(lái)存儲(chǔ)。Key 就是 id feature,value 就是其對(duì)應(yīng)的 embedding 向量;
MLP 部分,我用一個(gè) KEY_FOR_ALL_MLP 在 server 中存儲(chǔ) MLP 的所有參數(shù)(一個(gè)很大,但單機(jī)足以容納的向量),以完成 worker 之間對(duì) MLP 參數(shù)的同步。
實(shí)際上,對(duì) Embedding 和 MLP 不同特性的論述,在《Deep Interest Network for Click-Through Rate Prediction》中也有所論述。阿里的 X-DeepLearning 平臺(tái)
-
用 Distributed Embedding Layer 實(shí)現(xiàn)了分布式的 key-value 數(shù)據(jù)庫(kù)來(lái)存儲(chǔ) embedding。應(yīng)該是標(biāo)準(zhǔn)的 PS 做法。
用 Local Backend 在單機(jī)上訓(xùn)練 MLP。如何實(shí)現(xiàn)各 worker(i.e., local backend)的 MLP 的同步?是否和我的做法類似,用一個(gè) key 在 server 上存儲(chǔ) MLP 的所有參數(shù)?目前尚不得而知,還需要繼續(xù)研究。
加入圖片特征后,能否繼續(xù)在 PS 上訓(xùn)練?
按原論文的說(shuō)法,自然是不能,所以才提出了 AMS。一開(kāi)始,我以為」PS 不支持圖片」是「質(zhì)」的不同,即 PS 主要針對(duì)稀疏特征,而圖片是稠密數(shù)據(jù)。但是,讀完文章之后,發(fā)現(xiàn)之前的想法是錯(cuò)誤的,稀疏 ID 特征與圖片特征在稀疏性是統(tǒng)一的。
-
某個(gè) worker node 上訓(xùn)練樣本集,所涵蓋的 item id 與 item image,只是所有 item ids/images 的一部分,從這個(gè)角度來(lái)說(shuō),item id/image 都是稀疏的,為使用 PS 架構(gòu)提供了可能性
item image 經(jīng)過(guò) pre-trained CNN model 預(yù)處理,參與 DICM 訓(xùn)練時(shí),已經(jīng)是固定長(zhǎng)度的稠密向量。Item id 也需要 embedding 成稠密向量。從這個(gè)角度來(lái)說(shuō),item id/image 又都是稠密的。
正因?yàn)?strong>稀疏 ID 特征與圖片特征,本質(zhì)上沒(méi)有什么不同,因此 PS 無(wú)須修改,就可以用于訓(xùn)練包含圖片特征的 CTR 模型(起碼理論上行得通),就是文中所謂的 store-in-server 模式。
-
圖片特征存入 PS 中的 server,key 是 image index,value 是經(jīng)過(guò) VGG16 提取出來(lái)的稠密向量
訓(xùn)練數(shù)據(jù)存放在各 worker 上,其中圖片部分只存儲(chǔ) image index
訓(xùn)練中,每個(gè) worker 根據(jù)各自本地的訓(xùn)練集所包含的 image index,向 server 請(qǐng)求各自所需的 image 的 embedding,訓(xùn)練自己的 MLP
一切看上去很美好,直到我們審視 VGG16 提取出來(lái)的 image embedding 到底有多長(zhǎng)?
-
原論文中提到,經(jīng)過(guò)試驗(yàn),阿里團(tuán)隊(duì)最終選擇了 FC6 的輸出,是一個(gè) 4096 長(zhǎng)的浮點(diǎn)數(shù)向量。而這僅僅是一張圖片,每次迭代中,worker/server 需要通信的數(shù)據(jù)量是 mini-batch size * 單用戶歷史點(diǎn)擊圖片數(shù) (i.e., 通常是幾十到上百) * 4096 個(gè)浮點(diǎn)數(shù)。按照原論文中 table 2 的統(tǒng)計(jì),那是 5G 的通訊量。
而一個(gè) ID 特征的 embedding 才用 12 維的向量來(lái)表示。也就是說(shuō),引入 image 后,通訊量增長(zhǎng)了 4096/12=341 倍。
(或許有心的讀者問(wèn),既然 4096 的 image embedding 會(huì)造成如此大的通訊壓力,那為什么不選擇 vgg16 中小一些層的輸出呢?因?yàn)?vgg16 是針對(duì) ImageNet 訓(xùn)練好的,而 ImageNet 中的圖片與淘寶的商品圖片還是有不小的差距(淘寶的商品圖片應(yīng)該很少會(huì)出現(xiàn)海象與鴨嘴獸吧),因此需要提取出來(lái)的 image embedding 足夠長(zhǎng),以更好地保留一些原始信息。原論文中也嘗試過(guò)提取 1000 維的向量,性能上有較大損失。)
正是因?yàn)樵紙D片 embedding 太大了,給通信造成巨大壓力,才促使阿里團(tuán)隊(duì)在 server 上也增加了一個(gè)「壓縮」模型,從而將 PS 升級(jí)為 AMS。
AMS 的技術(shù)細(xì)節(jié),將在下一節(jié)詳細(xì)說(shuō)明。這里,我覺(jué)得需要強(qiáng)調(diào)一下,由于加入圖片而需要在 AMS,而不是 PS 上訓(xùn)練,這個(gè)變化是「量」變引起的,而不是因?yàn)樵瓉?lái)的 ID 特征與圖片這樣的多媒體特征在「質(zhì)」上有什么不同。比如,在這個(gè)例子中,
-
使用 AMS 是因?yàn)?image 的原始 embedding 由 4096 個(gè)浮點(diǎn)數(shù)組成,太大了
之所以需要 4096 個(gè)浮點(diǎn)數(shù),是因?yàn)?vgg16 是針對(duì) ImageNet 訓(xùn)練的,與淘寶圖片相差較大,所以需要保留較多的原始信息
如果淘寶專門訓(xùn)練一個(gè)針對(duì)商品圖片的分類模型,那么就有可能拿某個(gè)更接近 loss 層、更小的中間層的輸出作為 image embedding
這樣一來(lái),也就沒(méi)有通信壓力了,也就無(wú)需 server 上的「壓縮」模型了,傳統(tǒng)的 PS 也就完全可以勝任了。
所以,AMS 并不應(yīng)該是接入多媒體特征后的唯一選擇,而 AMS 也不僅僅是針對(duì)多媒體特征才有用。應(yīng)該說(shuō),AMS 應(yīng)該是針對(duì)「embedding 過(guò)大、占有過(guò)多帶寬」的解決方案之一。
Advanced Model Server(AMS)架構(gòu)
上一節(jié)講清楚了,AMS 是為了解決「image 的原始 embedding 過(guò)大,造成太大通信壓力」的問(wèn)題而提出的。在這一節(jié)里,我們來(lái)看看 AMS 是如何解決這一問(wèn)題的。
AMS 的解決方案也很簡(jiǎn)單:
-
為每個(gè) server 增加一個(gè)可學(xué)習(xí)的「壓縮」模型(論文中的 sub-model,其實(shí)就是一個(gè) 4096-256-64-12 的金字塔型的 MLP)
當(dāng) worker 向 server 請(qǐng)求 image embedding 時(shí),server 上的「壓縮」模型先將原始的 4096 維的 image embedding 壓縮成 12 維,再傳遞給 worker,從而將通訊量減少到原來(lái)的 1/340
該「壓縮」模型的參數(shù),由每個(gè) server 根據(jù)存在本地的圖片數(shù)據(jù)學(xué)習(xí)得到,并且在一輪迭代結(jié)束時(shí),各 server 上的「壓縮」模型需要同步。
每個(gè) server 上都有這樣一個(gè)這個(gè)可學(xué)習(xí)的「壓縮」模型,要能夠利用存放在本地的數(shù)據(jù)(這里就是 4096 長(zhǎng)的 image 原始 embedding)前代、回代、更新權(quán)重,并且各 server 的模型還需要同步,簡(jiǎn)直就是 worker 上模型的翻版。將 worker 的「訓(xùn)練模型」的功能復(fù)制到 server,這也就是 Advanced Model Server 相比于傳統(tǒng) Parameter Server 的改進(jìn)之處。
AMS 是本文最大的創(chuàng)新點(diǎn)。本來(lái)還想再費(fèi)些筆墨詳細(xì)描述,最后發(fā)現(xiàn)不過(guò)是對(duì)原論文 4.2 節(jié)的翻譯,白白浪費(fèi)篇幅罷了,請(qǐng)讀者移步原論文。其實(shí),當(dāng)你明白了 AMS 要解決什么樣的問(wèn)題,那么原論文中的解決方案,也就是一層窗戶紙罷了,簡(jiǎn)單來(lái)說(shuō),就是將 worker 上的模型前代、回代、更新、同步代碼移植到 server 端罷了。最后加上原論文中的圖 2,以做備忘。
AMS 交互流程
總結(jié)
以上就是我對(duì) Deep Image CTR Model(DICM)兩個(gè)創(chuàng)新點(diǎn)的理解。根據(jù)原論文,無(wú)論是離線實(shí)驗(yàn)還是線上 AB 測(cè)試,DICM 的表現(xiàn)都比不考慮用戶視覺(jué)偏好的老模型要更加優(yōu)異。DICM 開(kāi)啟了在推薦系統(tǒng)中引入多媒體特征的新篇章。
小結(jié)一下 DICM 的成就與思路:
-
DICM,第一次將圖片信息引入到用戶側(cè)建模,通過(guò)用戶歷史上點(diǎn)擊過(guò)的圖片(user behavior images)建模用戶的視覺(jué)偏好,而且將傳統(tǒng)的 ID 類特征、物料的圖像信息、用戶的視覺(jué)偏好進(jìn)行充分交互,能夠發(fā)現(xiàn)更多的 pattern,也解決了只使用 ID 特征而帶來(lái)的冷啟動(dòng)問(wèn)題。
但是,引入 user behavior images 后,由于 image 原始 embedding 太大,給分布式訓(xùn)練時(shí)的通信造成了巨大壓力。為此,阿里團(tuán)隊(duì)通過(guò)給每個(gè) server 增加一個(gè)可學(xué)習(xí)的「壓縮」模型,先壓縮 image embedding 再傳遞給 worker,大大降低了 worker/server 之間的通信量,使 DICM 的效率能夠滿足線上系統(tǒng)的要求。這種為 server 增加「模型訓(xùn)練」功能的 PS,被稱為 AMS。
最后,還應(yīng)該強(qiáng)調(diào),引發(fā) PS 升級(jí)到 AMS 的驅(qū)動(dòng)力,是「量變」而不是「質(zhì)變」。圖片之類的多媒體特征,既不是 AMS 的唯一用武之地,也不應(yīng)是 AMS 壟斷的專利。選擇哪種訓(xùn)練架構(gòu),需要我們根據(jù)業(yè)務(wù)、數(shù)據(jù)的特點(diǎn)做出判斷,切忌迷信「銀彈」。