您现在的位置是:首页 >其他 >深度学习 - 50.推荐场景下的 Attention And Multi-Head Attention网站首页其他

深度学习 - 50.推荐场景下的 Attention And Multi-Head Attention

BIT_666 2024-06-18 12:01:02
简介深度学习 - 50.推荐场景下的 Attention And Multi-Head Attention

目录

一.引言

二.Attention

1.Common Attention 

2.Google Attention

三.Multi-Head Attention

四.总结


一.引言

Attention 注意力机制最早来源于我们自身的视觉感官,当我们视觉获取到图像信息时,我们并不是从前往后从上往下均匀的扫描画面,而是会更偏重观测某一个位置,上面的热力图给出了我们观察建筑物时,视觉更关注,即 Attention 更多的地方。同样,在推荐场景下,图像信息就类比为我们对应的 Item,而我们感官的 Attention 侧重则根据用户历史行为序列决定。

二.Attention

1.Common Attention 

注意力 Attention 函数可以描述为将 Query 和一组键值对 Key-Value 映射到 Output,其中 Query、Key、Value 和 Output 都是向量。输出计算为值的加权和,其中分配给每个值的权重由 Query 与相应 Key 的兼容性函数计算。

keys 负责与 query 计算权重,得到权重后与 values 进行加权求和得到 output,在一些开源代码中,我们经常看到 Attention 代码中有 Q、K、V 类似标识,其中:

Q - Query    在推荐场景下为目标 Item 

K - Keys      在推荐场景下为用户行为 Goods

V - Values   在推荐场景下 V 与 K 相同,均为用户行为 Goods

推荐实战场景下,Query 与 Key 的权重计算一般采用 Dot-Product 的方式,对于 N 个 Key 将得到 N 个权重,根据场景不同,也可以决定是否对权重采用 Softmax 归一化,再进行加权求和。

2.Google Attention

Google《Attention Is All You Need》一文中在原始计算公式的基础上增加了比例因子 1/√dk。最常用的 Attention 函数是 Add Attention 和 Dot-Product Attention。理论上二者复杂度相似,但是 Dot-Product Attention 可以通过矩阵优化代码提高效率。除此之外,由于 Dot-Product Attention 有时幅度较大容易将 softmax 函数推入梯度极小的区域,为了抵消这种影响,谷歌将点积做了缩放,缩放因子为 √dk。

三.Multi-Head Attention

Multi-Head Attention 最早应用于 NLP 任务中,其代替 RNN 实现了 Seq2Seq 的模型框架。

Q - Query    在推荐场景下为目标 Item,批量计算时维度为 None x 1 x Dim 

K - Keys      在推荐场景下为用户行为 Goods,批量计算时维度为 None x T_k x Dim

V - Values   在推荐场景下 V 与 K 相同,均为用户行为 Goods

Multi-Head 可以理解为 Q、K、V 分解为 Head 个子空间,对每个子空间内的向量进行 Attention 操作,例如一个 Query 的维度为 None x 128,如果采用 Head = 4 的场景,则 Query 被分为 4 个 None x 32 的向量,同理 K、V 对应的向量也被分解。随后每个 None x 32 进行 Attention 操作,最后再 Concat 合并。

Tips:

NLP 场景下 Query 为语句序列,维度为 None x T_q x Dim,由于推荐场景下 Query 候选集为单一商品,所以维度为 None x 1 x Dim。Multi-Head Attention 可以理解为在向量的不同子空间内进行 Attention,以表征不同的含义。除此之外,Multi-Head Attention 还分别增加了前后两个 linear 模块,与传统 Attention 直接 lookup 获取向量内积有所不同。上图可以看作是 Multi-Head 的立体示意图。

四.总结

上面简单介绍了 Attention 与 Multi-Attention 机制,目前 Attention 机制已经广泛应用于推荐与自然语言处理任务中,除了上面最基础的 id 对应 embedding 信息外,很多场景下通过增加 id SideInfo 侧信息以及序列行为相对位置与绝对位置信息的 Position_embeeding 优化 Attention 的效果。后续会使用 kears 实现简单的 Attention 与 Multi-Head Attention 机制,欢迎批评指正~

参考:

Attention Is All You Need

更多推荐算法相关深度学习:深度学习导读专栏 

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。