前言
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按照每一步将向量翻译成目标文字。
![d5fa13a79e0e8fef2052d6fca723360c.png](https://i-blog.csdnimg.cn/blog_migrate/65b4410e1450a341f72853be82d80744.jpeg)
但这跟Attention又有什么关系呢?原来这种rnn based的模型往往会存在梯度消失的问题,随着文本长度的不断增长,往往还会带来效果的明显下降。为了解决这个问题,15年前后attention机制便被引入了进来。
![858cd04eb8d9ade33f56df5f8e6ce1ad.png](https://i-blog.csdnimg.cn/blog_migrate/2e04b563bcfe478ef56b79c557354481.jpeg)
![231b5fcb82299e497ee850ca9df9c529.png](https://i-blog.csdnimg.cn/blog_migrate/be83dc92975c5b14a1df7241b122158d.jpeg)
如上图所示,是加入attention之后的基本过程,在执行seqs2seqs任务时,当我们需要翻译某个词的时候,只需要结合上下文,并对特定的几个词语给予关注即可,这样decoder在执行时可以获得encoder中所有需要的信息,并且不会因为句子过长而丧失信息,这便是attention机制。
那么我们如何去得到attention的权重也就是图中的at,i呢?这块有好几种做法,在17年的《attention is all you need》一文中,google给出了attention的标准化流程和公式,个人认为也是最容易理解的方式,如下图所示。
![509cd30b41c6a61100ef50366c967461.png](https://i-blog.csdnimg.cn/blog_migrate/151872f9da578f4e07d8f535774a0344.png)
![861f376a44d8e93d73365e4208952f42.png](https://i-blog.csdnimg.cn/blog_migrate/7557f1d09d85bba83f413b28dff09d59.jpeg)
![8e73e0a81c30d0a366e716c3bed87b26.png](https://i-blog.csdnimg.cn/blog_migrate/5d609c143763b199007ad3a3fff59f26.png)
这边的Q,K和V都是vector,简单来讲,对于seqs2seqs场景来讲,此处K可以理解成encoder端的每个节点即待翻译词,Q则是decoder端的某一个节点,通过Q和K的点乘可以度量两者的关系,为了防止结果过大,会除以一个
原文:
![4361d2a6a840235002fdf5a06173212b.png](https://i-blog.csdnimg.cn/blog_migrate/4118e299b6bf4f38461cd74eb1718692.jpeg)
到此我们便介绍完了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表示。
![f00e8ca068ee89b18115d701cb2d2446.png](https://i-blog.csdnimg.cn/blog_migrate/d0967bef8b096c1fc4c66609e84cbc42.jpeg)
那么对于每个词的embedding分别乘以Wq, Wk, Wv便可得到query,key,value向量。
![f60b7c4baca8e4bbc4117541026e417d.png](https://i-blog.csdnimg.cn/blog_migrate/f53074f44381a7ebd09b1e829d582c0c.png)
我们用q1表示x1的query向量,k1,k2分别表示x1和x2的key向量,如下图所示我们首先计算q1和k1、k2的点积,除以
![417362849ab3014758aa9658d0c044f2.png](https://i-blog.csdnimg.cn/blog_migrate/44ff6456b8e258a0664cc823beb7a976.jpeg)
![4e38428c63b068270a8260f0666de997.png](https://i-blog.csdnimg.cn/blog_migrate/a6faa2d3768467aa77d49e00d5528eb3.png)
那么self-attention有什么优点呢?主要包括以下几点:
1)传统的rnn、lstm等模型,需要按序计算,存在距离越远,关系越难捕捉的问题。而self-attention针对句子中所有词两两计算,不存在这个问题。
2)self-attention能给进行并行计算
3) 相比rnn和cnn网络self-attention有更低的单层计算复杂度
multi-head attention简介
![f2402c516ee8b5515d95c026c1417c83.png](https://i-blog.csdnimg.cn/blog_migrate/cf5f3b5d94714073a022d9e10616aac3.png)
![3ba0893eef44a5875092a7d6ab4d4842.png](https://i-blog.csdnimg.cn/blog_migrate/1a2bb50f84d1af1391fa0bc77c7d9640.jpeg)
multi-head attention就是设计n种不同的(
![e7a1f29bbedb311b10641a149cb32b20.png](https://i-blog.csdnimg.cn/blog_migrate/01b811d13abcbe042b525081298159be.jpeg)
参考资料:
https://arxiv.org/pdf/1706.03762
https://jalammar.github.io/illustrated-transformer/
https://zhuanlan.zhihu.com/p/47282410
https://zhuanlan.zhihu.com/p/46990010