蘑菇街推荐算法之迷——Self Attention不如Traditional Attention?

2020 年 10 月 14 日 机器学习与推荐算法
嘿,记得给“机器学习与推荐算法”添加星标


来自 | 微信公众号

作者 | 诗品算法

链接 | mp.weixin.qq.com/s/vh615QP6gAvrXtrMqN3m4g

楔子

说好要经常更新,一定要坚持下来!前段时间在蘑菇街首页推荐视频流场景测试deep模型结构时,发现self attention的效果居然不如简单的traditional attention!问题出在哪里?

注意力机制

作为一种资源分配方案,将计算资源分配给最重要的任务。注意力是人类与生俱来不可或缺的认知功能。我们在日常生活中,会通过嗅觉、触觉、听觉、视觉感受到来自四面八方不同信息的鱼贯涌入,而我们却能在如此繁杂的信息轰炸中,区分主次,并挑选出最重要的信息进行加工处理,同时忽略其他不重要的信息。这种能力就是注意力。比如,查理.芒格可以做到专注地读书而不受到任何外界环境的干扰。这就是具有极强专注力的体现,相信多数读者在工作或阅读中也有此种体会。

self-attention回顾

在开始实践之前,有必要先简要回顾一下火遍宇宙的self-attention。下面是我迄今为止看到的最易懂的描述,参考邱锡鹏老师的《神经网络与深度学习》 。我会结合推荐系统的场景对其进行叙述。用  表示N组输入向量,其中每个向量  都表示一组输入信息。注意力机制的计算分为两个步骤:1、在所有输入信息上计算注意力分布;2、根据注意力分布计算输入信息的加权平均。在推荐场景,  表示用户的  个历史行为序列(可以是点击序、加购序、成交序等等),  则表示序列中每一个元素的embedding表达。

注意力分布

为了从输入向量(历史序列)  中选择出和特定任务(待排视频内容)相关的信息,我们需要引入一个与任务相关联的表示,称为查询向量(Query Vector),并通过打分函数来计算每个输入向量与查询向量之间的相关性。

给定一个Query vector:  ,我们用注意力变量  来表示被选择信息的索引位置,即,  表示选择了第  个输入向量。在这里,我们选择“soft”信息选择机制,计算在给定  和  的情况下,选择第  个输入向量的概率  :

其中,  就是注意力分布(Attention Distribution),  就是注意力打分函数,这种函数的计算方式有以下几种,这些我们都有尝试过,后面会给出实验结论。

其中,  均是可学习的参数,  是输入向量的维度,也就是  的维度,一般是128维/64维/32维,最优值可以根据实际情况选择。理论上,当  较小时,加性模型和点积模型的复杂度无差,但是点积模型可以更好地利用矩阵乘积,因此计算效率更高。

但是,若输入向量的维度  比较高时,点积模型的方差会较大,从而导致softmax函数的梯度较小(softmax后非0即1,无信息量)。缩放点积模型就可以很好地解决这个问题,使内积不至于太大。双线性模型实际上是一种泛化的点积模型,假设  ,则,双线性模型可以写成:  ,太有意思了!这相当于分别对  和  进行线性变换后计算点积。双线性模型的优势是,在计算相似度时,引入了非对称性。

加权平均

注意力分布  是在给定任务相关的查询  时,第  个输入向量受关注的程度。我们采用一种“soft”的信息选择机制,对输入信息进行merge。软性注意力机制如下:

由此可见,选择的信息是所有输入向量在注意力分布下的期望。

Attention

熟悉的图,熟悉的公式,熟悉的attention。当我们的打分函数为缩放点积模型时,attention如下:

公式与Google论文里一致。其中,  ,  ,  ,由queryies和keys组成的输入维度均为  ,values的维度为  。如果忽略softmax的话,attention本质上就是三个  的矩阵相乘,结果就是一个  的矩阵,attention实际上就是将  的输入序列  编码成一个  的输出序列。

self-attention

对于self-attention来讲,  三个矩阵均来自同一输入。

traditional attention

与self-attention相比,这个公式就简单多了。输入  经过两层全连接,再经过softmax,与原始的寄己进行点乘(非矩阵乘法)。输入序列的两两元素之间无任何交互。

推荐场景self attention/traditional attention实践

我们的输入序列是用户在蘑菇街首页的实时点击序列,按照点击发生时间进行排序,序列从左至右,对应着点击时间由近及远。我们使用wide & deep结构进行模型训练。target是待排视频id。target和用户侧序列分别经过self attention/traditional attention层,我们通过加减乘等操作将两侧的表达进行信息融合,最后再通过两层dense全连接,得到最终的概率值。

参数共享,指的是target目标与用户侧序列attention结构的trainable参数共享。

总结:

1、参数是否共享

2 VS 3,相比于两侧参数不共享的结构,共享时,整体AUC提升千分之一,deep侧AUC提升千分之三,且大大加速了训练过程。

2、改变打分函数(Q和K的融合方式)

我们的self_attention结构采用经典的QKV方式,QK的计算方式使用缩放点积模型。我们将缩放点积模型改成双线性模型,即分别对Q和K进行线性变换后,再计算点积。

3 VS 4,QK分别线性变换,整体AUC无差异,deep侧AUC下降千分之二。3 VS 5,QK分别线性变换 + 非线性激活,整体AUC表现无差,deep侧AUC提升千分之二。

3、traditional attention + self attention

将两种不同的attention结构进行merge,对两个结构的输出rep进行concat。1:traditional attention;5:self attention;9:1+5

merge 与 traditional attention的总体AUC无差异,deep AUC涨千分之三。

这是否说明,traditional attention学到的信息比self attention更多呢?

