浅析Attention在推荐系统中的应用(1)Attention简介

 

欢迎关注本人公众号: 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简介_第1张图片

但这跟Attention又有什么关系呢?原来这种rnn based的模型往往会存在梯度消失的问题,随着文本长度的不断增长,往往还会带来效果的明显下降。为了解决这个问题,15年前后attention机制便被引入了进来。

浅析Attention在推荐系统中的应用(1)Attention简介_第2张图片

浅析Attention在推荐系统中的应用(1)Attention简介_第3张图片

图2

如上图所示,是加入attention之后的基本过程,在执行seqs2seqs任务时,当我们需要翻译某个词的时候,只需要结合上下文,并对特定的几个词语给予关注即可,这样decoder在执行时可以获得encoder中所有需要的信息,并且不会因为句子过长而丧失信息,这便是attention机制。

那么我们如何去得到attention的权重也就是图中的at,i呢?这块有好几种做法,在17年的《attention is all you need》一文中,google给出了attention的标准化流程和公式,个人认为也是最容易理解的方式,如下图所示。

浅析Attention在推荐系统中的应用(1)Attention简介_第4张图片

图3

浅析Attention在推荐系统中的应用(1)Attention简介_第5张图片

这边的Q,K和V都是vector,简单来讲,对于seqs2seqs场景来讲,此处K可以理解成encoder端的每个节点即待翻译词,Q则是decoder端的某一个节点,通过Q和K的点乘可以度量两者的关系,为了防止结果过大,会除以一个 \sqrt{d_k} ,最后再利用softmax操作将结果归一化乘概率分布,既可得到图2 attention的权重a,我们将encoder端的每个节点也就是V乘以权重a后加权求和即可得到attention的值,可用公式 Attention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}})V 表示。

原文:

浅析Attention在推荐系统中的应用(1)Attention简介_第6张图片

到此我们便介绍完了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简介_第7张图片

那么对于每个词的embedding分别乘以Wq, Wk, Wv便可得到query,key,value向量。

浅析Attention在推荐系统中的应用(1)Attention简介_第8张图片

我们用q1表示x1的query向量,k1,k2分别表示x1和x2的key向量,如下图所示我们首先计算q1和k1、k2的点积,除以 \sqrt{d_k} 后进行缩放之后,通过softmax进行归一化,那么我们便得到了attention score, 与vector相乘后累加,便得到了加权向量。

浅析Attention在推荐系统中的应用(1)Attention简介_第9张图片

浅析Attention在推荐系统中的应用(1)Attention简介_第10张图片

那么self-attention有什么优点呢?主要包括以下几点:

1)传统的rnn、lstm等模型,需要按序计算,存在距离越远,关系越难捕捉的问题。而self-attention针对句子中所有词两两计算,不存在这个问题。

2)self-attention能给进行并行计算

3) 相比rnn和cnn网络self-attention有更低的单层计算复杂度

 

multi-head attention简介

浅析Attention在推荐系统中的应用(1)Attention简介_第11张图片

浅析Attention在推荐系统中的应用(1)Attention简介_第12张图片

multi-head attention就是设计n种不同的( W_i^Q,W_i^K,W_i^V )权值矩阵对,将embedding层按照不同的权重做线性变换,变得到了n个不一样的(qi, ki, vi),通过attention计算,变得到了n种不同角度的attention权重 head_i ,将这些head concat后,再与新的一个权重矩阵做线性变换便得到了最终的attention输出。由于初始化的权值矩阵不一样,所以相当于就是获得了多个角度的attention值,相比单个head起到了增强的作用。

浅析Attention在推荐系统中的应用(1)Attention简介_第13张图片

参考资料:

https://arxiv.org/pdf/1706.03762

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

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

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

 

你可能感兴趣的:(算法,机器学习,推荐系统,推荐系统,深度学习,attention,机器学习,nlp)