日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DIN+DIEN,机器学习唯一指定涨点技Attention

發布時間:2024/7/5 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DIN+DIEN,机器学习唯一指定涨点技Attention 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文 | 水哥
源 | 知乎

Saying

1. 如果你面對一個全新的機器學習任務,讓你來漲點。你可能第一個想到的往往是attention,第一個實現的是attention,第一個真的漲點了的技術也是attention;
2. DIN的最主要的意義,把attention引入到用戶序列上,根據變化的item對象挑出合適的響應對象;
3. 別的地方還在吭哧吭哧研究embedding+DNN時,阿里媽媽啪的一下就把attention放進來了,很快啊!

這是【從零單排推薦系統】系列的第18講。如果說機器學習有什么技巧是百試百靈,放到哪都可以用的上的話,我會推薦兩個招。一是人海戰術,可以理解為前面講過的ensemble learning。

人海戰術在工業推薦中做的不多,即使是決定要用,也用的很保守,復雜度控制的比較小心。到了打比賽,項目pk的時候,那可是脫了韁了。幾年前ILSVRC還有的時候,上好幾個模型把輸出結果加起來做最終結果都只是常規操作,到了要pk那項目的時候幾千個模型(當然不是CNN這種)也是有所耳聞。

二是attention,attention的發展也是比較有意思。最早的時候說自己是attention,必須得旁征博引,從生理角度分析引用了什么原理,哪里能體現出人的認知過程。到了現在,加一個系數就叫attention。不過說歸說,attention確實是一種非常好用的技巧,在這一講中我們先開個頭,關于它的更多分析留在下一講。

Deep Interest Network[1]

當其他人還在學習適應embedding+DNN這種結構的形式時,阿里媽媽這邊已經在考慮更加細致的問題了。在今天看來,DIN里面使用的attention是整個機器學習領域里面幾乎最直觀的attention方式,其主要動機來源于對輸入特征的觀察,如圖:

像我們上一講提到過的,用戶的特征主要有兩種:一種是非序列的,可以稱之為non-sequential的。這類特征往往是User ID,年齡性別城市這種(后面的可稱之為profile,即一些用戶畫像信息)。另一種是序列化的(sequential),主要是用戶的歷史行為(User Behaviors),比如在電商場景下,就是用戶過去購買過的產品;在短視頻場景下,可以是用戶過去點贊的視頻。為了能順利接下面的MLP,特征得是定長度的,所以這里序列特征要選擇,最近的 個,多了截斷,少了補0。

