注意力机制、self attention、target attention、双层attention

关于注意力机制要解决2个问题,一是怎么做在哪个层面上做,二是注意力系数如何得到,由谁产出。注意力机制应用广泛的本质原因是求和的普遍存在,只要是有求和的地方加权和就有用武之地。DIN/DIEN把注意力机制用在用户行为序列建模是为了得到更好的用户特征表示,注意力机制还可以出现在其他很多环节起到各种作用。

在推荐模型用到的各种特征里,用户特征大于物料特征,行为特征大于画像特征。

从做法上引入注意力机制方法可以分为如下几种:

  1. 加权和:这是最简单最常见的,只要原先结构中存在向量求和都可以变为加权和,比如AFM
  2. 按元素/特征/模块乘:虽然把注意力系数乘上去了,但不做求和这种做法可以认为体现了重要性的差异,比如LHUC、SeNet的思路
  3. 以QKV形式做特征抽象表达,特指Transformer里的做法
    1. target attention:Q从target item中取,KV从行为序列中抽取,参考Din,只刻画了target item与候选物品的交叉,忽略了行为序列内部各元素之间的依赖关系
    2. self attention:从行为序列中抽取QKV,从行为序列中提取用户兴趣向量,表征用户交互历史的迁移和相关性
    3. 双层attention建模序列关系:先self attention,后target attention,从行为序列中提取出来的用户兴趣向量,既能反映候选物料与历史记忆之间的相关性,又能反映不同历史记忆之间的依赖性。

从作用上就丰富多彩了,总结如下几种:

  1. 凸显用户兴趣峰,比如DIN、DIEN
  2. 特征进一步细化/抽象的工具,比如SeNet、AutoInt
  3. 对模块进行分化(作为分化模块的工具),注意力机制下常见操作是根据输入不同生成不同的权重,来决定后面模块中突出的是谁,抑制的是谁。反过来说只要注意力系数的分布是一成不变的,后续模块也会对输入陈升特殊的倾向。某种输入产生了大注意力系数那对应位置模块相当于更多承担了这种输入预测,比如MMOE

### 双向跨注意力机制在多层跨模态交互中的应用 #### 实现原理 双向跨注意力机制允许两个不同模态的信息相互影响并提取特征。通过构建多个层次的跨模态交互模块,可以逐步增强模型对于复杂场景的理解能力。具体来说,在每一层中都包含了来自图像和文本两种输入源之间的前馈神经网络以及自注意机制[^1]。 为了实现这一目标,通常会采用如下结构: - **编码器部分**:分别对每种类型的原始数据(如视觉特征或自然语言描述)进行初步处理; - **解码器组件**:负责融合上述得到的不同形式表示,并最终生成期望输出; 在此过程中引入了交叉关注操作来促进异构信息间的交流共享。即不仅考虑单侧序列内部的关系建模,同时也重视另一端元素对其产生的作用力大小评估。 ```python import torch.nn as nn from transformers import BertModel class CrossModalAttention(nn.Module): def __init__(self, hidden_size=768): super(CrossModalAttention, self).__init__() # 定义用于计算QKV矩阵变换参数 self.query_transform = nn.Linear(hidden_size, hidden_size) self.key_transform = nn.Linear(hidden_size, hidden_size) self.value_transform = nn.Linear(hidden_size, hidden_size) def forward(self, query, key, value): Q = self.query_transform(query) # (batch_size, seq_len_q, d_model) K = self.key_transform(key) # (batch_size, seq_len_k, d_model) V = self.value_transform(value) # (batch_size, seq_len_v, d_model) attention_scores = torch.matmul(Q, K.transpose(-2,-1)) / math.sqrt(K.size(-1)) attention_probs = F.softmax(attention_scores, dim=-1) context_layer = torch.matmul(attention_probs, V) return context_layer ``` 此代码片段展示了如何创建一个简单的双线性映射函数来进行查询、键值转换,并基于softmax归一化后的权重分配给对应的value向量从而完成一次完整的注意力计算过程[^2]。 #### 应用实例 在一个典型的对话系统框架内,当用户上传一张图片并附带一段文字说明时,该方法能够帮助机器更好地理解两者之间潜在联系,进而提供更加精准的服务响应。例如识别照片里的人物身份后结合上下文语境给出恰当回复建议等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值