天天看點

淺析Attention在推薦系統中的應用(1)Attention簡介歡迎關注本人公衆号: petertalks

歡迎關注本人公衆号: petertalks

前言

Attention最早應用于圖像領域,而後大面積用于seqs2seqs類型的任務如機器翻譯等。随着17年google《Attention is all you need》的發表更是将attention推向熱點。近幾年無論是在nlp、還是推薦領域。attention機制可謂是大放異彩,從nlp領域的transformer、bert,xlnet,到推薦領域的autoInt、阿裡家的BST等皆是以attention為基礎。

由于工作需要近期筆者對attention機制進行了些調研,本文在此對attention及常用變種原理,以及attention在推薦系統模型中的各種應用進行了簡單整理和總結。筆者蒟蒻一枚,若有失誤再所難免,歡迎各位大佬前來指導交流~

淺析Attention在推薦系統中的應用(1)Attention簡介

淺析Attention在推薦系統中的應用(2)阿裡Deep Interest Network模型

淺析Attention在推薦系統中的應用(3)AutoInt模型

淺析Attention在推薦系統中的應用(4)Transformer與阿裡BST模型

Attention機制

attention簡介

Attention機制又稱注意力機制,是種讓模型對重要資訊重點關注的機制,它本身不算個完整的模型,應該是種能夠應用在任何序列模型中的技術。生活中大家對attention應該都不陌生。舉個不太恰當的例子,假設我們的面前有一桌大概幾十盤菜,既有我們想吃的也有不想吃的,按照之前的做法,我們隻能平分我們的注意力,每道各嘗一口,這樣很容易吃撐而且難以獲得愉悅。有了Attention機制後,我們變可以将我們的注意力集中在我們喜歡的那幾套菜上,有所選擇和偏好,大快朵頤之餘獲得更大的快樂。

再談談業界當時為什麼會引入attention機制。這塊就得從seqs2seqs模型談起。seqs2seqs模型一般都是一個encoder-decoder結構,最常見的便是RNN類型的結構。如下圖所示,輸入的句子可用一串embedding來表示,即[embedding1, embedding2, embedding3...],将整個embedding vector輸入到encoder如rnn的每個step中,取最後一步的hidden vector放入decoder中,decoder再将其作為初始vector按照每一步将向量翻譯成目标文字。

淺析Attention在推薦系統中的應用(1)Attention簡介歡迎關注本人公衆号: petertalks

但這跟Attention又有什麼關系呢?原來這種rnn based的模型往往會存在梯度消失的問題,随着文本長度的不斷增長,往往還會帶來效果的明顯下降。為了解決這個問題,15年前後attention機制便被引入了進來。

淺析Attention在推薦系統中的應用(1)Attention簡介歡迎關注本人公衆号: petertalks
淺析Attention在推薦系統中的應用(1)Attention簡介歡迎關注本人公衆号: petertalks

圖2

如上圖所示,是加入attention之後的基本過程,在執行seqs2seqs任務時,當我們需要翻譯某個詞的時候,隻需要結合上下文,并對特定的幾個詞語給予關注即可,這樣decoder在執行時可以獲得encoder中所有需要的資訊,并且不會因為句子過長而喪失資訊,這便是attention機制。

那麼我們如何去得到attention的權重也就是圖中的at,i呢?這塊有好幾種做法,在17年的《attention is all you need》一文中,google給出了attention的标準化流程和公式,個人認為也是最容易了解的方式,如下圖所示。

淺析Attention在推薦系統中的應用(1)Attention簡介歡迎關注本人公衆号: petertalks

圖3

淺析Attention在推薦系統中的應用(1)Attention簡介歡迎關注本人公衆号: petertalks
淺析Attention在推薦系統中的應用(1)Attention簡介歡迎關注本人公衆号: petertalks

這邊的Q,K和V都是vector,簡單來講,對于seqs2seqs場景來講,此處K可以了解成encoder端的每個節點即待翻譯詞,Q則是decoder端的某一個節點,通過Q和K的點乘可以度量兩者的關系,為了防止結果過大,會除以一個

