【论文笔记】在CommonsenseQA 上追平人类: 通过External Attention 增强 Self-Attention

Human Parity on CommonsenseQA: Augmenting Self-Attention with External Attention

 论文链接:https://www.microsoft.com/en-us/research/uploads/prod/2021/12/CSQA_KEAR.pdf

Abstract

目前大多数都专注在self-attention 和Transformer架构来提升性能。

本文:使用外部attention机制来增强Transformer架构,将上下文与外部知识结合。将外部信息整合到预测过程。提出了Knowledgeable External Attention for commonsense Reasoning (KEAR)常识推理的知识外部注意,在开放的 CommonsenseQA 研究基准上达到人类同等水平,准确度为 89.4%,而人类准确度为 88.9%

 Introduction

Transformer模型开发过程中规模较大的模型往往具有更好地学习能力,尤其是与大规模数据结合。但大量研究表明,这些巨大模型的相应理解和生成能力仍然落后于人类(Bommasani et a

### External Attention 和 Channel Attention 的概念 #### 外部注意力 (External Attention) 外部注意力机制是一种扩展模型能力的技术,允许模型关注输入特征的不同部分。这种机制通常用于处理序列数据或高维张量中的重要区域[^4]。具体来说,外部注意力通过引入额外的上下文向量来增强模型的能力,这些向量可以捕获更广泛的依赖关系。这种方法在视频显著目标检测中被广泛应用,例如 Motion Guided Attention 方法利用时间维度上的运动信息引导注意力建模[^1]。 #### 通道注意力 (Channel Attention) 通道注意力则专注于调整卷积神经网络(CNN)中不同通道的重要性权重。通过对各个通道施加不同的权重,模型能够更好地捕捉到哪些通道对于当前任务更重要。这一理念基于这样一个事实:并非所有的通道都同等贡献于最终的任务输出[^5]。Squeeze-and-Excitation Networks 是实现通道注意力的经典方法之一,它通过全局均池化操作提取每个通道的信息,并动态计算各通道的激活程度[^3]。 --- ### External Attention 和 Channel Attention 的主要区别 | 特性 | **External Attention** | **Channel Attention** | |--------------------------|--------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------| | **作用范围** | 关注整个输入空间内的特定位置或者跨多个样本之间的关联 | 调整 CNN 中每一层内部各个通道的重要度 | | **适用场景** | 更适合处理具有复杂时空结构的数据,比如自然语言处理、视频理解 | 主要应用于视觉领域,优化图像分类、对象检测等任务 | | **计算方式** | 基于键值查询(Key-Value Query),构建全局性的交互矩阵 | 利用统计特性(如均值/方差)评估每条路径上信号强度变化规律 | | **资源消耗对比** | 计算成本较高,因为需要维护较大的记忆体以及复杂的运算过程 | 相对轻量化,在原有架构基础上增加少量参数即可完成 | 尽管两者都是为了提升深度学习模型性能而设计的关注策略,但它们侧重点完全不同——前者强调的是如何有效分配有限计算力去解决实际问题;后者则是针对现有框架做精细化改进以提高效率和效果[^2]。 ```python import torch.nn as nn class SEBlock(nn.Module): """ 实现 Squeeze-and-Excitation Block """ def __init__(self, channels, reduction=16): super(SEBlock, self).__init__() self.fc = nn.Sequential( nn.Linear(channels, channels // reduction), nn.ReLU(), nn.Linear(channels // reduction, channels), nn.Sigmoid() ) def forward(self, x): b, c, _, _ = x.size() y = x.view(b,c,-1).mean(-1) # Global Average Pooling over spatial dimensions. z = self.fc(y).view(b,c,1,1) return x * z.expand_as(x) def external_attention_module(input_tensor): """ 构建简单的外部注意力模块作为示例""" qk_product = torch.matmul(input_tensor.permute(0, 2, 3, 1), input_tensor.permute(0, 2, 1)) softmax_result = F.softmax(qk_product / math.sqrt(input_tensor.shape[-1]), dim=-1) output = torch.matmul(softmax_result, input_tensor.permute(0, 2, 3, 1)).permute(0, 3, 1, 2) return output ``` 上述代码展示了两种注意力形式的具体实现细节。SEBlock 展示了一个典型的通道注意力单元,而 `external_attention_module` 提供了一种简化版的外部注意力逻辑。 ---
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值