traditional attention不会使序列内部进行两两交叉,但是self attention会通过  ,使得输入序列两两之间都会进行计算。这也从侧面说明,用户历史点击序列两两之间,并无明显相关性。

至于真正的核心原因,我并没有idea。大家可以留言讨论。

这让人想起了奥卡姆剃刀原则:“如无必要,勿增实体”。有时候,模型并不是越复杂越好,“在其他一切同等的情况下,较简单的解释普遍比较复杂的好“。所以,当你堆叠了无数高大上的复杂网络结构,但离线AUC和线上指标却一直上不去时,是不是可以考虑从特征、样本甚至产品改进等层面入手呢?


参考:

1、邱锡鹏:《神经网络与深度学习》

2、attention is all you need论文:https://arxiv.org/pdf/1706.03762.pdf

推荐阅读

知识蒸馏与推荐系统概述
一种新颖的推荐系统重训练技巧

再评Airbnb的经典Embedding论文

喜欢的话点个在看吧👇
登录查看更多
0

相关内容

Attention机制最早是在视觉图像领域提出来的,但是真正火起来应该算是google mind团队的这篇论文《Recurrent Models of Visual Attention》[14],他们在RNN模型上使用了attention机制来进行图像分类。随后,Bahdanau等人在论文《Neural Machine Translation by Jointly Learning to Align and Translate》 [1]中,使用类似attention的机制在机器翻译任务上将翻译和对齐同时进行,他们的工作算是是第一个提出attention机制应用到NLP领域中。接着类似的基于attention机制的RNN模型扩展开始应用到各种NLP任务中。最近,如何在CNN中使用attention机制也成为了大家的研究热点。下图表示了attention研究进展的大概趋势。
基于旅游知识图谱的可解释景点推荐
专知会员服务
90+阅读 · 2020年9月4日
【KDD2020-阿里】可调控的多兴趣推荐框架
专知会员服务
28+阅读 · 2020年8月11日
【SIGIR 2020】 基于协同注意力机制的知识增强推荐模型
专知会员服务
89+阅读 · 2020年7月23日
【ICLR 2019】双曲注意力网络,Hyperbolic  Attention Network
专知会员服务
82+阅读 · 2020年6月21日
注意力机制介绍,Attention Mechanism
专知会员服务
168+阅读 · 2019年10月13日
最全推荐系统Embedding召回算法总结
凡人机器学习
30+阅读 · 2020年7月5日
一文读懂Attention机制
机器学习与推荐算法
63+阅读 · 2020年6月9日
从Seq2seq到Attention模型到Self Attention(二)
量化投资与机器学习
23+阅读 · 2018年10月9日
从Seq2seq到Attention模型到Self Attention(一)
量化投资与机器学习
76+阅读 · 2018年10月8日
推荐算法:Match与Rank模型的交织配合
从0到1
15+阅读 · 2017年12月18日
神经网络中的「注意力」是什么?怎么用?
人工智能学家
5+阅读 · 2017年10月19日
LibRec 每周算法:NFM (SIGIR'17)
LibRec智能推荐
7+阅读 · 2017年10月17日
完全图解RNN、RNN变体、Seq2Seq、Attention机制
AI研习社
12+阅读 · 2017年9月5日
干货|完全图解RNN、RNN变体、Seq2Seq、Attention机制
机器学习研究会
11+阅读 · 2017年8月5日
Arxiv
0+阅读 · 2020年12月3日
Talking-Heads Attention
Arxiv
15+阅读 · 2020年3月5日
Arxiv
6+阅读 · 2018年3月28日
Arxiv
26+阅读 · 2018年2月27日
Arxiv
10+阅读 · 2018年2月4日
Arxiv
7+阅读 · 2018年1月24日
VIP会员
相关VIP内容
基于旅游知识图谱的可解释景点推荐
专知会员服务
90+阅读 · 2020年9月4日
【KDD2020-阿里】可调控的多兴趣推荐框架
专知会员服务
28+阅读 · 2020年8月11日
【SIGIR 2020】 基于协同注意力机制的知识增强推荐模型
专知会员服务
89+阅读 · 2020年7月23日
【ICLR 2019】双曲注意力网络,Hyperbolic  Attention Network
专知会员服务
82+阅读 · 2020年6月21日
注意力机制介绍,Attention Mechanism
专知会员服务
168+阅读 · 2019年10月13日
相关资讯
最全推荐系统Embedding召回算法总结
凡人机器学习
30+阅读 · 2020年7月5日
一文读懂Attention机制
机器学习与推荐算法
63+阅读 · 2020年6月9日
从Seq2seq到Attention模型到Self Attention(二)
量化投资与机器学习
23+阅读 · 2018年10月9日
从Seq2seq到Attention模型到Self Attention(一)
量化投资与机器学习
76+阅读 · 2018年10月8日
推荐算法:Match与Rank模型的交织配合
从0到1
15+阅读 · 2017年12月18日
神经网络中的「注意力」是什么?怎么用?
人工智能学家
5+阅读 · 2017年10月19日
LibRec 每周算法:NFM (SIGIR'17)
LibRec智能推荐
7+阅读 · 2017年10月17日
完全图解RNN、RNN变体、Seq2Seq、Attention机制
AI研习社
12+阅读 · 2017年9月5日
干货|完全图解RNN、RNN变体、Seq2Seq、Attention机制
机器学习研究会
11+阅读 · 2017年8月5日
相关论文
Arxiv
0+阅读 · 2020年12月3日
Talking-Heads Attention
Arxiv
15+阅读 · 2020年3月5日
Arxiv
6+阅读 · 2018年3月28日
Arxiv
26+阅读 · 2018年2月27日
Arxiv
10+阅读 · 2018年2月4日
Arxiv
7+阅读 · 2018年1月24日
Top
微信扫码咨询专知VIP会员