淺析Attention在推薦系統中的應用(1)Attention簡介歡迎關注本人公衆号: petertalks

\sqrt{d_k} ,最後再利用softmax操作将結果歸一化乘機率分布,既可得到圖2 attention的權重a,我們将encoder端的每個節點也就是V乘以權重a後權重求和即可得到attention的值,可用公式

淺析Attention在推薦系統中的應用(1)Attention簡介歡迎關注本人公衆号: petertalks

Attention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}})V 表示。

原文:

淺析Attention在推薦系統中的應用(1)Attention簡介歡迎關注本人公衆号: petertalks

到此我們便介紹完了Attention機制的基本原理。

self-attention簡介

self-attention顧名思義就是自己跟自己做attention,而不是如上面所描述的那樣建立encoder端和decoder端之間的attention機制(傳統attention query來源于外部)。也就是說self-attention中query和key、value都是相同的,都來源于輸入的句子序列資訊,也就是對自身輸入的變換,後面的步驟其實跟正常的attention是一樣的。這邊強烈推薦一下這個部落格

https://jalammar.github.io/illustrated-transformer/​jalammar.github.io

講得特别的清晰。這我們也來看一個具體的例子(圖檔來源于該部落格)。假如我們有一個seqs隻包含(Thinking,Machines)這兩個單詞,其中Thinking的embedding由x1表示,machines的embedding由x2表示。

淺析Attention在推薦系統中的應用(1)Attention簡介歡迎關注本人公衆号: petertalks

那麼對于每個詞的embedding分别乘以Wq, Wk, Wv便可得到query,key,value向量。

淺析Attention在推薦系統中的應用(1)Attention簡介歡迎關注本人公衆号: petertalks

我們用q1表示x1的query向量,k1,k2分别表示x1和x2的key向量,如下圖所示我們首先計算q1和k1、k2的點積,除以

淺析Attention在推薦系統中的應用(1)Attention簡介歡迎關注本人公衆号: petertalks

\sqrt{d_k} 後進行縮放之後,通過softmax進行歸一化,那麼我們便得到了attention score, 與vector相乘後累加,便得到了權重向量。

淺析Attention在推薦系統中的應用(1)Attention簡介歡迎關注本人公衆号: petertalks
淺析Attention在推薦系統中的應用(1)Attention簡介歡迎關注本人公衆号: petertalks

那麼self-attention有什麼優點呢?主要包括以下幾點:

1)傳統的rnn、lstm等模型,需要按序計算,存在距離越遠,關系越難捕捉的問題。而self-attention針對句子中所有詞兩兩計算,不存在這個問題。

2)self-attention能給進行并行計算

3) 相比rnn和cnn網絡self-attention有更低的單層計算複雜度

multi-head attention簡介

淺析Attention在推薦系統中的應用(1)Attention簡介歡迎關注本人公衆号: petertalks
淺析Attention在推薦系統中的應用(1)Attention簡介歡迎關注本人公衆号: petertalks

multi-head attention就是設計n種不同的(

淺析Attention在推薦系統中的應用(1)Attention簡介歡迎關注本人公衆号: petertalks

W_i^Q,W_i^K,W_i^V )權值矩陣對,将embedding層按照不同的權重做線性變換,變得到了n個不一樣的(qi, ki, vi),通過attention計算,變得到了n種不同角度的attention權重

淺析Attention在推薦系統中的應用(1)Attention簡介歡迎關注本人公衆号: petertalks

head_i ,将這些head concat後,再與新的一個權重矩陣做線性變換便得到了最終的attention輸出。由于初始化的權值矩陣不一樣,是以相當于就是獲得了多個角度的attention值,相比單個head起到了增強的作用。

淺析Attention在推薦系統中的應用(1)Attention簡介歡迎關注本人公衆号: petertalks

參考資料:

https://arxiv.org/pdf/1706.03762

https://jalammar.github.io/illustrated-transformer/

https://zhuanlan.zhihu.com/p/47282410

https://zhuanlan.zhihu.com/p/46990010

繼續閱讀