將序列特征輸入MLP時,list中的每一個item都有對應的embedding,如果拼接起來,是一個巨大的長度,非常浪費空間(舉個例子,最近的30個,如果每一個都是64維,這就將近2000維了。實際上現在常見的大公司的解決方案中,MLP第一層承接的輸入總共也就幾千維)。那么sum pooling就會是一個相對柔和的方案,可以保證特征的長度不會太長。但是sum pooling有兩個缺點:

  • 不會隨著到來的廣告變化而變化,無論來的是美食還是母嬰產品,遇到的都是同樣的歷史行為表示。然而一個廣告是否應該發生點擊,應該更加重視對應類別的過往行為強度是否足夠大。換句話說就是美食來了應該看看過往的行為中美食的行為多不多,和這個廣告像不像。其他類別和當前這個廣告聯系并不大。所以我們需要一個動態的機制挑出需要的部分

  • 會對信息有所壓縮,如果一個item的信息需要16維才能裝得下,最后30個item的信息也只存在于16維里面的話,肯定是有壓縮的。我們很難控制這個過程,或許需要的信息就剛好壓縮沒了。所以我們也需要一個盡量不壓縮關鍵信息的機制

  • 而attention是什么呢?它就是能夠動態挑出需要的部分,而且可以控制壓縮的程度。所以就和上面的需求剛好對上了!這也就是DIN的最主要的意義,把attention引入到用戶序列上,根據變化的item對象挑出合適的響應對象

    而為了完成這個attention,我們要決定(1)挑選出來的部分根據誰來變化(2)最終融合的形式。根據上面說的,為了要適應廣告的變化,當然要把當前的廣告信息作為輸入,除此之外,用戶本身的歷史序列當然也是。對于第二個問題,我們最終還是希望結果的維度和sum pooling差不多,因此加權和是一個好的選擇,這也是大多數attention的做法。綜合以上兩點,就得到:

    其中 就對應序列中第 個item的embedding,而 是對應的attention系數。得到的結果是一個定長的向量,再和其他特征的embedding一起拼接起來,作為MLP的輸入即可。這里沒有對attention系數做歸一化,主要是考慮到scale其實反映了興趣的強度。加上attention的圖如下所示,其中attention部分用紅框突出了一下:

    至此對DIN的思想和主要的實現就梳理完成了,還留著的一個細節是上面的attention系數怎么得到。其網絡結構如下:

    這個圖畫的不是很清楚,外積之后得到的應該是一個矩陣,然后得到中間綠色的向量是通過什么方式(乘以 還是拉平)?這里還是按照代碼里面的邏輯來介紹[2]。item側的輸入是 的,這里 就是embedding的大小,比如64. user側的輸入是 ,第二項是序列的長度。先把item擴充成和user形狀一樣,然后把item,user,item-user,item*user四個張量在最后一維拼接。拼接后的張量經過FC層,一直映射到1,那么此時剩下的是 的結果了。這里的分數就是我們要的attention分數,拿它和user的list做一個矩陣乘法即可(還有一些別的操作,這里就省略掉了)。

    Deep Interest Evolution Network[3]

    有了DIN的基礎,我們理解DIEN就更加容易。DIEN的主要出發點是,用戶的歷史行為體現了他自身興趣的變化,而這個過程本身是時序的。而且這是一個發展的過程,這也就是題目中evolution的由來。

    既然用戶的序列是時序發生的,使用RNN,GRU和LSTM就顯得非常自然。這里選擇的是不容易梯度消失且較快的GRU。整體架構如下圖所示:

    圖中的 是用戶的行為序列,而 是對應的embedding。隨著自然發生的順序, 被輸入GRU中,如果忽略上面的AUGRU環節,GRU中的隱狀態 就應該成為用戶的行為序列最后的表示。這部分就是兩大組成部分之一的Interest Extractor Layer。

    如果直白的做,也是可以的,但是會訓練的不夠“細”。 的迭代經過了很多步,然后還要和其他特征做拼接,然后還要經過MLP。這樣的結果就是最后來了一個正樣本,歸因不到 上,整個網絡感覺一團漿糊。基于此DIEN給出了第一個要點:使用輔助loss來強化 。

    上面詳細畫了一下輔助loss的做法,我們本質上認為,如果發生了點擊,那么當前的 和即將到來的廣告的embedding應該很像。也就是 時刻得到的隱狀態 和下一個要來的點擊廣告 要相近。可以對它們做內積然后求最大。僅僅是這樣還不夠,還可以采樣一些不出現在歷史序列的廣告,構成負樣本 ,然后和 內積后取最小。通過這個輔助的loss,讓隱狀態開始富有語義:點擊與否能具體的歸因到某一個時刻的狀態上

    輔助loss的作用
    當我看到DIEN使用了輔助loss的時候,就覺得很靠譜了。根據我的經驗,輔助任務往往能帶來好處。真正應用場合下,你把開始的輸入和最后的要求告訴網絡,他就能給你一個好的結果的情況非常少。大多數時候是需要你去控制每一步的輸入輸出,每一步的loss才能防止網絡各種偷懶作弊。輔助loss(1)能夠使得網絡更受控制,向我們需要的方向發展;(2)能夠把正負樣本的原因更清晰的歸因到特征層面。
    我非常建議大家在實際業務中多試試輔助loss

    GRU的部分體現了對于行為信息的一種更高階的抽取,但是對于evolution體現的還不夠強。于是需要第二個模塊Interest Evolving Layer來完成。具體來說,興趣的發展可以等價為attention的變化,在GRU的不同位置加入attention,則體現了不同的發展方式。

    attention在這里的計算方式是:

    和狀態以及當前item都有關系。在GRU中有三個地方可以放如attention,

  • 對隱狀態乘上attention,稱為AIGRU

  • 改變update gate為attention系數,稱為AGRU

  • 改變update gate為原來的gate乘以attention,就是AUGRU了,這是效果最好的選擇。含義也很清楚,attention決定了現在的興趣轉變有多快

  • 上面就是AUGRU的示意圖,先和原來的update gate相乘,再以這個gate控制隱狀態的更新。

    為什么人海戰術總是有用?

    在本講和下一講我們分別思考兩個問題,第一個問題是,為什么人海戰術總是有用的,第二個問題是,為什么attention總是有效的。在這一講中我們先嘗試回答第一個問題,第二個問題留到下一講來闡述。

    我們這里舉一個例子來理解一下,如果一個分類器在某個樣本上得到正確輸出的概率為 ,那么有 個分類器時(簡單起見,假設他們平均意義上的概率差不多),按照投票制度獲得正確輸出的種類為 ,這里忽略打平的情況,所以 都取奇數。而總體的情況則是 . 我們可以驗證一下,是否存在

    如果存在這個關系,那我們可以說,經過人海戰術,我們獲得了更好的結果。下面的表格對不同的 和 的取值代入進行計算,我們可以發現前一項的概率確實相對于原來都獲得了提升。


    n=3n=5n=7
    p=0.60.6480.6830.710
    p=0.70.7840.8370.874
    p=0.80.8960.9420.967
    p=0.90.9720.9910.997

    但是要強調一點,人海戰術并不是沒有條件的,我這里總結的情況是原分類器均勻地有在樣本上能超過半數的判對,才能提升效果(這個條件沒有經過證明,讀者可以當做是輔助理解的條件)。比如說有三個分類器,分別在三個樣本上輸出 , , ,單獨選一個都可以得到33%的正確率,但是大家合起來卻變成了0%。但是如果這個概率分布能夠變的更平均一點,變成 , , ,這樣正確率變成了100%,像后面這樣的情況人海戰術才能有用。不過實際中我們遇到的也都是后面的情況,像前面這種非常畸形的分布很難遇見。

    這一講的DIN+DIEN這兩個方案在實現上完全可以由后續要講的基于transformer來替換。但重要的是我們要體會這其中思考的過程。DIN出現的時候,大多數人可能連embedding+DNN是什么都沒搞清楚(也可以說,大多數人還在搞CV/NLP,哈哈),而DIN就抓住了用戶行為信息和用戶畫像信息結構上不協調的點,深挖了attention的操作。在DIN把attention告訴大家后,DIEN又換了一個思路,從行為發生的時序上進行研究。這一系列的工作從來都不是別人發表了什么我就用什么,而是我的系統缺什么我就開發什么,這是最需要上一講的逍遙派學習的地方。

    思考題

    sum pooling并不是一定就會損失信息的,這一點在DIN的論文中也說了,embedding維度越高,sum pooling保留的信息就可以越多。如何理解這句話?你能設計一個embedding使得sum pooling之后沒有信息損失嗎?

    下期預告

    推薦系統精排之鋒(13):Attention有幾種寫法?

    往期回顧

  • 召回 粗排 精排,如何各司其職?

  • 拍不完的腦袋:推薦系統打壓保送重排策略

  • 簡單復讀機LR如何成為推薦系統精排之鋒?

  • 召回粗排精排-級聯漏斗(上)

  • 召回粗排精排-級聯漏斗(下)

  • 推薦系統精排:看阿里媽媽再試線性模型

  • 推薦精排之鋒:FM的一小步,泛化的一大步

  • 推薦中使用FNN/PNN/ONN/NFM優化特征交叉

  • 聊聊推薦系統的高階特征交叉問題

  • 真正的高階特征交叉:xDeepFM與DCN-V2

  • GBDT是如何成為推薦系統頂級工具人的?

  • DNN與推薦兩大門派,一念神魔,功不唐捐

  • 再論推薦特征與embedding生成

  • 后臺回復關鍵詞【入群

    加入賣萌屋NLP/IR/Rec與求職討論群

    后臺回復關鍵詞【頂會

    獲取ACL、CIKM等各大頂會論文集!

    ?

    [1]Deep Interest Network for Click-Through Rate Prediction,KDD,2018 https://arxiv.org/pdf/1706.06978.pdf

    [2]https://github.com/zhougr1993/DeepInterestNetwork/blob/9765f96202f849e59ff260c8b46931a0ddf01d77/din/model.py#L200

    [4]Deep Interest Evolution Network for Click-Through Rate Prediction,AAAI,2019 https://arxiv.org/pdf/1809.03672.pdf

    總結

    以上是生活随笔為你收集整理的DIN+DIEN,机器学习唯一指定涨点技Attention的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。