推荐中的attention有什么作用?
文 | 水哥
源 | 知乎
Saying
1. attention要解決兩個問題:(1)attention怎么加,在哪個層面上做attention;(2)attention的系數怎么來,誰來得到attention
2. Attention常見的本質原因是求和的普遍存在,只要有求和的地方,加權和的DNA就動了。有人對這種做法就直接叫attention非常不以為然(但是趨勢卻不可阻擋)
3. attention的本質可能是,極其緊湊的二階人海戰術,或者極其高效的復雜度換漲點方法
這是【從零單排推薦系統】的第19講。上一講對于attention開了一個頭,主要為了說明的是,為什么我們要做attention,它能起到什么樣的作用。DIN/DIEN對attention的作用主要是用作用戶行為序列建模,目的是為了得到更好地用戶特征表示。實際上,attention可以出現在其他很多環節,也可以起到五花八門的作用。在這一講,我們對此做一個詳細的總結。
從做法上來講,attention分為這么幾種:
加權和,最簡單的,也是最常見的。原先的結構中存在一個求和,我們可以變為加權和
element/slot/module-wise乘,生成的attention分數雖然乘上了,但是不做求和,可以認為有體現重要性差異的作用
以Q-K-V的形式做抽象,這種就是特指transformer里面那種了
從作用上講就比較豐富多彩了,在本講中總結了這么幾種,但實際上可以有很多其他的:
凸顯用戶的興趣峰
特征進一步的細化/抽象
對模塊進行分化
從輸入上來講,attention也可以分為self-attention和非self的attention,區別在于,產出attention和attention作用的對象,二者用的輸入是不是一樣的。
Attention的做法
加權和
如果要說最簡單的attention方式,就是加權和了。在某環節我們可能需要對特征做sum pooling:
這個過程中每一個 地位是平等的。那么可以簡單的給他們分配權重,變為:
此處的 就是attention系數。要注意的是, 可以是數量,向量,也可以是張量。
在推薦系統中使用這種方式的典型例子是這里的AFM(Attentional Factorization Machines,AFM[1])方法,求和的過程恰好是FM中各個embedding求和的操作。AFM的結構如下圖:
從sparse input這里,挑出所有非0的特征,拿出對應的embedding,然后兩兩交叉得到若干個pair-wise的interaction。其中每一個都是一個等長的向量 ,中間的 表示element-wise乘法。假如沒有attention這回事,后面的結果就是把上面所有的交互結果加起來。那么可以看出這里有一個加的過程,我們attention的DNA就可以動了:在加的過程中給每一個embedding分配一個attention系數,則后面的結果變為:
其中所有的attention系數已經由Softmax歸一化。
接下來要闡述的是attention系數怎么來,本文的每個成員的attention系數由它自己輸入,即前面的向量 經過一個共享的FC層得到系數。注意一個點是,attention生成的時候一定要縱觀全局 , 就是一定要有一個環節能看的見所有成員,否則attention這件事就無從談起。AFM把看到全局的這個任務交給了一個共享的FC層,這個做法可能是考慮到前面的交互embedding很多,如果都做輸入會放不下。
在DeepIntent: Learning Attentions for Online Advertising with Recurrent Neural Networks[2]中也提到了一個非常相似的做法,區別只是后者的主體網絡建模是基于RNN的。
element/slot/module-wise乘
element-wise的典型例子是LHUC[3],即生成一個和原來激活元等長的attention向量,然后以element-wise的形式乘上去,在LHUC的原始論文中該系數是一個自由的參數(所以他們可能也不想把這個工作歸類在attention上),而在 【1.9萬億參數量,快手落地業界首個萬億參數推薦精排模型[4]】 中,這個mask則是由輸入特征變換得來的。
有的工作是把CV中的SENet用在推薦[5]:我們對所有特征的embedding先求和,可以視為Squeeze操作,然后經過DNN輸出attention分數,輸出的結果和slot數量,即特征數量是相等的。之后每一個特征的embedding整體乘上對應的attention分數,即Excitation操作。這就是slot-wise的乘法的例子,相當于在整段特征之間做輕重的區別。
Q-K-V的形式
這里專指transformer的做法,具體的細節我們留到下一講。
Attention的作用
上面介紹了attention常見的幾種做法,歸納起來其實就是“加權”,求不求和倒無所謂的。attention應用很廣泛的原因并不在于操作有多新穎或者多復雜,而是它可以起到的作用非常豐富。在每一個環節都可以考慮。
Attention凸顯最相關的興趣峰
用來凸顯用戶行為中的興趣峰就是特指上一講提到的DIN和DIEN,由于已經詳細介紹過這兩個工作,這里就不展開了。我們放在一個attention的歷史行程下來考慮,這類工作把attention應用到用戶行為序列建模的動機還是在于凸顯和當前item最相關的興趣峰。這種用法在下一講可以由transformer發揚光大。
Attention作為特征進一步細化/抽象工具
上面講的SENet的操作體現在slot層面即特征層面上,那么對于下一層來說,輸入特征的重要性相當于已經最了細化。
在AutoInt[6]中,attention沒有作為結果融合或者接近結果處融合的工具,而是作為一個非線性環節出現。一開始把所有的embedding拼接起來,然后用Multi-Head Attention做一步抽象。這個過程會在下一講詳細描述,我們可以先粗略的知道對于Query(Q),Key(K)和Value(V)都是同樣的輸入,經過抽象后可以得到一個更進一步非線性的表示。那么把這個過程層層堆疊起來,實際上就用Multi-Head Attention替代了DNN在特征抽象上的作用,如下圖:
若干層Multi-Head Attention的輸出結果直接經過激活函數就是輸出了,相當于在這里,Attention替代了DNN原先在非線性映射方面的作用。
Attention用作分化模塊的工具
Attention的操作是根據輸入的不同,生成不同的權重,來決定后面模塊中突出的是誰,抑制的是誰。那么反過來說,只要attention分數分布不是一成不變的情況下,后續的模塊也會對輸入產生特殊的傾向。某種輸入產生了大的attention分數,那么對應位置的模塊相當于更多承擔這種輸入的預測。久而久之,不同的模塊會對不同的用戶/任務有所專注,這就是標題所說的“分化”。
一個典型的例子就是MMoE[7],MMoE中根據任務的不同會生成不同的gate(attention),然后作用在module(expert)上。對于CTR任務,總有的gate輸出會偏大,那么對應位置的expert在CTR任務中就要扛起責任,同理,有的expert就是專注在CVR任務上。
還有我們提出的POSO[8],POSO本身是我本年度最自豪的工作之一,其中的細節我們會留到難點篇,在用戶冷啟動問題上大講(吹)特講(吹),在這里只是先提一下,POSO的主要環節是模塊的輸出的加權和:
其中 是若干個形式一致的模塊,而 是gating network的輸出,也可以看做是attention的一種。其中控制attention的輸入( 是新老用戶,比如新用戶attention分數中第1-2個數字比較大,而對于老用戶則是3-4的分數較大,那么模塊中1-2就會變的專注于新用戶,而其他的專注于老用戶。
為什么attention如此有用?
迄今為止,我們說attention非常有用,但沒有討論過它為什么這么有用。有讀者可能會說,因為attention做了更高程度的個性化/因為attention非常符合人的認知呀!這樣的大道理當然沒錯,但是要注意,這些說法只能說明attention可能有用,或者大概率有用,不能推出attention如此有用。現在的現狀是什么呢?幾乎只要是個地方放個attention就能漲點,有點太work了,這不是大道理能cover的。從CV領域的SENet,到NLP的Multi-head attention,似乎attention是哪里都能用的。而且最奇怪的點是,self-attention(即attention作用的對象和生成attention的特征都由相同的輸入決定)也是很work的,比如SENet這樣的做法。這不是很奇怪嗎,沒有添加額外的信息就漲點了,天上真的掉餡餅了?
我自己想了兩點假說(沒有搜到相關資料,如果有好的資料歡迎指出),供大家討論:
attention的本質可能是,極其緊湊的二階人海戰術
即attention十分work的本質是因為人海戰術十分work。當只有兩個成員的時候,一個成員組成feature map,一個成員組成attention score,并且相互交叉乘起來的形式是只有兩個成員情況下的最優(或者極優)形式。如果順著這個思路的話,實驗驗證應該是兩個模型分別訓練,然后結果求和,和feature map x attention map這種形式做對比,如果后者比前者有效,是不是就能證明這一點?(ICML等等我)
2. attention是一種效率極高的復雜度換漲點方法
雖然attention輕,但它終究還是加了東西的。這些東西加在特征維度上,加在通道上,都不如加在mask上效率高。這個假說和上面那個不是完全互斥的,存在overlap。
下期預告
推薦系統精排之鋒(14):Transformer的升維打擊
往期回顧
1.召回 粗排 精排,如何各司其職?
2.拍不完的腦袋:推薦系統打壓保送重排策略
3.簡單復讀機LR如何成為推薦系統精排之鋒?
4.召回粗排精排-級聯漏斗(上)
5.召回粗排精排-級聯漏斗(下)
6.推薦系統精排:看阿里媽媽再試線性模型
7.推薦精排之鋒:FM的一小步,泛化的一大步
8.推薦中使用FNN/PNN/ONN/NFM優化特征交叉
9.聊聊推薦系統的高階特征交叉問題
10.真正的高階特征交叉:xDeepFM與DCN-V2
11.GBDT是如何成為推薦系統頂級工具人的?
12.DNN與推薦兩大門派,一念神魔,功不唐捐
13.再論推薦特征與embedding生成
14.DIN+DIEN,機器學習唯一指定漲點技Attention
后臺回復關鍵詞【入群】
加入賣萌屋NLP/IR/Rec與求職討論群
后臺回復關鍵詞【頂會】
獲取ACL、CIKM等各大頂會論文集!
?
[1] Attentional Factorization Machines: Learning the Weight of Feature Interactions via Attention Networks,IJCAI,2017 https://www.ijcai.org/proceedings/2017/0435.pdf
[2] DeepIntent: Learning Attentions for Online Advertising with Recurrent Neural Networks https://www.kdd.org/kdd2016/papers/files/rfp0289-zhaiA.pdf
[3] Learning Hidden Unit Contributions for Unsupervised Acoustic Model Adaptation,2016 https://arxiv.org/pdf/1601.02828.pdf
[4] https://zhuanlan.zhihu.com/p/358779957
[5] 1.9萬億參數量,快手落地業界首個萬億參數推薦精排模型 https://finance.sina.com.cn/tech/2021-02-03/doc-ikftpnny3601504.shtml
[6] AutoInt: Automatic Feature Interaction Learning via Self-Attentive Neural Networks,CIKM,2019 https://arxiv.org/pdf/1810.11921.pdf
[7] Modeling Task Relationships in Multi-task Learning with Multi-gate Mixture-of-Experts,KDD,2018 https://www.kdd.org/kdd2018/accepted-papers/view/modeling-task-relationships-in-multi-task-learning-with-multi-gate-mixture-
[8] POSO: Personalized Cold Start Modules for Large-scale Recommender Systems,2021 https://arxiv.org/pdf/2108.04690.pdf
總結
以上是生活随笔為你收集整理的推荐中的attention有什么作用?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谷歌:CNN击败Transformer,
- 下一篇: 谢撩,人在斯坦福打SoTA