CTR預估的常見做法就是廣義線性模型,如Logistic Regression,外加特征海洋戰術,這樣做好處多多:
特征海洋戰術讓線性模型表現為一個很寬廣(Wide)的模型。線性的寬模型要產生非線性效果,主要靠特征組合,尤其是二階交叉,但如果交叉后的特征沒有覆蓋樣本,那么交叉就然并卵。
近年來,深度學習異軍突起,摧城拔寨,戰火自然也燒到了推薦系統領域了,用深度神經網絡來革“線性模型+特征工程”的命也再自然不過。用這種“精深模型”升級以前的“廣博模型”,尤其是深度學習“端到端”的誘惑,讓算法工程師們紛紛主動投懷送抱[1]。
深度學習在推薦領域的應用,其大好處就是“洞悉本質般的精深”:的泛化性能,可以給推薦很多驚喜。當然對應的問題就是容易過度泛化,會推薦得看上去像是“找不著北”,就是你們的PM和老板常問的那句話:“不知道怎么推出來的”,可解釋性差一點。
既然深度模型有這么大的好處,廣度模型也有諸多好處,根據人類的貪婪屬性,下一秒就有人問“能都要嗎?”,這時候Google站出來冷冷地說:當然。
Google公司去年提出一個新的推薦系統框架級別的解決方案,結合了傳統的線性模型和當前火熱的深度模型,應用在GooglePlay上的APP推薦,推薦效果提高非常明顯[2]。
下面就為大家介紹一下這個方案的關鍵要素。
一個典型的推薦系統架構很類似一個搜索引擎。也是由檢索(或稱召回)和排序兩部構成(圖1),這在我們前面的搜索、推薦、廣告三者架構能統一嗎已經討論過[3]。不過推薦系統的檢索過程并不一定有顯式的query,而通常是用戶特征和場景特征。
推薦系統的“query”,重要的當然就是用戶特征,哪些可以做用戶特征?并不只是標簽和注冊資料,可以說“六經注我”,凡是可以“注我”的皆為特征:顯式的有標簽,注冊資料,喜歡過的物品,消費過的物品,在一些維度上的統計值,隱式的有一些話題模型,embedding(如word2vec)等等,并不只是人類可讀的那些維度(PS:用戶標簽被一些擅長忽悠的公司和大眾媒體換了個迷惑人的詞語,叫做“用戶畫像”,通常還煞有介事的畫成一個“人形”,真擔心被有關部門解讀為“標簽成精”)
本文是關于廣度和深度模型的結合,解決的是架構中的“學習”“模型”“排序”這三個地方的問題,所以上面這一段可以不讀,當然現在說有點晚了(逃)。
現在來看看今天的主角:我們把它叫做“深寬模型”(Wide & Deep Model)。
首先,線性模型部分,也就是“寬模型”(圖2左邊),形式如下:
其中:
X是特征向量,W是模型參數向量,這個b是線性模型固有的偏見,哦不,偏置。線性模型中常用的特征構造手段就是特征交叉。例如:性別=女 and 語言=英語。就是由兩個特征組合交叉而成,只有當“性別=女”取值為1,并且“語言=英語”也取值為1時,這個交叉特征才會取值為1。線性模型的輸出這里采用的Logistic Regression。
然后,看看深度模型(圖2右邊)。深度模型其實就是一個前饋神經網絡(Feedforward Neural Network)。深度模型對原始的高維稀疏類別型特征,先進行embedding,轉換為稠密、低維的實值型向量,轉換后的向量維度通常在10-100這個范圍。至于怎么embedding,就是隨機初始化embedding向量,然后直接扔到整個前饋網絡中,用目標函數來優化。
前饋網絡中每一個隱藏層激活方式如下:
其中l表示第l個隱藏層,f是激活函數,通常選用ReLU(整流線性單元),為什么選用ReLU而不是LR,這個原因主要是LR在誤差反向傳播時梯度容易飽和(著急上車,來不及解釋了,具體請參考任何一本深度學習教材)。ReLU及其他常用激活函數的形狀見圖3:
后,看看兩者的融合,示意圖見圖2的中間部分。深模型和寬模型,由一個logistic regression模型作為終輸出單元。訓練方法采用Joint Learning,這是什么?就是通常說的端到端(end-to-end),把深模型和寬模型以及終融合的權重放在一個訓練流程中,直接對目標函數負責,不存在分階段訓練。它與ensemble方法有區別,ensemble是集成學習,子模型是獨立訓練的,只在融合階段才會學習權重。
為了對比試驗,Google分別用JointLearning訓練“深寬模型”(Wide&Deep),FTRL+L1訓練“寬模型”(LR)[4],AdaGrad訓練“深模型”(Feedforward Neural Network)。
融合結果以LR模型作為輸出:
Y是我們要預估的行為,二值變量,如購買,或點擊,Google原文是預估是否安裝APP。σ是sigmoid函數,W_wide^T是寬模型的權重,Φ(X)是寬模型的組合特征,W_deep^T是應用在深模型輸出上的權重,a^((l_f ) )是深模型的后一層輸出,b是線性模型的偏見,哦不,偏置。
整個深模型和寬模型的融合在圖3的中間部分很好的展示了。
整個數據流如圖4所示。
整個流程分為三大塊:數據生成,模型訓練,模型應用。
數據生成
數據生成有幾個要點:
模型訓練
整個模型的示意如圖5所示。其要點,在深度模型側:
寬模型側就是傳統的做法:特征交叉組合。
當新的樣本集合到來時,先是用上一次的模型來初始化模型參數,然后在此基礎上進行訓練。
新模型上線前,會先跑一遍,看看會不會出事,算是一個冒煙測試。
列位看官,是不是覺得說起來容易,動手難?沒關系,Google已經開源這一套算法了,集成在TensorFlow中[5]。
模型應用
模型驗證后,就發布到模型服務器。模型服務,每次網絡請求輸入的是來自召回模塊的APP候選列表以及用戶特征,再對輸入的每個APP進行評分。評分就是用我們的“深寬模型”進行前饋計算,再按照計算的CTR從高到低排序。
為了讓每次請求響應時間在10ms量級,每次并不是串行地對每個候選APP計算,而是多線程并行,將候選APP分成若干并行批量計算。
正因為有這些小的優化點,GooglePlay的APP推薦服務,在峰值時每秒計算千萬級的APP。
整個模型在線上效果還是不錯的(GooglePlay的APP推薦效果,以用戶安裝為目標)。
線上效果直接相對于對照組(純線性模型+人工特征)有3.9%的提升,但是線下的AUC值提高并不明顯,反過來說,AUC值是不是佳的線下評估方式,也是值得我們思考的,畢我們的模型還是要看線上的終效果。
Google將傳統的“寬模型”和新的“深模型”結合,是一種工程上的創新。這里簡單畫一下全文重點:
其中有若干經驗可以供我們在實踐中參考:
嗯,Wide&Deep Model就是這樣一個既博學又精深的Model,意不意外,驚不驚喜?所以,算法工程師們,可以考慮在自己的個性化推薦產品中試試這個Model,別老盯著維秘Model。
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。